vulkan.h: V97 -- Remove multiple allocations. Bug# 13948.
authorMark Lobodzinski <mark@lunarg.com>
Fri, 29 May 2015 14:32:35 +0000 (09:32 -0500)
committerMark Lobodzinski <mark@lunarg.com>
Tue, 2 Jun 2015 14:03:26 +0000 (09:03 -0500)
Remove multiple memory allocation requirements from API, and supporting
changes in driver, demos, layers, and tests.

17 files changed:
demos/cube.c
demos/tri.c
icd/intel/obj.c
icd/nulldrv/nulldrv.c
include/vulkan.h
layers/glave_snapshot.c
layers/mem_tracker.cpp
layers/param_checker.cpp
loader/trampoline.c
tests/blit_tests.cpp
tests/image_tests.cpp
tests/init.cpp
tests/layer_validation_tests.cpp
tests/vkrenderframework.cpp
tests/vktestbinding.cpp
tests/vktestbinding.h
vulkan.py

index 0d1ee87..91281d5 100644 (file)
@@ -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);
index b18434c..df4c63b 100644 (file)
@@ -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);
index 0688917..427d35e 100644 (file)
@@ -35,7 +35,6 @@ VkResult intel_base_get_info(struct intel_base *base, int type,
 {
     VkResult ret = VK_SUCCESS;
     size_t s;
-    uint32_t *count;
 
     switch (type) {
     case VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS:
@@ -49,13 +48,6 @@ VkResult intel_base_get_info(struct intel_base *base, int type,
             mem_req->memPropsAllowed = INTEL_MEMORY_PROPERTY_ALL;
             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;
@@ -374,7 +366,6 @@ ICD_EXPORT VkResult VKAPI vkBindObjectMemory(
     VkDevice                                    device,
     VkObjectType                                objType,
     VkObject                                    object,
-    uint32_t                                    allocationIdx,
     VkDeviceMemory                              mem_,
     VkDeviceSize                                memOffset)
 {
@@ -389,7 +380,6 @@ ICD_EXPORT VkResult VKAPI vkBindObjectMemory(
 ICD_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
     VkQueue                                     queue,
     VkBuffer                                    buffer,
-    uint32_t                                    allocationIdx,
     VkDeviceSize                                rangeOffset,
     VkDeviceSize                                rangeSize,
     VkDeviceMemory                              mem,
@@ -401,7 +391,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)
index 9959641..6da37fa 100644 (file)
@@ -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)
index 53029f5..36cca75 100644 (file)
@@ -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);
index 120656d..150821a 100644 (file)
@@ -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;
 }
 
index 8635aee..bbdb4f5 100644 (file)
@@ -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)) {
index 32ca542..7e12283 100644 (file)
@@ -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;
 }
 
index 30982c7..136fe1a 100644 (file)
@@ -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)
index bb3a667..cf2fd98 100644 (file)
@@ -775,7 +775,7 @@ TEST_F(VkCmdCopyBufferTest, RAWHazard)
     err = vkAllocMemory(dev_.obj(), &mem_info, &event_mem);
     ASSERT_VK_SUCCESS(err);
 
-    err = vkBindObjectMemory(dev_.obj(), VK_OBJECT_TYPE_EVENT, event, 0, event_mem, 0);
+    err = vkBindObjectMemory(dev_.obj(), VK_OBJECT_TYPE_EVENT, event, event_mem, 0);
     ASSERT_VK_SUCCESS(err);
 
     err = vkResetEvent(dev_.obj(), event);
@@ -832,7 +832,7 @@ TEST_F(VkCmdCopyBufferTest, RAWHazard)
     bufs[2].unmap();
 
     // All done with event memory, clean up
-    err = vkBindObjectMemory(dev_.obj(), VK_OBJECT_TYPE_EVENT, event, 0, VK_NULL_HANDLE, 0);
+    err = vkBindObjectMemory(dev_.obj(), VK_OBJECT_TYPE_EVENT, event, VK_NULL_HANDLE, 0);
     ASSERT_VK_SUCCESS(err);
 
     err = vkDestroyObject(dev_.obj(), VK_OBJECT_TYPE_EVENT, event);
