Mesa (main): pvr: Add support for image descriptor.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Jul 25 11:09:44 UTC 2022
Module: Mesa
Branch: main
Commit: 08c867972f402cd782435c0d7dee2d399b4a2fda
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=08c867972f402cd782435c0d7dee2d399b4a2fda
Author: Rajnesh Kanwal <rajnesh.kanwal at imgtec.com>
Date: Fri Jul 1 23:26:41 2022 +0100
pvr: Add support for image descriptor.
Signed-off-by: Rajnesh Kanwal <rajnesh.kanwal at imgtec.com>
Reviewed-by: Karmjit Mahil <Karmjit.Mahil at imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17719>
---
src/imagination/vulkan/pvr_descriptor_set.c | 68 +++++++++++++++++++++++++++++
1 file changed, 68 insertions(+)
diff --git a/src/imagination/vulkan/pvr_descriptor_set.c b/src/imagination/vulkan/pvr_descriptor_set.c
index 754a5ba474d..88adb8ee322 100644
--- a/src/imagination/vulkan/pvr_descriptor_set.c
+++ b/src/imagination/vulkan/pvr_descriptor_set.c
@@ -1580,6 +1580,65 @@ static void pvr_descriptor_update_sampler_texture(
}
}
+static void pvr_descriptor_update_texture(
+ const struct pvr_device *device,
+ const VkWriteDescriptorSet *write_set,
+ struct pvr_descriptor_set *set,
+ const struct pvr_descriptor_set_layout_binding *binding,
+ uint32_t *mem_ptr,
+ uint32_t start_stage,
+ uint32_t end_stage)
+{
+ const struct pvr_device_info *dev_info = &device->pdevice->dev_info;
+
+ for (uint32_t i = 0; i < write_set->descriptorCount; i++) {
+ PVR_FROM_HANDLE(pvr_image_view,
+ iview,
+ write_set->pImageInfo[i].imageView);
+ const uint32_t desc_idx =
+ binding->descriptor_index + write_set->dstArrayElement + i;
+
+ set->descriptors[desc_idx].type = write_set->descriptorType;
+ set->descriptors[desc_idx].iview = iview;
+ set->descriptors[desc_idx].layout = write_set->pImageInfo[i].imageLayout;
+
+ for (uint32_t j = start_stage; j < end_stage; j++) {
+ uint32_t secondary_offset;
+ uint32_t primary_offset;
+
+ if (!(binding->shader_stage_mask & BITFIELD_BIT(j)))
+ continue;
+
+ /* Offset calculation functions expect descriptor_index to be
+ * binding relative not layout relative, so we have used
+ * write_set->dstArrayElement + i rather than desc_idx.
+ */
+ primary_offset =
+ pvr_get_descriptor_primary_offset(device,
+ set->layout,
+ binding,
+ j,
+ write_set->dstArrayElement + i);
+ secondary_offset =
+ pvr_get_descriptor_secondary_offset(device,
+ set->layout,
+ binding,
+ j,
+ write_set->dstArrayElement + i);
+
+ pvr_write_image_descriptor_primaries(dev_info,
+ iview,
+ write_set->descriptorType,
+ mem_ptr + primary_offset);
+
+ pvr_write_image_descriptor_secondaries(dev_info,
+ iview,
+ write_set->descriptorType,
+ mem_ptr + secondary_offset);
+ }
+ }
+}
+
void pvr_UpdateDescriptorSets(VkDevice _device,
uint32_t descriptorWriteCount,
const VkWriteDescriptorSet *pDescriptorWrites,
@@ -1632,6 +1691,15 @@ void pvr_UpdateDescriptorSets(VkDevice _device,
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
+ pvr_descriptor_update_texture(device,
+ write_set,
+ set,
+ binding,
+ map,
+ 0,
+ PVR_STAGE_ALLOCATION_COUNT);
+ break;
+
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
More information about the mesa-commit
mailing list