[Mesa-dev] [PATCH v3] anv/descriptor_set: Store aux usage of sampled image descriptors

Nanley Chery nanleychery at gmail.com
Thu Mar 2 18:16:21 UTC 2017


v2: Rebase onto latest changes

Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
---
 src/intel/vulkan/anv_cmd_buffer.c     |  5 ++---
 src/intel/vulkan/anv_descriptor_set.c | 26 +++++++++++++-------------
 src/intel/vulkan/anv_private.h        |  9 +++++++--
 3 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c
index a6addd7029..a765bfeaff 100644
--- a/src/intel/vulkan/anv_cmd_buffer.c
+++ b/src/intel/vulkan/anv_cmd_buffer.c
@@ -855,10 +855,9 @@ void anv_CmdPushDescriptorSetKHR(
       case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
       case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
          for (uint32_t j = 0; j < write->descriptorCount; j++) {
-            anv_descriptor_set_write_image_view(set,
+            anv_descriptor_set_write_image_view(set, &cmd_buffer->device->info,
+                                                write->pImageInfo + j,
                                                 write->descriptorType,
-                                                write->pImageInfo[j].imageView,
-                                                write->pImageInfo[j].sampler,
                                                 write->dstBinding,
                                                 write->dstArrayElement + j);
          }
diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c
index bbd3f0f13b..38bb4adcf5 100644
--- a/src/intel/vulkan/anv_descriptor_set.c
+++ b/src/intel/vulkan/anv_descriptor_set.c
@@ -571,9 +571,9 @@ VkResult anv_FreeDescriptorSets(
 
 void
 anv_descriptor_set_write_image_view(struct anv_descriptor_set *set,
+                                    const struct gen_device_info * const devinfo,
+                                    const VkDescriptorImageInfo * const info,
                                     VkDescriptorType type,
-                                    VkImageView _image_view,
-                                    VkSampler _sampler,
                                     uint32_t binding,
                                     uint32_t element)
 {
@@ -588,18 +588,18 @@ anv_descriptor_set_write_image_view(struct anv_descriptor_set *set,
 
    switch (type) {
    case VK_DESCRIPTOR_TYPE_SAMPLER:
-      sampler = anv_sampler_from_handle(_sampler);
+      sampler = anv_sampler_from_handle(info->sampler);
       break;
 
    case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
-      image_view = anv_image_view_from_handle(_image_view);
-      sampler = anv_sampler_from_handle(_sampler);
+      image_view = anv_image_view_from_handle(info->imageView);
+      sampler = anv_sampler_from_handle(info->sampler);
       break;
 
    case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
    case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
    case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
-      image_view = anv_image_view_from_handle(_image_view);
+      image_view = anv_image_view_from_handle(info->imageView);
       break;
 
    default:
@@ -617,6 +617,9 @@ anv_descriptor_set_write_image_view(struct anv_descriptor_set *set,
       .type = type,
       .image_view = image_view,
       .sampler = sampler,
+      .aux_usage = anv_layout_to_aux_usage(devinfo, image_view->image,
+                                           image_view->aspect_mask,
+                                           info->imageLayout),
    };
 }
 
@@ -710,10 +713,9 @@ void anv_UpdateDescriptorSets(
       case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
       case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
          for (uint32_t j = 0; j < write->descriptorCount; j++) {
-            anv_descriptor_set_write_image_view(set,
+            anv_descriptor_set_write_image_view(set, &device->info,
+                                                write->pImageInfo + j,
                                                 write->descriptorType,
-                                                write->pImageInfo[j].imageView,
-                                                write->pImageInfo[j].sampler,
                                                 write->dstBinding,
                                                 write->dstArrayElement + j);
          }
@@ -811,10 +813,8 @@ anv_descriptor_set_write_template(struct anv_descriptor_set *set,
          for (uint32_t j = 0; j < entry->array_count; j++) {
             const VkDescriptorImageInfo *info =
                data + entry->offset + j * entry->stride;
-            anv_descriptor_set_write_image_view(set,
-                                                entry->type,
-                                                info->imageView,
-                                                info->sampler,
+            anv_descriptor_set_write_image_view(set, &device->info,
+                                                info, entry->type,
                                                 entry->binding,
                                                 entry->array_element + j);
          }
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index b12012d36c..3adf79686b 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -902,6 +902,11 @@ struct anv_descriptor {
       struct {
          struct anv_image_view *image_view;
          struct anv_sampler *sampler;
+
+         /* Used to determine whether or not we need the surface state to have
+          * the auxiliary buffer enabled.
+          */
+         enum isl_aux_usage aux_usage;
       };
 
       struct anv_buffer_view *buffer_view;
@@ -995,9 +1000,9 @@ anv_descriptor_set_layout_size(const struct anv_descriptor_set_layout *layout);
 
 void
 anv_descriptor_set_write_image_view(struct anv_descriptor_set *set,
+                                    const struct gen_device_info * const devinfo,
+                                    const VkDescriptorImageInfo * const info,
                                     VkDescriptorType type,
-                                    VkImageView _image_view,
-                                    VkSampler _sampler,
                                     uint32_t binding,
                                     uint32_t element);
 
-- 
2.12.0



More information about the mesa-dev mailing list