Renderer: Change SetBlendState to accept a BlendingState
This decouples the state generation (from the emulated GPU) from the management of internal backend state.
This commit is contained in:
parent
22b8cbae35
commit
3dd675e613
|
@ -640,11 +640,9 @@ void Renderer::ReinterpretPixelData(unsigned int convtype)
|
|||
FramebufferManager::GetEFBDepthTexture()->GetDSV());
|
||||
}
|
||||
|
||||
void Renderer::SetBlendMode(bool forceUpdate)
|
||||
void Renderer::SetBlendingState(const BlendingState& state)
|
||||
{
|
||||
BlendingState state;
|
||||
state.Generate(bpmem);
|
||||
gx_state.blend.hex = state.hex;
|
||||
s_gx_state.blend.hex = state.hex;
|
||||
}
|
||||
|
||||
// This function has the final picture. We adjust the aspect ratio here.
|
||||
|
|
|
@ -19,7 +19,7 @@ public:
|
|||
Renderer();
|
||||
~Renderer() override;
|
||||
|
||||
void SetBlendMode(bool forceUpdate) override;
|
||||
void SetBlendingState(const BlendingState& state) override;
|
||||
void SetScissorRect(const EFBRectangle& rc) override;
|
||||
void SetGenerationMode() override;
|
||||
void SetDepthMode() override;
|
||||
|
|
|
@ -1264,11 +1264,8 @@ void Renderer::ReinterpretPixelData(unsigned int convtype)
|
|||
}
|
||||
}
|
||||
|
||||
void Renderer::SetBlendMode(bool forceUpdate)
|
||||
void Renderer::SetBlendingState(const BlendingState& state)
|
||||
{
|
||||
BlendingState state;
|
||||
state.Generate(bpmem);
|
||||
|
||||
bool useDualSource =
|
||||
state.usedualsrc && g_ActiveConfig.backend_info.bSupportsDualSourceBlend &&
|
||||
(!DriverDetails::HasBug(DriverDetails::BUG_BROKEN_DUAL_SOURCE_BLENDING) || state.dstalpha);
|
||||
|
@ -1791,7 +1788,7 @@ void Renderer::RestoreAPIState()
|
|||
SetGenerationMode();
|
||||
BPFunctions::SetScissor();
|
||||
SetDepthMode();
|
||||
SetBlendMode(true);
|
||||
BPFunctions::SetBlendMode();
|
||||
SetViewport();
|
||||
|
||||
ProgramShaderCache::BindLastVertexFormat();
|
||||
|
|
|
@ -77,7 +77,7 @@ public:
|
|||
void Init();
|
||||
void Shutdown();
|
||||
|
||||
void SetBlendMode(bool forceUpdate) override;
|
||||
void SetBlendingState(const BlendingState& state) override;
|
||||
void SetScissorRect(const EFBRectangle& rc) override;
|
||||
void SetGenerationMode() override;
|
||||
void SetDepthMode() override;
|
||||
|
|
|
@ -1340,11 +1340,8 @@ void Renderer::SetDepthMode()
|
|||
StateTracker::GetInstance()->SetDepthStencilState(new_ds_state);
|
||||
}
|
||||
|
||||
void Renderer::SetBlendMode(bool force_update)
|
||||
void Renderer::SetBlendingState(const BlendingState& state)
|
||||
{
|
||||
BlendingState state;
|
||||
state.Generate(bpmem);
|
||||
|
||||
StateTracker::GetInstance()->SetBlendState(state);
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ public:
|
|||
void ResetAPIState() override;
|
||||
void RestoreAPIState() override;
|
||||
|
||||
void SetBlendMode(bool force_update) override;
|
||||
void SetBlendingState(const BlendingState& state) override;
|
||||
void SetScissorRect(const EFBRectangle& rc) override;
|
||||
void SetGenerationMode() override;
|
||||
void SetDepthMode() override;
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "VideoCommon/BPFunctions.h"
|
||||
#include "VideoCommon/BPMemory.h"
|
||||
#include "VideoCommon/RenderBase.h"
|
||||
#include "VideoCommon/RenderState.h"
|
||||
#include "VideoCommon/VertexManagerBase.h"
|
||||
#include "VideoCommon/VideoCommon.h"
|
||||
#include "VideoCommon/VideoConfig.h"
|
||||
|
@ -72,7 +73,9 @@ void SetDepthMode()
|
|||
|
||||
void SetBlendMode()
|
||||
{
|
||||
g_renderer->SetBlendMode(false);
|
||||
BlendingState state;
|
||||
state.Generate(bpmem);
|
||||
g_renderer->SetBlendingState(state);
|
||||
}
|
||||
|
||||
/* Explanation of the magic behind ClearScreen:
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "VideoCommon/AVIDump.h"
|
||||
#include "VideoCommon/BPMemory.h"
|
||||
#include "VideoCommon/FPSCounter.h"
|
||||
#include "VideoCommon/RenderState.h"
|
||||
#include "VideoCommon/VideoCommon.h"
|
||||
|
||||
class PostProcessingShaderImplementation;
|
||||
|
@ -63,7 +64,7 @@ public:
|
|||
PP_EFB_COPY_CLOCKS
|
||||
};
|
||||
|
||||
virtual void SetBlendMode(bool forceUpdate) {}
|
||||
virtual void SetBlendingState(const BlendingState& state) {}
|
||||
virtual void SetScissorRect(const EFBRectangle& rc) {}
|
||||
virtual void SetGenerationMode() {}
|
||||
virtual void SetDepthMode() {}
|
||||
|
|
Loading…
Reference in New Issue