diff options
author | Shahbaz Youssefi <syoussefi@chromium.org> | 2024-04-17 10:00:27 -0400 |
---|---|---|
committer | Angle LUCI CQ <angle-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2024-04-17 20:53:34 +0000 |
commit | d71b8ee0f0e26b14a8fa642460df2635c2d7db2f (patch) | |
tree | d94efd686666f6f575deb8b17743fa752c93cc93 | |
parent | 313c73c3f6a056a049c03c4f928ab5d83f17a77a (diff) | |
download | angle-d71b8ee0f0e26b14a8fa642460df2635c2d7db2f.tar.gz |
Vulkan: Fix dynamic depth/stencil in UtilsVk when unused
Dynamic state still needs to be set even if depth/stencil test is
disabled.
Bug: angleproject:8151
Bug: b/323708819
Change-Id: Ic470fabd84c71b026152b6bee2e6a2c803514106
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5462059
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
-rw-r--r-- | src/libANGLE/renderer/vulkan/UtilsVk.cpp | 48 | ||||
-rw-r--r-- | src/libANGLE/renderer/vulkan/vk_renderer.cpp | 4 |
2 files changed, 48 insertions, 4 deletions
diff --git a/src/libANGLE/renderer/vulkan/UtilsVk.cpp b/src/libANGLE/renderer/vulkan/UtilsVk.cpp index a20770e1a4..6a954fa1ed 100644 --- a/src/libANGLE/renderer/vulkan/UtilsVk.cpp +++ b/src/libANGLE/renderer/vulkan/UtilsVk.cpp @@ -454,6 +454,10 @@ void SetDepthDynamicStateForUnused(vk::Renderer *renderer, { commandBuffer->setDepthWriteEnable(VK_FALSE); } + if (renderer->useDepthCompareOpDynamicState()) + { + commandBuffer->setDepthCompareOp(VK_COMPARE_OP_ALWAYS); + } } // Sets the appropriate settings in the pipeline for either the shader to output stencil, regardless @@ -493,6 +497,26 @@ void SetStencilDynamicStateForWrite(vk::Renderer *renderer, } } +void SetStencilDynamicStateForUnused(vk::Renderer *renderer, + vk::RenderPassCommandBuffer *commandBuffer) +{ + if (renderer->useStencilTestEnableDynamicState()) + { + commandBuffer->setStencilTestEnable(false); + } + if (renderer->useStencilOpDynamicState()) + { + commandBuffer->setStencilOp(VK_STENCIL_FACE_FRONT_BIT, VK_STENCIL_OP_REPLACE, + VK_STENCIL_OP_REPLACE, VK_STENCIL_OP_REPLACE, + VK_COMPARE_OP_ALWAYS); + commandBuffer->setStencilOp(VK_STENCIL_FACE_BACK_BIT, VK_STENCIL_OP_REPLACE, + VK_STENCIL_OP_REPLACE, VK_STENCIL_OP_REPLACE, + VK_COMPARE_OP_ALWAYS); + } + commandBuffer->setStencilCompareMask(0x00, 0x00); + commandBuffer->setStencilWriteMask(0x00, 0x00); + commandBuffer->setStencilReference(0x00, 0x00); +} namespace unresolve { // The unresolve shader looks like the following, based on the number and types of unresolve @@ -2508,6 +2532,10 @@ angle::Result UtilsVk::clearFramebuffer(ContextVk *contextVk, { SetDepthDynamicStateForWrite(renderer, commandBuffer); } + else + { + SetDepthDynamicStateForUnused(renderer, commandBuffer); + } if (params.clearStencil) { @@ -2521,6 +2549,10 @@ angle::Result UtilsVk::clearFramebuffer(ContextVk *contextVk, SetStencilDynamicStateForWrite(contextVk->getRenderer(), commandBuffer); } + else + { + SetStencilDynamicStateForUnused(contextVk->getRenderer(), commandBuffer); + } ASSERT(contextVk->hasStartedRenderPassWithQueueSerial( framebuffer->getLastRenderPassQueueSerial())); @@ -2928,6 +2960,10 @@ angle::Result UtilsVk::blitResolveImpl(ContextVk *contextVk, { SetDepthDynamicStateForWrite(renderer, commandBuffer); } + else + { + SetDepthDynamicStateForUnused(renderer, commandBuffer); + } if (blitStencil) { @@ -2940,6 +2976,10 @@ angle::Result UtilsVk::blitResolveImpl(ContextVk *contextVk, SetStencilDynamicStateForWrite(renderer, commandBuffer); } + else + { + SetStencilDynamicStateForUnused(renderer, commandBuffer); + } // Note: this utility starts the render pass directly, thus bypassing // ContextVk::startRenderPass. As such, occlusion queries are not enabled. @@ -4158,6 +4198,10 @@ angle::Result UtilsVk::unresolve(ContextVk *contextVk, { SetDepthDynamicStateForWrite(renderer, commandBuffer); } + else + { + SetDepthDynamicStateForUnused(renderer, commandBuffer); + } if (unresolveStencilWithShaderExport) { @@ -4170,6 +4214,10 @@ angle::Result UtilsVk::unresolve(ContextVk *contextVk, SetStencilDynamicStateForWrite(renderer, commandBuffer); } + else + { + SetStencilDynamicStateForUnused(renderer, commandBuffer); + } // This draw call is made before ContextVk gets a chance to start the occlusion query. As // such, occlusion queries are not enabled. diff --git a/src/libANGLE/renderer/vulkan/vk_renderer.cpp b/src/libANGLE/renderer/vulkan/vk_renderer.cpp index 202f6a897e..c1bdae1bde 100644 --- a/src/libANGLE/renderer/vulkan/vk_renderer.cpp +++ b/src/libANGLE/renderer/vulkan/vk_renderer.cpp @@ -236,10 +236,6 @@ constexpr const char *kSkippedMessages[] = { "VUID-vkCmdDrawIndexed-None-07835", "VUID-VkGraphicsPipelineCreateInfo-Input-08733", "VUID-vkCmdDraw-Input-08734", - // http://anglebug.com/8151 - "VUID-vkCmdDraw-None-07844", - "VUID-vkCmdDraw-None-07845", - "VUID-vkCmdDraw-None-07848", // https://anglebug.com/8128#c3 "VUID-VkBufferViewCreateInfo-format-08779", // https://anglebug.com/8203 |