index 8238edd..bf23f6e 100644 (file)
@@ -82,8 +82,7 @@ protected:
     uint32_t gpu_count;
     VkInstance inst;
     VkImage m_image;
-    VkDeviceMemory *m_image_mem;
-    uint32_t m_num_mem;
+    VkDeviceMemory m_image_mem;
 
     virtual void SetUp() {
         VkResult err;
@@ -214,54 +213,40 @@ void VkImageTest::CreateImage(uint32_t w, uint32_t h)
     err = vkCreateImage(device(), &imageCreateInfo, &m_image);
     ASSERT_VK_SUCCESS(err);
 
-    VkMemoryRequirements *mem_req;
+    VkMemoryRequirements mem_req;
     size_t mem_reqs_size = sizeof(VkMemoryRequirements);
-    uint32_t num_allocations = 0;
-    size_t num_alloc_size = sizeof(num_allocations);
 
     VkMemoryAllocInfo mem_info = {};
     mem_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO;
     mem_info.pNext = NULL;
 
-    err = vkGetObjectInfo(device(), VK_OBJECT_TYPE_IMAGE, m_image, VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT,
-                    &num_alloc_size, &num_allocations);
-    ASSERT_VK_SUCCESS(err);
-    ASSERT_EQ(num_alloc_size,sizeof(num_allocations));
-    mem_req = (VkMemoryRequirements *) malloc(num_allocations * sizeof(VkMemoryRequirements));
-    m_image_mem = (VkDeviceMemory *) malloc(num_allocations * sizeof(VkDeviceMemory));
-    m_num_mem = num_allocations;
     err = vkGetObjectInfo(device(), VK_OBJECT_TYPE_IMAGE, m_image,
                     VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS,
-                    &mem_reqs_size, mem_req);
+                    &mem_reqs_size, &mem_req);
     ASSERT_VK_SUCCESS(err);
-    ASSERT_EQ(mem_reqs_size, num_allocations * sizeof(VkMemoryRequirements));
 
-    for (uint32_t i = 0; i < num_allocations; i ++) {
-        ASSERT_NE(0, mem_req[i].size) << "vkGetObjectInfo (Image): Failed - expect images to require memory";
-        mem_info.allocationSize = mem_req[i].size;
-        mem_info.memProps = VK_MEMORY_PROPERTY_SHAREABLE_BIT;
-        mem_info.memPriority = VK_MEMORY_PRIORITY_NORMAL;
+    ASSERT_NE(0, mem_req.size) << "vkGetObjectInfo (Image): Failed - expect images to require memory";
+    mem_info.allocationSize = mem_req.size;
+    mem_info.memProps       = VK_MEMORY_PROPERTY_SHAREABLE_BIT;
+    mem_info.memPriority    = VK_MEMORY_PRIORITY_NORMAL;
 
-        /* allocate memory */
-        err = vkAllocMemory(device(), &mem_info, &m_image_mem[i]);
-        ASSERT_VK_SUCCESS(err);
+    /* allocate memory */
+    err = vkAllocMemory(device(), &mem_info, &m_image_mem);
+    ASSERT_VK_SUCCESS(err);
 
-        /* bind memory */
-        err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_IMAGE, m_image, i, m_image_mem[i], 0);
-        ASSERT_VK_SUCCESS(err);
-    }
+    /* bind memory */
+    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_IMAGE, m_image, m_image_mem, 0);
+    ASSERT_VK_SUCCESS(err);
 }
 
 void VkImageTest::DestroyImage()
 {
     VkResult err;
     // All done with image memory, clean up
-    ASSERT_VK_SUCCESS(vkBindObjectMemory(device(), VK_OBJECT_TYPE_IMAGE, m_image, 0, VK_NULL_HANDLE, 0));
+    ASSERT_VK_SUCCESS(vkBindObjectMemory(device(), VK_OBJECT_TYPE_IMAGE, m_image, VK_NULL_HANDLE, 0));
 
-    for (uint32_t i = 0 ; i < m_num_mem; i++) {
-        err = vkFreeMemory(device(), m_image_mem[i]);
-        ASSERT_VK_SUCCESS(err);
-    }
+    err = vkFreeMemory(device(), m_image_mem);
+    ASSERT_VK_SUCCESS(err);
 
 
     ASSERT_VK_SUCCESS(vkDestroyObject(device(), VK_OBJECT_TYPE_IMAGE, m_image));
index 2054a16..facab9b 100644 (file)
@@ -260,7 +260,7 @@ TEST_F(XglTest, Event) {
     err = vkAllocMemory(device(), &mem_info, &event_mem);
     ASSERT_VK_SUCCESS(err);
 
-    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_EVENT, event, 0, event_mem, 0);
+    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_EVENT, event, event_mem, 0);
     ASSERT_VK_SUCCESS(err);
 
     err = vkResetEvent(device(), event);
