diff --git a/MarathonRecomp/gpu/video.cpp b/MarathonRecomp/gpu/video.cpp index 0e42f47e1..8c87b3afe 100644 --- a/MarathonRecomp/gpu/video.cpp +++ b/MarathonRecomp/gpu/video.cpp @@ -165,6 +165,7 @@ struct PipelineState RenderBlend srcBlend = RenderBlend::ONE; RenderBlend destBlend = RenderBlend::ZERO; RenderCullMode cullMode = RenderCullMode::NONE; + RenderFrontFace frontFace = RenderFrontFace::CLOCKWISE; RenderComparisonFunction zFunc = RenderComparisonFunction::LESS; RenderComparisonFunction stencilFunc = RenderComparisonFunction::ALWAYS; RenderStencilOp stencilFail = RenderStencilOp::KEEP; @@ -1256,14 +1257,16 @@ static void ProcSetRenderState(const RenderCommand& cmd) RenderCullMode cullMode; switch (value) { - case D3DCULL_NONE: - case D3DCULL_NONE_2: + case D3DCULL_NONE_CCW: + case D3DCULL_NONE_CW: cullMode = RenderCullMode::NONE; break; - case D3DCULL_CW: + case D3DCULL_FRONT_CCW: + case D3DCULL_FRONT_CW: cullMode = RenderCullMode::FRONT; break; - case D3DCULL_CCW: + case D3DCULL_BACK_CCW: + case D3DCULL_BACK_CW: cullMode = RenderCullMode::BACK; break; default: @@ -1273,6 +1276,7 @@ static void ProcSetRenderState(const RenderCommand& cmd) } SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.cullMode, cullMode); + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.frontFace, value < D3DCULL_NONE_CW ? RenderFrontFace::COUNTER_CLOCKWISE : RenderFrontFace::CLOCKWISE); break; } case D3DRS_ZFUNC: @@ -4418,6 +4422,7 @@ static std::unique_ptr CreateGraphicsPipeline(const PipelineStat desc.depthClipEnabled = true; desc.primitiveTopology = pipelineState.primitiveTopology; desc.cullMode = pipelineState.cullMode; + desc.frontFace = pipelineState.frontFace; desc.renderTargetFormat[0] = pipelineState.renderTargetFormat; desc.renderTargetBlend[0].blendEnabled = pipelineState.alphaBlendEnable; desc.renderTargetBlend[0].srcBlend = pipelineState.srcBlend; @@ -4509,10 +4514,24 @@ static RenderPipeline* CreateGraphicsPipelineInRenderThread(PipelineState pipeli " instancing: {}\n" " zEnable: {}\n" " zWriteEnable: {}\n" + " stencilEnable: {}\n" + " stencilTwoSided: {}\n" " srcBlend: {}\n" " destBlend: {}\n" " cullMode: {}\n" + " frontFace: {}\n" " zFunc: {}\n" + " stencilFunc: {}\n" + " stencilFail: {}\n" + " stencilZFail: {}\n" + " stencilPass: {}\n" + " stencilFuncCCW: {}\n" + " stencilFailCCW: {}\n" + " stencilZFailCCW: {}\n" + " stencilPassCCW: {}\n" + " stencilMask: {}\n" + " stencilWriteMask: {}\n" + " stencilRef: {}\n" " alphaBlendEnable: {}\n" " blendOp: {}\n" " slopeScaledDepthBias: {}\n" @@ -4538,10 +4557,24 @@ static RenderPipeline* CreateGraphicsPipelineInRenderThread(PipelineState pipeli pipelineState.instancing, pipelineState.zEnable, pipelineState.zWriteEnable, + pipelineState.stencilEnable, + pipelineState.stencilTwoSided, magic_enum::enum_name(pipelineState.srcBlend), magic_enum::enum_name(pipelineState.destBlend), magic_enum::enum_name(pipelineState.cullMode), + magic_enum::enum_name(pipelineState.frontFace), magic_enum::enum_name(pipelineState.zFunc), + magic_enum::enum_name(pipelineState.stencilFunc), + magic_enum::enum_name(pipelineState.stencilFail), + magic_enum::enum_name(pipelineState.stencilZFail), + magic_enum::enum_name(pipelineState.stencilPass), + magic_enum::enum_name(pipelineState.stencilFuncCCW), + magic_enum::enum_name(pipelineState.stencilFailCCW), + magic_enum::enum_name(pipelineState.stencilZFailCCW), + magic_enum::enum_name(pipelineState.stencilPassCCW), + pipelineState.stencilMask, + pipelineState.stencilWriteMask, + pipelineState.stencilRef, pipelineState.alphaBlendEnable, magic_enum::enum_name(pipelineState.blendOp), pipelineState.slopeScaledDepthBias, @@ -7810,7 +7843,6 @@ class SDLEventListenerForPSOCaching : public SDLEventListener pipelineState.sampleCount = 1; pipelineState.enableAlphaToCoverage = false; - pipelineState.specConstants &= ~SPEC_CONSTANT_BICUBIC_GI_FILTER; if ((pipelineState.specConstants & SPEC_CONSTANT_ALPHA_TO_COVERAGE) != 0) { pipelineState.specConstants &= ~SPEC_CONSTANT_ALPHA_TO_COVERAGE; @@ -7840,10 +7872,24 @@ class SDLEventListenerForPSOCaching : public SDLEventListener "{}," "{}," "{}," + "{}," + "{}," "RenderBlend::{}," "RenderBlend::{}," "RenderCullMode::{}," + "RenderFrontFace::{}," + "RenderComparisonFunction::{}," + "RenderComparisonFunction::{}," + "RenderStencilOp::{}," + "RenderStencilOp::{}," + "RenderStencilOp::{}," "RenderComparisonFunction::{}," + "RenderStencilOp::{}," + "RenderStencilOp::{}," + "RenderStencilOp::{}," + "{}," + "{}," + "{}," "{}," "RenderBlendOperation::{}," "{}," @@ -7865,10 +7911,24 @@ class SDLEventListenerForPSOCaching : public SDLEventListener pipelineState.instancing, pipelineState.zEnable, pipelineState.zWriteEnable, + pipelineState.stencilEnable, + pipelineState.stencilTwoSided, magic_enum::enum_name(pipelineState.srcBlend), magic_enum::enum_name(pipelineState.destBlend), magic_enum::enum_name(pipelineState.cullMode), + magic_enum::enum_name(pipelineState.frontFace), magic_enum::enum_name(pipelineState.zFunc), + magic_enum::enum_name(pipelineState.stencilFunc), + magic_enum::enum_name(pipelineState.stencilFail), + magic_enum::enum_name(pipelineState.stencilZFail), + magic_enum::enum_name(pipelineState.stencilPass), + magic_enum::enum_name(pipelineState.stencilFuncCCW), + magic_enum::enum_name(pipelineState.stencilFailCCW), + magic_enum::enum_name(pipelineState.stencilZFailCCW), + magic_enum::enum_name(pipelineState.stencilPassCCW), + pipelineState.stencilMask, + pipelineState.stencilWriteMask, + pipelineState.stencilRef, pipelineState.alphaBlendEnable, magic_enum::enum_name(pipelineState.blendOp), pipelineState.slopeScaledDepthBias, diff --git a/MarathonRecomp/gpu/video.h b/MarathonRecomp/gpu/video.h index 1ef871099..0d58732e2 100644 --- a/MarathonRecomp/gpu/video.h +++ b/MarathonRecomp/gpu/video.h @@ -386,10 +386,12 @@ enum GuestRenderState enum GuestCullMode { - D3DCULL_NONE = 0, - D3DCULL_CW = 2, - D3DCULL_NONE_2 = 4, - D3DCULL_CCW = 6 + D3DCULL_NONE_CCW = 0, + D3DCULL_FRONT_CCW = 1, + D3DCULL_BACK_CCW = 2, + D3DCULL_NONE_CW = 4, + D3DCULL_FRONT_CW = 5, + D3DCULL_BACK_CW = 6 }; enum GuestBlendMode diff --git a/thirdparty/plume b/thirdparty/plume index bab3543cd..dd30d6c1b 160000 --- a/thirdparty/plume +++ b/thirdparty/plume @@ -1 +1 @@ -Subproject commit bab3543cd9e5d44e8c82b583ab4c5f397eeddc1a +Subproject commit dd30d6c1bb80ec7b8bcffcadb67149d1b5a5fe5d