vk/vulkan.h: Update to the new UpdateDescriptorSets api
This commit is contained in:
parent
c8577b5f52
commit
d29ec8fa36
|
@ -211,13 +211,10 @@ typedef enum {
|
|||
VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 43,
|
||||
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 44,
|
||||
VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 45,
|
||||
VK_STRUCTURE_TYPE_UPDATE_SAMPLERS = 46,
|
||||
VK_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES = 47,
|
||||
VK_STRUCTURE_TYPE_UPDATE_IMAGES = 48,
|
||||
VK_STRUCTURE_TYPE_UPDATE_BUFFERS = 49,
|
||||
VK_STRUCTURE_TYPE_UPDATE_AS_COPY = 50,
|
||||
VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 51,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 52,
|
||||
VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||
VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET,
|
||||
|
||||
VK_ENUM_RANGE(STRUCTURE_TYPE, APPLICATION_INFO, PIPELINE_LAYOUT_CREATE_INFO)
|
||||
} VkStructureType;
|
||||
|
@ -1584,6 +1581,36 @@ typedef struct {
|
|||
const VkDescriptorTypeCount* pTypeCount;
|
||||
} VkDescriptorPoolCreateInfo;
|
||||
|
||||
typedef struct {
|
||||
VkBufferView bufferView;
|
||||
VkSampler sampler;
|
||||
VkImageView imageView;
|
||||
VkImageLayout imageLayout;
|
||||
} VkDescriptorInfo;
|
||||
|
||||
typedef struct {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDescriptorSet destSet;
|
||||
uint32_t destBinding;
|
||||
uint32_t destArrayElement;
|
||||
uint32_t count;
|
||||
VkDescriptorType descriptorType;
|
||||
const VkDescriptorInfo* pDescriptors;
|
||||
} VkWriteDescriptorSet;
|
||||
|
||||
typedef struct {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDescriptorSet srcSet;
|
||||
uint32_t srcBinding;
|
||||
uint32_t srcArrayElement;
|
||||
VkDescriptorSet destSet;
|
||||
uint32_t destBinding;
|
||||
uint32_t destArrayElement;
|
||||
uint32_t count;
|
||||
} VkCopyDescriptorSet;
|
||||
|
||||
typedef struct {
|
||||
float originX;
|
||||
float originY;
|
||||
|
@ -1814,72 +1841,6 @@ typedef struct {
|
|||
VkMemoryInputFlags inputMask;
|
||||
} VkMemoryBarrier;
|
||||
|
||||
typedef struct {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkBufferView view;
|
||||
} VkBufferViewAttachInfo;
|
||||
|
||||
typedef struct {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkImageView view;
|
||||
VkImageLayout layout;
|
||||
} VkImageViewAttachInfo;
|
||||
|
||||
typedef struct {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t binding;
|
||||
uint32_t arrayIndex;
|
||||
uint32_t count;
|
||||
const VkSampler* pSamplers;
|
||||
} VkUpdateSamplers;
|
||||
|
||||
typedef struct {
|
||||
VkSampler sampler;
|
||||
const VkImageViewAttachInfo* pImageView;
|
||||
} VkSamplerImageViewInfo;
|
||||
|
||||
typedef struct {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t binding;
|
||||
uint32_t arrayIndex;
|
||||
uint32_t count;
|
||||
const VkSamplerImageViewInfo* pSamplerImageViews;
|
||||
} VkUpdateSamplerTextures;
|
||||
|
||||
typedef struct {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDescriptorType descriptorType;
|
||||
uint32_t binding;
|
||||
uint32_t arrayIndex;
|
||||
uint32_t count;
|
||||
const VkImageViewAttachInfo* pImageViews;
|
||||
} VkUpdateImages;
|
||||
|
||||
typedef struct {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDescriptorType descriptorType;
|
||||
uint32_t binding;
|
||||
uint32_t arrayIndex;
|
||||
uint32_t count;
|
||||
const VkBufferViewAttachInfo* pBufferViews;
|
||||
} VkUpdateBuffers;
|
||||
|
||||
typedef struct {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDescriptorType descriptorType;
|
||||
VkDescriptorSet descriptorSet;
|
||||
uint32_t binding;
|
||||
uint32_t arrayElement;
|
||||
uint32_t count;
|
||||
} VkUpdateAsCopy;
|
||||
|
||||
typedef struct {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
|
@ -1949,7 +1910,7 @@ typedef VkResult (VKAPI *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const
|
|||
typedef VkResult (VKAPI *PFN_vkCreateDescriptorPool)(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool);
|
||||
typedef VkResult (VKAPI *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool);
|
||||
typedef VkResult (VKAPI *PFN_vkAllocDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount);
|
||||
typedef void (VKAPI *PFN_vkUpdateDescriptors)(VkDevice device, VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray);
|
||||
typedef VkResult (VKAPI *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
|
||||
typedef VkResult (VKAPI *PFN_vkCreateDynamicViewportState)(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState);
|
||||
typedef VkResult (VKAPI *PFN_vkCreateDynamicRasterState)(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState);
|
||||
typedef VkResult (VKAPI *PFN_vkCreateDynamicColorBlendState)(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState);
|
||||
|
@ -2319,11 +2280,12 @@ VkResult VKAPI vkAllocDescriptorSets(
|
|||
VkDescriptorSet* pDescriptorSets,
|
||||
uint32_t* pCount);
|
||||
|
||||
void VKAPI vkUpdateDescriptors(
|
||||
VkResult VKAPI vkUpdateDescriptorSets(
|
||||
VkDevice device,
|
||||
VkDescriptorSet descriptorSet,
|
||||
uint32_t updateCount,
|
||||
const void** ppUpdateArray);
|
||||
uint32_t writeCount,
|
||||
const VkWriteDescriptorSet* pDescriptorWrites,
|
||||
uint32_t copyCount,
|
||||
const VkCopyDescriptorSet* pDescriptorCopies);
|
||||
|
||||
VkResult VKAPI vkCreateDynamicViewportState(
|
||||
VkDevice device,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue