aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNanley Chery <[email protected]>2017-01-31 11:13:44 -0800
committerNanley Chery <[email protected]>2017-03-02 13:17:55 -0800
commit5408d3fd055501fe518b5d31159fd830a27b8947 (patch)
tree6ba6d7f67eb1a359727383b13b0090c4bf79f714
parentefc2222323b662ca20a23044a5d4b79157152fe5 (diff)
anv/descriptor_set: Store aux usage of sampled image descriptors
v2: Rebase onto latest changes v3: Account for NULL image_view in aux_usage assignment Signed-off-by: Nanley Chery <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r--src/intel/vulkan/anv_cmd_buffer.c5
-rw-r--r--src/intel/vulkan/anv_descriptor_set.c27
-rw-r--r--src/intel/vulkan/anv_private.h9
3 files changed, 23 insertions, 18 deletions
diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c
index a6addd70295..a765bfeaff3 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 bbd3f0f13ba..1e8991ba43b 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,10 @@ anv_descriptor_set_write_image_view(struct anv_descriptor_set *set,
.type = type,
.image_view = image_view,
.sampler = sampler,
+ .aux_usage = image_view == NULL ? ISL_AUX_USAGE_NONE :
+ anv_layout_to_aux_usage(devinfo, image_view->image,
+ image_view->aspect_mask,
+ info->imageLayout),
};
}
@@ -710,10 +714,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 +814,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 b12012d36c6..3adf79686bc 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);