vk/vulkan.h: Update to the new UpdateDescriptorSets api

This commit is contained in:
Jason Ekstrand
2015-07-08 14:24:56 -07:00
parent c8577b5f52
commit d29ec8fa36
3 changed files with 100 additions and 142 deletions
+48 -54
View File
@@ -1756,74 +1756,68 @@ VkResult anv_AllocDescriptorSets(
return VK_SUCCESS;
}
void anv_UpdateDescriptors(
VkDevice _device,
VkDescriptorSet descriptorSet,
uint32_t updateCount,
const void** ppUpdateArray)
VkResult anv_UpdateDescriptorSets(
VkDevice device,
uint32_t writeCount,
const VkWriteDescriptorSet* pDescriptorWrites,
uint32_t copyCount,
const VkCopyDescriptorSet* pDescriptorCopies)
{
struct anv_descriptor_set *set = (struct anv_descriptor_set *) descriptorSet;
VkUpdateSamplers *update_samplers;
VkUpdateSamplerTextures *update_sampler_textures;
VkUpdateImages *update_images;
VkUpdateBuffers *update_buffers;
VkUpdateAsCopy *update_as_copy;
for (uint32_t i = 0; i < writeCount; i++) {
const VkWriteDescriptorSet *write = &pDescriptorWrites[i];
ANV_FROM_HANDLE(anv_descriptor_set, set, write->destSet);
for (uint32_t i = 0; i < updateCount; i++) {
const struct anv_common *common = ppUpdateArray[i];
switch (write->descriptorType) {
case VK_DESCRIPTOR_TYPE_SAMPLER:
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
for (uint32_t j = 0; j < write->count; j++) {
set->descriptors[write->destBinding + j].sampler =
(struct anv_sampler *) write->pDescriptors[j].sampler;
}
switch (common->sType) {
case VK_STRUCTURE_TYPE_UPDATE_SAMPLERS:
update_samplers = (VkUpdateSamplers *) common;
if (write->descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER)
break;
for (uint32_t j = 0; j < update_samplers->count; j++) {
set->descriptors[update_samplers->binding + j].sampler =
(struct anv_sampler *) update_samplers->pSamplers[j];
/* fallthrough */
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
for (uint32_t j = 0; j < write->count; j++) {
set->descriptors[write->destBinding + j].view =
(struct anv_surface_view *) write->pDescriptors[j].imageView;
}
break;
case VK_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES:
/* FIXME: Shouldn't this be *_UPDATE_SAMPLER_IMAGES? */
update_sampler_textures = (VkUpdateSamplerTextures *) common;
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
anv_finishme("texel buffers not implemented");
break;
for (uint32_t j = 0; j < update_sampler_textures->count; j++) {
set->descriptors[update_sampler_textures->binding + j].view =
(struct anv_surface_view *)
update_sampler_textures->pSamplerImageViews[j].pImageView->view;
set->descriptors[update_sampler_textures->binding + j].sampler =
(struct anv_sampler *)
update_sampler_textures->pSamplerImageViews[j].sampler;
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
for (uint32_t j = 0; j < write->count; j++) {
set->descriptors[write->destBinding + j].view =
(struct anv_surface_view *) write->pDescriptors[j].bufferView;
}
break;
case VK_STRUCTURE_TYPE_UPDATE_IMAGES:
update_images = (VkUpdateImages *) common;
for (uint32_t j = 0; j < update_images->count; j++) {
set->descriptors[update_images->binding + j].view =
(struct anv_surface_view *) update_images->pImageViews[j].view;
}
break;
case VK_STRUCTURE_TYPE_UPDATE_BUFFERS:
update_buffers = (VkUpdateBuffers *) common;
for (uint32_t j = 0; j < update_buffers->count; j++) {
set->descriptors[update_buffers->binding + j].view =
(struct anv_surface_view *) update_buffers->pBufferViews[j].view;
}
/* FIXME: descriptor arrays? */
break;
case VK_STRUCTURE_TYPE_UPDATE_AS_COPY:
update_as_copy = (VkUpdateAsCopy *) common;
(void) update_as_copy;
break;
default:
break;
}
}
for (uint32_t i = 0; i < copyCount; i++) {
const VkCopyDescriptorSet *copy = &pDescriptorCopies[i];
ANV_FROM_HANDLE(anv_descriptor_set, src, copy->destSet);
ANV_FROM_HANDLE(anv_descriptor_set, dest, copy->destSet);
for (uint32_t j = 0; j < copy->count; j++) {
dest->descriptors[copy->destBinding + j] =
src->descriptors[copy->srcBinding + j];
}
}
return VK_SUCCESS;
}
// State object functions
+14 -12
View File
@@ -578,22 +578,24 @@ meta_emit_blit(struct anv_cmd_buffer *cmd_buffer,
anv_AllocDescriptorSets((VkDevice) device, 0 /* pool */,
VK_DESCRIPTOR_SET_USAGE_ONE_SHOT,
1, &device->meta_state.blit.ds_layout, &set, &count);
anv_UpdateDescriptors((VkDevice) device, set, 1,
(const void * []) {
&(VkUpdateImages) {
.sType = VK_STRUCTURE_TYPE_UPDATE_IMAGES,
.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
.binding = 0,
anv_UpdateDescriptorSets((VkDevice) device,
1, /* writeCount */
(VkWriteDescriptorSet[]) {
{
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
.destSet = set,
.destBinding = 0,
.destArrayElement = 0,
.count = 1,
.pImageViews = (VkImageViewAttachInfo[]) {
.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
.pDescriptors = (VkDescriptorInfo[]) {
{
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_ATTACH_INFO,
.view = (VkImageView) src,
.layout = VK_IMAGE_LAYOUT_GENERAL,
}
.imageView = (VkImageView) src,
.imageLayout = VK_IMAGE_LAYOUT_GENERAL
},
}
}
});
}, 0, NULL);
struct anv_framebuffer *fb;
anv_CreateFramebuffer((VkDevice) device,