mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 11:10:10 +01:00
pvr: sampler and sampled image descriptor support
Signed-off-by: Simon Perretta <simon.perretta@imgtec.com> Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36412>
This commit is contained in:
parent
380bf224dc
commit
c54dab154e
1 changed files with 60 additions and 0 deletions
|
|
@ -79,9 +79,13 @@ static unsigned pvr_descriptor_size(VkDescriptorType type)
|
|||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
return sizeof(struct pvr_buffer_descriptor);
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
||||
return sizeof(struct pvr_sampler_descriptor);
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||
return sizeof(struct pvr_combined_image_sampler_descriptor);
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||
|
|
@ -491,6 +495,25 @@ write_buffer(const struct pvr_descriptor_set *set,
|
|||
memcpy(desc_mapping, &buffer_desc, sizeof(buffer_desc));
|
||||
}
|
||||
|
||||
static void
|
||||
write_sampler(const struct pvr_descriptor_set *set,
|
||||
const VkDescriptorImageInfo *image_info,
|
||||
const struct pvr_descriptor_set_layout_binding *binding,
|
||||
uint32_t elem)
|
||||
{
|
||||
PVR_FROM_HANDLE(pvr_sampler, info_sampler, image_info->sampler);
|
||||
|
||||
const unsigned desc_offset = binding->offset + (elem * binding->stride);
|
||||
void *desc_mapping = (uint8_t *)set->mapping + desc_offset;
|
||||
|
||||
struct pvr_sampler *sampler = binding->immutable_sampler_count
|
||||
? binding->immutable_samplers[elem]
|
||||
: info_sampler;
|
||||
|
||||
struct pvr_sampler_descriptor sampler_desc = sampler->descriptor;
|
||||
memcpy(desc_mapping, &sampler_desc, sizeof(sampler_desc));
|
||||
}
|
||||
|
||||
static void
|
||||
write_image_sampler(const struct pvr_descriptor_set *set,
|
||||
const VkDescriptorImageInfo *image_info,
|
||||
|
|
@ -532,6 +555,24 @@ write_input_attachment(const struct pvr_descriptor_set *set,
|
|||
memcpy(desc_mapping, &image_desc, sizeof(image_desc));
|
||||
}
|
||||
|
||||
static void
|
||||
write_sampled_image(const struct pvr_descriptor_set *set,
|
||||
const VkDescriptorImageInfo *image_info,
|
||||
const struct pvr_descriptor_set_layout_binding *binding,
|
||||
uint32_t elem,
|
||||
const struct pvr_device_info *dev_info)
|
||||
{
|
||||
PVR_FROM_HANDLE(pvr_image_view, image_view, image_info->imageView);
|
||||
|
||||
const unsigned desc_offset = binding->offset + (elem * binding->stride);
|
||||
void *desc_mapping = (uint8_t *)set->mapping + desc_offset;
|
||||
|
||||
struct pvr_image_descriptor sampled_image_desc =
|
||||
image_view->image_state[PVR_TEXTURE_STATE_SAMPLE];
|
||||
|
||||
memcpy(desc_mapping, &sampled_image_desc, sizeof(sampled_image_desc));
|
||||
}
|
||||
|
||||
static void
|
||||
write_storage_image(const struct pvr_descriptor_set *set,
|
||||
const VkDescriptorImageInfo *image_info,
|
||||
|
|
@ -629,6 +670,15 @@ void pvr_UpdateDescriptorSets(VkDevice _device,
|
|||
}
|
||||
break;
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
||||
for (uint32_t j = 0; j < write->descriptorCount; j++) {
|
||||
write_sampler(set,
|
||||
&write->pImageInfo[j],
|
||||
binding,
|
||||
write->dstArrayElement + j);
|
||||
}
|
||||
break;
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||
for (uint32_t j = 0; j < write->descriptorCount; j++) {
|
||||
write_image_sampler(set,
|
||||
|
|
@ -638,6 +688,16 @@ void pvr_UpdateDescriptorSets(VkDevice _device,
|
|||
}
|
||||
break;
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||
for (uint32_t j = 0; j < write->descriptorCount; j++) {
|
||||
write_sampled_image(set,
|
||||
&write->pImageInfo[j],
|
||||
binding,
|
||||
write->dstArrayElement + j,
|
||||
dev_info);
|
||||
}
|
||||
break;
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||
for (uint32_t j = 0; j < write->descriptorCount; j++) {
|
||||
write_storage_image(set,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue