From 255d4245fdec919c0d06d8f3e7c3abb41579e739 Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Thu, 6 Feb 2020 12:36:48 +0100 Subject: [PATCH] v3dv: add a helper to get the Z/S buffer from an aspect mask We will be using this when we need to implement other clearing commands. Part-of: --- src/broadcom/vulkan/v3dv_cmd_buffer.c | 23 ++++------------------- src/broadcom/vulkan/v3dv_private.h | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c index efccbef..f480f68 100644 --- a/src/broadcom/vulkan/v3dv_cmd_buffer.c +++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c @@ -741,23 +741,6 @@ setup_render_target(struct v3dv_cmd_buffer *cmd_buffer, int rt, *rt_clamp = V3D_RENDER_TARGET_CLAMP_NONE; } -static uint32_t -zs_buffer_from_aspect_bits(VkImageAspectFlags aspects) -{ - const VkImageAspectFlags zs_aspects = - VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT; - const VkImageAspectFlags filtered_aspects = aspects & zs_aspects; - - if (filtered_aspects == zs_aspects) - return ZSTENCIL; - else if (filtered_aspects == VK_IMAGE_ASPECT_DEPTH_BIT) - return Z; - else if (filtered_aspects == VK_IMAGE_ASPECT_STENCIL_BIT) - return STENCIL; - else - return NONE; -} - static void cmd_buffer_render_pass_emit_load(struct v3dv_cmd_buffer *cmd_buffer, struct v3dv_cl *cl, @@ -849,7 +832,8 @@ cmd_buffer_render_pass_emit_loads(struct v3dv_cmd_buffer *cmd_buffer, if (needs_load) { struct v3dv_image_view *iview = framebuffer->attachments[ds_attachment_idx]; - const uint32_t zs_buffer = zs_buffer_from_aspect_bits(iview->aspects); + const uint32_t zs_buffer = + v3dv_zs_buffer_from_aspect_bits(iview->aspects); cmd_buffer_render_pass_emit_load(cmd_buffer, cl, iview, layer, zs_buffer); } @@ -978,7 +962,8 @@ cmd_buffer_render_pass_emit_stores(struct v3dv_cmd_buffer *cmd_buffer, if (needs_ds_store) { struct v3dv_image_view *iview = state->framebuffer->attachments[ds_attachment_idx]; - const uint32_t zs_buffer = zs_buffer_from_aspect_bits(iview->aspects); + const uint32_t zs_buffer = + v3dv_zs_buffer_from_aspect_bits(iview->aspects); cmd_buffer_render_pass_emit_store(cmd_buffer, cl, ds_attachment_idx, layer, zs_buffer, needs_ds_clear); diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index fc7fb85..c3c4ae9 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -830,6 +830,23 @@ struct v3dv_pipeline { uint8_t stencil_cfg[2][cl_packet_length(STENCIL_CFG)]; }; +static inline uint32_t +v3dv_zs_buffer_from_aspect_bits(VkImageAspectFlags aspects) +{ + const VkImageAspectFlags zs_aspects = + VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT; + const VkImageAspectFlags filtered_aspects = aspects & zs_aspects; + + if (filtered_aspects == zs_aspects) + return ZSTENCIL; + else if (filtered_aspects == VK_IMAGE_ASPECT_DEPTH_BIT) + return Z; + else if (filtered_aspects == VK_IMAGE_ASPECT_STENCIL_BIT) + return STENCIL; + else + return NONE; +} + uint32_t v3dv_physical_device_api_version(struct v3dv_physical_device *dev); int v3dv_get_instance_entrypoint_index(const char *name); -- 2.7.4