@@ -278,7 +278,7 @@ TEST_F(XglTest, Event) {
     // TODO: Test actual synchronization with command buffer event.
 
     // All done with event memory, clean up
-    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_EVENT, event, 0, VK_NULL_HANDLE, 0);
+    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_EVENT, event, VK_NULL_HANDLE, 0);
     ASSERT_VK_SUCCESS(err);
 
     err = vkDestroyObject(device(), VK_OBJECT_TYPE_EVENT, event);
@@ -351,7 +351,7 @@ TEST_F(XglTest, Query) {
     err = vkAllocMemory(device(), &mem_info, &query_mem);
     ASSERT_VK_SUCCESS(err);
 
-    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_QUERY_POOL, query_pool, 0, query_mem, 0);
+    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_QUERY_POOL, query_pool, query_mem, 0);
     ASSERT_VK_SUCCESS(err);
 
     // TODO: Test actual synchronization with command buffer event.
@@ -376,7 +376,7 @@ TEST_F(XglTest, Query) {
     }
 
     // All done with QueryPool memory, clean up
-    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_QUERY_POOL, query_pool, 0, VK_NULL_HANDLE, 0);
+    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_QUERY_POOL, query_pool, VK_NULL_HANDLE, 0);
     ASSERT_VK_SUCCESS(err);
 
     err = vkDestroyObject(device(), VK_OBJECT_TYPE_QUERY_POOL, query_pool);
@@ -618,7 +618,7 @@ void XglTest::CreateImageTest()
     err = vkAllocMemory(device(), &mem_info, &image_mem);
     ASSERT_VK_SUCCESS(err);
 
-    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_IMAGE, image, 0, image_mem, 0);
+    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_IMAGE, image, image_mem, 0);
     ASSERT_VK_SUCCESS(err);
 
 //    typedef struct VkImageViewCreateInfo_
@@ -661,7 +661,7 @@ void XglTest::CreateImageTest()
     // TODO: Test image memory.
 
     // All done with image memory, clean up
-    ASSERT_VK_SUCCESS(vkBindObjectMemory(device(), VK_OBJECT_TYPE_IMAGE, image, 0, VK_NULL_HANDLE, 0));
+    ASSERT_VK_SUCCESS(vkBindObjectMemory(device(), VK_OBJECT_TYPE_IMAGE, image, VK_NULL_HANDLE, 0));
 
     ASSERT_VK_SUCCESS(vkFreeMemory(device(), image_mem));
 
index dd07b12..f2b0f11 100644 (file)
@@ -410,15 +410,13 @@ TEST_F(VkLayerTest, MapMemWithoutHostVisibleBit)
 
     // Create an image, allocate memory, free it, and then try to bind it
     VkImage               image;
