mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 17:40:11 +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:
|
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||||
return sizeof(struct pvr_buffer_descriptor);
|
return sizeof(struct pvr_buffer_descriptor);
|
||||||
|
|
||||||
|
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
||||||
|
return sizeof(struct pvr_sampler_descriptor);
|
||||||
|
|
||||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||||
return sizeof(struct pvr_combined_image_sampler_descriptor);
|
return sizeof(struct pvr_combined_image_sampler_descriptor);
|
||||||
|
|
||||||
|
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||||
case VK_DESCRIPTOR_TYPE_STORAGE_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));
|
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
|
static void
|
||||||
write_image_sampler(const struct pvr_descriptor_set *set,
|
write_image_sampler(const struct pvr_descriptor_set *set,
|
||||||
const VkDescriptorImageInfo *image_info,
|
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));
|
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
|
static void
|
||||||
write_storage_image(const struct pvr_descriptor_set *set,
|
write_storage_image(const struct pvr_descriptor_set *set,
|
||||||
const VkDescriptorImageInfo *image_info,
|
const VkDescriptorImageInfo *image_info,
|
||||||
|
|
@ -629,6 +670,15 @@ void pvr_UpdateDescriptorSets(VkDevice _device,
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||||
for (uint32_t j = 0; j < write->descriptorCount; j++) {
|
for (uint32_t j = 0; j < write->descriptorCount; j++) {
|
||||||
write_image_sampler(set,
|
write_image_sampler(set,
|
||||||
|
|
@ -638,6 +688,16 @@ void pvr_UpdateDescriptorSets(VkDevice _device,
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||||
for (uint32_t j = 0; j < write->descriptorCount; j++) {
|
for (uint32_t j = 0; j < write->descriptorCount; j++) {
|
||||||
write_storage_image(set,
|
write_storage_image(set,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue