aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShahbaz Youssefi <syoussefi@chromium.org>2024-04-17 10:00:27 -0400
committerAngle LUCI CQ <angle-scoped@luci-project-accounts.iam.gserviceaccount.com>2024-04-17 20:53:34 +0000
commitd71b8ee0f0e26b14a8fa642460df2635c2d7db2f (patch)
treed94efd686666f6f575deb8b17743fa752c93cc93
parent313c73c3f6a056a049c03c4f928ab5d83f17a77a (diff)
downloadangle-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.cpp48
-rw-r--r--src/libANGLE/renderer/vulkan/vk_renderer.cpp4
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