-    VkDeviceMemory       *mem;
-    VkMemoryRequirements *mem_reqs;
+    VkDeviceMemory        mem;
+    VkMemoryRequirements  mem_reqs;
 
     const VkFormat tex_format      = VK_FORMAT_B8G8R8A8_UNORM;
     const int32_t  tex_width       = 32;
     const int32_t  tex_height      = 32;
     size_t         mem_reqs_size   = sizeof(VkMemoryRequirements);
-    uint32_t       num_allocations = 0;
-    size_t         num_alloc_size  = sizeof(num_allocations);
 
     const VkImageCreateInfo image_create_info = {
         .sType          = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
@@ -448,35 +446,24 @@ TEST_F(VkLayerTest, MapMemWithoutHostVisibleBit)
     err = vkGetObjectInfo(m_device->device(),
                           VK_OBJECT_TYPE_IMAGE,
                           image,
-                          VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT,
-                          &num_alloc_size,
-                          &num_allocations);
-    ASSERT_VK_SUCCESS(err);
-
-    mem_reqs = new VkMemoryRequirements[num_allocations];
-    mem      = new VkDeviceMemory[num_allocations];
-
-    err = vkGetObjectInfo(m_device->device(),
-                          VK_OBJECT_TYPE_IMAGE,
-                          image,
                           VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS,
                           &mem_reqs_size,
-                          mem_reqs);
+                          &mem_reqs);
     ASSERT_VK_SUCCESS(err);
 
-    mem_alloc.allocationSize = mem_reqs[0].size;
+    mem_alloc.allocationSize = mem_reqs.size;
 
     // allocate memory
-    err = vkAllocMemory(m_device->device(), &mem_alloc, &(mem[0]));
+    err = vkAllocMemory(m_device->device(), &mem_alloc, &mem);
     ASSERT_VK_SUCCESS(err);
 
     // Try to bind free memory that has been freed
-    err = vkBindObjectMemory(m_device->device(), VK_OBJECT_TYPE_IMAGE, image, 0, mem[0], 0);
+    err = vkBindObjectMemory(m_device->device(), VK_OBJECT_TYPE_IMAGE, image, mem, 0);
     ASSERT_VK_SUCCESS(err);
 
     // Map memory as if to initialize the image
     void *mappedAddress = NULL;
-    err = vkMapMemory(m_device->device(), mem[0], 0, 0, 0, &mappedAddress);
+    err = vkMapMemory(m_device->device(), mem, 0, 0, 0, &mappedAddress);
 
     msgType = m_errorMonitor->GetState(&msgString);
     ASSERT_EQ(msgType, VK_DBG_MSG_ERROR) << "Did not receive an error while tring to map memory not visible to CPU";
@@ -496,15 +483,13 @@ TEST_F(VkLayerTest, BindInvalidMemory)
 
     // Create an image, allocate memory, free it, and then try to bind it
     VkImage               image;
-    VkDeviceMemory       *mem;
-    VkMemoryRequirements *mem_reqs;
+    VkDeviceMemory        mem;
+    VkMemoryRequirements  mem_reqs;
 
     const VkFormat tex_format      = VK_FORMAT_B8G8R8A8_UNORM;
     const int32_t  tex_width       = 32;
     const int32_t  tex_height      = 32;
     size_t         mem_reqs_size   = sizeof(VkMemoryRequirements);
-    uint32_t       num_allocations = 0;
-    size_t         num_alloc_size  = sizeof(num_allocations);
 
     const VkImageCreateInfo image_create_info = {
         .sType          = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
@@ -533,34 +518,23 @@ TEST_F(VkLayerTest, BindInvalidMemory)
     err = vkGetObjectInfo(m_device->device(),
                           VK_OBJECT_TYPE_IMAGE,
                           image,
-                          VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT,
-                          &num_alloc_size,
-                          &num_allocations);
-    ASSERT_VK_SUCCESS(err);
-
-    mem_reqs = new VkMemoryRequirements[num_allocations];
-    mem      = new VkDeviceMemory[num_allocations];
-
-    err = vkGetObjectInfo(m_device->device(),
-                          VK_OBJECT_TYPE_IMAGE,
-                          image,
                           VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS,
                           &mem_reqs_size,
-                          mem_reqs);
+                          &mem_reqs);
     ASSERT_VK_SUCCESS(err);
 
