summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2018-06-14 13:26:23 +0200
committerSamuel Pitoiset <[email protected]>2018-06-15 15:54:06 +0200
commit706d51de7fca8969b45742ec28079c9e61f87da5 (patch)
tree22134b71c8b9b8af210fc17aed45ebd5257d7928
parentfa8bc821a85c8705db2d91b9df4904b128b02d8d (diff)
radv: update ZRANGE_PRECISION in radv_update_bound_fast_clear_ds()
Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]>
-rw-r--r--src/amd/vulkan/radv_cmd_buffer.c46
1 files changed, 15 insertions, 31 deletions
diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 894960461a2..56dbb759cb9 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -1178,7 +1178,8 @@ radv_emit_fb_ds_state(struct radv_cmd_buffer *cmd_buffer,
static void
radv_update_bound_fast_clear_ds(struct radv_cmd_buffer *cmd_buffer,
struct radv_image *image,
- VkClearDepthStencilValue ds_clear_value)
+ VkClearDepthStencilValue ds_clear_value,
+ VkImageAspectFlags aspects)
{
struct radv_framebuffer *framebuffer = cmd_buffer->state.framebuffer;
const struct radv_subpass *subpass = cmd_buffer->state.subpass;
@@ -1200,6 +1201,17 @@ radv_update_bound_fast_clear_ds(struct radv_cmd_buffer *cmd_buffer,
radeon_set_context_reg_seq(cs, R_028028_DB_STENCIL_CLEAR, 2);
radeon_emit(cs, ds_clear_value.stencil);
radeon_emit(cs, fui(ds_clear_value.depth));
+
+ /* Update the ZRANGE_PRECISION value for the TC-compat bug. This is
+ * only needed when clearing Z to 0.0.
+ */
+ if ((aspects & VK_IMAGE_ASPECT_DEPTH_BIT) &&
+ ds_clear_value.depth == 0.0) {
+ VkImageLayout layout = subpass->depth_stencil_attachment.layout;
+
+ radv_update_zrange_precision(cmd_buffer, &att->ds, image,
+ layout, false);
+ }
}
/**
@@ -1227,36 +1239,8 @@ radv_set_ds_clear_metadata(struct radv_cmd_buffer *cmd_buffer,
radeon_emit(cs, ds_clear_value.stencil);
radeon_emit(cs, fui(ds_clear_value.depth));
- radv_update_bound_fast_clear_ds(cmd_buffer, image, ds_clear_value);
-
- /* Update the ZRANGE_PRECISION value for the TC-compat bug. This is
- * only needed when clearing Z to 0.0.
- */
- if ((aspects & VK_IMAGE_ASPECT_DEPTH_BIT) &&
- ds_clear_value.depth == 0.0) {
- struct radv_framebuffer *framebuffer = cmd_buffer->state.framebuffer;
- const struct radv_subpass *subpass = cmd_buffer->state.subpass;
-
- if (!framebuffer || !subpass)
- return;
-
- if (subpass->depth_stencil_attachment.attachment == VK_ATTACHMENT_UNUSED)
- return;
-
- int idx = subpass->depth_stencil_attachment.attachment;
- VkImageLayout layout = subpass->depth_stencil_attachment.layout;
- struct radv_attachment_info *att = &framebuffer->attachments[idx];
- struct radv_image *image = att->attachment->image;
-
- /* Only needed if the image is currently bound as the depth
- * surface.
- */
- if (att->attachment->image != image)
- return;
-
- radv_update_zrange_precision(cmd_buffer, &att->ds, image,
- layout, false);
- }
+ radv_update_bound_fast_clear_ds(cmd_buffer, image, ds_clear_value,
+ aspects);
}
/**