diff options
| -rw-r--r-- | demos/cube.c | 171 | ||||
| -rw-r--r-- | demos/tri.c | 162 | ||||
| -rw-r--r-- | icd/nulldrv/nulldrv.c | 11 | ||||
| -rw-r--r-- | include/vulkan.h | 16 | ||||
| -rw-r--r-- | layers/glave_snapshot.c | 12 | ||||
| -rw-r--r-- | layers/mem_tracker.cpp | 8 | ||||
| -rw-r--r-- | layers/param_checker.cpp | 12 | ||||
| -rw-r--r-- | loader/trampoline.c | 12 | ||||
| -rwxr-xr-x | vulkan.py | 9 |
9 files changed, 142 insertions, 271 deletions
diff --git a/demos/cube.c b/demos/cube.c index 0d1ee872..91281d59 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -87,8 +87,7 @@ struct texture_object { VkImage image; VkImageLayout imageLayout; - uint32_t num_mem; - VkDeviceMemory *mem; + VkDeviceMemory mem; VkImageView view; int32_t tex_width, tex_height; }; @@ -309,8 +308,7 @@ struct demo { VkFormat format; VkImage image; - uint32_t num_mem; - VkDeviceMemory *mem; + VkDeviceMemory mem; VkDepthStencilView view; } depth; @@ -318,8 +316,7 @@ struct demo { struct { VkBuffer buf; - uint32_t num_mem; - VkDeviceMemory *mem; + VkDeviceMemory mem; VkBufferView view; VkBufferViewAttachInfo attach; } uniform_data; @@ -546,13 +543,12 @@ void demo_update_data_buffer(struct demo *demo) mat4x4_rotate(demo->model_matrix, Model, 0.0f, 1.0f, 0.0f, (float)degreesToRadians(demo->spin_angle)); mat4x4_mul(MVP, VP, demo->model_matrix); - assert(demo->uniform_data.num_mem == 1); - err = vkMapMemory(demo->device, demo->uniform_data.mem[0], 0, 0, 0, (void **) &pData); + err = vkMapMemory(demo->device, demo->uniform_data.mem, 0, 0, 0, (void **) &pData); assert(!err); memcpy(pData, (const void*) &MVP[0][0], matrixSize); - err = vkUnmapMemory(demo->device, demo->uniform_data.mem[0]); + err = vkUnmapMemory(demo->device, demo->uniform_data.mem); assert(!err); } @@ -667,11 +663,9 @@ static void demo_prepare_depth(struct demo *demo) .flags = 0, }; - VkMemoryRequirements *mem_reqs; + VkMemoryRequirements mem_reqs; size_t mem_reqs_size = sizeof(VkMemoryRequirements); VkResult U_ASSERT_ONLY err; - uint32_t num_allocations = 0; - size_t num_alloc_size = sizeof(num_allocations); demo->depth.format = depth_format; @@ -682,31 +676,19 @@ static void demo_prepare_depth(struct demo *demo) err = vkGetObjectInfo(demo->device, VK_OBJECT_TYPE_IMAGE, demo->depth.image, - VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT, - &num_alloc_size, &num_allocations); - assert(!err && num_alloc_size == sizeof(num_allocations)); - mem_reqs = malloc(num_allocations * sizeof(VkMemoryRequirements)); - demo->depth.mem = malloc(num_allocations * sizeof(VkDeviceMemory)); - demo->depth.num_mem = num_allocations; - err = vkGetObjectInfo(demo->device, - VK_OBJECT_TYPE_IMAGE, demo->depth.image, VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS, - &mem_reqs_size, mem_reqs); - assert(!err && mem_reqs_size == num_allocations * sizeof(VkMemoryRequirements)); - for (uint32_t i = 0; i < num_allocations; i ++) { - mem_alloc.allocationSize = mem_reqs[i].size; - - /* allocate memory */ - err = vkAllocMemory(demo->device, &mem_alloc, - &(demo->depth.mem[i])); - assert(!err); + &mem_reqs_size, &mem_reqs); + mem_alloc.allocationSize = mem_reqs.size; - /* bind memory */ - err = vkBindObjectMemory(demo->device, - VK_OBJECT_TYPE_IMAGE, demo->depth.image, - i, demo->depth.mem[i], 0); - assert(!err); - } + /* allocate memory */ + err = vkAllocMemory(demo->device, &mem_alloc, &demo->depth.mem); + assert(!err); + + /* bind memory */ + err = vkBindObjectMemory(demo->device, + VK_OBJECT_TYPE_IMAGE, demo->depth.image, + demo->depth.mem, 0); + assert(!err); demo_set_image_layout(demo, demo->depth.image, VK_IMAGE_LAYOUT_UNDEFINED, @@ -915,10 +897,8 @@ static void demo_prepare_texture_image(struct demo *demo, .memPriority = VK_MEMORY_PRIORITY_NORMAL, }; - VkMemoryRequirements *mem_reqs; + VkMemoryRequirements mem_reqs; size_t mem_reqs_size = sizeof(VkMemoryRequirements); - uint32_t num_allocations = 0; - size_t num_alloc_size = sizeof(num_allocations); err = vkCreateImage(demo->device, &image_create_info, &tex_obj->image); @@ -926,34 +906,22 @@ static void demo_prepare_texture_image(struct demo *demo, err = vkGetObjectInfo(demo->device, VK_OBJECT_TYPE_IMAGE, tex_obj->image, - VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT, - &num_alloc_size, &num_allocations); - assert(!err && num_alloc_size == sizeof(num_allocations)); - mem_reqs = malloc(num_allocations * sizeof(VkMemoryRequirements)); - tex_obj->mem = malloc(num_allocations * sizeof(VkDeviceMemory)); - err = vkGetObjectInfo(demo->device, - VK_OBJECT_TYPE_IMAGE, tex_obj->image, VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS, - &mem_reqs_size, mem_reqs); - assert(!err && mem_reqs_size == num_allocations * sizeof(VkMemoryRequirements)); - for (uint32_t j = 0; j < num_allocations; j ++) { - mem_alloc.allocationSize = mem_reqs[j].size; - - /* allocate memory */ - err = vkAllocMemory(demo->device, &mem_alloc, - &(tex_obj->mem[j])); - assert(!err); + &mem_reqs_size, &mem_reqs); + assert(!err && mem_reqs_size == sizeof(VkMemoryRequirements)); - /* bind memory */ - err = vkBindObjectMemory(demo->device, - VK_OBJECT_TYPE_IMAGE, tex_obj->image, - j, tex_obj->mem[j], 0); - assert(!err); - } - free(mem_reqs); - mem_reqs = NULL; + mem_alloc.allocationSize = mem_reqs.size; + + /* allocate memory */ + err = vkAllocMemory(demo->device, &mem_alloc, + &(tex_obj->mem)); + assert(!err); - tex_obj->num_mem = num_allocations; + /* bind memory */ + err = vkBindObjectMemory(demo->device, + VK_OBJECT_TYPE_IMAGE, tex_obj->image, + tex_obj->mem, 0); + assert(!err); if (mem_props & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) { const VkImageSubresource subres = { @@ -969,17 +937,15 @@ static void demo_prepare_texture_image(struct demo *demo, VK_SUBRESOURCE_INFO_TYPE_LAYOUT, &layout_size, &layout); assert(!err && layout_size == sizeof(layout)); - /* Linear texture must be within a single memory object */ - assert(num_allocations == 1); - err = vkMapMemory(demo->device, tex_obj->mem[0], 0, 0, 0, &data); + err = vkMapMemory(demo->device, tex_obj->mem, 0, 0, 0, &data); assert(!err); if (!loadTexture(filename, data, &layout, &tex_width, &tex_height)) { fprintf(stderr, "Error loading texture: %s\n", filename); } - err = vkUnmapMemory(demo->device, tex_obj->mem[0]); + err = vkUnmapMemory(demo->device, tex_obj->mem); assert(!err); } @@ -993,13 +959,10 @@ static void demo_prepare_texture_image(struct demo *demo, static void demo_destroy_texture_image(struct demo *demo, struct texture_object *tex_objs) { /* clean up staging resources */ - for (uint32_t j = 0; j < tex_objs->num_mem; j ++) { - vkBindObjectMemory(demo->device, - VK_OBJECT_TYPE_IMAGE, tex_objs->image, j, VK_NULL_HANDLE, 0); - vkFreeMemory(demo->device, tex_objs->mem[j]); - } + vkBindObjectMemory(demo->device, + VK_OBJECT_TYPE_IMAGE, tex_objs->image, VK_NULL_HANDLE, 0); + vkFreeMemory(demo->device, tex_objs->mem); - free(tex_objs->mem); vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, tex_objs->image); } @@ -1122,10 +1085,8 @@ void demo_prepare_cube_data_buffer(struct demo *demo) .memProps = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, .memPriority = VK_MEMORY_PRIORITY_NORMAL, }; - VkMemoryRequirements *mem_reqs; + VkMemoryRequirements mem_reqs; size_t mem_reqs_size = sizeof(VkMemoryRequirements); - uint32_t num_allocations = 0; - size_t num_alloc_size = sizeof(num_allocations); uint8_t *pData; int i; mat4x4 MVP, VP; @@ -1156,37 +1117,28 @@ void demo_prepare_cube_data_buffer(struct demo *demo) assert(!err); err = vkGetObjectInfo(demo->device, - VK_OBJECT_TYPE_BUFFER, demo->uniform_data.buf, - VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT, - &num_alloc_size, &num_allocations); - assert(!err && num_alloc_size == sizeof(num_allocations)); - mem_reqs = malloc(num_allocations * sizeof(VkMemoryRequirements)); - demo->uniform_data.mem = malloc(num_allocations * sizeof(VkDeviceMemory)); - demo->uniform_data.num_mem = num_allocations; - err = vkGetObjectInfo(demo->device, VK_OBJECT_TYPE_BUFFER, demo->uniform_data.buf, VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS, - &mem_reqs_size, mem_reqs); - assert(!err && mem_reqs_size == num_allocations * sizeof(*mem_reqs)); - for (uint32_t i = 0; i < num_allocations; i ++) { - alloc_info.allocationSize = mem_reqs[i].size; + &mem_reqs_size, &mem_reqs); + assert(!err && mem_reqs_size == sizeof(mem_reqs)); - err = vkAllocMemory(demo->device, &alloc_info, &(demo->uniform_data.mem[i])); - assert(!err); + alloc_info.allocationSize = mem_reqs.size; - err = vkMapMemory(demo->device, demo->uniform_data.mem[i], 0, 0, 0, (void **) &pData); - assert(!err); + err = vkAllocMemory(demo->device, &alloc_info, &(demo->uniform_data.mem)); + assert(!err); - memcpy(pData, &data, sizeof data); + err = vkMapMemory(demo->device, demo->uniform_data.mem, 0, 0, 0, (void **) &pData); + assert(!err); - err = vkUnmapMemory(demo->device, demo->uniform_data.mem[i]); - assert(!err); + memcpy(pData, &data, sizeof data); - err = vkBindObjectMemory(demo->device, - VK_OBJECT_TYPE_BUFFER, demo->uniform_data.buf, - i, demo->uniform_data.mem[i], 0); - assert(!err); - } + err = vkUnmapMemory(demo->device, demo->uniform_data.mem); + assert(!err); + + err = vkBindObjectMemory(demo->device, + VK_OBJECT_TYPE_BUFFER, demo->uniform_data.buf, + demo->uniform_data.mem, 0); + assert(!err); memset(&view_info, 0, sizeof(view_info)); view_info.sType = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO; @@ -2066,7 +2018,7 @@ static void demo_init(struct demo *demo, int argc, char **argv) static void demo_cleanup(struct demo *demo) { - uint32_t i, j; + uint32_t i; demo->prepared = false; @@ -2084,27 +2036,22 @@ static void demo_cleanup(struct demo *demo) for (i = 0; i < DEMO_TEXTURE_COUNT; i++) { vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE_VIEW, demo->textures[i].view); - vkBindObjectMemory(demo->device, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image, 0, VK_NULL_HANDLE, 0); + vkBindObjectMemory(demo->device, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image, VK_NULL_HANDLE, 0); vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image); - for (j = 0; j < demo->textures[i].num_mem; j++) - vkFreeMemory(demo->device, demo->textures[i].mem[j]); - free(demo->textures[i].mem); + vkFreeMemory(demo->device, demo->textures[i].mem); vkDestroyObject(demo->device, VK_OBJECT_TYPE_SAMPLER, demo->textures[i].sampler); } vkDestroySwapChainWSI(demo->swap_chain); vkDestroyObject(demo->device, VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW, demo->depth.view); - vkBindObjectMemory(demo->device, VK_OBJECT_TYPE_IMAGE, demo->depth.image, 0, VK_NULL_HANDLE, 0); + vkBindObjectMemory(demo->device, VK_OBJECT_TYPE_IMAGE, demo->depth.image, VK_NULL_HANDLE, 0); vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, demo->depth.image); - for (j = 0; j < demo->depth.num_mem; j++) { - vkFreeMemory(demo->device, demo->depth.mem[j]); - } + vkFreeMemory(demo->device, demo->depth.mem); vkDestroyObject(demo->device, VK_OBJECT_TYPE_BUFFER_VIEW, demo->uniform_data.view); - vkBindObjectMemory(demo->device, VK_OBJECT_TYPE_BUFFER, demo->uniform_data.buf, 0, VK_NULL_HANDLE, 0); + vkBindObjectMemory(demo->device, VK_OBJECT_TYPE_BUFFER, demo->uniform_data.buf, VK_NULL_HANDLE, 0); vkDestroyObject(demo->device, VK_OBJECT_TYPE_BUFFER, demo->uniform_data.buf); - for (j = 0; j < demo->uniform_data.num_mem; j++) - vkFreeMemory(demo->device, demo->uniform_data.mem[j]); + vkFreeMemory(demo->device, demo->uniform_data.mem); for (i = 0; i < DEMO_BUFFER_COUNT; i++) { vkDestroyObject(demo->device, VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW, demo->buffers[i].view); diff --git a/demos/tri.c b/demos/tri.c index b18434ca..df4c63b2 100644 --- a/demos/tri.c +++ b/demos/tri.c @@ -86,8 +86,7 @@ struct texture_object { VkImage image; VkImageLayout imageLayout; - uint32_t num_mem; - VkDeviceMemory *mem; + VkDeviceMemory mem; VkImageView view; int32_t tex_width, tex_height; }; @@ -132,8 +131,7 @@ struct demo { VkFormat format; VkImage image; - uint32_t num_mem; - VkDeviceMemory *mem; + VkDeviceMemory mem; VkDepthStencilView view; } depth; @@ -141,8 +139,7 @@ struct demo { struct { VkBuffer buf; - uint32_t num_mem; - VkDeviceMemory *mem; + VkDeviceMemory mem; VkPipelineVertexInputCreateInfo vi; VkVertexInputBindingDescription vi_bindings[1]; @@ -465,11 +462,9 @@ static void demo_prepare_depth(struct demo *demo) .flags = 0, }; - VkMemoryRequirements *mem_reqs; + VkMemoryRequirements mem_reqs; size_t mem_reqs_size = sizeof(VkMemoryRequirements); VkResult U_ASSERT_ONLY err; - uint32_t num_allocations = 0; - size_t num_alloc_size = sizeof(num_allocations); demo->depth.format = depth_format; @@ -480,31 +475,19 @@ static void demo_prepare_depth(struct demo *demo) err = vkGetObjectInfo(demo->device, VK_OBJECT_TYPE_IMAGE, demo->depth.image, - VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT, - &num_alloc_size, &num_allocations); - assert(!err && num_alloc_size == sizeof(num_allocations)); - mem_reqs = malloc(num_allocations * sizeof(VkMemoryRequirements)); - demo->depth.mem = malloc(num_allocations * sizeof(VkDeviceMemory)); - demo->depth.num_mem = num_allocations; - err = vkGetObjectInfo(demo->device, - VK_OBJECT_TYPE_IMAGE, demo->depth.image, VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS, - &mem_reqs_size, mem_reqs); - assert(!err && mem_reqs_size == num_allocations * sizeof(VkMemoryRequirements)); - for (uint32_t i = 0; i < num_allocations; i ++) { - mem_alloc.allocationSize = mem_reqs[i].size; - - /* allocate memory */ - err = vkAllocMemory(demo->device, &mem_alloc, - &(demo->depth.mem[i])); - assert(!err); + &mem_reqs_size, &mem_reqs); + mem_alloc.allocationSize = mem_reqs.size; - /* bind memory */ - err = vkBindObjectMemory(demo->device, - VK_OBJECT_TYPE_IMAGE, demo->depth.image, - i, demo->depth.mem[i], 0); - assert(!err); - } + /* allocate memory */ + err = vkAllocMemory(demo->device, &mem_alloc, &demo->depth.mem); + assert(!err); + + /* bind memory */ + err = vkBindObjectMemory(demo->device, + VK_OBJECT_TYPE_IMAGE, demo->depth.image, + demo->depth.mem, 0); + assert(!err); demo_set_image_layout(demo, demo->depth.image, VK_IMAGE_LAYOUT_UNDEFINED, @@ -553,10 +536,8 @@ static void demo_prepare_texture_image(struct demo *demo, .memPriority = VK_MEMORY_PRIORITY_NORMAL, }; - VkMemoryRequirements *mem_reqs; + VkMemoryRequirements mem_reqs; size_t mem_reqs_size = sizeof(VkMemoryRequirements); - uint32_t num_allocations = 0; - size_t num_alloc_size = sizeof(num_allocations); err = vkCreateImage(demo->device, &image_create_info, &tex_obj->image); @@ -564,34 +545,19 @@ static void demo_prepare_texture_image(struct demo *demo, err = vkGetObjectInfo(demo->device, VK_OBJECT_TYPE_IMAGE, tex_obj->image, - VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT, - &num_alloc_size, &num_allocations); - assert(!err && num_alloc_size == sizeof(num_allocations)); - mem_reqs = malloc(num_allocations * sizeof(VkMemoryRequirements)); - tex_obj->mem = malloc(num_allocations * sizeof(VkDeviceMemory)); - err = vkGetObjectInfo(demo->device, - VK_OBJECT_TYPE_IMAGE, tex_obj->image, VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS, - &mem_reqs_size, mem_reqs); - assert(!err && mem_reqs_size == num_allocations * sizeof(VkMemoryRequirements)); - for (uint32_t j = 0; j < num_allocations; j ++) { - mem_alloc.allocationSize = mem_reqs[j].size; - - /* allocate memory */ - err = vkAllocMemory(demo->device, &mem_alloc, - &(tex_obj->mem[j])); - assert(!err); + &mem_reqs_size, &mem_reqs); + mem_alloc.allocationSize = mem_reqs.size; - /* bind memory */ - err = vkBindObjectMemory(demo->device, - VK_OBJECT_TYPE_IMAGE, tex_obj->image, - j, tex_obj->mem[j], 0); - assert(!err); - } - free(mem_reqs); - mem_reqs = NULL; + /* allocate memory */ + err = vkAllocMemory(demo->device, &mem_alloc, &tex_obj->mem); + assert(!err); - tex_obj->num_mem = num_allocations; + /* bind memory */ + err = vkBindObjectMemory(demo->device, + VK_OBJECT_TYPE_IMAGE, tex_obj->image, + tex_obj->mem, 0); + assert(!err); if (mem_props & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) { const VkImageSubresource subres = { @@ -608,10 +574,8 @@ static void demo_prepare_texture_image(struct demo *demo, VK_SUBRESOURCE_INFO_TYPE_LAYOUT, &layout_size, &layout); assert(!err && layout_size == sizeof(layout)); - /* Linear texture must be within a single memory object */ - assert(num_allocations == 1); - err = vkMapMemory(demo->device, tex_obj->mem[0], 0, 0, 0, &data); + err = vkMapMemory(demo->device, tex_obj->mem, 0, 0, 0, &data); assert(!err); for (y = 0; y < tex_height; y++) { @@ -620,7 +584,7 @@ static void demo_prepare_texture_image(struct demo *demo, row[x] = tex_colors[(x & 1) ^ (y & 1)]; } - err = vkUnmapMemory(demo->device, tex_obj->mem[0]); + err = vkUnmapMemory(demo->device, tex_obj->mem); assert(!err); } @@ -634,13 +598,10 @@ static void demo_prepare_texture_image(struct demo *demo, static void demo_destroy_texture_image(struct demo *demo, struct texture_object *tex_obj) { /* clean up staging resources */ - for (uint32_t j = 0; j < tex_obj->num_mem; j ++) { - vkBindObjectMemory(demo->device, - VK_OBJECT_TYPE_IMAGE, tex_obj->image, j, VK_NULL_HANDLE, 0); - vkFreeMemory(demo->device, tex_obj->mem[j]); - } + vkBindObjectMemory(demo->device, + VK_OBJECT_TYPE_IMAGE, tex_obj->image, VK_NULL_HANDLE, 0); + vkFreeMemory(demo->device, tex_obj->mem); - free(tex_obj->mem); vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, tex_obj->image); } @@ -775,10 +736,8 @@ static void demo_prepare_vertices(struct demo *demo) .memProps = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, .memPriority = VK_MEMORY_PRIORITY_NORMAL, }; - VkMemoryRequirements *mem_reqs; + VkMemoryRequirements mem_reqs; size_t mem_reqs_size = sizeof(VkMemoryRequirements); - uint32_t num_allocations = 0; - size_t num_alloc_size = sizeof(num_allocations); VkResult U_ASSERT_ONLY err; void *data; @@ -788,37 +747,27 @@ static void demo_prepare_vertices(struct demo *demo) assert(!err); err = vkGetObjectInfo(demo->device, - VK_OBJECT_TYPE_BUFFER, demo->vertices.buf, - VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT, - &num_alloc_size, &num_allocations); - assert(!err && num_alloc_size == sizeof(num_allocations)); - mem_reqs = malloc(num_allocations * sizeof(VkMemoryRequirements)); - demo->vertices.mem = malloc(num_allocations * sizeof(VkDeviceMemory)); - demo->vertices.num_mem = num_allocations; - err = vkGetObjectInfo(demo->device, VK_OBJECT_TYPE_BUFFER, demo->vertices.buf, VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS, - &mem_reqs_size, mem_reqs); - assert(!err && mem_reqs_size == sizeof(*mem_reqs)); - for (uint32_t i = 0; i < num_allocations; i ++) { - mem_alloc.allocationSize = mem_reqs[i].size; + &mem_reqs_size, &mem_reqs); - err = vkAllocMemory(demo->device, &mem_alloc, &demo->vertices.mem[i]); - assert(!err); + mem_alloc.allocationSize = mem_reqs.size; - err = vkMapMemory(demo->device, demo->vertices.mem[i], 0, 0, 0, &data); - assert(!err); + err = vkAllocMemory(demo->device, &mem_alloc, &demo->vertices.mem); + assert(!err); - memcpy(data, vb, sizeof(vb)); + err = vkMapMemory(demo->device, demo->vertices.mem, 0, 0, 0, &data); + assert(!err); - err = vkUnmapMemory(demo->device, demo->vertices.mem[i]); - assert(!err); + memcpy(data, vb, sizeof(vb)); - err = vkBindObjectMemory(demo->device, - VK_OBJECT_TYPE_BUFFER, demo->vertices.buf, - i, demo->vertices.mem[i], 0); - assert(!err); - } + err = vkUnmapMemory(demo->device, demo->vertices.mem); + assert(!err); + + err = vkBindObjectMemory(demo->device, + VK_OBJECT_TYPE_BUFFER, demo->vertices.buf, + demo->vertices.mem, 0); + assert(!err); demo->vertices.vi.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO; demo->vertices.vi.pNext = NULL; @@ -1563,7 +1512,7 @@ static void demo_init(struct demo *demo, const int argc, const char *argv[]) static void demo_cleanup(struct demo *demo) { - uint32_t i, j; + uint32_t i; vkDestroyObject(demo->device, VK_OBJECT_TYPE_DESCRIPTOR_SET, demo->desc_set); vkDestroyObject(demo->device, VK_OBJECT_TYPE_DESCRIPTOR_POOL, demo->desc_pool); @@ -1582,27 +1531,22 @@ static void demo_cleanup(struct demo *demo) vkDestroyObject(demo->device, VK_OBJECT_TYPE_PIPELINE_LAYOUT, demo->pipeline_layout); vkDestroyObject(demo->device, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, demo->desc_layout); - vkBindObjectMemory(demo->device, VK_OBJECT_TYPE_BUFFER, demo->vertices.buf, 0, VK_NULL_HANDLE, 0); + vkBindObjectMemory(demo->device, VK_OBJECT_TYPE_BUFFER, demo->vertices.buf, VK_NULL_HANDLE, 0); vkDestroyObject(demo->device, VK_OBJECT_TYPE_BUFFER, demo->vertices.buf); - for (j = 0; j < demo->vertices.num_mem; j++) - vkFreeMemory(demo->device, demo->vertices.mem[j]); + vkFreeMemory(demo->device, demo->vertices.mem); for (i = 0; i < DEMO_TEXTURE_COUNT; i++) { vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE_VIEW, demo->textures[i].view); - vkBindObjectMemory(demo->device, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image, 0, VK_NULL_HANDLE, 0); + vkBindObjectMemory(demo->device, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image, VK_NULL_HANDLE, 0); vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image); - for (j = 0; j < demo->textures[i].num_mem; j++) - vkFreeMemory(demo->device, demo->textures[i].mem[j]); - free(demo->textures[i].mem); + vkFreeMemory(demo->device, demo->textures[i].mem); vkDestroyObject(demo->device, VK_OBJECT_TYPE_SAMPLER, demo->textures[i].sampler); } vkDestroyObject(demo->device, VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW, demo->depth.view); - vkBindObjectMemory(demo->device, VK_OBJECT_TYPE_IMAGE, demo->depth.image, 0, VK_NULL_HANDLE, 0); + vkBindObjectMemory(demo->device, VK_OBJECT_TYPE_IMAGE, demo->depth.image, VK_NULL_HANDLE, 0); vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, demo->depth.image); - for (j = 0; j < demo->depth.num_mem; j++) { - vkFreeMemory(demo->device, demo->depth.mem[j]); - } + vkFreeMemory(demo->device, demo->depth.mem); for (i = 0; i < DEMO_BUFFER_COUNT; i++) { vkDestroyObject(demo->device, VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW, demo->buffers[i].view); diff --git a/icd/nulldrv/nulldrv.c b/icd/nulldrv/nulldrv.c index 99596416..6da37fa2 100644 --- a/icd/nulldrv/nulldrv.c +++ b/icd/nulldrv/nulldrv.c @@ -53,7 +53,6 @@ static VkResult nulldrv_base_get_info(struct nulldrv_base *base, int type, { VkResult ret = VK_SUCCESS; size_t s; - uint32_t *count; switch (type) { case VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS: @@ -65,13 +64,6 @@ static VkResult nulldrv_base_get_info(struct nulldrv_base *base, int type, memset(data, 0, s); break; } - case VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT: - *size = sizeof(uint32_t); - if (data == NULL) - return ret; - count = (uint32_t *) data; - *count = 1; - break; default: ret = VK_ERROR_INVALID_VALUE; break; @@ -1891,7 +1883,6 @@ ICD_EXPORT VkResult VKAPI vkBindObjectMemory( VkDevice device, VkObjectType objType, VkObject object, - uint32_t allocationIdx, VkDeviceMemory mem_, VkDeviceSize memOffset) { @@ -1902,7 +1893,6 @@ ICD_EXPORT VkResult VKAPI vkBindObjectMemory( ICD_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory( VkQueue queue, VkBuffer buffer, - uint32_t allocationIdx, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, @@ -1915,7 +1905,6 @@ ICD_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory( ICD_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory( VkQueue queue, VkImage image, - uint32_t allocationIdx, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset) diff --git a/include/vulkan.h b/include/vulkan.h index 53029f52..36cca755 100644 --- a/include/vulkan.h +++ b/include/vulkan.h @@ -33,7 +33,7 @@ #include "vk_platform.h" // Vulkan API version supported by this file -#define VK_API_VERSION VK_MAKE_VERSION(0, 96, 0) +#define VK_API_VERSION VK_MAKE_VERSION(0, 97, 0) #ifdef __cplusplus extern "C" @@ -591,10 +591,9 @@ typedef enum VkSubresourceInfoType_ typedef enum VkObjectInfoType_ { // Info type for vkGetObjectInfo() - VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT = 0x00000000, - VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS = 0x00000001, + VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS = 0x00000000, - VK_ENUM_RANGE(OBJECT_INFO_TYPE, MEMORY_ALLOCATION_COUNT, MEMORY_REQUIREMENTS) + VK_ENUM_RANGE(OBJECT_INFO_TYPE, MEMORY_REQUIREMENTS, MEMORY_REQUIREMENTS) } VkObjectInfoType; typedef enum VkVertexInputStepRate_ @@ -2161,9 +2160,9 @@ typedef VkResult (VKAPI *PFN_vkOpenPeerMemory)(VkDevice device, const VkPeerMemo typedef VkResult (VKAPI *PFN_vkOpenPeerImage)(VkDevice device, const VkPeerImageOpenInfo* pOpenInfo, VkImage* pImage, VkDeviceMemory* pMem); typedef VkResult (VKAPI *PFN_vkDestroyObject)(VkDevice device, VkObjectType objType, VkObject object); typedef VkResult (VKAPI *PFN_vkGetObjectInfo)(VkDevice device, VkObjectType objType, VkObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData); -typedef VkResult (VKAPI *PFN_vkBindObjectMemory)(VkDevice device, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkDeviceMemory mem, VkDeviceSize offset); -typedef VkResult (VKAPI *PFN_vkQueueBindSparseBufferMemory)(VkQueue queue, VkBuffer buffer, uint32_t allocationIdx, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset); -typedef VkResult (VKAPI *PFN_vkQueueBindSparseImageMemory)(VkQueue queue, VkImage image, uint32_t allocationIdx, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset); +typedef VkResult (VKAPI *PFN_vkBindObjectMemory)(VkDevice device, VkObjectType objType, VkObject object, VkDeviceMemory mem, VkDeviceSize offset); +typedef VkResult (VKAPI *PFN_vkQueueBindSparseBufferMemory)(VkQueue queue, VkBuffer buffer, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset); +typedef VkResult (VKAPI *PFN_vkQueueBindSparseImageMemory)(VkQueue queue, VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset); typedef VkResult (VKAPI *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence); typedef VkResult (VKAPI *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, VkFence* pFences); typedef VkResult (VKAPI *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence); @@ -2424,14 +2423,12 @@ VkResult VKAPI vkBindObjectMemory( VkDevice device, VkObjectType objType, VkObject object, - uint32_t allocationIdx, VkDeviceMemory mem, VkDeviceSize memOffset); VkResult VKAPI vkQueueBindSparseBufferMemory( VkQueue queue, VkBuffer buffer, - uint32_t allocationIdx, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, @@ -2440,7 +2437,6 @@ VkResult VKAPI vkQueueBindSparseBufferMemory( VkResult VKAPI vkQueueBindSparseImageMemory( VkQueue queue, VkImage image, - uint32_t allocationIdx, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset); diff --git a/layers/glave_snapshot.c b/layers/glave_snapshot.c index 120656d6..150821a9 100644 --- a/layers/glave_snapshot.c +++ b/layers/glave_snapshot.c @@ -723,30 +723,30 @@ VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkDevice device, VkObjectType obj return result; } -VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory(VkQueue queue, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkGpuMemory mem, VkGpuSize offset) +VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory(VkQueue queue, VkObjectType objType, VkObject object, VkGpuMemory mem, VkGpuSize offset) { loader_platform_thread_lock_mutex(&objLock); ll_increment_use_count((void*)object, ll_get_obj_type(object)); loader_platform_thread_unlock_mutex(&objLock); - VkResult result = nextTable.BindObjectMemory(queue, objType, object, allocationIdx, mem, offset); + VkResult result = nextTable.BindObjectMemory(queue, objType, object, mem, offset); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemoryRange(VkQueue queue, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkGpuSize rangeOffset, VkGpuSize rangeSize, VkGpuMemory mem, VkGpuSize memOffset) +VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemoryRange(VkQueue queue, VkObjectType objType, VkObject object, VkGpuSize rangeOffset, VkGpuSize rangeSize, VkGpuMemory mem, VkGpuSize memOffset) { loader_platform_thread_lock_mutex(&objLock); ll_increment_use_count((void*)object, ll_get_obj_type(object)); loader_platform_thread_unlock_mutex(&objLock); - VkResult result = nextTable.BindObjectMemoryRange(queue, objType, object, allocationIdx, rangeOffset, rangeSize, mem, memOffset); + VkResult result = nextTable.BindObjectMemoryRange(queue, objType, object, rangeOffset, rangeSize, mem, memOffset); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemoryRange(VkImage image, uint32_t allocationIdx, const VkImageMemoryBindInfo* pBindInfo, VkGpuMemory mem, VkGpuSize memOffset) +VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemoryRange(VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkGpuMemory mem, VkGpuSize memOffset) { loader_platform_thread_lock_mutex(&objLock); ll_increment_use_count((void*)image, VK_OBJECT_TYPE_IMAGE); loader_platform_thread_unlock_mutex(&objLock); - VkResult result = nextTable.BindImageMemoryRange(image, allocationIdx, pBindInfo, mem, memOffset); + VkResult result = nextTable.BindImageMemoryRange(image, pBindInfo, mem, memOffset); return result; } diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index 8635aeee..bbdb4f5d 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -608,7 +608,7 @@ static bool32_t clearObjectBinding( sprintf(str, "Attempting to clear mem binding for object %p: devices, queues, command buffers, " "shaders and memory objects do not have external memory requirements and it is " "unneccessary to call bind/unbindObjectMemory on them.", object); - layerCbMsg(VK_DBG_MSG_WARNING, VK_VALIDATION_LEVEL_0, object, 0, MEMTRACK_INVALID_OBJECT, "MEM", str); + layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, object, 0, MEMTRACK_INVALID_OBJECT, "MEM", str); } else { if (!pObjInfo->pMemObjInfo || pObjInfo->pMemObjInfo->pObjBindings.size() <= 0) { char str[1024]; @@ -1214,11 +1214,10 @@ VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory( VkDevice device, VkObjectType objType, VkObject object, - uint32_t allocationIdx, VkDeviceMemory mem, VkDeviceSize offset) { - VkResult result = nextTable.BindObjectMemory(device, objType, object, allocationIdx, mem, offset); + VkResult result = nextTable.BindObjectMemory(device, objType, object, mem, offset); loader_platform_thread_lock_mutex(&globalLock); // Track objects tied to memory if (VK_FALSE == updateObjectBinding(object, mem)) { @@ -1235,13 +1234,12 @@ VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory( VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory( VkQueue queue, VkBuffer buffer, - uint32_t allocationIdx, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset) { - VkResult result = nextTable.QueueBindSparseBufferMemory(queue, buffer, allocationIdx, rangeOffset, rangeSize, mem, memOffset); + VkResult result = nextTable.QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset); loader_platform_thread_lock_mutex(&globalLock); // Track objects tied to memory if (VK_FALSE == updateObjectBinding(buffer, mem)) { diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp index 32ca5425..7e12283a 100644 --- a/layers/param_checker.cpp +++ b/layers/param_checker.cpp @@ -516,21 +516,21 @@ VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkDevice device, VkObjectType obj return result; } -VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory(VkDevice device, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkDeviceMemory mem, VkDeviceSize offset) +VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory(VkDevice device, VkObjectType objType, VkObject object, VkDeviceMemory mem, VkDeviceSize offset) { - VkResult result = nextTable.BindObjectMemory(device, objType, object, allocationIdx, mem, offset); + VkResult result = nextTable.BindObjectMemory(device, objType, object, mem, offset); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t allocationIdx, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset) +VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset) { - VkResult result = nextTable.QueueBindSparseBufferMemory(queue, buffer, allocationIdx, rangeOffset, rangeSize, mem, memOffset); + VkResult result = nextTable.QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset); return result; } -VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t allocationIdx, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset) +VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset) { char str[1024]; if (!pBindInfo) { @@ -541,7 +541,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkIma sprintf(str, "Parameter pBindInfo to function BindImageMemoryRange contains an invalid value."); layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str); } - VkResult result = nextTable.QueueBindSparseImageMemory(queue, image, allocationIdx, pBindInfo, mem, memOffset); + VkResult result = nextTable.QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset); return result; } diff --git a/loader/trampoline.c b/loader/trampoline.c index 30982c7a..136fe1ae 100644 --- a/loader/trampoline.c +++ b/loader/trampoline.c @@ -260,31 +260,31 @@ LOADER_EXPORT VkResult VKAPI vkGetObjectInfo(VkDevice device, VkObjectType objTy return disp->GetObjectInfo(device, objType, object, infoType, pDataSize, pData); } -LOADER_EXPORT VkResult VKAPI vkBindObjectMemory(VkDevice device, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkDeviceMemory mem, VkDeviceSize offset) +LOADER_EXPORT VkResult VKAPI vkBindObjectMemory(VkDevice device, VkObjectType objType, VkObject object, VkDeviceMemory mem, VkDeviceSize offset) { const VkLayerDispatchTable *disp; disp = loader_get_dispatch(device); - return disp->BindObjectMemory(device, objType, object, allocationIdx, mem, offset); + return disp->BindObjectMemory(device, objType, object, mem, offset); } -LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t allocationIdx, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset) +LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset) { const VkLayerDispatchTable *disp; disp = loader_get_dispatch(queue); - return disp->QueueBindSparseBufferMemory(queue, buffer, allocationIdx, rangeOffset, rangeSize, mem, memOffset); + return disp->QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset); } -LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t allocationIdx, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset) +LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset) { const VkLayerDispatchTable *disp; disp = loader_get_dispatch(queue); - return disp->QueueBindSparseImageMemory(queue, image, allocationIdx, pBindInfo, mem, memOffset); + return disp->QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset); } LOADER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence) @@ -359,12 +359,12 @@ core = Extension( Proto("VkResult", "DestroyObject", [Param("VkDevice", "device"), - Param("VkObjectType", "objType"), + Param("VkObjectType", "objType"), Param("VkObject", "object")]), Proto("VkResult", "GetObjectInfo", [Param("VkDevice", "device"), - Param("VkObjectType", "objType"), + Param("VkObjectType", "objType"), Param("VkObject", "object"), Param("VkObjectInfoType", "infoType"), Param("size_t*", "pDataSize"), @@ -372,16 +372,14 @@ core = Extension( Proto("VkResult", "BindObjectMemory", [Param("VkDevice", "device"), - Param("VkObjectType", "objType"), + Param("VkObjectType", "objType"), Param("VkObject", "object"), - Param("uint32_t", "allocationIdx"), Param("VkDeviceMemory", "mem"), Param("VkDeviceSize", "offset")]), Proto("VkResult", "QueueBindSparseBufferMemory", [Param("VkQueue", "queue"), Param("VkBuffer", "buffer"), - Param("uint32_t", "allocationIdx"), Param("VkDeviceSize", "rangeOffset"), Param("VkDeviceSize", "rangeSize"), Param("VkDeviceMemory", "mem"), @@ -390,7 +388,6 @@ core = Extension( Proto("VkResult", "QueueBindSparseImageMemory", [Param("VkQueue", "queue"), Param("VkImage", "image"), - Param("uint32_t", "allocationIdx"), Param("const VkImageMemoryBindInfo*", "pBindInfo"), Param("VkDeviceMemory", "mem"), Param("VkDeviceSize", "memOffset")]), |