-    mem_alloc.allocationSize = mem_reqs[0].size;
+    mem_alloc.allocationSize = mem_reqs.size;
 
     // allocate memory
-    err = vkAllocMemory(m_device->device(), &mem_alloc, &(mem[0]));
+    err = vkAllocMemory(m_device->device(), &mem_alloc, &mem);
     ASSERT_VK_SUCCESS(err);
 
     // Introduce validation failure, free memory before binding
-    vkFreeMemory(m_device->device(), mem[0]);
+    vkFreeMemory(m_device->device(), mem);
     ASSERT_VK_SUCCESS(err);
 
     // Try to bind free memory that has been freed
-    err = vkBindObjectMemory(m_device->device(), VK_OBJECT_TYPE_IMAGE, image, 0, mem[0], 0);
+    err = vkBindObjectMemory(m_device->device(), VK_OBJECT_TYPE_IMAGE, image, mem, 0);
     ASSERT_VK_SUCCESS(err);
 
     msgType = m_errorMonitor->GetState(&msgString);
@@ -581,15 +555,13 @@ TEST_F(VkLayerTest, FreeBoundMemory)
 
     // Create an image, allocate memory, free it, and then try to bind it
     VkImage               image;
-    VkDeviceMemory       *mem;
-    VkMemoryRequirements *mem_reqs;
+    VkDeviceMemory        mem;
+    VkMemoryRequirements  mem_reqs;
 
     const VkFormat tex_format      = VK_FORMAT_B8G8R8A8_UNORM;
     const int32_t  tex_width       = 32;
     const int32_t  tex_height      = 32;
     size_t         mem_reqs_size   = sizeof(VkMemoryRequirements);
-    uint32_t       num_allocations = 0;
-    size_t         num_alloc_size  = sizeof(num_allocations);
 
     const VkImageCreateInfo image_create_info = {
         .sType          = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
@@ -618,34 +590,23 @@ TEST_F(VkLayerTest, FreeBoundMemory)
     err = vkGetObjectInfo(m_device->device(),
                           VK_OBJECT_TYPE_IMAGE,
                           image,
-                          VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT,
-                          &num_alloc_size,
-                          &num_allocations);
-    ASSERT_VK_SUCCESS(err);
-
-    mem_reqs = new VkMemoryRequirements[num_allocations];
-    mem      = new VkDeviceMemory[num_allocations];
-
-    err = vkGetObjectInfo(m_device->device(),
-                          VK_OBJECT_TYPE_IMAGE,
-                          image,
                           VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS,
                           &mem_reqs_size,
-                          mem_reqs);
+                          &mem_reqs);
     ASSERT_VK_SUCCESS(err);
 
-    mem_alloc.allocationSize = mem_reqs[0].size;
+    mem_alloc.allocationSize = mem_reqs.size;
 
     // allocate memory
-    err = vkAllocMemory(m_device->device(), &mem_alloc, &(mem[0]));
+    err = vkAllocMemory(m_device->device(), &mem_alloc, &mem);
     ASSERT_VK_SUCCESS(err);
 
     // Bind memory to Image object
-    err = vkBindObjectMemory(m_device->device(), VK_OBJECT_TYPE_IMAGE, image, 0, mem[0], 0);
+    err = vkBindObjectMemory(m_device->device(), VK_OBJECT_TYPE_IMAGE, image, mem, 0);
     ASSERT_VK_SUCCESS(err);
 
     // Introduce validation failure, free memory while still bound to object
-    vkFreeMemory(m_device->device(), mem[0]);
+    vkFreeMemory(m_device->device(), mem);
     ASSERT_VK_SUCCESS(err);
 
     msgType = m_errorMonitor->GetState(&msgString);
