aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCourtney Goeltzenleuchter <courtney@LunarG.com>2015-09-11 15:29:21 -0600
committerCourtney Goeltzenleuchter <courtney@LunarG.com>2015-09-15 10:16:02 -0600
commit609c6c84318e264fdb6c9e7d5997cc1bae16d707 (patch)
tree782ef1a24eb807a6dc227b73e64c929b4de47d10
parentc6bc61de8e7088ed3b97ae3258f038129d831432 (diff)
downloadusermoji-609c6c84318e264fdb6c9e7d5997cc1bae16d707.tar.xz
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.
-rw-r--r--demos/cube.c17
-rw-r--r--include/vulkan.h7
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
@@ -1779,10 +1779,17 @@ typedef struct {
} 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 {