From 20704ef9dd6bdf754d32e8e813c4bf5b29a0ab53 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 20 Nov 2024 16:15:54 +0100 Subject: [PATCH] Fix stencil usage in Vulkan --- Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp | 5 ++++- .../Engine/GraphicsDevice/Vulkan/GPUPipelineStateVulkan.cpp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp b/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp index 5023bb21f..a8b34f781 100644 --- a/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp +++ b/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp @@ -723,11 +723,14 @@ void GPUContextVulkan::FrameBegin() Platform::MemoryCopy(_samplerHandles, _device->HelperResources.GetStaticSamplers(), sizeof(VkSampler) * GPU_STATIC_SAMPLERS_COUNT); Platform::MemoryClear(_samplerHandles + GPU_STATIC_SAMPLERS_COUNT, sizeof(_samplerHandles) - sizeof(VkSampler) * GPU_STATIC_SAMPLERS_COUNT); + // Init command buffer + const auto cmdBuffer = _cmdBufferManager->GetCmdBuffer(); + vkCmdSetStencilReference(cmdBuffer->GetHandle(), VK_STENCIL_FRONT_AND_BACK, _stencilRef); + #if VULKAN_RESET_QUERY_POOLS // Reset pending queries if (_device->QueriesToReset.HasItems()) { - const auto cmdBuffer = _cmdBufferManager->GetCmdBuffer(); for (auto query : _device->QueriesToReset) query->Reset(cmdBuffer); _device->QueriesToReset.Clear(); diff --git a/Source/Engine/GraphicsDevice/Vulkan/GPUPipelineStateVulkan.cpp b/Source/Engine/GraphicsDevice/Vulkan/GPUPipelineStateVulkan.cpp index 3f3b3074c..a12968091 100644 --- a/Source/Engine/GraphicsDevice/Vulkan/GPUPipelineStateVulkan.cpp +++ b/Source/Engine/GraphicsDevice/Vulkan/GPUPipelineStateVulkan.cpp @@ -337,7 +337,7 @@ bool GPUPipelineStateVulkan::Init(const Description& desc) _descDepthStencil.front.failOp = ToVulkanStencilOp(desc.StencilFailOp); _descDepthStencil.front.depthFailOp = ToVulkanStencilOp(desc.StencilDepthFailOp); _descDepthStencil.front.passOp = ToVulkanStencilOp(desc.StencilPassOp); - _descDepthStencil.front = _descDepthStencil.back; + _descDepthStencil.back = _descDepthStencil.front; _desc.pDepthStencilState = &_descDepthStencil; DepthReadEnable = desc.DepthEnable && desc.DepthFunc != ComparisonFunc::Always; DepthWriteEnable = _descDepthStencil.depthWriteEnable;