@@ -667,15 +628,13 @@ TEST_F(VkLayerTest, BindMemoryToDestroyedObject)
 
     // Create an image object, allocate memory, destroy the object and then try to bind it
     VkImage               image;
-    VkDeviceMemory       *mem;
-    VkMemoryRequirements *mem_reqs;
+    VkDeviceMemory        mem;
+    VkMemoryRequirements  mem_reqs;
 
     const VkFormat tex_format      = VK_FORMAT_B8G8R8A8_UNORM;
     const int32_t  tex_width       = 32;
     const int32_t  tex_height      = 32;
     size_t         mem_reqs_size   = sizeof(VkMemoryRequirements);
-    uint32_t       num_allocations = 0;
-    size_t         num_alloc_size  = sizeof(num_allocations);
 
     const VkImageCreateInfo image_create_info = {
         .sType          = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
@@ -704,26 +663,15 @@ TEST_F(VkLayerTest, BindMemoryToDestroyedObject)
     err = vkGetObjectInfo(m_device->device(),
                           VK_OBJECT_TYPE_IMAGE,
                           image,
-                          VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT,
-                          &num_alloc_size,
-                          &num_allocations);
-    ASSERT_VK_SUCCESS(err);
-
-    mem_reqs = new VkMemoryRequirements[num_allocations];
-    mem      = new VkDeviceMemory[num_allocations];
-
-    err = vkGetObjectInfo(m_device->device(),
-                          VK_OBJECT_TYPE_IMAGE,
-                          image,
                           VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS,
                           &mem_reqs_size,
-                          mem_reqs);
+                          &mem_reqs);
     ASSERT_VK_SUCCESS(err);
 
-    mem_alloc.allocationSize = mem_reqs[0].size;
+    mem_alloc.allocationSize = mem_reqs.size;
 
     // Allocate memory
-    err = vkAllocMemory(m_device->device(), &mem_alloc, &(mem[0]));
+    err = vkAllocMemory(m_device->device(), &mem_alloc, &mem);
     ASSERT_VK_SUCCESS(err);
 
     // Introduce validation failure, destroy Image object before binding
@@ -731,7 +679,7 @@ TEST_F(VkLayerTest, BindMemoryToDestroyedObject)
     ASSERT_VK_SUCCESS(err);
 
     // Now Try to bind memory to this destroyted object
-    err = vkBindObjectMemory(m_device->device(), VK_OBJECT_TYPE_IMAGE, image, 0, mem[0], 0);
+    err = vkBindObjectMemory(m_device->device(), VK_OBJECT_TYPE_IMAGE, image, mem, 0);
     ASSERT_VK_SUCCESS(err);
 
     msgType = m_errorMonitor->GetState(&msgString);
@@ -1950,7 +1898,7 @@ TEST_F(VkLayerTest, ThreadCmdBufferCollision)
     err = vkAllocMemory(device(), &mem_info, &event_mem);
     ASSERT_VK_SUCCESS(err);
 
-    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_EVENT, event, 0, event_mem, 0);
+    err = vkBindObjectMemory(device(), VK_OBJECT_TYPE_EVENT, event, event_mem, 0);
     ASSERT_VK_SUCCESS(err);
 
     err = vkResetEvent(device(), event);
