From 609c6c84318e264fdb6c9e7d5997cc1bae16d707 Mon Sep 17 00:00:00 2001 From: Courtney Goeltzenleuchter Date: Fri, 11 Sep 2015 15:29:21 -0600 Subject: Bug 14583: Remove VkBufferView for UBO/SSBO descriptor types For descriptor types: VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER VK_DESCRIPTOR_TYPE_STORAGE_BUFFER VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC No longer need to create a VkBufferView, instead can put the buffer, offset and range directly into a descriptor. Many places in the driver assumed it could point to a persistent buffer view and that is no longer the case. Now cache the view info rather than a pointer to deal with that. --- demos/cube.c | 17 +++-------------- include/vulkan.h | 7 +++++++ 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/demos/cube.c b/demos/cube.c index 8f8390cd..13565d34 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -363,7 +363,6 @@ struct demo { struct { VkBuffer buf; VkDeviceMemory mem; - VkBufferView view; VkDescriptorInfo desc; } uniform_data; @@ -1259,7 +1258,6 @@ static void demo_prepare_textures(struct demo *demo) void demo_prepare_cube_data_buffer(struct demo *demo) { VkBufferCreateInfo buf_info; - VkBufferViewCreateInfo view_info; VkMemoryAllocInfo alloc_info = { .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO, .pNext = NULL, @@ -1321,17 +1319,9 @@ void demo_prepare_cube_data_buffer(struct demo *demo) demo->uniform_data.mem, 0); assert(!err); - memset(&view_info, 0, sizeof(view_info)); - view_info.sType = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO; - view_info.buffer = demo->uniform_data.buf; - view_info.viewType = VK_BUFFER_VIEW_TYPE_RAW; - view_info.offset = 0; - view_info.range = sizeof(data); - - err = vkCreateBufferView(demo->device, &view_info, &demo->uniform_data.view); - assert(!err); - - demo->uniform_data.desc.bufferView = demo->uniform_data.view; + demo->uniform_data.desc.shaderBuffer.buffer = demo->uniform_data.buf; + demo->uniform_data.desc.shaderBuffer.offset = 0; + demo->uniform_data.desc.shaderBuffer.range = sizeof(data); } static void demo_prepare_descriptor_layout(struct demo *demo) @@ -1952,7 +1942,6 @@ static void demo_cleanup(struct demo *demo) vkDestroyImage(demo->device, demo->depth.image); vkFreeMemory(demo->device, demo->depth.mem); - vkDestroyBufferView(demo->device, demo->uniform_data.view); vkDestroyBuffer(demo->device, demo->uniform_data.buf); vkFreeMemory(demo->device, demo->uniform_data.mem); diff --git a/include/vulkan.h b/include/vulkan.h index 15e96c15..c031488d 100644 --- a/include/vulkan.h +++ b/include/vulkan.h @@ -1778,11 +1778,18 @@ typedef struct { const VkDescriptorTypeCount* pTypeCount; } VkDescriptorPoolCreateInfo; +typedef struct { + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize range; +} VkShaderBufferInfo; + typedef struct { VkBufferView bufferView; VkSampler sampler; VkImageView imageView; VkImageLayout imageLayout; + VkShaderBufferInfo shaderBuffer; } VkDescriptorInfo; typedef struct { -- cgit v1.2.3