[Mesa-dev] [PATCH 02/13] anv/meta: Roll clear_image into CmdClearDepthStencilImage
Nanley Chery
nanleychery at gmail.com
Mon Sep 26 18:37:48 UTC 2016
On Sun, Sep 25, 2016 at 09:59:01AM -0700, Jason Ekstrand wrote:
> It is now the only caller so there's no sense in keeping things split out.
>
> Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> ---
> src/intel/vulkan/anv_meta_clear.c | 84 +++++++++++++--------------------------
> 1 file changed, 28 insertions(+), 56 deletions(-)
This patch is
Reviewed-by: Nanley Chery <nanley.g.chery at intel.com>
>
> diff --git a/src/intel/vulkan/anv_meta_clear.c b/src/intel/vulkan/anv_meta_clear.c
> index 5579454..11b471f 100644
> --- a/src/intel/vulkan/anv_meta_clear.c
> +++ b/src/intel/vulkan/anv_meta_clear.c
> @@ -752,28 +752,24 @@ anv_cmd_buffer_clear_subpass(struct anv_cmd_buffer *cmd_buffer)
> meta_clear_end(&saved_state, cmd_buffer);
> }
>
> -static void
> -anv_cmd_clear_image(struct anv_cmd_buffer *cmd_buffer,
> - struct anv_image *image,
> - VkImageLayout image_layout,
> - VkClearValue clear_value,
> - uint32_t range_count,
> - const VkImageSubresourceRange *ranges)
> +void anv_CmdClearDepthStencilImage(
> + VkCommandBuffer commandBuffer,
> + VkImage image_h,
> + VkImageLayout imageLayout,
> + const VkClearDepthStencilValue* pDepthStencil,
> + uint32_t rangeCount,
> + const VkImageSubresourceRange* pRanges)
> {
> - VkDevice device_h = anv_device_to_handle(cmd_buffer->device);
> + ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
> + ANV_FROM_HANDLE(anv_image, image, image_h);
> + struct anv_meta_saved_state saved_state;
>
> - VkFormat vk_format = image->vk_format;
> - if (vk_format == VK_FORMAT_E5B9G9R9_UFLOAT_PACK32) {
> - /* We can't actually render to this format so we have to work around it
> - * by manually unpacking and using R32_UINT.
> - */
> - clear_value.color.uint32[0] =
> - float3_to_rgb9e5(clear_value.color.float32);
> - vk_format = VK_FORMAT_R32_UINT;
> - }
> + meta_clear_begin(&saved_state, cmd_buffer);
> +
> + VkDevice device_h = anv_device_to_handle(cmd_buffer->device);
>
> - for (uint32_t r = 0; r < range_count; r++) {
> - const VkImageSubresourceRange *range = &ranges[r];
> + for (uint32_t r = 0; r < rangeCount; r++) {
> + const VkImageSubresourceRange *range = &pRanges[r];
> for (uint32_t l = 0; l < anv_get_levelCount(image, range); ++l) {
> const uint32_t layer_count = image->type == VK_IMAGE_TYPE_3D ?
> anv_minify(image->extent.depth, l) :
> @@ -785,7 +781,7 @@ anv_cmd_clear_image(struct anv_cmd_buffer *cmd_buffer,
> .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
> .image = anv_image_to_handle(image),
> .viewType = anv_meta_get_view_type(image),
> - .format = vk_format,
> + .format = image->vk_format,
> .subresourceRange = {
> .aspectMask = range->aspectMask,
> .baseMipLevel = range->baseMipLevel + l,
> @@ -812,13 +808,18 @@ anv_cmd_clear_image(struct anv_cmd_buffer *cmd_buffer,
> &fb);
>
> VkAttachmentDescription att_desc = {
> - .format = vk_format,
> + .format = image->vk_format,
> .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
> .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
> .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
> .stencilStoreOp = VK_ATTACHMENT_STORE_OP_STORE,
> - .initialLayout = image_layout,
> - .finalLayout = image_layout,
> + .initialLayout = imageLayout,
> + .finalLayout = imageLayout,
> + };
> +
> + const VkAttachmentReference att_ref = {
> + .attachment = 0,
> + .layout = imageLayout,
> };
>
> VkSubpassDescription subpass_desc = {
> @@ -827,23 +828,11 @@ anv_cmd_clear_image(struct anv_cmd_buffer *cmd_buffer,
> .colorAttachmentCount = 0,
> .pColorAttachments = NULL,
> .pResolveAttachments = NULL,
> - .pDepthStencilAttachment = NULL,
> + .pDepthStencilAttachment = &att_ref,
> .preserveAttachmentCount = 0,
> .pPreserveAttachments = NULL,
> };
>
> - const VkAttachmentReference att_ref = {
> - .attachment = 0,
> - .layout = image_layout,
> - };
> -
> - if (range->aspectMask & VK_IMAGE_ASPECT_COLOR_BIT) {
> - subpass_desc.colorAttachmentCount = 1;
> - subpass_desc.pColorAttachments = &att_ref;
> - } else {
> - subpass_desc.pDepthStencilAttachment = &att_ref;
> - }
> -
> VkRenderPass pass;
> anv_CreateRenderPass(device_h,
> &(VkRenderPassCreateInfo) {
> @@ -876,7 +865,9 @@ anv_cmd_clear_image(struct anv_cmd_buffer *cmd_buffer,
> VkClearAttachment clear_att = {
> .aspectMask = range->aspectMask,
> .colorAttachment = 0,
> - .clearValue = clear_value,
> + .clearValue = {
> + .depthStencil = *pDepthStencil,
> + },
> };
>
> VkClearRect clear_rect = {
> @@ -898,25 +889,6 @@ anv_cmd_clear_image(struct anv_cmd_buffer *cmd_buffer,
> }
> }
> }
> -}
> -
> -void anv_CmdClearDepthStencilImage(
> - VkCommandBuffer commandBuffer,
> - VkImage image_h,
> - VkImageLayout imageLayout,
> - const VkClearDepthStencilValue* pDepthStencil,
> - uint32_t rangeCount,
> - const VkImageSubresourceRange* pRanges)
> -{
> - ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
> - ANV_FROM_HANDLE(anv_image, image, image_h);
> - struct anv_meta_saved_state saved_state;
> -
> - meta_clear_begin(&saved_state, cmd_buffer);
> -
> - anv_cmd_clear_image(cmd_buffer, image, imageLayout,
> - (VkClearValue) { .depthStencil = *pDepthStencil },
> - rangeCount, pRanges);
>
> meta_clear_end(&saved_state, cmd_buffer);
> }
> --
> 2.5.0.400.gff86faf
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list