index 5e97c6e..9029bf2 100644 (file)
@@ -106,7 +106,7 @@ void VkRenderFramework::ShutdownFramework()
     }
     while (!m_renderTargets.empty()) {
         vkDestroyObject(device(), VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW, m_renderTargets.back()->targetView());
-        vkBindObjectMemory(device(), VK_OBJECT_TYPE_IMAGE, m_renderTargets.back()->image(), 0, VK_NULL_HANDLE, 0);
+        vkBindObjectMemory(device(), VK_OBJECT_TYPE_IMAGE, m_renderTargets.back()->image(), VK_NULL_HANDLE, 0);
         vkDestroyObject(device(), VK_OBJECT_TYPE_IMAGE, m_renderTargets.back()->image());
         vkFreeMemory(device(), m_renderTargets.back()->memory());
         m_renderTargets.pop_back();
index 23cc21b..3e594b3 100644 (file)
@@ -197,17 +197,18 @@ void BaseObject::reinit(VkObject obj, VkObjectType type, bool own)
 
 uint32_t Object::memory_allocation_count() const
 {
-    return get_info<uint32_t>(dev_->obj(), type(), obj(), VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT, 1)[0];
+    /// LUGMAL return get_info<uint32_t>(dev_->obj(), type(), obj(), VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT, 1)[0];
+    return 1;
 }
 
 std::vector<VkMemoryRequirements> Object::memory_requirements() const
 {
-    VkResult err;
-    uint32_t num_allocations = 0;
-    size_t num_alloc_size = sizeof(num_allocations);
-    err = vkGetObjectInfo(dev_->obj(), type(), obj(), VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT,
-                           &num_alloc_size, &num_allocations);
-    EXPECT(err == VK_SUCCESS && num_alloc_size == sizeof(num_allocations));
+    //// VkResult err;
+    uint32_t num_allocations = 1;
+    //// size_t num_alloc_size = sizeof(num_allocations);
+    //// err = vkGetObjectInfo(dev_->obj(), type(), obj(), VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT,
+    ////                        &num_alloc_size, &num_allocations);
+    //// EXPECT(err == VK_SUCCESS && num_alloc_size == sizeof(num_allocations));
     std::vector<VkMemoryRequirements> info =
         get_info<VkMemoryRequirements>(dev_->obj(), type(), obj(), VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS, 0);
     EXPECT(info.size() == num_allocations);
@@ -251,21 +252,16 @@ void Object::cleanup()
         EXPECT(vkDestroyObject(dev_->obj(), type(), obj()) == VK_SUCCESS);
 }
 
-void Object::bind_memory(uint32_t alloc_idx, const GpuMemory &mem, VkDeviceSize mem_offset)
+void Object::bind_memory(const GpuMemory &mem, VkDeviceSize mem_offset)
 {
     bound = true;
-    EXPECT(vkBindObjectMemory(dev_->obj(), type(), obj(), alloc_idx, mem.obj(), mem_offset) == VK_SUCCESS);
+    EXPECT(vkBindObjectMemory(dev_->obj(), type(), obj(), mem.obj(), mem_offset) == VK_SUCCESS);
 }
 
-void Object::unbind_memory(uint32_t alloc_idx)
-{
-    EXPECT(vkBindObjectMemory(dev_->obj(), type(), obj(), alloc_idx, VK_NULL_HANDLE, 0) == VK_SUCCESS);
-}
 
 void Object::unbind_memory()
 {
-    for (uint32_t i = 0; i < mem_alloc_count_; i++)
-        unbind_memory(i);
+    EXPECT(vkBindObjectMemory(dev_->obj(), type(), obj(), VK_NULL_HANDLE, 0) == VK_SUCCESS);
 }
 
 void Object::alloc_memory()
@@ -282,7 +278,7 @@ void Object::alloc_memory()
         info = GpuMemory::alloc_info(mem_reqs[i], next_info);
         primary_mem_ = &internal_mems_[i];
         internal_mems_[i].init(*dev_, info);
-        bind_memory(i, internal_mems_[i], 0);
+        bind_memory(internal_mems_[i], 0);
     }
 }
 
@@ -301,7 +297,7 @@ void Object::alloc_memory(VkMemoryPropertyFlags &reqs)
         info = GpuMemory::alloc_info(mem_reqs[i], next_info);
         primary_mem_ = &internal_mems_[i];
         internal_mems_[i].init(*dev_, info);
-        bind_memory(i, internal_mems_[i], 0);
+        bind_memory(internal_mems_[i], 0);
     }
 }
 
