aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--demos/cube.c125
-rw-r--r--demos/tri.c119
-rw-r--r--icd/common/icd-instance.c2
-rw-r--r--icd/common/icd-instance.h2
-rw-r--r--icd/nulldrv/nulldrv.c53
-rw-r--r--include/vkDbg.h11
-rw-r--r--include/vkLayer.h4
-rw-r--r--include/vk_platform.h12
-rw-r--r--include/vulkan.h205
-rw-r--r--layers/draw_state.cpp24
-rw-r--r--layers/glave_snapshot.c78
-rw-r--r--layers/layers_msg.h4
-rw-r--r--layers/mem_tracker.cpp54
-rw-r--r--layers/multi.cpp4
-rw-r--r--layers/param_checker.cpp84
-rw-r--r--loader/loader.c33
-rwxr-xr-xvk-generate.py6
-rwxr-xr-xvk-layer-generate.py6
-rwxr-xr-xvulkan.py67
19 files changed, 533 insertions, 360 deletions
diff --git a/demos/cube.c b/demos/cube.c
index 35882ed6..75b537aa 100644
--- a/demos/cube.c
+++ b/demos/cube.c
@@ -301,7 +301,7 @@ static void demo_flush_init_cmd(struct demo *demo)
err = vkQueueWaitIdle(demo->queue);
assert(!err);
- vkDestroyObject(demo->cmd);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_COMMAND_BUFFER, demo->cmd);
demo->cmd = VK_NULL_HANDLE;
}
@@ -474,8 +474,8 @@ static void demo_draw_build_cmd(struct demo *demo, VkCmdBuffer cmd_buf)
err = vkEndCommandBuffer(cmd_buf);
assert(!err);
- vkDestroyObject(rp_begin.renderPass);
- vkDestroyObject(rp_begin.framebuffer);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_RENDER_PASS, rp_begin.renderPass);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_FRAMEBUFFER, rp_begin.framebuffer);
}
@@ -494,12 +494,12 @@ void demo_update_data_buffer(struct demo *demo)
mat4x4_mul(MVP, VP, demo->model_matrix);
assert(demo->uniform_data.num_mem == 1);
- err = vkMapMemory(demo->uniform_data.mem[0], 0, 0, 0, (void **) &pData);
+ err = vkMapMemory(demo->device, demo->uniform_data.mem[0], 0, 0, 0, (void **) &pData);
assert(!err);
memcpy(pData, (const void*) &MVP[0][0], matrixSize);
- err = vkUnmapMemory(demo->uniform_data.mem[0]);
+ err = vkUnmapMemory(demo->device, demo->uniform_data.mem[0]);
assert(!err);
}
@@ -614,6 +614,7 @@ static void demo_prepare_depth(struct demo *demo)
.arraySize = 1,
.flags = 0,
};
+
VkMemoryRequirements *mem_reqs;
size_t mem_reqs_size = sizeof(VkMemoryRequirements);
VkResult err;
@@ -627,12 +628,16 @@ static void demo_prepare_depth(struct demo *demo)
&demo->depth.image);
assert(!err);
- err = vkGetObjectInfo(demo->depth.image, VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT, &num_alloc_size, &num_allocations);
+ 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->depth.image,
+ 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));
@@ -645,8 +650,9 @@ static void demo_prepare_depth(struct demo *demo)
assert(!err);
/* bind memory */
- err = vkQueueBindObjectMemory(demo->queue, demo->depth.image, i,
- demo->depth.mem[i], 0);
+ err = vkQueueBindObjectMemory(demo->queue,
+ VK_OBJECT_TYPE_IMAGE, demo->depth.image,
+ i, demo->depth.mem[i], 0);
assert(!err);
}
@@ -858,13 +864,15 @@ static void demo_prepare_texture_image(struct demo *demo,
&tex_obj->image);
assert(!err);
- err = vkGetObjectInfo(tex_obj->image,
+ 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(tex_obj->image,
+ 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));
@@ -878,7 +886,9 @@ static void demo_prepare_texture_image(struct demo *demo,
assert(!err);
/* bind memory */
- err = vkQueueBindObjectMemory(demo->queue, tex_obj->image, j, tex_obj->mem[j], 0);
+ err = vkQueueBindObjectMemory(demo->queue,
+ VK_OBJECT_TYPE_IMAGE, tex_obj->image,
+ j, tex_obj->mem[j], 0);
assert(!err);
}
free(mem_reqs);
@@ -896,21 +906,21 @@ static void demo_prepare_texture_image(struct demo *demo,
size_t layout_size = sizeof(VkSubresourceLayout);
void *data;
- err = vkGetImageSubresourceInfo(tex_obj->image, &subres,
+ err = vkGetImageSubresourceInfo(demo->device, tex_obj->image, &subres,
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(tex_obj->mem[0], 0, 0, 0, &data);
+ err = vkMapMemory(demo->device, tex_obj->mem[0], 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(tex_obj->mem[0]);
+ err = vkUnmapMemory(demo->device, tex_obj->mem[0]);
assert(!err);
}
@@ -925,12 +935,13 @@ static void demo_destroy_texture_image(struct demo *demo, struct texture_object
{
/* clean up staging resources */
for (uint32_t j = 0; j < tex_objs->num_mem; j ++) {
- vkQueueBindObjectMemory(demo->queue, tex_objs->image, j, VK_NULL_HANDLE, 0);
- vkFreeMemory(tex_objs->mem[j]);
+ vkQueueBindObjectMemory(demo->queue,
+ VK_OBJECT_TYPE_IMAGE, tex_objs->image, j, VK_NULL_HANDLE, 0);
+ vkFreeMemory(demo->device, tex_objs->mem[j]);
}
free(tex_objs->mem);
- vkDestroyObject(tex_objs->image);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, tex_objs->image);
}
static void demo_prepare_textures(struct demo *demo)
@@ -1087,14 +1098,16 @@ void demo_prepare_cube_data_buffer(struct demo *demo)
err = vkCreateBuffer(demo->device, &buf_info, &demo->uniform_data.buf);
assert(!err);
- err = vkGetObjectInfo(demo->uniform_data.buf,
+ 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->uniform_data.buf,
+ 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));
@@ -1104,16 +1117,17 @@ void demo_prepare_cube_data_buffer(struct demo *demo)
err = vkAllocMemory(demo->device, &alloc_info, &(demo->uniform_data.mem[i]));
assert(!err);
- err = vkMapMemory(demo->uniform_data.mem[i], 0, 0, 0, (void **) &pData);
+ err = vkMapMemory(demo->device, demo->uniform_data.mem[i], 0, 0, 0, (void **) &pData);
assert(!err);
memcpy(pData, &data, (size_t)alloc_info.allocationSize);
- err = vkUnmapMemory(demo->uniform_data.mem[i]);
+ err = vkUnmapMemory(demo->device, demo->uniform_data.mem[i]);
assert(!err);
- err = vkQueueBindObjectMemory(demo->queue, demo->uniform_data.buf, i,
- demo->uniform_data.mem[i], 0);
+ err = vkQueueBindObjectMemory(demo->queue,
+ VK_OBJECT_TYPE_BUFFER, demo->uniform_data.buf,
+ i, demo->uniform_data.mem[i], 0);
assert(!err);
}
demo_add_mem_refs(demo, demo->uniform_data.num_mem, demo->uniform_data.mem);
@@ -1362,13 +1376,13 @@ static void demo_prepare_pipeline(struct demo *demo)
vs.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
vs.shader.stage = VK_SHADER_STAGE_VERTEX;
vs.shader.shader = demo_prepare_vs(demo);
- assert(vs.shader.shader != NULL);
+ assert(vs.shader.shader != VK_NULL_HANDLE);
memset(&fs, 0, sizeof(fs));
fs.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
fs.shader.stage = VK_SHADER_STAGE_FRAGMENT;
fs.shader.shader = demo_prepare_fs(demo);
- assert(fs.shader.shader != NULL);
+ assert(fs.shader.shader != VK_NULL_HANDLE);
memset(&ms, 0, sizeof(ms));
ms.sType = VK_STRUCTURE_TYPE_PIPELINE_MS_STATE_CREATE_INFO;
@@ -1388,8 +1402,8 @@ static void demo_prepare_pipeline(struct demo *demo)
err = vkCreateGraphicsPipeline(demo->device, &pipeline, &demo->pipeline);
assert(!err);
- vkDestroyObject(vs.shader.shader);
- vkDestroyObject(fs.shader.shader);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_SHADER, vs.shader.shader);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_SHADER, fs.shader.shader);
}
static void demo_prepare_dynamic_states(struct demo *demo)
@@ -1514,7 +1528,7 @@ static void demo_prepare_descriptor_set(struct demo *demo)
update_fs.count = DEMO_TEXTURE_COUNT;
update_fs.pSamplerImageViews = combined_info;
- err = vkAllocDescriptorSets(demo->desc_pool,
+ err = vkAllocDescriptorSets(demo->device, demo->desc_pool,
VK_DESCRIPTOR_SET_USAGE_STATIC,
1, &demo->desc_layout,
&demo->desc_set, &count);
@@ -1523,8 +1537,8 @@ static void demo_prepare_descriptor_set(struct demo *demo)
vkBeginDescriptorPoolUpdate(demo->device,
VK_DESCRIPTOR_UPDATE_MODE_FASTEST);
- vkClearDescriptorSets(demo->desc_pool, 1, &demo->desc_set);
- vkUpdateDescriptors(demo->desc_set, 2, update_array);
+ vkClearDescriptorSets(demo->device, demo->desc_pool, 1, &demo->desc_set);
+ vkUpdateDescriptors(demo->device, demo->desc_set, 2, update_array);
vkEndDescriptorPoolUpdate(demo->device, demo->buffers[demo->current_buffer].cmd);
}
@@ -1959,47 +1973,48 @@ static void demo_cleanup(struct demo *demo)
{
uint32_t i, j;
- vkDestroyObject(demo->desc_set);
- vkDestroyObject(demo->desc_pool);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DESCRIPTOR_SET, demo->desc_set);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DESCRIPTOR_POOL, demo->desc_pool);
- vkDestroyObject(demo->viewport);
- vkDestroyObject(demo->raster);
- vkDestroyObject(demo->color_blend);
- vkDestroyObject(demo->depth_stencil);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DYNAMIC_VP_STATE, demo->viewport);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DYNAMIC_RS_STATE, demo->raster);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DYNAMIC_CB_STATE, demo->color_blend);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DYNAMIC_DS_STATE, demo->depth_stencil);
- vkDestroyObject(demo->pipeline);
- vkDestroyObject(demo->pipeline_layout);
- vkDestroyObject(demo->desc_layout);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_PIPELINE, demo->pipeline);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_PIPELINE_LAYOUT, demo->pipeline_layout);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, demo->desc_layout);
for (i = 0; i < DEMO_TEXTURE_COUNT; i++) {
- vkDestroyObject(demo->textures[i].view);
- vkQueueBindObjectMemory(demo->queue, demo->textures[i].image, 0, VK_NULL_HANDLE, 0);
- vkDestroyObject(demo->textures[i].image);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE_VIEW, demo->textures[i].view);
+ vkQueueBindObjectMemory(demo->queue, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image, 0, VK_NULL_HANDLE, 0);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image);
demo_remove_mem_refs(demo, demo->textures[i].num_mem, demo->textures[i].mem);
for (j = 0; j < demo->textures[i].num_mem; j++)
- vkFreeMemory(demo->textures[i].mem[j]);
- vkDestroyObject(demo->textures[i].sampler);
+ vkFreeMemory(demo->device, demo->textures[i].mem[j]);
+ free(demo->textures[i].mem);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_SAMPLER, demo->textures[i].sampler);
}
vkDestroySwapChainWSI(demo->swap_chain);
- vkDestroyObject(demo->depth.view);
- vkQueueBindObjectMemory(demo->queue, demo->depth.image, 0, VK_NULL_HANDLE, 0);
- vkDestroyObject(demo->depth.image);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW, demo->depth.view);
+ vkQueueBindObjectMemory(demo->queue, VK_OBJECT_TYPE_IMAGE, demo->depth.image, 0, VK_NULL_HANDLE, 0);
demo_remove_mem_refs(demo, demo->depth.num_mem, demo->depth.mem);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, demo->depth.image);
for (j = 0; j < demo->depth.num_mem; j++) {
- vkFreeMemory(demo->depth.mem[j]);
+ vkFreeMemory(demo->device, demo->depth.mem[j]);
}
- vkDestroyObject(demo->uniform_data.view);
- vkQueueBindObjectMemory(demo->queue, demo->uniform_data.buf, 0, VK_NULL_HANDLE, 0);
- vkDestroyObject(demo->uniform_data.buf);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_BUFFER_VIEW, demo->uniform_data.view);
+ vkQueueBindObjectMemory(demo->queue, VK_OBJECT_TYPE_BUFFER, demo->uniform_data.buf, 0, VK_NULL_HANDLE, 0);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_BUFFER, demo->uniform_data.buf);
demo_remove_mem_refs(demo, demo->uniform_data.num_mem, demo->uniform_data.mem);
for (j = 0; j < demo->uniform_data.num_mem; j++)
- vkFreeMemory(demo->uniform_data.mem[j]);
+ vkFreeMemory(demo->device, demo->uniform_data.mem[j]);
for (i = 0; i < DEMO_BUFFER_COUNT; i++) {
- vkDestroyObject(demo->buffers[i].view);
- vkDestroyObject(demo->buffers[i].cmd);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW, demo->buffers[i].view);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_COMMAND_BUFFER, demo->buffers[i].cmd);
demo_remove_mem_refs(demo, 1, &demo->buffers[i].mem);
}
diff --git a/demos/tri.c b/demos/tri.c
index f7217779..0621e3b3 100644
--- a/demos/tri.c
+++ b/demos/tri.c
@@ -129,7 +129,7 @@ static void demo_flush_init_cmd(struct demo *demo)
err = vkQueueWaitIdle(demo->queue);
assert(!err);
- vkDestroyObject(demo->cmd);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_COMMAND_BUFFER, demo->cmd);
demo->cmd = VK_NULL_HANDLE;
}
@@ -305,8 +305,8 @@ static void demo_draw_build_cmd(struct demo *demo)
err = vkEndCommandBuffer(demo->cmd);
assert(!err);
- vkDestroyObject(rp_begin.renderPass);
- vkDestroyObject(rp_begin.framebuffer);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_RENDER_PASS, rp_begin.renderPass);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_FRAMEBUFFER, rp_begin.framebuffer);
}
static void demo_draw(struct demo *demo)
@@ -436,12 +436,16 @@ static void demo_prepare_depth(struct demo *demo)
&demo->depth.image);
assert(!err);
- err = vkGetObjectInfo(demo->depth.image, VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT, &num_alloc_size, &num_allocations);
+ 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->depth.image,
+ 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));
@@ -454,8 +458,9 @@ static void demo_prepare_depth(struct demo *demo)
assert(!err);
/* bind memory */
- err = vkQueueBindObjectMemory(demo->queue, demo->depth.image, i,
- demo->depth.mem[i], 0);
+ err = vkQueueBindObjectMemory(demo->queue,
+ VK_OBJECT_TYPE_IMAGE, demo->depth.image,
+ i, demo->depth.mem[i], 0);
assert(!err);
}
@@ -516,13 +521,15 @@ static void demo_prepare_texture_image(struct demo *demo,
&tex_obj->image);
assert(!err);
- err = vkGetObjectInfo(tex_obj->image,
+ 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(tex_obj->image,
+ 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));
@@ -536,7 +543,9 @@ static void demo_prepare_texture_image(struct demo *demo,
assert(!err);
/* bind memory */
- err = vkQueueBindObjectMemory(demo->queue, tex_obj->image, j, tex_obj->mem[j], 0);
+ err = vkQueueBindObjectMemory(demo->queue,
+ VK_OBJECT_TYPE_IMAGE, tex_obj->image,
+ j, tex_obj->mem[j], 0);
assert(!err);
}
free(mem_reqs);
@@ -555,14 +564,14 @@ static void demo_prepare_texture_image(struct demo *demo,
void *data;
int32_t x, y;
- err = vkGetImageSubresourceInfo(tex_obj->image, &subres,
+ err = vkGetImageSubresourceInfo(demo->device, tex_obj->image, &subres,
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(tex_obj->mem[0], 0, 0, 0, &data);
+ err = vkMapMemory(demo->device, tex_obj->mem[0], 0, 0, 0, &data);
assert(!err);
for (y = 0; y < tex_height; y++) {
@@ -571,7 +580,7 @@ static void demo_prepare_texture_image(struct demo *demo,
row[x] = tex_colors[(x & 1) ^ (y & 1)];
}
- err = vkUnmapMemory(tex_obj->mem[0]);
+ err = vkUnmapMemory(demo->device, tex_obj->mem[0]);
assert(!err);
}
@@ -586,12 +595,13 @@ static void demo_destroy_texture_image(struct demo *demo, struct texture_object
{
/* clean up staging resources */
for (uint32_t j = 0; j < tex_obj->num_mem; j ++) {
- vkQueueBindObjectMemory(demo->queue, tex_obj->image, j, VK_NULL_HANDLE, 0);
- vkFreeMemory(tex_obj->mem[j]);
+ vkQueueBindObjectMemory(demo->queue,
+ VK_OBJECT_TYPE_IMAGE, tex_obj->image, j, VK_NULL_HANDLE, 0);
+ vkFreeMemory(demo->device, tex_obj->mem[j]);
}
free(tex_obj->mem);
- vkDestroyObject(tex_obj->image);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, tex_obj->image);
}
static void demo_prepare_textures(struct demo *demo)
@@ -739,14 +749,16 @@ static void demo_prepare_vertices(struct demo *demo)
err = vkCreateBuffer(demo->device, &buf_info, &demo->vertices.buf);
assert(!err);
- err = vkGetObjectInfo(demo->vertices.buf,
+ 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->vertices.buf,
+ 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));
@@ -756,15 +768,17 @@ static void demo_prepare_vertices(struct demo *demo)
err = vkAllocMemory(demo->device, &mem_alloc, &demo->vertices.mem[i]);
assert(!err);
- err = vkMapMemory(demo->vertices.mem[i], 0, 0, 0, &data);
+ err = vkMapMemory(demo->device, demo->vertices.mem[i], 0, 0, 0, &data);
assert(!err);
memcpy(data, vb, sizeof(vb));
- err = vkUnmapMemory(demo->vertices.mem[i]);
+ err = vkUnmapMemory(demo->device, demo->vertices.mem[i]);
assert(!err);
- err = vkQueueBindObjectMemory(demo->queue, demo->vertices.buf, i, demo->vertices.mem[i], 0);
+ err = vkQueueBindObjectMemory(demo->queue,
+ VK_OBJECT_TYPE_BUFFER, demo->vertices.buf,
+ i, demo->vertices.mem[i], 0);
assert(!err);
}
@@ -852,7 +866,7 @@ static VkShader demo_prepare_shader(struct demo *demo,
err = vkCreateShader(demo->device, &createInfo, &shader);
if (err) {
free((void *) createInfo.pCode);
- return NULL;
+ return VK_NULL_HANDLE;
}
return shader;
@@ -983,8 +997,8 @@ static void demo_prepare_pipeline(struct demo *demo)
err = vkCreateGraphicsPipeline(demo->device, &pipeline, &demo->pipeline);
assert(!err);
- vkDestroyObject(vs.shader.shader);
- vkDestroyObject(fs.shader.shader);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_SHADER, vs.shader.shader);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_SHADER, fs.shader.shader);
}
static void demo_prepare_dynamic_states(struct demo *demo)
@@ -1094,7 +1108,7 @@ static void demo_prepare_descriptor_set(struct demo *demo)
update.count = DEMO_TEXTURE_COUNT;
update.pSamplerImageViews = combined_info;
- err = vkAllocDescriptorSets(demo->desc_pool,
+ err = vkAllocDescriptorSets(demo->device, demo->desc_pool,
VK_DESCRIPTOR_SET_USAGE_STATIC,
1, &demo->desc_layout,
&demo->desc_set, &count);
@@ -1103,8 +1117,8 @@ static void demo_prepare_descriptor_set(struct demo *demo)
vkBeginDescriptorPoolUpdate(demo->device,
VK_DESCRIPTOR_UPDATE_MODE_FASTEST);
- vkClearDescriptorSets(demo->desc_pool, 1, &demo->desc_set);
- vkUpdateDescriptors(demo->desc_set, 1, update_array);
+ vkClearDescriptorSets(demo->device, demo->desc_pool, 1, &demo->desc_set);
+ vkUpdateDescriptors(demo->device, demo->desc_set, 1, update_array);
vkEndDescriptorPoolUpdate(demo->device, demo->cmd);
}
@@ -1391,7 +1405,7 @@ static void demo_init_vk(struct demo *demo)
err = vkGetPhysicalDeviceInfo(demo->gpu, VK_PHYSICAL_DEVICE_INFO_TYPE_QUEUE_PROPERTIES,
&data_size, demo->queue_props);
assert(!err);
- queue_count = (uint32_t) (data_size / sizeof(VkPhysicalDeviceQueueProperties));
+ queue_count = (uint32_t) (data_size / sizeof(VkPhysicalDeviceQueueProperties));
assert(queue_count >= 1);
for (i = 0; i < queue_count; i++) {
@@ -1476,46 +1490,47 @@ static void demo_cleanup(struct demo *demo)
{
uint32_t i, j;
- vkDestroyObject(demo->desc_set);
- vkDestroyObject(demo->desc_pool);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DESCRIPTOR_SET, demo->desc_set);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DESCRIPTOR_POOL, demo->desc_pool);
- vkDestroyObject(demo->cmd);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_COMMAND_BUFFER, demo->cmd);
- vkDestroyObject(demo->viewport);
- vkDestroyObject(demo->raster);
- vkDestroyObject(demo->color_blend);
- vkDestroyObject(demo->depth_stencil);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DYNAMIC_VP_STATE, demo->viewport);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DYNAMIC_RS_STATE, demo->raster);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DYNAMIC_CB_STATE, demo->color_blend);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DYNAMIC_DS_STATE, demo->depth_stencil);
- vkDestroyObject(demo->pipeline);
- vkDestroyObject(demo->pipeline_layout);
- vkDestroyObject(demo->desc_layout);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_PIPELINE, demo->pipeline);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_PIPELINE_LAYOUT, demo->pipeline_layout);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, demo->desc_layout);
- vkQueueBindObjectMemory(demo->queue, demo->vertices.buf, 0, VK_NULL_HANDLE, 0);
- vkDestroyObject(demo->vertices.buf);
+ vkQueueBindObjectMemory(demo->queue, VK_OBJECT_TYPE_BUFFER, demo->vertices.buf, 0, VK_NULL_HANDLE, 0);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_BUFFER, demo->vertices.buf);
demo_remove_mem_refs(demo, demo->vertices.num_mem, demo->vertices.mem);
for (j = 0; j < demo->vertices.num_mem; j++)
- vkFreeMemory(demo->vertices.mem[j]);
+ vkFreeMemory(demo->device, demo->vertices.mem[j]);
for (i = 0; i < DEMO_TEXTURE_COUNT; i++) {
- vkDestroyObject(demo->textures[i].view);
- vkQueueBindObjectMemory(demo->queue, demo->textures[i].image, 0, VK_NULL_HANDLE, 0);
- vkDestroyObject(demo->textures[i].image);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE_VIEW, demo->textures[i].view);
+ vkQueueBindObjectMemory(demo->queue, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image, 0, VK_NULL_HANDLE, 0);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image);
demo_remove_mem_refs(demo, demo->textures[i].num_mem, demo->textures[i].mem);
for (j = 0; j < demo->textures[i].num_mem; j++)
- vkFreeMemory(demo->textures[i].mem[j]);
+ vkFreeMemory(demo->device, demo->textures[i].mem[j]);
free(demo->textures[i].mem);
- vkDestroyObject(demo->textures[i].sampler);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_SAMPLER, demo->textures[i].sampler);
}
- vkDestroyObject(demo->depth.view);
- vkQueueBindObjectMemory(demo->queue, demo->depth.image, 0, VK_NULL_HANDLE, 0);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW, demo->depth.view);
+ vkQueueBindObjectMemory(demo->queue, VK_OBJECT_TYPE_IMAGE, demo->depth.image, 0, VK_NULL_HANDLE, 0);
demo_remove_mem_refs(demo, demo->depth.num_mem, demo->depth.mem);
- vkDestroyObject(demo->depth.image);
- for (j = 0; j < demo->depth.num_mem; j++)
- vkFreeMemory(demo->depth.mem[j]);
+ 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]);
+ }
for (i = 0; i < DEMO_BUFFER_COUNT; i++) {
- vkDestroyObject(demo->buffers[i].view);
+ vkDestroyObject(demo->device, VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW, demo->buffers[i].view);
demo_remove_mem_refs(demo, 1, &demo->buffers[i].mem);
}
vkDestroySwapChainWSI(demo->swap_chain);
diff --git a/icd/common/icd-instance.c b/icd/common/icd-instance.c
index 5a6e9f72..d83fac26 100644
--- a/icd/common/icd-instance.c
+++ b/icd/common/icd-instance.c
@@ -191,7 +191,7 @@ VkResult icd_instance_remove_logger(struct icd_instance *instance,
void icd_instance_log(const struct icd_instance *instance,
VK_DBG_MSG_TYPE msg_type,
VkValidationLevel validation_level,
- VkBaseObject src_object,
+ VkObject src_object,
size_t location, int32_t msg_code,
const char *msg)
{
diff --git a/icd/common/icd-instance.h b/icd/common/icd-instance.h
index 13a146ba..45bbbc66 100644
--- a/icd/common/icd-instance.h
+++ b/icd/common/icd-instance.h
@@ -84,7 +84,7 @@ VkResult icd_instance_remove_logger(struct icd_instance *instance,
void icd_instance_log(const struct icd_instance *instance,
VK_DBG_MSG_TYPE msg_type,
VkValidationLevel validation_level,
- VkBaseObject src_object,
+ VkObject src_object,
size_t location, int32_t msg_code,
const char *msg);
diff --git a/icd/nulldrv/nulldrv.c b/icd/nulldrv/nulldrv.c
index baa8ac17..dabe6685 100644
--- a/icd/nulldrv/nulldrv.c
+++ b/icd/nulldrv/nulldrv.c
@@ -43,7 +43,7 @@ static const char * const nulldrv_gpu_exts[NULLDRV_EXT_COUNT] = {
[NULLDRV_EXT_WSI_LUNARG] = "VK_WSI_LunarG",
};
-static struct nulldrv_base *nulldrv_base(VkBaseObject base)
+static struct nulldrv_base *nulldrv_base(VkObject base)
{
return (struct nulldrv_base *) base;
}
@@ -1335,7 +1335,7 @@ ICD_EXPORT VkResult VKAPI vkGetDeviceQueue(
{
NULLDRV_LOG_FUNC;
struct nulldrv_dev *dev = nulldrv_dev(device);
- *pQueue = dev->queues[0];
+ *pQueue = (VkQueue) dev->queues[0];
return VK_SUCCESS;
}
@@ -1383,6 +1383,7 @@ ICD_EXPORT VkResult VKAPI vkCreateEvent(
}
ICD_EXPORT VkResult VKAPI vkGetEventStatus(
+ VkDevice device,
VkEvent event_)
{
NULLDRV_LOG_FUNC;
@@ -1390,6 +1391,7 @@ ICD_EXPORT VkResult VKAPI vkGetEventStatus(
}
ICD_EXPORT VkResult VKAPI vkSetEvent(
+ VkDevice device,
VkEvent event_)
{
NULLDRV_LOG_FUNC;
@@ -1397,6 +1399,7 @@ ICD_EXPORT VkResult VKAPI vkSetEvent(
}
ICD_EXPORT VkResult VKAPI vkResetEvent(
+ VkDevice device,
VkEvent event_)
{
NULLDRV_LOG_FUNC;
@@ -1416,6 +1419,7 @@ ICD_EXPORT VkResult VKAPI vkCreateFence(
}
ICD_EXPORT VkResult VKAPI vkGetFenceStatus(
+ VkDevice device,
VkFence fence_)
{
NULLDRV_LOG_FUNC;
@@ -1643,9 +1647,10 @@ ICD_EXPORT VkResult VKAPI vkCreateImage(
}
ICD_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(
- VkImage image,
- const VkImageSubresource* pSubresource,
- VkSubresourceInfoType infoType,
+ VkDevice device,
+ VkImage image,
+ const VkImageSubresource* pSubresource,
+ VkSubresourceInfoType infoType,
size_t* pDataSize,
void* pData)
{
@@ -1687,6 +1692,7 @@ ICD_EXPORT VkResult VKAPI vkAllocMemory(
}
ICD_EXPORT VkResult VKAPI vkFreeMemory(
+ VkDevice device,
VkDeviceMemory mem_)
{
NULLDRV_LOG_FUNC;
@@ -1694,14 +1700,16 @@ ICD_EXPORT VkResult VKAPI vkFreeMemory(
}
ICD_EXPORT VkResult VKAPI vkSetMemoryPriority(
+ VkDevice device,
VkDeviceMemory mem_,
- VkMemoryPriority priority)
+ VkMemoryPriority priority)
{
NULLDRV_LOG_FUNC;
return VK_SUCCESS;
}
ICD_EXPORT VkResult VKAPI vkMapMemory(
+ VkDevice device,
VkDeviceMemory mem_,
VkDeviceSize offset,
VkDeviceSize size,
@@ -1718,6 +1726,7 @@ ICD_EXPORT VkResult VKAPI vkMapMemory(
}
ICD_EXPORT VkResult VKAPI vkUnmapMemory(
+ VkDevice device,
VkDeviceMemory mem_)
{
NULLDRV_LOG_FUNC;
@@ -1725,6 +1734,7 @@ ICD_EXPORT VkResult VKAPI vkUnmapMemory(
}
ICD_EXPORT VkResult VKAPI vkFlushMappedMemory(
+ VkDevice device,
VkDeviceMemory mem_,
VkDeviceSize offset,
VkDeviceSize size)
@@ -1775,7 +1785,7 @@ ICD_EXPORT VkResult VKAPI vkCreateInstance(
inst->obj.base.get_info = NULL;
- *pInstance = (VkInstance*)inst;
+ *pInstance = (VkInstance) inst;
return VK_SUCCESS;
}
@@ -1842,6 +1852,8 @@ ICD_EXPORT VkResult VKAPI vkDbgSetGlobalOption(
}
ICD_EXPORT VkResult VKAPI vkDestroyObject(
+ VkDevice device,
+ VkObjectType objType,
VkObject object)
{
NULLDRV_LOG_FUNC;
@@ -1849,8 +1861,10 @@ ICD_EXPORT VkResult VKAPI vkDestroyObject(
}
ICD_EXPORT VkResult VKAPI vkGetObjectInfo(
- VkBaseObject object,
- VkObjectInfoType infoType,
+ VkDevice device,
+ VkObjectType objType,
+ VkObject object,
+ VkObjectInfoType infoType,
size_t* pDataSize,
void* pData)
{
@@ -1861,8 +1875,9 @@ ICD_EXPORT VkResult VKAPI vkGetObjectInfo(
}
ICD_EXPORT VkResult VKAPI vkQueueBindObjectMemory(
- VkQueue queue,
- VkObject object,
+ VkQueue queue,
+ VkObjectType objType,
+ VkObject object,
uint32_t allocationIdx,
VkDeviceMemory mem_,
VkDeviceSize memOffset)
@@ -1872,8 +1887,9 @@ ICD_EXPORT VkResult VKAPI vkQueueBindObjectMemory(
}
ICD_EXPORT VkResult VKAPI vkQueueBindObjectMemoryRange(
- VkQueue queue,
- VkObject object,
+ VkQueue queue,
+ VkObjectType objType,
+ VkObject object,
uint32_t allocationIdx,
VkDeviceSize rangeOffset,
VkDeviceSize rangeSize,
@@ -1897,7 +1913,8 @@ ICD_EXPORT VkResult VKAPI vkQueueBindImageMemoryRange(
}
ICD_EXPORT VkResult VKAPI vkDbgSetObjectTag(
- VkBaseObject object,
+ VkDevice device,
+ VkObject object,
size_t tagSize,
const void* pTag)
{
@@ -1940,6 +1957,7 @@ ICD_EXPORT VkResult VKAPI vkCreateComputePipeline(
}
ICD_EXPORT VkResult VKAPI vkStorePipeline(
+ VkDevice device,
VkPipeline pipeline,
size_t* pDataSize,
void* pData)
@@ -1979,7 +1997,8 @@ ICD_EXPORT VkResult VKAPI vkCreateQueryPool(
}
ICD_EXPORT VkResult VKAPI vkGetQueryPoolResults(
- VkQueryPool queryPool,
+ VkDevice device,
+ VkQueryPool queryPool,
uint32_t startQuery,
uint32_t queryCount,
size_t* pDataSize,
@@ -2235,6 +2254,7 @@ ICD_EXPORT VkResult VKAPI vkCreateDescriptorPool(
}
ICD_EXPORT VkResult VKAPI vkResetDescriptorPool(
+ VkDevice device,
VkDescriptorPool descriptorPool)
{
NULLDRV_LOG_FUNC;
@@ -2242,6 +2262,7 @@ ICD_EXPORT VkResult VKAPI vkResetDescriptorPool(
}
ICD_EXPORT VkResult VKAPI vkAllocDescriptorSets(
+ VkDevice device,
VkDescriptorPool descriptorPool,
VkDescriptorSetUsage setUsage,
uint32_t count,
@@ -2272,6 +2293,7 @@ ICD_EXPORT VkResult VKAPI vkAllocDescriptorSets(
}
ICD_EXPORT void VKAPI vkClearDescriptorSets(
+ VkDevice device,
VkDescriptorPool descriptorPool,
uint32_t count,
const VkDescriptorSet* pDescriptorSets)
@@ -2280,6 +2302,7 @@ ICD_EXPORT void VKAPI vkClearDescriptorSets(
}
ICD_EXPORT void VKAPI vkUpdateDescriptors(
+ VkDevice device,
VkDescriptorSet descriptorSet,
uint32_t updateCount,
const void** ppUpdateArray)
diff --git a/include/vkDbg.h b/include/vkDbg.h
index cc3c4255..f828eb8c 100644
--- a/include/vkDbg.h
+++ b/include/vkDbg.h
@@ -118,9 +118,9 @@ typedef enum _VK_DBG_OBJECT_TYPE
} VK_DBG_OBJECT_TYPE;
typedef void (VKAPI *VK_DBG_MSG_CALLBACK_FUNCTION)(
- VK_DBG_MSG_TYPE msgType,
- VkValidationLevel validationLevel,
- VkBaseObject srcObject,
+ VK_DBG_MSG_TYPE msgType,
+ VkValidationLevel validationLevel,
+ VkObject srcObject,
size_t location,
int32_t msgCode,
const char* pMsg,
@@ -131,7 +131,7 @@ typedef VkResult (VKAPI *PFN_vkDbgSetValidationLevel)(VkDevice device, VkValidat
typedef VkResult (VKAPI *PFN_vkDbgRegisterMsgCallback)(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, void* pUserData);
typedef VkResult (VKAPI *PFN_vkDbgUnregisterMsgCallback)(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback);
typedef VkResult (VKAPI *PFN_vkDbgSetMessageFilter)(VkDevice device, int32_t msgCode, VK_DBG_MSG_FILTER filter);
-typedef VkResult (VKAPI *PFN_vkDbgSetObjectTag)(VkBaseObject object, size_t tagSize, const void* pTag);
+typedef VkResult (VKAPI *PFN_vkDbgSetObjectTag)(VkDevice device, VkObject object, size_t tagSize, const void* pTag);
typedef VkResult (VKAPI *PFN_vkDbgSetGlobalOption)(VkInstance instance, VK_DBG_GLOBAL_OPTION dbgOption, size_t dataSize, const void* pData);
typedef VkResult (VKAPI *PFN_vkDbgSetDeviceOption)(VkDevice device, VK_DBG_DEVICE_OPTION dbgOption, size_t dataSize, const void* pData);
typedef void (VKAPI *PFN_vkCmdDbgMarkerBegin)(VkCmdBuffer cmdBuffer, const char* pMarker);
@@ -157,7 +157,8 @@ VkResult VKAPI vkDbgSetMessageFilter(
VK_DBG_MSG_FILTER filter);
VkResult VKAPI vkDbgSetObjectTag(
- VkBaseObject object,
+ VkDevice device,
+ VkObject object,
size_t tagSize,
const void* pTag);
diff --git a/include/vkLayer.h b/include/vkLayer.h
index 55fb3848..ec6e8acc 100644
--- a/include/vkLayer.h
+++ b/include/vkLayer.h
@@ -19,8 +19,8 @@
typedef struct VkBaseLayerObject_
{
PFN_vkGetProcAddr pGPA;
- VkBaseObject nextObject;
- VkBaseObject baseObject;
+ VkObject nextObject;
+ VkObject baseObject;
} VkBaseLayerObject;
typedef struct VkLayerDispatchTable_
diff --git a/include/vk_platform.h b/include/vk_platform.h
index 957c135e..90db1b2f 100644
--- a/include/vk_platform.h
+++ b/include/vk_platform.h
@@ -2,7 +2,7 @@
// File: vk_platform.h
//
/*
-** Copyright (c) 2014 The Khronos Group Inc.
+** Copyright (c) 2014-2015 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
@@ -82,6 +82,16 @@ typedef uint32_t bool32_t;
typedef uint32_t VkSampleMask;
typedef uint32_t VkFlags;
+#if (UINTPTR_MAX >= UINT64_MAX)
+ #define VK_UINTPTRLEAST64_MAX UINTPTR_MAX
+
+ typedef uintptr_t VkUintPtrLeast64;
+#else
+ #define VK_UINTPTRLEAST64_MAX UINT64_MAX
+
+ typedef uint64_t VkUintPtrLeast64;
+#endif
+
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
diff --git a/include/vulkan.h b/include/vulkan.h
index 98c32852..ef5ee5c4 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, 84, 0)
+#define VK_API_VERSION VK_MAKE_VERSION(0, 90, 0)
#ifdef __cplusplus
extern "C"
@@ -46,49 +46,60 @@ extern "C"
***************************************************************************************************
*/
-#ifdef __cplusplus
- #define VK_DEFINE_HANDLE(_obj) struct _obj##_T {char _dummy;}; typedef _obj##_T* _obj;
- #define VK_DEFINE_SUBCLASS_HANDLE(_obj, _base) struct _obj##_T : public _base##_T {}; typedef _obj##_T* _obj;
-#else // __cplusplus
- #define VK_DEFINE_HANDLE(_obj) typedef void* _obj;
- #define VK_DEFINE_SUBCLASS_HANDLE(_obj, _base) typedef void* _obj;
-#endif // __cplusplus
-
-VK_DEFINE_HANDLE(VkInstance)
-VK_DEFINE_HANDLE(VkPhysicalDevice)
-VK_DEFINE_HANDLE(VkBaseObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkDevice, VkBaseObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkQueue, VkBaseObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkDeviceMemory, VkBaseObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkObject, VkBaseObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkBuffer, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkBufferView, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkImage, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkImageView, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkColorAttachmentView, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkDepthStencilView, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkShader, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkPipeline, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkPipelineLayout, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkSampler, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkDescriptorSet, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkDescriptorSetLayout, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkDescriptorPool, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkDynamicStateObject, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkDynamicVpState, VkDynamicStateObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkDynamicRsState, VkDynamicStateObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkDynamicCbState, VkDynamicStateObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkDynamicDsState, VkDynamicStateObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkCmdBuffer, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkFence, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkSemaphore, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkEvent, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkQueryPool, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkFramebuffer, VkObject)
-VK_DEFINE_SUBCLASS_HANDLE(VkRenderPass, VkObject)
+#if defined (__cplusplus) && (VK_UINTPTRLEAST64_MAX == UINTPTR_MAX)
+ #define VK_TYPE_SAFE_COMPATIBLE_HANDLES 1
+#endif
+
+#if defined(VK_TYPE_SAFE_COMPATIBLE_HANDLES) && !defined(VK_DISABLE_TYPE_SAFE_HANDLES)
+ #define VK_DEFINE_PTR_HANDLE(_obj) struct _obj##_T { char _dummy; }; typedef _obj##_T* _obj;
+ #define VK_DEFINE_PTR_SUBCLASS_HANDLE(_obj, _base) struct _obj##_T : public _base##_T {}; typedef _obj##_T* _obj;
+
+ #define VK_DEFINE_BASE_HANDLE(_obj) VK_DEFINE_PTR_HANDLE(_obj)
+ #define VK_DEFINE_DISP_SUBCLASS_HANDLE(_obj, _base) VK_DEFINE_PTR_SUBCLASS_HANDLE(_obj, _base)
+ #define VK_DEFINE_NONDISP_SUBCLASS_HANDLE(_obj, _base) VK_DEFINE_PTR_SUBCLASS_HANDLE(_obj, _base)
+#else
+ #define VK_DEFINE_BASE_HANDLE(_obj) typedef VkUintPtrLeast64 _obj;
+ #define VK_DEFINE_DISP_SUBCLASS_HANDLE(_obj, _base) typedef uintptr_t _obj;
+ #define VK_DEFINE_NONDISP_SUBCLASS_HANDLE(_obj, _base) typedef VkUintPtrLeast64 _obj;
+#endif
+
+VK_DEFINE_BASE_HANDLE(VkObject)
+
+VK_DEFINE_DISP_SUBCLASS_HANDLE(VkInstance, VkObject)
+VK_DEFINE_DISP_SUBCLASS_HANDLE(VkPhysicalDevice, VkObject)
+VK_DEFINE_DISP_SUBCLASS_HANDLE(VkDevice, VkObject)
+VK_DEFINE_DISP_SUBCLASS_HANDLE(VkQueue, VkObject)
+VK_DEFINE_DISP_SUBCLASS_HANDLE(VkCmdBuffer, VkObject)
+
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkNonDispatchable, VkObject)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDeviceMemory, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkBuffer, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkBufferView, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkImage, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkImageView, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkColorAttachmentView, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDepthStencilView, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkShader, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkPipeline, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkPipelineLayout, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkSampler, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDescriptorSet, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDescriptorSetLayout, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDescriptorPool, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDynamicStateObject, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDynamicVpState, VkDynamicStateObject)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDynamicRsState, VkDynamicStateObject)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDynamicCbState, VkDynamicStateObject)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDynamicDsState, VkDynamicStateObject)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkFence, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkSemaphore, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkEvent, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkQueryPool, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkFramebuffer, VkNonDispatchable)
+VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkRenderPass, VkNonDispatchable)
#define VK_MAX_PHYSICAL_DEVICE_NAME 256
-#define VK_MAX_EXTENSION_NAME 256
+#define VK_MAX_EXTENSION_NAME 256
#define VK_LOD_CLAMP_NONE MAX_FLOAT
#define VK_LAST_MIP_OR_SLICE 0xffffffff
@@ -849,6 +860,46 @@ typedef enum VkStructureType_
VK_ENUM_RANGE(STRUCTURE_TYPE, APPLICATION_INFO, PIPELINE_LAYOUT_CREATE_INFO)
} VkStructureType;
+// Object type enumerant
+typedef enum VkObjectType_
+{
+ VK_OBJECT_TYPE_INSTANCE = 0,
+ VK_OBJECT_TYPE_PHYSICAL_DEVICE = 1,
+ VK_OBJECT_TYPE_DEVICE = 2,
+ VK_OBJECT_TYPE_QUEUE = 3,
+ VK_OBJECT_TYPE_COMMAND_BUFFER = 4,
+ VK_OBJECT_TYPE_DEVICE_MEMORY = 5,
+ VK_OBJECT_TYPE_BUFFER = 6,
+ VK_OBJECT_TYPE_BUFFER_VIEW = 7,
+ VK_OBJECT_TYPE_IMAGE = 8,
+ VK_OBJECT_TYPE_IMAGE_VIEW = 9,
+ VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW = 10,
+ VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW = 11,
+ VK_OBJECT_TYPE_SHADER = 12,
+ VK_OBJECT_TYPE_PIPELINE = 13,
+ VK_OBJECT_TYPE_PIPELINE_LAYOUT = 14,
+ VK_OBJECT_TYPE_SAMPLER = 15,
+ VK_OBJECT_TYPE_DESCRIPTOR_SET = 16,
+ VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 17,
+ VK_OBJECT_TYPE_DESCRIPTOR_POOL = 18,
+ VK_OBJECT_TYPE_DYNAMIC_VP_STATE = 19,
+ VK_OBJECT_TYPE_DYNAMIC_RS_STATE = 20,
+ VK_OBJECT_TYPE_DYNAMIC_CB_STATE = 21,
+ VK_OBJECT_TYPE_DYNAMIC_DS_STATE = 22,
+ VK_OBJECT_TYPE_FENCE = 23,
+ VK_OBJECT_TYPE_SEMAPHORE = 24,
+ VK_OBJECT_TYPE_EVENT = 25,
+ VK_OBJECT_TYPE_QUERY_POOL = 26,
+ VK_OBJECT_TYPE_FRAMEBUFFER = 27,
+ VK_OBJECT_TYPE_RENDER_PASS = 28,
+
+ // Valid ranges for core Vulkan:
+ VK_OBJECT_TYPE_BEGIN_RANGE = VK_OBJECT_TYPE_INSTANCE,
+ VK_OBJECT_TYPE_END_RANGE = VK_OBJECT_TYPE_RENDER_PASS,
+ VK_NUM_OBJECT_TYPE = (VK_OBJECT_TYPE_END_RANGE - VK_OBJECT_TYPE_BEGIN_RANGE + 1),
+ VK_MAX_ENUM(VkObjectType)
+} VkObjectType;
+
// ------------------------------------------------------------------------------------------------
// Error and return codes
@@ -1302,7 +1353,7 @@ typedef struct VkInstanceCreateInfo_
} VkInstanceCreateInfo;
// can be added to VkDeviceCreateInfo via pNext
-typedef struct _VkLayerCreateInfo
+typedef struct VkLayerCreateInfo_
{
VkStructureType sType; // Should be VK_STRUCTURE_TYPE_LAYER_CREATE_INFO
const void* pNext; // Pointer to next structure
@@ -1355,6 +1406,7 @@ typedef struct VkMemoryRequirements_
VkDeviceSize granularity; // Granularity on which vkQueueBindObjectMemoryRange can bind sub-ranges of memory specified in bytes (usually the page size)
VkMemoryPropertyFlags memPropsAllowed; // Allowed memory property flags
VkMemoryPropertyFlags memPropsRequired; // Required memory property flags
+
} VkMemoryRequirements;
typedef struct VkFormatProperties_
@@ -1715,9 +1767,6 @@ typedef struct VkComputePipelineCreateInfo_
VkPipelineShader cs;
VkPipelineCreateFlags flags; // Pipeline creation flags
VkPipelineLayout layout; // Interface layout of the pipeline
- uint32_t localSizeX;
- uint32_t localSizeY;
- uint32_t localSizeZ;
} VkComputePipelineCreateInfo;
typedef struct VkVertexInputBindingDescription_
@@ -2093,40 +2142,40 @@ typedef VkResult (VKAPI *PFN_vkQueueRemoveMemReferences)(VkQueue queue, uint32_t
typedef VkResult (VKAPI *PFN_vkQueueWaitIdle)(VkQueue queue);
typedef VkResult (VKAPI *PFN_vkDeviceWaitIdle)(VkDevice device);
typedef VkResult (VKAPI *PFN_vkAllocMemory)(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem);
-typedef VkResult (VKAPI *PFN_vkFreeMemory)(VkDeviceMemory mem);
-typedef VkResult (VKAPI *PFN_vkSetMemoryPriority)(VkDeviceMemory mem, VkMemoryPriority priority);
-typedef VkResult (VKAPI *PFN_vkMapMemory)(VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
-typedef VkResult (VKAPI *PFN_vkUnmapMemory)(VkDeviceMemory mem);
-typedef VkResult (VKAPI *PFN_vkFlushMappedMemory)(VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size);
+typedef VkResult (VKAPI *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory mem);
+typedef VkResult (VKAPI *PFN_vkSetMemoryPriority)(VkDevice device, VkDeviceMemory mem, VkMemoryPriority priority);
+typedef VkResult (VKAPI *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
+typedef VkResult (VKAPI *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory mem);
+typedef VkResult (VKAPI *PFN_vkFlushMappedMemory)(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size);
typedef VkResult (VKAPI *PFN_vkPinSystemMemory)(VkDevice device, const void* pSysMem, size_t memSize, VkDeviceMemory* pMem);
typedef VkResult (VKAPI *PFN_vkGetMultiDeviceCompatibility)(VkPhysicalDevice physicalDevice0, VkPhysicalDevice physicalDevice1, VkPhysicalDeviceCompatibilityInfo* pInfo);
typedef VkResult (VKAPI *PFN_vkOpenSharedMemory)(VkDevice device, const VkMemoryOpenInfo* pOpenInfo, VkDeviceMemory* pMem);
typedef VkResult (VKAPI *PFN_vkOpenSharedSemaphore)(VkDevice device, const VkSemaphoreOpenInfo* pOpenInfo, VkSemaphore* pSemaphore);
typedef VkResult (VKAPI *PFN_vkOpenPeerMemory)(VkDevice device, const VkPeerMemoryOpenInfo* pOpenInfo, VkDeviceMemory* pMem);
typedef VkResult (VKAPI *PFN_vkOpenPeerImage)(VkDevice device, const VkPeerImageOpenInfo* pOpenInfo, VkImage* pImage, VkDeviceMemory* pMem);
-typedef VkResult (VKAPI *PFN_vkDestroyObject)(VkObject object);
-typedef VkResult (VKAPI *PFN_vkGetObjectInfo)(VkBaseObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData);
-typedef VkResult (VKAPI *PFN_vkQueueBindObjectMemory)(VkQueue queue, VkObject object, uint32_t allocationIdx, VkDeviceMemory mem, VkDeviceSize offset);
-typedef VkResult (VKAPI *PFN_vkQueueBindObjectMemoryRange)(VkQueue queue, VkObject object, uint32_t allocationIdx, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset);
+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_vkQueueBindObjectMemory)(VkQueue queue, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkDeviceMemory mem, VkDeviceSize offset);
+typedef VkResult (VKAPI *PFN_vkQueueBindObjectMemoryRange)(VkQueue queue, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset);
typedef VkResult (VKAPI *PFN_vkQueueBindImageMemoryRange)(VkQueue queue, VkImage image, uint32_t allocationIdx, 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)(VkFence fence);
+typedef VkResult (VKAPI *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
typedef VkResult (VKAPI *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, bool32_t waitAll, uint64_t timeout);
typedef VkResult (VKAPI *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore);
typedef VkResult (VKAPI *PFN_vkQueueSignalSemaphore)(VkQueue queue, VkSemaphore semaphore);
typedef VkResult (VKAPI *PFN_vkQueueWaitSemaphore)(VkQueue queue, VkSemaphore semaphore);
typedef VkResult (VKAPI *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent);
-typedef VkResult (VKAPI *PFN_vkGetEventStatus)(VkEvent event);
-typedef VkResult (VKAPI *PFN_vkSetEvent)(VkEvent event);
-typedef VkResult (VKAPI *PFN_vkResetEvent)(VkEvent event);
+typedef VkResult (VKAPI *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI *PFN_vkSetEvent)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI *PFN_vkResetEvent)(VkDevice device, VkEvent event);
typedef VkResult (VKAPI *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool);
-typedef VkResult (VKAPI *PFN_vkGetQueryPoolResults)(VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags);
+typedef VkResult (VKAPI *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags);
typedef VkResult (VKAPI *PFN_vkGetFormatInfo)(VkDevice device, VkFormat format, VkFormatInfoType infoType, size_t* pDataSize, void* pData);
typedef VkResult (VKAPI *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer);
typedef VkResult (VKAPI *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView);
typedef VkResult (VKAPI *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage);
-typedef VkResult (VKAPI *PFN_vkGetImageSubresourceInfo)(VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData);
+typedef VkResult (VKAPI *PFN_vkGetImageSubresourceInfo)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData);
typedef VkResult (VKAPI *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView);
typedef VkResult (VKAPI *PFN_vkCreateColorAttachmentView)(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView);
typedef VkResult (VKAPI *PFN_vkCreateDepthStencilView)(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView);
@@ -2134,7 +2183,7 @@ typedef VkResult (VKAPI *PFN_vkCreateShader)(VkDevice device, const VkShaderCrea
typedef VkResult (VKAPI *PFN_vkCreateGraphicsPipeline)(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline);
typedef VkResult (VKAPI *PFN_vkCreateGraphicsPipelineDerivative)(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline);
typedef VkResult (VKAPI *PFN_vkCreateComputePipeline)(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline);
-typedef VkResult (VKAPI *PFN_vkStorePipeline)(VkPipeline pipeline, size_t* pDataSize, void* pData);
+typedef VkResult (VKAPI *PFN_vkStorePipeline)(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData);
typedef VkResult (VKAPI *PFN_vkLoadPipeline)(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline);
typedef VkResult (VKAPI *PFN_vkLoadPipelineDerivative)(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline);
typedef VkResult (VKAPI *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout);
@@ -2143,10 +2192,10 @@ typedef VkResult (VKAPI *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const
typedef VkResult (VKAPI *PFN_vkBeginDescriptorPoolUpdate)(VkDevice device, VkDescriptorUpdateMode updateMode);
typedef VkResult (VKAPI *PFN_vkEndDescriptorPoolUpdate)(VkDevice device, VkCmdBuffer cmd);
typedef VkResult (VKAPI *PFN_vkCreateDescriptorPool)(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool);
-typedef VkResult (VKAPI *PFN_vkResetDescriptorPool)(VkDescriptorPool descriptorPool);
-typedef VkResult (VKAPI *PFN_vkAllocDescriptorSets)(VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount);
-typedef void (VKAPI *PFN_vkClearDescriptorSets)(VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
-typedef void (VKAPI *PFN_vkUpdateDescriptors)(VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray);
+typedef VkResult (VKAPI *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool);
+typedef VkResult (VKAPI *PFN_vkAllocDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount);
+typedef void (VKAPI *PFN_vkClearDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
+typedef void (VKAPI *PFN_vkUpdateDescriptors)(VkDevice device, VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray);
typedef VkResult (VKAPI *PFN_vkCreateDynamicViewportState)(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState);
typedef VkResult (VKAPI *PFN_vkCreateDynamicRasterState)(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState);
typedef VkResult (VKAPI *PFN_vkCreateDynamicColorBlendState)(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState);
@@ -2292,13 +2341,16 @@ VkResult VKAPI vkAllocMemory(
VkDeviceMemory* pMem);
VkResult VKAPI vkFreeMemory(
+ VkDevice device,
VkDeviceMemory mem);
VkResult VKAPI vkSetMemoryPriority(
+ VkDevice device,
VkDeviceMemory mem,
VkMemoryPriority priority);
VkResult VKAPI vkMapMemory(
+ VkDevice device,
VkDeviceMemory mem,
VkDeviceSize offset,
VkDeviceSize size,
@@ -2306,9 +2358,11 @@ VkResult VKAPI vkMapMemory(
void** ppData);
VkResult VKAPI vkUnmapMemory(
+ VkDevice device,
VkDeviceMemory mem);
VkResult VKAPI vkFlushMappedMemory(
+ VkDevice device,
VkDeviceMemory mem,
VkDeviceSize offset,
VkDeviceSize size);
@@ -2350,10 +2404,14 @@ VkResult VKAPI vkOpenPeerImage(
// Generic API object functions
VkResult VKAPI vkDestroyObject(
+ VkDevice device,
+ VkObjectType objType,
VkObject object);
VkResult VKAPI vkGetObjectInfo(
- VkBaseObject object,
+ VkDevice device,
+ VkObjectType objType,
+ VkObject object,
VkObjectInfoType infoType,
size_t* pDataSize,
void* pData);
@@ -2362,6 +2420,7 @@ VkResult VKAPI vkGetObjectInfo(
VkResult VKAPI vkQueueBindObjectMemory(
VkQueue queue,
+ VkObjectType objType,
VkObject object,
uint32_t allocationIdx,
VkDeviceMemory mem,
@@ -2369,6 +2428,7 @@ VkResult VKAPI vkQueueBindObjectMemory(
VkResult VKAPI vkQueueBindObjectMemoryRange(
VkQueue queue,
+ VkObjectType objType,
VkObject object,
uint32_t allocationIdx,
VkDeviceSize rangeOffset,
@@ -2397,6 +2457,7 @@ VkResult VKAPI vkResetFences(
VkFence* pFences);
VkResult VKAPI vkGetFenceStatus(
+ VkDevice device,
VkFence fence);
VkResult VKAPI vkWaitForFences(
@@ -2429,12 +2490,15 @@ VkResult VKAPI vkCreateEvent(
VkEvent* pEvent);
VkResult VKAPI vkGetEventStatus(
+ VkDevice device,
VkEvent event);
VkResult VKAPI vkSetEvent(
+ VkDevice device,
VkEvent event);
VkResult VKAPI vkResetEvent(
+ VkDevice device,
VkEvent event);
// Query functions
@@ -2445,6 +2509,7 @@ VkResult VKAPI vkCreateQueryPool(
VkQueryPool* pQueryPool);
VkResult VKAPI vkGetQueryPoolResults(
+ VkDevice device,
VkQueryPool queryPool,
uint32_t startQuery,
uint32_t queryCount,
@@ -2483,6 +2548,7 @@ VkResult VKAPI vkCreateImage(
VkImage* pImage);
VkResult VKAPI vkGetImageSubresourceInfo(
+ VkDevice device,
VkImage image,
const VkImageSubresource* pSubresource,
VkSubresourceInfoType infoType,
@@ -2532,6 +2598,7 @@ VkResult VKAPI vkCreateComputePipeline(
VkPipeline* pPipeline);
VkResult VKAPI vkStorePipeline(
+ VkDevice device,
VkPipeline pipeline,
size_t* pDataSize,
void* pData);
@@ -2586,9 +2653,11 @@ VkResult VKAPI vkCreateDescriptorPool(
VkDescriptorPool* pDescriptorPool);
VkResult VKAPI vkResetDescriptorPool(
+ VkDevice device,
VkDescriptorPool descriptorPool);
VkResult VKAPI vkAllocDescriptorSets(
+ VkDevice device,
VkDescriptorPool descriptorPool,
VkDescriptorSetUsage setUsage,
uint32_t count,
@@ -2597,11 +2666,13 @@ VkResult VKAPI vkAllocDescriptorSets(
uint32_t* pCount);
void VKAPI vkClearDescriptorSets(
+ VkDevice device,
VkDescriptorPool descriptorPool,
uint32_t count,
const VkDescriptorSet* pDescriptorSets);
void VKAPI vkUpdateDescriptors(
+ VkDevice device,
VkDescriptorSet descriptorSet,
uint32_t updateCount,
const void** ppUpdateArray);
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index 852eb915..aae865b8 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -1546,10 +1546,10 @@ VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCo
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkObject object)
+VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
{
// TODO : When wrapped objects (such as dynamic state) are destroyed, need to clean up memory
- VkResult result = nextTable.DestroyObject(object);
+ VkResult result = nextTable.DestroyObject(device, objType, object);
return result;
}
@@ -1746,13 +1746,13 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescrip
// Insert this pool into Global Pool LL at head
char str[1024];
sprintf(str, "Created Descriptor Pool %p", (void*)*pDescriptorPool);
- layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, (VkBaseObject)pDescriptorPool, 0, DRAWSTATE_NONE, "DS", str);
+ layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, (VkObject)pDescriptorPool, 0, DRAWSTATE_NONE, "DS", str);
loader_platform_thread_lock_mutex(&globalLock);
POOL_NODE* pNewNode = new POOL_NODE;
if (NULL == pNewNode) {
char str[1024];
sprintf(str, "Out of memory while attempting to allocate POOL_NODE in vkCreateDescriptorPool()");
- layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, (VkBaseObject)*pDescriptorPool, 0, DRAWSTATE_OUT_OF_MEMORY, "DS", str);
+ layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, (VkObject)*pDescriptorPool, 0, DRAWSTATE_OUT_OF_MEMORY, "DS", str);
}
else {
memset(pNewNode, 0, sizeof(POOL_NODE));
@@ -1777,18 +1777,18 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescrip
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDescriptorPool descriptorPool)
+VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
{
- VkResult result = nextTable.ResetDescriptorPool(descriptorPool);
+ VkResult result = nextTable.ResetDescriptorPool(device, descriptorPool);
if (VK_SUCCESS == result) {
clearDescriptorPool(descriptorPool);
}
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
+VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
{
- VkResult result = nextTable.AllocDescriptorSets(descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
+ VkResult result = nextTable.AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
if ((VK_SUCCESS == result) || (*pCount > 0)) {
POOL_NODE *pPoolNode = getPoolNode(descriptorPool);
if (!pPoolNode) {
@@ -1837,15 +1837,15 @@ VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDescriptorPool descriptor
return result;
}
-VK_LAYER_EXPORT void VKAPI vkClearDescriptorSets(VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
+VK_LAYER_EXPORT void VKAPI vkClearDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
{
for (uint32_t i = 0; i < count; i++) {
clearDescriptorSet(pDescriptorSets[i]);
}
- nextTable.ClearDescriptorSets(descriptorPool, count, pDescriptorSets);
+ nextTable.ClearDescriptorSets(device, descriptorPool, count, pDescriptorSets);
}
-VK_LAYER_EXPORT void VKAPI vkUpdateDescriptors(VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray)
+VK_LAYER_EXPORT void VKAPI vkUpdateDescriptors(VkDevice device, VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray)
{
SET_NODE* pSet = getSetNode(descriptorSet);
if (!dsUpdateActive(descriptorSet)) {
@@ -1858,7 +1858,7 @@ VK_LAYER_EXPORT void VKAPI vkUpdateDescriptors(VkDescriptorSet descriptorSet, ui
dsUpdate(descriptorSet, updateCount, ppUpdateArray);
}
- nextTable.UpdateDescriptors(descriptorSet, updateCount, ppUpdateArray);
+ nextTable.UpdateDescriptors(device, descriptorSet, updateCount, ppUpdateArray);
}
VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
diff --git a/layers/glave_snapshot.c b/layers/glave_snapshot.c
index b4a25076..81a2b588 100644
--- a/layers/glave_snapshot.c
+++ b/layers/glave_snapshot.c
@@ -610,41 +610,41 @@ VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllo
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkGpuMemory mem)
+VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkGpuMemory mem)
{
- VkResult result = nextTable.FreeMemory(mem);
+ VkResult result = nextTable.FreeMemory(device, mem);
loader_platform_thread_lock_mutex(&objLock);
snapshot_remove_object(&s_delta, (void*)mem);
loader_platform_thread_unlock_mutex(&objLock);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkGpuMemory mem, VkMemoryPriority priority)
+VK_LAYER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkDevice device, VkGpuMemory mem, VkMemoryPriority priority)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)mem, VK_OBJECT_TYPE_GPU_MEMORY);
loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.SetMemoryPriority(mem, priority);
+ VkResult result = nextTable.SetMemoryPriority(device, mem, priority);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkGpuMemory mem, VkFlags flags, void** ppData)
+VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkGpuMemory mem, VkFlags flags, void** ppData)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)mem, VK_OBJECT_TYPE_GPU_MEMORY);
loader_platform_thread_unlock_mutex(&objLock);
set_status((void*)mem, VK_OBJECT_TYPE_GPU_MEMORY, OBJSTATUS_GPU_MEM_MAPPED);
- VkResult result = nextTable.MapMemory(mem, flags, ppData);
+ VkResult result = nextTable.MapMemory(device, mem, flags, ppData);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkGpuMemory mem)
+VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkGpuMemory mem)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)mem, VK_OBJECT_TYPE_GPU_MEMORY);
loader_platform_thread_unlock_mutex(&objLock);
reset_status((void*)mem, VK_OBJECT_TYPE_GPU_MEMORY, OBJSTATUS_GPU_MEM_MAPPED);
- VkResult result = nextTable.UnmapMemory(mem);
+ VkResult result = nextTable.UnmapMemory(device, mem);
return result;
}
@@ -705,39 +705,39 @@ VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerImage(VkDevice device, const VkPeerImag
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkObject object)
+VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
{
- VkResult result = nextTable.DestroyObject(object);
+ VkResult result = nextTable.DestroyObject(device, objType, object);
loader_platform_thread_lock_mutex(&objLock);
snapshot_remove_object(&s_delta, (void*)object);
loader_platform_thread_unlock_mutex(&objLock);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkBaseObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
+VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkDevice device, VkObjectType objType, VkObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
{
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.GetObjectInfo(object, infoType, pDataSize, pData);
+ VkResult result = nextTable.GetObjectInfo(device, objType, object, infoType, pDataSize, pData);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory(VkObject object, uint32_t allocationIdx, VkGpuMemory mem, VkGpuSize offset)
+VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory(VkQueue queue, VkObjectType objType, VkObject object, uint32_t allocationIdx, 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(object, allocationIdx, mem, offset);
+ VkResult result = nextTable.BindObjectMemory(queue, objType, object, allocationIdx, mem, offset);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemoryRange(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, uint32_t allocationIdx, 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(object, allocationIdx, rangeOffset, rangeSize, mem, memOffset);
+ VkResult result = nextTable.BindObjectMemoryRange(queue, objType, object, allocationIdx, rangeOffset, rangeSize, mem, memOffset);
return result;
}
@@ -766,13 +766,13 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreat
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkFence fence)
+VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)fence, VK_OBJECT_TYPE_FENCE);
loader_platform_thread_unlock_mutex(&objLock);
// Warn if submitted_flag is not set
- VkResult result = nextTable.GetFenceStatus(fence);
+ VkResult result = nextTable.GetFenceStatus(device, fence);
return result;
}
@@ -829,30 +829,30 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreat
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(VkEvent event)
+VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)event, VK_OBJECT_TYPE_EVENT);
loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.GetEventStatus(event);
+ VkResult result = nextTable.GetEventStatus(device, event);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(VkEvent event)
+VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)event, VK_OBJECT_TYPE_EVENT);
loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.SetEvent(event);
+ VkResult result = nextTable.SetEvent(device, event);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(VkEvent event)
+VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)event, VK_OBJECT_TYPE_EVENT);
loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.ResetEvent(event);
+ VkResult result = nextTable.ResetEvent(device, event);
return result;
}
@@ -872,12 +872,12 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryP
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData)
+VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)queryPool, VK_OBJECT_TYPE_QUERY_POOL);
loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.GetQueryPoolResults(queryPool, startQuery, queryCount, pDataSize, pData);
+ VkResult result = nextTable.GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData);
return result;
}
@@ -938,12 +938,12 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreat
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
+VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
{
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.GetImageSubresourceInfo(image, pSubresource, infoType, pDataSize, pData);
+ VkResult result = nextTable.GetImageSubresourceInfo(device, image, pSubresource, infoType, pDataSize, pData);
return result;
}
@@ -1043,12 +1043,12 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const Vk
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline(VkPipeline pipeline, size_t* pDataSize, void* pData)
+VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)pipeline, VK_OBJECT_TYPE_PIPELINE);
loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.StorePipeline(pipeline, pDataSize, pData);
+ VkResult result = nextTable.StorePipeline(device, pipeline, pDataSize, pData);
return result;
}
@@ -1127,21 +1127,21 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescrip
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDescriptorPool descriptorPool)
+VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)descriptorPool, VK_OBJECT_TYPE_DESCRIPTOR_POOL);
loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.ResetDescriptorPool(descriptorPool);
+ VkResult result = nextTable.ResetDescriptorPool(device, descriptorPool);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
+VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)descriptorPool, VK_OBJECT_TYPE_DESCRIPTOR_POOL);
loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.AllocDescriptorSets(descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
+ VkResult result = nextTable.AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
if (result == VK_SUCCESS)
{
for (uint32_t i = 0; i < *pCount; i++) {
@@ -1154,20 +1154,20 @@ VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDescriptorPool descriptor
return result;
}
-VK_LAYER_EXPORT void VKAPI vkClearDescriptorSets(VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
+VK_LAYER_EXPORT void VKAPI vkClearDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)descriptorPool, VK_OBJECT_TYPE_DESCRIPTOR_POOL);
loader_platform_thread_unlock_mutex(&objLock);
- nextTable.ClearDescriptorSets(descriptorPool, count, pDescriptorSets);
+ nextTable.ClearDescriptorSets(device, descriptorPool, count, pDescriptorSets);
}
-VK_LAYER_EXPORT void VKAPI vkUpdateDescriptors(VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray)
+VK_LAYER_EXPORT void VKAPI vkUpdateDescriptors(VkDevice device, VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)descriptorSet, VK_OBJECT_TYPE_DESCRIPTOR_SET);
loader_platform_thread_unlock_mutex(&objLock);
- nextTable.UpdateDescriptors(descriptorSet, updateCount, ppUpdateArray);
+ nextTable.UpdateDescriptors(device, descriptorSet, updateCount, ppUpdateArray);
}
VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
@@ -1652,7 +1652,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkDbgSetMessageFilter(VkDevice device, int32_t ms
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkDbgSetObjectTag(VkBaseObject object, size_t tagSize, const void* pTag)
+VK_LAYER_EXPORT VkResult VKAPI vkDbgSetObjectTag(VkObject object, size_t tagSize, const void* pTag)
{
loader_platform_thread_lock_mutex(&objLock);
ll_increment_use_count((void*)object, ll_get_obj_type(object));
diff --git a/layers/layers_msg.h b/layers/layers_msg.h
index cda11051..3cd5a0c2 100644
--- a/layers/layers_msg.h
+++ b/layers/layers_msg.h
@@ -33,8 +33,8 @@ static FILE *g_logFile = NULL;
// Utility function to handle reporting
// If callbacks are enabled, use them, otherwise use printf
static void layerCbMsg(VK_DBG_MSG_TYPE msgType,
- VkValidationLevel validationLevel,
- VkBaseObject srcObject,
+ VkValidationLevel validationLevel,
+ VkObject srcObject,
size_t location,
int32_t msgCode,
const char* pLayerPrefix,
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index bf0a325f..6f5eb39f 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -177,7 +177,7 @@ static void deleteFenceInfo(uint64_t fenceId)
MT_FENCE_INFO* pDelInfo = fenceMap[fenceId];
if (pDelInfo != NULL) {
if (pDelInfo->localFence == VK_TRUE) {
- nextTable.DestroyObject(pDelInfo->fence);
+ nextTable.DestroyObject(globalDevice, VK_OBJECT_TYPE_FENCE, pDelInfo->fence);
}
delete pDelInfo;
}
@@ -1074,7 +1074,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllo
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkDeviceMemory mem)
+VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
{
/* From spec : A memory object is freed by calling vkFreeMemory() when it is no longer needed. Before
* freeing a memory object, an application must ensure the memory object is unbound from
@@ -1090,19 +1090,19 @@ VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkDeviceMemory mem)
printObjList();
printCBList();
loader_platform_thread_unlock_mutex(&globalLock);
- VkResult result = nextTable.FreeMemory(mem);
+ VkResult result = nextTable.FreeMemory(device, mem);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkDeviceMemory mem, VkMemoryPriority priority)
+VK_LAYER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkDevice device, VkDeviceMemory mem, VkMemoryPriority priority)
{
// TODO : Update tracking for this alloc
// Make sure memory is not pinned, which can't have priority set
- VkResult result = nextTable.SetMemoryPriority(mem, priority);
+ VkResult result = nextTable.SetMemoryPriority(device, mem, priority);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
+VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
{
// TODO : Track when memory is mapped
loader_platform_thread_lock_mutex(&globalLock);
@@ -1113,15 +1113,15 @@ VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkDeviceMemory mem, VkDeviceSize offs
layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, mem, 0, MEMTRACK_INVALID_STATE, "MEM", str);
}
loader_platform_thread_unlock_mutex(&globalLock);
- VkResult result = nextTable.MapMemory(mem, offset, size, flags, ppData);
+ VkResult result = nextTable.MapMemory(device, mem, offset, size, flags, ppData);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkDeviceMemory mem)
+VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
{
// TODO : Track as memory gets unmapped, do we want to check what changed following map?
// Make sure that memory was ever mapped to begin with
- VkResult result = nextTable.UnmapMemory(mem);
+ VkResult result = nextTable.UnmapMemory(device, mem);
return result;
}
@@ -1154,7 +1154,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerImage(VkDevice device, const VkPeerImag
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkObject object)
+VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
{
loader_platform_thread_lock_mutex(&globalLock);
@@ -1185,22 +1185,38 @@ VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkObject object)
}
loader_platform_thread_unlock_mutex(&globalLock);
- VkResult result = nextTable.DestroyObject(object);
+ VkResult result = nextTable.DestroyObject(device, objType, object);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkBaseObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
+VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkDevice device, VkObjectType objType, VkObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
{
// TODO : What to track here?
// Could potentially save returned mem requirements and validate values passed into QueueBindObjectMemory for this object
// From spec : The only objects that are guaranteed to have no external memory requirements are devices, queues, command buffers, shaders and memory objects.
- VkResult result = nextTable.GetObjectInfo(object, infoType, pDataSize, pData);
+ VkResult result = nextTable.GetObjectInfo(device, objType, object, infoType, pDataSize, pData);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkQueueBindObjectMemory(VkQueue queue, VkObject object, uint32_t allocationIdx, VkDeviceMemory mem, VkDeviceSize offset)
+VK_LAYER_EXPORT VkResult VKAPI vkQueueBindObjectMemory(VkQueue queue, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkDeviceMemory mem, VkDeviceSize offset)
{
- VkResult result = nextTable.QueueBindObjectMemory(queue, object, allocationIdx, mem, offset);
+ VkResult result = nextTable.QueueBindObjectMemory(queue, objType, object, allocationIdx, mem, offset);
+ loader_platform_thread_lock_mutex(&globalLock);
+ // Track objects tied to memory
+ if (VK_FALSE == updateObjectBinding(object, mem)) {
+ char str[1024];
+ sprintf(str, "Unable to set object %p binding to mem obj %p", (void*)object, (void*)mem);
+ layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, object, 0, MEMTRACK_MEMORY_BINDING_ERROR, "MEM", str);
+ }
+ printObjList();
+ printMemList();
+ loader_platform_thread_unlock_mutex(&globalLock);
+ return result;
+}
+
+VK_LAYER_EXPORT VkResult VKAPI vkQueueBindObjectMemoryRange(VkQueue queue, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset)
+{
+ VkResult result = nextTable.QueueBindObjectMemoryRange(queue, objType, object, allocationIdx, rangeOffset, rangeSize, mem, memOffset);
loader_platform_thread_lock_mutex(&globalLock);
// Track objects tied to memory
if (VK_FALSE == updateObjectBinding(object, mem)) {
@@ -1252,9 +1268,9 @@ VK_LAYER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCoun
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkFence fence)
+VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
{
- VkResult result = nextTable.GetFenceStatus(fence);
+ VkResult result = nextTable.GetFenceStatus(device, fence);
if (VK_SUCCESS == result) {
loader_platform_thread_lock_mutex(&globalLock);
updateFenceTracking(fence);
@@ -2015,7 +2031,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkGetSwapChainInfoWSI(VkSwapChainWSI swapChain, V
if (mismatch) {
char str[1024];
sprintf(str, "vkGetSwapChainInfoWSI(%p, VK_SWAP_CHAIN_INFO_TYPE_PERSISTENT_IMAGES_WSI) returned mismatching data", swapChain);
- layerCbMsg(VK_DBG_MSG_WARNING, VK_VALIDATION_LEVEL_0, (VkBaseObject) swapChain, 0, MEMTRACK_NONE, "SWAP_CHAIN", str);
+ layerCbMsg(VK_DBG_MSG_WARNING, VK_VALIDATION_LEVEL_0, (VkObject) swapChain, 0, MEMTRACK_NONE, "SWAP_CHAIN", str);
}
}
}
@@ -2066,6 +2082,8 @@ VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalDevice gpu, const char* func
return (void*) vkGetObjectInfo;
if (!strcmp(funcName, "vkQueueBindObjectMemory"))
return (void*) vkQueueBindObjectMemory;
+ if (!strcmp(funcName, "vkQueueBindObjectMemoryRange"))
+ return (void*) vkQueueBindObjectMemoryRange;
if (!strcmp(funcName, "vkCreateFence"))
return (void*) vkCreateFence;
if (!strcmp(funcName, "vkGetFenceStatus"))
diff --git a/layers/multi.cpp b/layers/multi.cpp
index 3eb79c66..e70b6383 100644
--- a/layers/multi.cpp
+++ b/layers/multi.cpp
@@ -87,12 +87,12 @@ VK_LAYER_EXPORT VkResult VKAPI multi1CreateGraphicsPipeline(VkDevice device, con
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI multi1StorePipeline(VkPipeline pipeline, size_t* pDataSize, void* pData)
+VK_LAYER_EXPORT VkResult VKAPI multi1StorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData)
{
VkLayerDispatchTable* pTable = tableMap1[pipeline];
printf("At start of multi1 layer vkStorePipeline()\n");
- VkResult result = pTable->StorePipeline(pipeline, pDataSize, pData);
+ VkResult result = pTable->StorePipeline(device, pipeline, pDataSize, pData);
printf("Completed multi1 layer vkStorePipeline()\n");
return result;
}
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index b3eb1dc3..74d8582a 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -383,42 +383,42 @@ VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllo
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkDeviceMemory mem)
+VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
{
- VkResult result = nextTable.FreeMemory(mem);
+ VkResult result = nextTable.FreeMemory(device, mem);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkDeviceMemory mem, VkMemoryPriority priority)
+VK_LAYER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkDevice device, VkDeviceMemory mem, VkMemoryPriority priority)
{
char str[1024];
if (!validate_VkMemoryPriority(priority)) {
sprintf(str, "Parameter priority to function SetMemoryPriority has invalid value of %i.", (int)priority);
layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
}
- VkResult result = nextTable.SetMemoryPriority(mem, priority);
+ VkResult result = nextTable.SetMemoryPriority(device, mem, priority);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
+VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
{
- VkResult result = nextTable.MapMemory(mem, offset, size, flags, ppData);
+ VkResult result = nextTable.MapMemory(device, mem, offset, size, flags, ppData);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkDeviceMemory mem)
+VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
{
- VkResult result = nextTable.UnmapMemory(mem);
+ VkResult result = nextTable.UnmapMemory(device, mem);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemory(VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size)
+VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size)
{
- VkResult result = nextTable.FlushMappedMemory(mem, offset, size);
+ VkResult result = nextTable.FlushMappedMemory(device, mem, offset, size);
return result;
}
@@ -498,35 +498,35 @@ VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerImage(VkDevice device, const VkPeerImag
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkObject object)
+VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
{
- VkResult result = nextTable.DestroyObject(object);
+ VkResult result = nextTable.DestroyObject(device, objType, object);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkBaseObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
+VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkDevice device, VkObjectType objType, VkObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
{
char str[1024];
if (!validate_VkObjectInfoType(infoType)) {
sprintf(str, "Parameter infoType to function GetObjectInfo has invalid value of %i.", (int)infoType);
layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
}
- VkResult result = nextTable.GetObjectInfo(object, infoType, pDataSize, pData);
+ VkResult result = nextTable.GetObjectInfo(device, objType, object, infoType, pDataSize, pData);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkQueueBindObjectMemory(VkQueue queue, VkObject object, uint32_t allocationIdx, VkDeviceMemory mem, VkDeviceSize offset)
+VK_LAYER_EXPORT VkResult VKAPI vkQueueBindObjectMemory(VkQueue queue, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkDeviceMemory mem, VkDeviceSize offset)
{
- VkResult result = nextTable.QueueBindObjectMemory(queue, object, allocationIdx, mem, offset);
+ VkResult result = nextTable.QueueBindObjectMemory(queue, objType, object, allocationIdx, mem, offset);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkQueueBindObjectMemoryRange(VkQueue queue, VkObject object, uint32_t allocationIdx, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset)
+VK_LAYER_EXPORT VkResult VKAPI vkQueueBindObjectMemoryRange(VkQueue queue, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset)
{
- VkResult result = nextTable.QueueBindObjectMemoryRange(queue, object, allocationIdx, rangeOffset, rangeSize, mem, memOffset);
+ VkResult result = nextTable.QueueBindObjectMemoryRange(queue, objType, object, allocationIdx, rangeOffset, rangeSize, mem, memOffset);
return result;
}
@@ -560,10 +560,10 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreat
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkFence fence)
+VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
{
- VkResult result = nextTable.GetFenceStatus(fence);
+ VkResult result = nextTable.GetFenceStatus(device, fence);
return result;
}
@@ -625,24 +625,24 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreat
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(VkEvent event)
+VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
{
- VkResult result = nextTable.GetEventStatus(event);
+ VkResult result = nextTable.GetEventStatus(device, event);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(VkEvent event)
+VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
{
- VkResult result = nextTable.SetEvent(event);
+ VkResult result = nextTable.SetEvent(device, event);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(VkEvent event)
+VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
{
- VkResult result = nextTable.ResetEvent(event);
+ VkResult result = nextTable.ResetEvent(device, event);
return result;
}
@@ -661,10 +661,10 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryP
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags)
+VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags)
{
- VkResult result = nextTable.GetQueryPoolResults(queryPool, startQuery, queryCount, pDataSize, pData, flags);
+ VkResult result = nextTable.GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
return result;
}
@@ -811,7 +811,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreat
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
+VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
{
char str[1024];
if (!pSubresource) {
@@ -825,7 +825,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkImage image, const Vk
sprintf(str, "Parameter infoType to function GetImageSubresourceInfo has invalid value of %i.", (int)infoType);
layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
}
- VkResult result = nextTable.GetImageSubresourceInfo(image, pSubresource, infoType, pDataSize, pData);
+ VkResult result = nextTable.GetImageSubresourceInfo(device, image, pSubresource, infoType, pDataSize, pData);
return result;
}
@@ -934,10 +934,10 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const Vk
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline(VkPipeline pipeline, size_t* pDataSize, void* pData)
+VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData)
{
- VkResult result = nextTable.StorePipeline(pipeline, pDataSize, pData);
+ VkResult result = nextTable.StorePipeline(device, pipeline, pDataSize, pData);
return result;
}
@@ -1028,34 +1028,34 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescrip
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDescriptorPool descriptorPool)
+VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
{
- VkResult result = nextTable.ResetDescriptorPool(descriptorPool);
+ VkResult result = nextTable.ResetDescriptorPool(device, descriptorPool);
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
+VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
{
char str[1024];
if (!validate_VkDescriptorSetUsage(setUsage)) {
sprintf(str, "Parameter setUsage to function AllocDescriptorSets has invalid value of %i.", (int)setUsage);
layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
}
- VkResult result = nextTable.AllocDescriptorSets(descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
+ VkResult result = nextTable.AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
return result;
}
-VK_LAYER_EXPORT void VKAPI vkClearDescriptorSets(VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
+VK_LAYER_EXPORT void VKAPI vkClearDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
{
- nextTable.ClearDescriptorSets(descriptorPool, count, pDescriptorSets);
+ nextTable.ClearDescriptorSets(device, descriptorPool, count, pDescriptorSets);
}
-VK_LAYER_EXPORT void VKAPI vkUpdateDescriptors(VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray)
+VK_LAYER_EXPORT void VKAPI vkUpdateDescriptors(VkDevice device, VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray)
{
- nextTable.UpdateDescriptors(descriptorSet, updateCount, ppUpdateArray);
+ nextTable.UpdateDescriptors(device, descriptorSet, updateCount, ppUpdateArray);
}
VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
@@ -1919,10 +1919,10 @@ VK_LAYER_EXPORT VkResult VKAPI vkDbgSetMessageFilter(VkDevice device, int32_t ms
return result;
}
-VK_LAYER_EXPORT VkResult VKAPI vkDbgSetObjectTag(VkBaseObject object, size_t tagSize, const void* pTag)
+VK_LAYER_EXPORT VkResult VKAPI vkDbgSetObjectTag(VkDevice device, VkObject object, size_t tagSize, const void* pTag)
{
- VkResult result = nextTable.DbgSetObjectTag(object, tagSize, pTag);
+ VkResult result = nextTable.DbgSetObjectTag(device, object, tagSize, pTag);
return result;
}
diff --git a/loader/loader.c b/loader/loader.c
index 84a4e75a..a2d7cf7a 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -726,7 +726,7 @@ static void loader_init_dispatch_table(VkLayerDispatchTable *tab, PFN_vkGetProcA
static void * VKAPI loader_gpa_internal(VkPhysicalDevice gpu, const char * pName)
{
- if (gpu == NULL) {
+ if (gpu == VK_NULL_HANDLE) {
return NULL;;
}
VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
@@ -756,8 +756,7 @@ extern struct loader_icd * loader_get_icd(const VkBaseLayerObject *gpu, uint32_t
for (struct loader_instance *inst = loader.instances; inst; inst = inst->next) {
for (struct loader_icd *icd = inst->icds; icd; icd = icd->next) {
for (uint32_t i = 0; i < icd->gpu_count; i++)
- if ((icd->gpus + i) == gpu || (icd->gpus +i)->baseObject ==
- gpu) {
+ if ((icd->gpus + i) == gpu || (void*)(icd->gpus +i)->baseObject == gpu) {
*gpu_index = i;
return icd;
}
@@ -1023,7 +1022,7 @@ extern uint32_t loader_activate_layers(struct loader_icd *icd, uint32_t gpu_inde
/* activate any layer libraries */
if (!loader_layers_activated(icd, gpu_index)) {
VkBaseLayerObject *gpuObj = gpu;
- VkBaseLayerObject *nextGpuObj, *baseObj = gpuObj->baseObject;
+ VkBaseLayerObject *nextGpuObj, *baseObj = (VkBaseLayerObject *) gpuObj->baseObject;
PFN_vkGetProcAddr nextGPA = loader_gpa_internal;
count = loader_get_layer_libs(icd, gpu_index, ext_count, ext_names, &pLayerNames);
@@ -1037,8 +1036,8 @@ extern uint32_t loader_activate_layers(struct loader_icd *icd, uint32_t gpu_inde
for (int32_t i = icd->layer_count[gpu_index] - 1; i >= 0; i--) {
nextGpuObj = (icd->wrappedGpus[gpu_index] + i);
nextGpuObj->pGPA = nextGPA;
- nextGpuObj->baseObject = baseObj;
- nextGpuObj->nextObject = gpuObj;
+ nextGpuObj->baseObject = (VkObject) baseObj;
+ nextGpuObj->nextObject = (VkObject) gpuObj;
gpuObj = nextGpuObj;
char funcStr[256];
@@ -1051,12 +1050,12 @@ extern uint32_t loader_activate_layers(struct loader_icd *icd, uint32_t gpu_inde
}
if (i == 0) {
- loader_init_dispatch_table(icd->loader_dispatch + gpu_index, nextGPA, gpuObj);
+ loader_init_dispatch_table(icd->loader_dispatch + gpu_index, nextGPA, (VkPhysicalDevice) gpuObj);
//Insert the new wrapped objects into the list with loader object at head
- gpu->nextObject = gpuObj;
+ gpu->nextObject = (VkObject) gpuObj;
gpu->pGPA = nextGPA;
gpuObj = icd->wrappedGpus[gpu_index] + icd->layer_count[gpu_index] - 1;
- gpuObj->nextObject = baseObj;
+ gpuObj->nextObject = (VkObject) baseObj;
gpuObj->pGPA = icd->scanned_icds->GetProcAddr;
}
@@ -1128,7 +1127,7 @@ LOADER_EXPORT VkResult VKAPI vkCreateInstance(
{
ptr_instance->icds = ptr_instance->icds->next;
loader_icd_destroy(icd);
- scanned_icds->instance = NULL;
+ scanned_icds->instance = VK_NULL_HANDLE;
loader_log(VK_DBG_MSG_WARNING, 0,
"ICD ignored: failed to CreateInstance on device");
}
@@ -1185,7 +1184,7 @@ LOADER_EXPORT VkResult VKAPI vkDestroyInstance(
if (res != VK_SUCCESS)
loader_log(VK_DBG_MSG_WARNING, 0,
"ICD ignored: failed to DestroyInstance on device");
- scanned_icds->instance = NULL;
+ scanned_icds->instance = VK_NULL_HANDLE;
scanned_icds = scanned_icds->next;
}
@@ -1253,7 +1252,7 @@ LOADER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
get_proc_addr, gpus[i]);
/* Verify ICD compatibility */
- if (!valid_loader_magic_value(gpus[i])) {
+ if (!valid_loader_magic_value((void*) gpus[i])) {
loader_log(VK_DBG_MSG_WARNING, 0,
"Loader: Incompatible ICD, first dword must be initialized to ICD_LOADER_MAGIC. See loader/README.md for details.\n");
assert(0);
@@ -1284,7 +1283,7 @@ LOADER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
LOADER_EXPORT void * VKAPI vkGetProcAddr(VkPhysicalDevice gpu, const char * pName)
{
- if (gpu == NULL) {
+ if (gpu == VK_NULL_HANDLE) {
/* return entrypoint addresses that are global (in the loader)*/
return globalGetProcAddr(pName);
@@ -1422,7 +1421,7 @@ LOADER_EXPORT VkResult VKAPI vkEnumerateLayers(VkPhysicalDevice gpu, size_t maxL
uint32_t n;
VkResult res;
n = (uint32_t) ((maxStringSize < 256) ? maxStringSize : 256);
- res = fpEnumerateLayers(NULL, 16, n, &cnt, layers, (char *) icd->gpus + gpu_index);
+ res = fpEnumerateLayers((VkPhysicalDevice) NULL, 16, n, &cnt, layers, (char *) icd->gpus + gpu_index);
loader_platform_close_library(handle);
if (res != VK_SUCCESS)
continue;
@@ -1455,7 +1454,7 @@ LOADER_EXPORT VkResult VKAPI vkDbgRegisterMsgCallback(VkInstance instance, VK_DB
assert(loader.icds_scanned);
for (inst = loader.instances; inst; inst = inst->next) {
- if (inst == instance)
+ if ((VkInstance) inst == instance)
break;
}
@@ -1503,7 +1502,7 @@ LOADER_EXPORT VkResult VKAPI vkDbgUnregisterMsgCallback(VkInstance instance, VK_
assert(loader.icds_scanned);
for (inst = loader.instances; inst; inst = inst->next) {
- if (inst == instance)
+ if ((VkInstance) inst == instance)
break;
}
@@ -1532,7 +1531,7 @@ LOADER_EXPORT VkResult VKAPI vkDbgSetGlobalOption(VkInstance instance, VK_DBG_GL
assert(loader.icds_scanned);
for (inst = loader.instances; inst; inst = inst->next) {
- if (inst == instance)
+ if ((VkInstance) inst == instance)
break;
}
diff --git a/vk-generate.py b/vk-generate.py
index 550ebc1d..4204fcde 100755
--- a/vk-generate.py
+++ b/vk-generate.py
@@ -132,7 +132,7 @@ class LoaderEntrypointsSubcommand(Subcommand):
pcount = proto.params[-1].name
setup.append("uint32_t i;")
setup.append("for (i = 0; i < *%s; i++)" % pcount)
- setup.append(" %s(%s[i], disp);" % (method, psets))
+ setup.append(" %s((void*)%s[i], disp);" % (method, psets))
elif proto.name == "GetPhysicalDeviceInfo":
ptype = proto.params[-3].name
psize = proto.params[-2].name
@@ -159,7 +159,7 @@ class LoaderEntrypointsSubcommand(Subcommand):
else:
obj_params = proto.object_out_params()
for param in obj_params:
- setup.append("%s(*%s, disp);" % (method, param.name))
+ setup.append("%s((void*)*%s, disp);" % (method, param.name))
if setup:
joined = "\n ".join(setup)
@@ -192,7 +192,7 @@ class LoaderEntrypointsSubcommand(Subcommand):
func.append("")
# get dispatch table
- func.append(" disp = loader_get_data(%s);" %
+ func.append(" disp = loader_get_data((void*)%s);" %
proto.params[0].name)
func.append("")
diff --git a/vk-layer-generate.py b/vk-layer-generate.py
index 8bcc1325..ee9ce171 100755
--- a/vk-layer-generate.py
+++ b/vk-layer-generate.py
@@ -374,7 +374,7 @@ class Subcommand(object):
"{\n"
" VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;\n"
" void* addr;\n"
- " if (gpu == NULL)\n"
+ " if (gpu == VK_NULL_HANDLE)\n"
" return NULL;\n"
" pCurObj = gpuw;\n"
" loader_platform_thread_once(&tabOnce, init%s);\n\n"
@@ -481,7 +481,7 @@ class GenericLayerSubcommand(Subcommand):
funcs.append('%s%s\n'
'{\n'
' char str[1024];\n'
- ' if (gpu != NULL) {\n'
+ ' if (gpu != VK_NULL_HANDLE) {\n'
' sprintf(str, "At start of layered %s\\n");\n'
' layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, gpu, 0, 0, (char *) "GENERIC", (char *) str);\n'
' pCurObj = (VkBaseLayerObject *) gpu;\n'
@@ -1133,7 +1133,7 @@ class ObjectTrackerSubcommand(Subcommand):
return None
obj_type_mapping = {base_t : base_t.replace("Vk", "VkObjectType") for base_t in vulkan.object_type_list}
# For the various "super-types" we have to use function to distinguish sub type
- for obj_type in ["VK_BASE_OBJECT", "VK_OBJECT", "VK_DYNAMIC_STATE_OBJECT", "VkObject", "VkBaseObject"]:
+ for obj_type in ["VK_BASE_OBJECT", "VK_OBJECT", "VK_DYNAMIC_STATE_OBJECT", "VkObject"]:
obj_type_mapping[obj_type] = "ll_get_obj_type(object)"
decl = proto.c_func(prefix="vk", attr="VKAPI")
diff --git a/vulkan.py b/vulkan.py
index 044a98ce..d9a07756 100755
--- a/vulkan.py
+++ b/vulkan.py
@@ -186,7 +186,6 @@ core = Extension(
objects=[
"VkInstance",
"VkPhysicalDevice",
- "VkBaseObject",
"VkDevice",
"VkQueue",
"VkDeviceMemory",
@@ -303,24 +302,29 @@ core = Extension(
Param("VkDeviceMemory*", "pMem")]),
Proto("VkResult", "FreeMemory",
- [Param("VkDeviceMemory", "mem")]),
+ [Param("VkDevice", "device"),
+ Param("VkDeviceMemory", "mem")]),
Proto("VkResult", "SetMemoryPriority",
- [Param("VkDeviceMemory", "mem"),
+ [Param("VkDevice", "device"),
+ Param("VkDeviceMemory", "mem"),
Param("VkMemoryPriority", "priority")]),
Proto("VkResult", "MapMemory",
- [Param("VkDeviceMemory", "mem"),
+ [Param("VkDevice", "device"),
+ Param("VkDeviceMemory", "mem"),
Param("VkDeviceSize", "offset"),
Param("VkDeviceSize", "size"),
Param("VkFlags", "flags"),
Param("void**", "ppData")]),
Proto("VkResult", "UnmapMemory",
- [Param("VkDeviceMemory", "mem")]),
+ [Param("VkDevice", "device"),
+ Param("VkDeviceMemory", "mem")]),
Proto("VkResult", "FlushMappedMemory",
- [Param("VkDeviceMemory", "mem"),
+ [Param("VkDevice", "device"),
+ Param("VkDeviceMemory", "mem"),
Param("VkDeviceSize", "offset"),
Param("VkDeviceSize", "size")]),
@@ -357,16 +361,21 @@ core = Extension(
Param("VkDeviceMemory*", "pMem")]),
Proto("VkResult", "DestroyObject",
- [Param("VkObject", "object")]),
+ [Param("VkDevice", "device"),
+ Param("VkObjectType", "objType"),
+ Param("VkObject", "object")]),
Proto("VkResult", "GetObjectInfo",
- [Param("VkBaseObject", "object"),
+ [Param("VkDevice", "device"),
+ Param("VkObjectType", "objType"),
+ Param("VkObject", "object"),
Param("VkObjectInfoType", "infoType"),
Param("size_t*", "pDataSize"),
Param("void*", "pData")]),
Proto("VkResult", "QueueBindObjectMemory",
[Param("VkQueue", "queue"),
+ Param("VkObjectType", "objType"),
Param("VkObject", "object"),
Param("uint32_t", "allocationIdx"),
Param("VkDeviceMemory", "mem"),
@@ -374,6 +383,7 @@ core = Extension(
Proto("VkResult", "QueueBindObjectMemoryRange",
[Param("VkQueue", "queue"),
+ Param("VkObjectType", "objType"),
Param("VkObject", "object"),
Param("uint32_t", "allocationIdx"),
Param("VkDeviceSize", "rangeOffset"),
@@ -400,7 +410,8 @@ core = Extension(
Param("VkFence*", "pFences")]),
Proto("VkResult", "GetFenceStatus",
- [Param("VkFence", "fence")]),
+ [Param("VkDevice", "device"),
+ Param("VkFence", "fence")]),
Proto("VkResult", "WaitForFences",
[Param("VkDevice", "device"),
@@ -428,13 +439,16 @@ core = Extension(
Param("VkEvent*", "pEvent")]),
Proto("VkResult", "GetEventStatus",
- [Param("VkEvent", "event")]),
+ [Param("VkDevice", "device"),
+ Param("VkEvent", "event")]),
Proto("VkResult", "SetEvent",
- [Param("VkEvent", "event")]),
+ [Param("VkDevice", "device"),
+ Param("VkEvent", "event")]),
Proto("VkResult", "ResetEvent",
- [Param("VkEvent", "event")]),
+ [Param("VkDevice", "device"),
+ Param("VkEvent", "event")]),
Proto("VkResult", "CreateQueryPool",
[Param("VkDevice", "device"),
@@ -442,7 +456,8 @@ core = Extension(
Param("VkQueryPool*", "pQueryPool")]),
Proto("VkResult", "GetQueryPoolResults",
- [Param("VkQueryPool", "queryPool"),
+ [Param("VkDevice", "device"),
+ Param("VkQueryPool", "queryPool"),
Param("uint32_t", "startQuery"),
Param("uint32_t", "queryCount"),
Param("size_t*", "pDataSize"),
@@ -472,7 +487,8 @@ core = Extension(
Param("VkImage*", "pImage")]),
Proto("VkResult", "GetImageSubresourceInfo",
- [Param("VkImage", "image"),
+ [Param("VkDevice", "device"),
+ Param("VkImage", "image"),
Param("const VkImageSubresource*", "pSubresource"),
Param("VkSubresourceInfoType", "infoType"),
Param("size_t*", "pDataSize"),
@@ -515,7 +531,8 @@ core = Extension(
Param("VkPipeline*", "pPipeline")]),
Proto("VkResult", "StorePipeline",
- [Param("VkPipeline", "pipeline"),
+ [Param("VkDevice", "device"),
+ Param("VkPipeline", "pipeline"),
Param("size_t*", "pDataSize"),
Param("void*", "pData")]),
@@ -563,10 +580,12 @@ core = Extension(
Param("VkDescriptorPool*", "pDescriptorPool")]),
Proto("VkResult", "ResetDescriptorPool",
- [Param("VkDescriptorPool", "descriptorPool")]),
+ [Param("VkDevice", "device"),
+ Param("VkDescriptorPool", "descriptorPool")]),
Proto("VkResult", "AllocDescriptorSets",
- [Param("VkDescriptorPool", "descriptorPool"),
+ [Param("VkDevice", "device"),
+ Param("VkDescriptorPool", "descriptorPool"),
Param("VkDescriptorSetUsage", "setUsage"),
Param("uint32_t", "count"),
Param("const VkDescriptorSetLayout*", "pSetLayouts"),
@@ -574,12 +593,14 @@ core = Extension(
Param("uint32_t*", "pCount")]),
Proto("void", "ClearDescriptorSets",
- [Param("VkDescriptorPool", "descriptorPool"),
+ [Param("VkDevice", "device"),
+ Param("VkDescriptorPool", "descriptorPool"),
Param("uint32_t", "count"),
Param("const VkDescriptorSet*", "pDescriptorSets")]),
Proto("void", "UpdateDescriptors",
- [Param("VkDescriptorSet", "descriptorSet"),
+ [Param("VkDevice", "device"),
+ Param("VkDescriptorSet", "descriptorSet"),
Param("uint32_t", "updateCount"),
Param("const void**", "ppUpdateArray")]),
@@ -757,7 +778,7 @@ core = Extension(
[Param("VkCmdBuffer", "cmdBuffer"),
Param("VkImage", "image"),
Param("VkImageLayout", "imageLayout"),
- Param("VkClearColor", "color"),
+ Param("VkClearColor", "color"),
Param("uint32_t", "rangeCount"),
Param("const VkImageSubresourceRange*", "pRanges")]),
@@ -898,7 +919,8 @@ core = Extension(
Param("VK_DBG_MSG_FILTER", "filter")]),
Proto("VkResult", "DbgSetObjectTag",
- [Param("VkBaseObject", "object"),
+ [Param("VkDevice", "device"),
+ Param("VkObject", "object"),
Param("size_t", "tagSize"),
Param("const void*", "pTag")]),
@@ -962,7 +984,6 @@ extensions = [core, wsi_lunarg]
object_root_list = [
"VkInstance",
"VkPhysicalDevice",
- "VkBaseObject",
"VkDisplayWSI",
"VkSwapChainWSI",
]
@@ -1007,7 +1028,7 @@ object_dynamic_state_list = [
object_type_list = object_root_list + object_base_list + object_list + object_dynamic_state_list
-object_parent_list = ["VkBaseObject", "VkObject", "VkDynamicStateObject"]
+object_parent_list = ["VkObject", "VkDynamicStateObject"]
headers = []
objects = []