@@ -165,6 +165,7 @@ struct PipelineState
165165 RenderBlend srcBlend = RenderBlend::ONE ;
166166 RenderBlend destBlend = RenderBlend::ZERO ;
167167 RenderCullMode cullMode = RenderCullMode::NONE ;
168+ RenderFrontFace frontFace = RenderFrontFace::CLOCKWISE ;
168169 RenderComparisonFunction zFunc = RenderComparisonFunction::LESS ;
169170 RenderComparisonFunction stencilFunc = RenderComparisonFunction::ALWAYS ;
170171 RenderStencilOp stencilFail = RenderStencilOp::KEEP ;
@@ -1256,14 +1257,16 @@ static void ProcSetRenderState(const RenderCommand& cmd)
12561257 RenderCullMode cullMode;
12571258
12581259 switch (value) {
1259- case D3DCULL_NONE :
1260- case D3DCULL_NONE_2 :
1260+ case D3DCULL_NONE_CCW :
1261+ case D3DCULL_NONE_CW :
12611262 cullMode = RenderCullMode::NONE ;
12621263 break ;
1263- case D3DCULL_CW :
1264+ case D3DCULL_FRONT_CCW :
1265+ case D3DCULL_FRONT_CW :
12641266 cullMode = RenderCullMode::FRONT ;
12651267 break ;
1266- case D3DCULL_CCW :
1268+ case D3DCULL_BACK_CCW :
1269+ case D3DCULL_BACK_CW :
12671270 cullMode = RenderCullMode::BACK ;
12681271 break ;
12691272 default :
@@ -1273,6 +1276,7 @@ static void ProcSetRenderState(const RenderCommand& cmd)
12731276 }
12741277
12751278 SetDirtyValue (g_dirtyStates.pipelineState , g_pipelineState.cullMode , cullMode);
1279+ SetDirtyValue (g_dirtyStates.pipelineState , g_pipelineState.frontFace , value < D3DCULL_NONE_CW ? RenderFrontFace::COUNTER_CLOCKWISE : RenderFrontFace::CLOCKWISE );
12761280 break ;
12771281 }
12781282 case D3DRS_ZFUNC :
@@ -4418,6 +4422,7 @@ static std::unique_ptr<RenderPipeline> CreateGraphicsPipeline(const PipelineStat
44184422 desc.depthClipEnabled = true ;
44194423 desc.primitiveTopology = pipelineState.primitiveTopology ;
44204424 desc.cullMode = pipelineState.cullMode ;
4425+ desc.frontFace = pipelineState.frontFace ;
44214426 desc.renderTargetFormat [0 ] = pipelineState.renderTargetFormat ;
44224427 desc.renderTargetBlend [0 ].blendEnabled = pipelineState.alphaBlendEnable ;
44234428 desc.renderTargetBlend [0 ].srcBlend = pipelineState.srcBlend ;
@@ -4509,10 +4514,24 @@ static RenderPipeline* CreateGraphicsPipelineInRenderThread(PipelineState pipeli
45094514 " instancing: {}\n "
45104515 " zEnable: {}\n "
45114516 " zWriteEnable: {}\n "
4517+ " stencilEnable: {}\n "
4518+ " stencilTwoSided: {}\n "
45124519 " srcBlend: {}\n "
45134520 " destBlend: {}\n "
45144521 " cullMode: {}\n "
4522+ " frontFace: {}\n "
45154523 " zFunc: {}\n "
4524+ " stencilFunc: {}\n "
4525+ " stencilFail: {}\n "
4526+ " stencilZFail: {}\n "
4527+ " stencilPass: {}\n "
4528+ " stencilFuncCCW: {}\n "
4529+ " stencilFailCCW: {}\n "
4530+ " stencilZFailCCW: {}\n "
4531+ " stencilPassCCW: {}\n "
4532+ " stencilMask: {}\n "
4533+ " stencilWriteMask: {}\n "
4534+ " stencilRef: {}\n "
45164535 " alphaBlendEnable: {}\n "
45174536 " blendOp: {}\n "
45184537 " slopeScaledDepthBias: {}\n "
@@ -4538,10 +4557,24 @@ static RenderPipeline* CreateGraphicsPipelineInRenderThread(PipelineState pipeli
45384557 pipelineState.instancing ,
45394558 pipelineState.zEnable ,
45404559 pipelineState.zWriteEnable ,
4560+ pipelineState.stencilEnable ,
4561+ pipelineState.stencilTwoSided ,
45414562 magic_enum::enum_name (pipelineState.srcBlend ),
45424563 magic_enum::enum_name (pipelineState.destBlend ),
45434564 magic_enum::enum_name (pipelineState.cullMode ),
4565+ magic_enum::enum_name (pipelineState.frontFace ),
45444566 magic_enum::enum_name (pipelineState.zFunc ),
4567+ magic_enum::enum_name (pipelineState.stencilFunc ),
4568+ magic_enum::enum_name (pipelineState.stencilFail ),
4569+ magic_enum::enum_name (pipelineState.stencilZFail ),
4570+ magic_enum::enum_name (pipelineState.stencilPass ),
4571+ magic_enum::enum_name (pipelineState.stencilFuncCCW ),
4572+ magic_enum::enum_name (pipelineState.stencilFailCCW ),
4573+ magic_enum::enum_name (pipelineState.stencilZFailCCW ),
4574+ magic_enum::enum_name (pipelineState.stencilPassCCW ),
4575+ pipelineState.stencilMask ,
4576+ pipelineState.stencilWriteMask ,
4577+ pipelineState.stencilRef ,
45454578 pipelineState.alphaBlendEnable ,
45464579 magic_enum::enum_name (pipelineState.blendOp ),
45474580 pipelineState.slopeScaledDepthBias ,
@@ -7810,7 +7843,6 @@ class SDLEventListenerForPSOCaching : public SDLEventListener
78107843 pipelineState.sampleCount = 1 ;
78117844 pipelineState.enableAlphaToCoverage = false ;
78127845
7813- pipelineState.specConstants &= ~SPEC_CONSTANT_BICUBIC_GI_FILTER ;
78147846 if ((pipelineState.specConstants & SPEC_CONSTANT_ALPHA_TO_COVERAGE ) != 0 )
78157847 {
78167848 pipelineState.specConstants &= ~SPEC_CONSTANT_ALPHA_TO_COVERAGE ;
@@ -7840,10 +7872,24 @@ class SDLEventListenerForPSOCaching : public SDLEventListener
78407872 " {},"
78417873 " {},"
78427874 " {},"
7875+ " {},"
7876+ " {},"
78437877 " RenderBlend::{},"
78447878 " RenderBlend::{},"
78457879 " RenderCullMode::{},"
7880+ " RenderFrontFace::{},"
7881+ " RenderComparisonFunction::{},"
7882+ " RenderComparisonFunction::{},"
7883+ " RenderStencilOp::{},"
7884+ " RenderStencilOp::{},"
7885+ " RenderStencilOp::{},"
78467886 " RenderComparisonFunction::{},"
7887+ " RenderStencilOp::{},"
7888+ " RenderStencilOp::{},"
7889+ " RenderStencilOp::{},"
7890+ " {},"
7891+ " {},"
7892+ " {},"
78477893 " {},"
78487894 " RenderBlendOperation::{},"
78497895 " {},"
@@ -7865,10 +7911,24 @@ class SDLEventListenerForPSOCaching : public SDLEventListener
78657911 pipelineState.instancing ,
78667912 pipelineState.zEnable ,
78677913 pipelineState.zWriteEnable ,
7914+ pipelineState.stencilEnable ,
7915+ pipelineState.stencilTwoSided ,
78687916 magic_enum::enum_name (pipelineState.srcBlend ),
78697917 magic_enum::enum_name (pipelineState.destBlend ),
78707918 magic_enum::enum_name (pipelineState.cullMode ),
7919+ magic_enum::enum_name (pipelineState.frontFace ),
78717920 magic_enum::enum_name (pipelineState.zFunc ),
7921+ magic_enum::enum_name (pipelineState.stencilFunc ),
7922+ magic_enum::enum_name (pipelineState.stencilFail ),
7923+ magic_enum::enum_name (pipelineState.stencilZFail ),
7924+ magic_enum::enum_name (pipelineState.stencilPass ),
7925+ magic_enum::enum_name (pipelineState.stencilFuncCCW ),
7926+ magic_enum::enum_name (pipelineState.stencilFailCCW ),
7927+ magic_enum::enum_name (pipelineState.stencilZFailCCW ),
7928+ magic_enum::enum_name (pipelineState.stencilPassCCW ),
7929+ pipelineState.stencilMask ,
7930+ pipelineState.stencilWriteMask ,
7931+ pipelineState.stencilRef ,
78727932 pipelineState.alphaBlendEnable ,
78737933 magic_enum::enum_name (pipelineState.blendOp ),
78747934 pipelineState.slopeScaledDepthBias ,
0 commit comments