@@ -320,7 +316,7 @@ void Object::alloc_memory(const std::vector<VkDeviceMemory> &mems)
         primary_mem_ = &internal_mems_[i];
 
         internal_mems_[i].init(*dev_, mems[i]);
-        bind_memory(i, internal_mems_[i], 0);
+        bind_memory(internal_mems_[i], 0);
     }
 }
 
@@ -665,11 +661,11 @@ void Buffer::init_no_mem(const Device &dev, const VkBufferCreateInfo &info)
     create_info_ = info;
 }
 
-void Buffer::bind_memory(uint32_t alloc_idx, VkDeviceSize offset, VkDeviceSize size,
+void Buffer::bind_memory(VkDeviceSize offset, VkDeviceSize size,
                          const GpuMemory &mem, VkDeviceSize mem_offset)
 {
     VkQueue queue = dev_->graphics_queues()[0]->obj();
-    EXPECT(!alloc_idx && vkQueueBindSparseBufferMemory(queue, obj(), 0, offset, size, mem.obj(), mem_offset) == VK_SUCCESS);
+    EXPECT(vkQueueBindSparseBufferMemory(queue, obj(), offset, size, mem.obj(), mem_offset) == VK_SUCCESS);
 }
 
 void BufferView::init(const Device &dev, const VkBufferViewCreateInfo &info)
@@ -720,11 +716,11 @@ void Image::init_info(const Device &dev, const VkImageCreateInfo &info)
     }
 }
 
-void Image::bind_memory(const Device &dev, uint32_t alloc_idx, const VkImageMemoryBindInfo &info,
+void Image::bind_memory(const Device &dev, const VkImageMemoryBindInfo &info,
                         const GpuMemory &mem, VkDeviceSize mem_offset)
 {
     VkQueue queue = dev.graphics_queues()[0]->obj();
-    EXPECT(!alloc_idx && vkQueueBindSparseImageMemory(queue, obj(), 0, &info, mem.obj(), mem_offset) == VK_SUCCESS);
+    EXPECT(vkQueueBindSparseImageMemory(queue, obj(), &info, mem.obj(), mem_offset) == VK_SUCCESS);
 }
 
 VkSubresourceLayout Image::subresource_layout(const VkImageSubresource &subres) const
index e25894b..6913780 100644 (file)
@@ -131,8 +131,7 @@ public:
     std::vector<VkMemoryRequirements> memory_requirements() const;
 
     // vkBindObjectMemory()
-    void bind_memory(uint32_t alloc_idx, const GpuMemory &mem, VkDeviceSize mem_offset);
-    void unbind_memory(uint32_t alloc_idx);
+    void bind_memory(const GpuMemory &mem, VkDeviceSize mem_offset);
     void unbind_memory();
 
     // Unless an object is initialized with init_no_mem(), memories are
@@ -379,7 +378,7 @@ public:
     void init_no_mem(const Device &dev, const VkBufferCreateInfo &info);
 
     // vkQueueBindSparseBufferMemory()
-    void bind_memory(uint32_t alloc_idx, VkDeviceSize offset, VkDeviceSize size,
+    void bind_memory(VkDeviceSize offset, VkDeviceSize size,
                      const GpuMemory &mem, VkDeviceSize mem_offset);
 
     static VkBufferCreateInfo create_info(VkDeviceSize size, VkFlags usage);
@@ -419,7 +418,7 @@ public:
     void init(const Device &dev, const VkPeerImageOpenInfo &info, const VkImageCreateInfo &original_info);
 
     // vkQueueBindSparseImageMemory()
-    void bind_memory(const Device &dev, uint32_t alloc_idx, const VkImageMemoryBindInfo &info,
+    void bind_memory(const Device &dev, const VkImageMemoryBindInfo &info,
                      const GpuMemory &mem, VkDeviceSize mem_offset);
 
     // vkGetImageSubresourceInfo()
index 16b0604..9aab914 100755 (executable)
--- a/vulkan.py
+++ b/vulkan.py
@@ -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")]),