@@ -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 ;
@@ -724,17 +725,22 @@ static void DestructTempResources()
724725 {
725726 case ResourceType::Texture:
726727 case ResourceType::VolumeTexture:
728+ case ResourceType::ArrayTexture:
727729 {
728730 const auto texture = reinterpret_cast <GuestTexture*>(resource);
729731
730732 if (texture->mappedMemory != nullptr ) {
731733 g_userHeap.Free (texture->mappedMemory );
732734 }
733735
736+ g_textureDescriptorSet->setTexture (texture->descriptorIndex , nullptr , {});
734737 g_textureDescriptorAllocator.free (texture->descriptorIndex );
735738
736739 if (texture->patchedTexture != nullptr )
740+ {
741+ g_textureDescriptorSet->setTexture (texture->patchedTexture ->descriptorIndex , nullptr , {});
737742 g_textureDescriptorAllocator.free (texture->patchedTexture ->descriptorIndex );
743+ }
738744
739745 texture->~GuestTexture ();
740746 break ;
@@ -759,7 +765,10 @@ static void DestructTempResources()
759765 const auto surface = reinterpret_cast <GuestSurface*>(resource);
760766
761767 if (surface->descriptorIndex != NULL )
768+ {
769+ g_textureDescriptorSet->setTexture (surface->descriptorIndex , nullptr , {});
762770 g_textureDescriptorAllocator.free (surface->descriptorIndex );
771+ }
763772
764773 surface->~GuestSurface ();
765774 break ;
@@ -1248,14 +1257,16 @@ static void ProcSetRenderState(const RenderCommand& cmd)
12481257 RenderCullMode cullMode;
12491258
12501259 switch (value) {
1251- case D3DCULL_NONE :
1252- case D3DCULL_NONE_2 :
1260+ case D3DCULL_NONE_CCW :
1261+ case D3DCULL_NONE_CW :
12531262 cullMode = RenderCullMode::NONE ;
12541263 break ;
1255- case D3DCULL_CW :
1264+ case D3DCULL_FRONT_CCW :
1265+ case D3DCULL_FRONT_CW :
12561266 cullMode = RenderCullMode::FRONT ;
12571267 break ;
1258- case D3DCULL_CCW :
1268+ case D3DCULL_BACK_CCW :
1269+ case D3DCULL_BACK_CW :
12591270 cullMode = RenderCullMode::BACK ;
12601271 break ;
12611272 default :
@@ -1265,6 +1276,7 @@ static void ProcSetRenderState(const RenderCommand& cmd)
12651276 }
12661277
12671278 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 );
12681280 break ;
12691281 }
12701282 case D3DRS_ZFUNC :
@@ -4410,6 +4422,7 @@ static std::unique_ptr<RenderPipeline> CreateGraphicsPipeline(const PipelineStat
44104422 desc.depthClipEnabled = true ;
44114423 desc.primitiveTopology = pipelineState.primitiveTopology ;
44124424 desc.cullMode = pipelineState.cullMode ;
4425+ desc.frontFace = pipelineState.frontFace ;
44134426 desc.renderTargetFormat [0 ] = pipelineState.renderTargetFormat ;
44144427 desc.renderTargetBlend [0 ].blendEnabled = pipelineState.alphaBlendEnable ;
44154428 desc.renderTargetBlend [0 ].srcBlend = pipelineState.srcBlend ;
@@ -4501,10 +4514,24 @@ static RenderPipeline* CreateGraphicsPipelineInRenderThread(PipelineState pipeli
45014514 " instancing: {}\n "
45024515 " zEnable: {}\n "
45034516 " zWriteEnable: {}\n "
4517+ " stencilEnable: {}\n "
4518+ " stencilTwoSided: {}\n "
45044519 " srcBlend: {}\n "
45054520 " destBlend: {}\n "
45064521 " cullMode: {}\n "
4522+ " frontFace: {}\n "
45074523 " 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 "
45084535 " alphaBlendEnable: {}\n "
45094536 " blendOp: {}\n "
45104537 " slopeScaledDepthBias: {}\n "
@@ -4530,10 +4557,24 @@ static RenderPipeline* CreateGraphicsPipelineInRenderThread(PipelineState pipeli
45304557 pipelineState.instancing ,
45314558 pipelineState.zEnable ,
45324559 pipelineState.zWriteEnable ,
4560+ pipelineState.stencilEnable ,
4561+ pipelineState.stencilTwoSided ,
45334562 magic_enum::enum_name (pipelineState.srcBlend ),
45344563 magic_enum::enum_name (pipelineState.destBlend ),
45354564 magic_enum::enum_name (pipelineState.cullMode ),
4565+ magic_enum::enum_name (pipelineState.frontFace ),
45364566 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 ,
45374578 pipelineState.alphaBlendEnable ,
45384579 magic_enum::enum_name (pipelineState.blendOp ),
45394580 pipelineState.slopeScaledDepthBias ,
@@ -7802,7 +7843,6 @@ class SDLEventListenerForPSOCaching : public SDLEventListener
78027843 pipelineState.sampleCount = 1 ;
78037844 pipelineState.enableAlphaToCoverage = false ;
78047845
7805- pipelineState.specConstants &= ~SPEC_CONSTANT_BICUBIC_GI_FILTER ;
78067846 if ((pipelineState.specConstants & SPEC_CONSTANT_ALPHA_TO_COVERAGE ) != 0 )
78077847 {
78087848 pipelineState.specConstants &= ~SPEC_CONSTANT_ALPHA_TO_COVERAGE ;
@@ -7832,10 +7872,24 @@ class SDLEventListenerForPSOCaching : public SDLEventListener
78327872 " {},"
78337873 " {},"
78347874 " {},"
7875+ " {},"
7876+ " {},"
78357877 " RenderBlend::{},"
78367878 " RenderBlend::{},"
78377879 " RenderCullMode::{},"
7880+ " RenderFrontFace::{},"
78387881 " RenderComparisonFunction::{},"
7882+ " RenderComparisonFunction::{},"
7883+ " RenderStencilOp::{},"
7884+ " RenderStencilOp::{},"
7885+ " RenderStencilOp::{},"
7886+ " RenderComparisonFunction::{},"
7887+ " RenderStencilOp::{},"
7888+ " RenderStencilOp::{},"
7889+ " RenderStencilOp::{},"
7890+ " {},"
7891+ " {},"
7892+ " {},"
78397893 " {},"
78407894 " RenderBlendOperation::{},"
78417895 " {},"
@@ -7857,10 +7911,24 @@ class SDLEventListenerForPSOCaching : public SDLEventListener
78577911 pipelineState.instancing ,
78587912 pipelineState.zEnable ,
78597913 pipelineState.zWriteEnable ,
7914+ pipelineState.stencilEnable ,
7915+ pipelineState.stencilTwoSided ,
78607916 magic_enum::enum_name (pipelineState.srcBlend ),
78617917 magic_enum::enum_name (pipelineState.destBlend ),
78627918 magic_enum::enum_name (pipelineState.cullMode ),
7919+ magic_enum::enum_name (pipelineState.frontFace ),
78637920 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 ,
78647932 pipelineState.alphaBlendEnable ,
78657933 magic_enum::enum_name (pipelineState.blendOp ),
78667934 pipelineState.slopeScaledDepthBias ,
0 commit comments