diff options
author | Bas Nieuwenhuizen <[email protected]> | 2017-06-29 00:38:29 +0200 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2017-07-05 20:23:00 +0200 |
commit | 7c7196e35ca7ad924ed2079d921f0334d0b4cc1a (patch) | |
tree | e11890cc9409066a3123e5071275caa8b4ac0bc5 /src/amd/vulkan/radv_pipeline.c | |
parent | 0ede0f9dff519fe4444da91031c687207b0d9c5f (diff) |
radv: Disable depth & stencil tests when the depthbuffer doesn't support it.
Signed-off-by: Bas Nieuwenhuizen <[email protected]>
Acked-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/amd/vulkan/radv_pipeline.c')
-rw-r--r-- | src/amd/vulkan/radv_pipeline.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 49610a1a223..061121b8245 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -1217,12 +1217,24 @@ radv_pipeline_init_depth_stencil_state(struct radv_pipeline *pipeline, memset(ds, 0, sizeof(*ds)); if (!vkds) return; - ds->db_depth_control = S_028800_Z_ENABLE(vkds->depthTestEnable ? 1 : 0) | - S_028800_Z_WRITE_ENABLE(vkds->depthWriteEnable ? 1 : 0) | - S_028800_ZFUNC(vkds->depthCompareOp) | - S_028800_DEPTH_BOUNDS_ENABLE(vkds->depthBoundsTestEnable ? 1 : 0); - if (vkds->stencilTestEnable) { + RADV_FROM_HANDLE(radv_render_pass, pass, pCreateInfo->renderPass); + struct radv_subpass *subpass = pass->subpasses + pCreateInfo->subpass; + if (subpass->depth_stencil_attachment.attachment == VK_ATTACHMENT_UNUSED) + return; + + struct radv_render_pass_attachment *attachment = pass->attachments + subpass->depth_stencil_attachment.attachment; + bool has_depth_attachment = vk_format_is_depth(attachment->format); + bool has_stencil_attachment = vk_format_is_stencil(attachment->format); + + if (has_depth_attachment) { + ds->db_depth_control = S_028800_Z_ENABLE(vkds->depthTestEnable ? 1 : 0) | + S_028800_Z_WRITE_ENABLE(vkds->depthWriteEnable ? 1 : 0) | + S_028800_ZFUNC(vkds->depthCompareOp) | + S_028800_DEPTH_BOUNDS_ENABLE(vkds->depthBoundsTestEnable ? 1 : 0); + } + + if (has_stencil_attachment && vkds->stencilTestEnable) { ds->db_depth_control |= S_028800_STENCIL_ENABLE(1) | S_028800_BACKFACE_ENABLE(1); ds->db_depth_control |= S_028800_STENCILFUNC(vkds->front.compareOp); ds->db_stencil_control |= S_02842C_STENCILFAIL(si_translate_stencil_op(vkds->front.failOp)); |