d3d9: Disable shader blending, not implemented.

Fixes bad graphics in Ridge Racer, etc.
This commit is contained in:
Unknown W. Brackets 2015-11-13 23:11:06 -08:00
parent 3b98229c6f
commit 13a09647e2
4 changed files with 13 additions and 7 deletions

View file

@ -768,7 +768,7 @@ void ApplyStencilReplaceAndLogicOp(ReplaceAlphaType replaceAlphaWithStencil, Gen
// Called even if AlphaBlendEnable == false - it also deals with stencil-related blend state. // Called even if AlphaBlendEnable == false - it also deals with stencil-related blend state.
void ConvertBlendState(GenericBlendState &blendState) { void ConvertBlendState(GenericBlendState &blendState, bool allowShaderBlend) {
// Blending is a bit complex to emulate. This is due to several reasons: // Blending is a bit complex to emulate. This is due to several reasons:
// //
// * Doubled blend modes (src, dst, inversed) aren't supported in OpenGL. // * Doubled blend modes (src, dst, inversed) aren't supported in OpenGL.
@ -778,13 +778,12 @@ void ConvertBlendState(GenericBlendState &blendState) {
// * The written output alpha should actually be the stencil value. Alpha is not written. // * The written output alpha should actually be the stencil value. Alpha is not written.
// //
// If we can't apply blending, we make a copy of the framebuffer and do it manually. // If we can't apply blending, we make a copy of the framebuffer and do it manually.
gstate_c.allowShaderBlend = !g_Config.bDisableSlowFramebufEffects;
blendState.applyShaderBlending = false; blendState.applyShaderBlending = false;
blendState.dirtyShaderBlend = false; blendState.dirtyShaderBlend = false;
blendState.useBlendColor = false; blendState.useBlendColor = false;
ReplaceBlendType replaceBlend = ReplaceBlendWithShader(gstate_c.allowShaderBlend, gstate.FrameBufFormat()); ReplaceBlendType replaceBlend = ReplaceBlendWithShader(allowShaderBlend, gstate.FrameBufFormat());
ReplaceAlphaType replaceAlphaWithStencil = ReplaceAlphaWithStencil(replaceBlend); ReplaceAlphaType replaceAlphaWithStencil = ReplaceAlphaWithStencil(replaceBlend);
bool usePreSrc = false; bool usePreSrc = false;

View file

@ -135,5 +135,5 @@ struct GenericBlendState {
} }
}; };
void ConvertBlendState(GenericBlendState &blendState); void ConvertBlendState(GenericBlendState &blendState, bool allowShaderBlend);
void ApplyStencilReplaceAndLogicOp(ReplaceAlphaType replaceAlphaWithStencil, GenericBlendState &blendState); void ApplyStencilReplaceAndLogicOp(ReplaceAlphaType replaceAlphaWithStencil, GenericBlendState &blendState);

View file

@ -86,7 +86,9 @@ static const D3DSTENCILOP stencilOps[] = {
}; };
bool TransformDrawEngineDX9::ApplyShaderBlending() { bool TransformDrawEngineDX9::ApplyShaderBlending() {
bool skipBlit = false; if (gstate_c.featureFlags & GPU_SUPPORTS_ANY_FRAMEBUFFER_FETCH) {
return true;
}
static const int MAX_REASONABLE_BLITS_PER_FRAME = 24; static const int MAX_REASONABLE_BLITS_PER_FRAME = 24;
@ -137,9 +139,12 @@ void TransformDrawEngineDX9::ApplyDrawState(int prim) {
bool useBufferedRendering = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE; bool useBufferedRendering = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE;
// Unfortunately, this isn't implemented yet.
gstate_c.allowShaderBlend = false;
// Set blend - unless we need to do it in the shader. // Set blend - unless we need to do it in the shader.
GenericBlendState blendState; GenericBlendState blendState;
ConvertBlendState(blendState); ConvertBlendState(blendState, gstate_c.allowShaderBlend);
ViewportAndScissor vpAndScissor; ViewportAndScissor vpAndScissor;
ConvertViewportAndScissor(useBufferedRendering, ConvertViewportAndScissor(useBufferedRendering,
framebufferManager_->GetRenderWidth(), framebufferManager_->GetRenderHeight(), framebufferManager_->GetRenderWidth(), framebufferManager_->GetRenderHeight(),

View file

@ -167,10 +167,12 @@ void TransformDrawEngine::ApplyDrawState(int prim) {
bool useBufferedRendering = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE; bool useBufferedRendering = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE;
gstate_c.allowShaderBlend = !g_Config.bDisableSlowFramebufEffects;
// Do the large chunks of state conversion. We might be able to hide these two behind a dirty-flag each, // Do the large chunks of state conversion. We might be able to hide these two behind a dirty-flag each,
// to avoid recomputing heavy stuff unnecessarily every draw call. // to avoid recomputing heavy stuff unnecessarily every draw call.
GenericBlendState blendState; GenericBlendState blendState;
ConvertBlendState(blendState); ConvertBlendState(blendState, gstate_c.allowShaderBlend);
ViewportAndScissor vpAndScissor; ViewportAndScissor vpAndScissor;
ConvertViewportAndScissor(useBufferedRendering, ConvertViewportAndScissor(useBufferedRendering,
framebufferManager_->GetRenderWidth(), framebufferManager_->GetRenderHeight(), framebufferManager_->GetRenderWidth(), framebufferManager_->GetRenderHeight(),