bug 12921: Memory callback (WIP)
The per-object allocator is ignored for now.
https://cvs.khronos.org/bugzilla/show_bug.cgi?id=12921
diff --git a/demos/cube.c b/demos/cube.c
index 77a9410..2880cf9 100644
--- a/demos/cube.c
+++ b/demos/cube.c
@@ -637,6 +637,7 @@
err = vkCreateSemaphore(demo->device,
&presentCompleteSemaphoreCreateInfo,
+ NULL,
&presentCompleteSemaphore);
assert(!err);
@@ -650,7 +651,7 @@
// must be recreated:
demo_resize(demo);
demo_draw(demo);
- vkDestroySemaphore(demo->device, presentCompleteSemaphore);
+ vkDestroySemaphore(demo->device, presentCompleteSemaphore, NULL);
return;
} else if (err == VK_SUBOPTIMAL_KHR) {
// demo->swapchain is not as optimal as it could be, but the platform's
@@ -711,7 +712,7 @@
err = vkQueueWaitIdle(demo->queue);
assert(err == VK_SUCCESS);
- vkDestroySemaphore(demo->device, presentCompleteSemaphore);
+ vkDestroySemaphore(demo->device, presentCompleteSemaphore, NULL);
}
static void demo_prepare_buffers(struct demo *demo)
@@ -873,7 +874,7 @@
color_image_view.image = demo->buffers[i].image;
err = vkCreateImageView(demo->device,
- &color_image_view, &demo->buffers[i].view);
+ &color_image_view, NULL, &demo->buffers[i].view);
assert(!err);
}
}
@@ -918,7 +919,7 @@
demo->depth.format = depth_format;
/* create image */
- err = vkCreateImage(demo->device, &image,
+ err = vkCreateImage(demo->device, &image, NULL,
&demo->depth.image);
assert(!err);
@@ -938,7 +939,8 @@
assert(pass);
/* allocate memory */
- err = vkAllocMemory(demo->device, &demo->depth.mem_alloc, &demo->depth.mem);
+ err = vkAllocMemory(demo->device, &demo->depth.mem_alloc,
+ NULL, &demo->depth.mem);
assert(!err);
/* bind memory */
@@ -953,7 +955,7 @@
/* create image view */
view.image = demo->depth.image;
- err = vkCreateImageView(demo->device, &view, &demo->depth.view);
+ err = vkCreateImageView(demo->device, &view, NULL, &demo->depth.view);
assert(!err);
}
@@ -1047,7 +1049,7 @@
VkMemoryRequirements mem_reqs;
- err = vkCreateImage(demo->device, &image_create_info,
+ err = vkCreateImage(demo->device, &image_create_info, NULL,
&tex_obj->image);
assert(!err);
@@ -1062,7 +1064,7 @@
assert(pass);
/* allocate memory */
- err = vkAllocMemory(demo->device, &tex_obj->mem_alloc,
+ err = vkAllocMemory(demo->device, &tex_obj->mem_alloc, NULL,
&(tex_obj->mem));
assert(!err);
@@ -1103,8 +1105,8 @@
static void demo_destroy_texture_image(struct demo *demo, struct texture_object *tex_objs)
{
/* clean up staging resources */
- vkFreeMemory(demo->device, tex_objs->mem);
- vkDestroyImage(demo->device, tex_objs->image);
+ vkFreeMemory(demo->device, tex_objs->mem, NULL);
+ vkDestroyImage(demo->device, tex_objs->image, NULL);
}
static void demo_prepare_textures(struct demo *demo)
@@ -1203,13 +1205,13 @@
};
/* create sampler */
- err = vkCreateSampler(demo->device, &sampler,
+ err = vkCreateSampler(demo->device, &sampler, NULL,
&demo->textures[i].sampler);
assert(!err);
/* create image view */
view.image = demo->textures[i].image;
- err = vkCreateImageView(demo->device, &view,
+ err = vkCreateImageView(demo->device, &view, NULL,
&demo->textures[i].view);
assert(!err);
}
@@ -1246,7 +1248,8 @@
buf_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
buf_info.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT;
buf_info.size = sizeof(data);
- err = vkCreateBuffer(demo->device, &buf_info, &demo->uniform_data.buf);
+ err = vkCreateBuffer(demo->device, &buf_info, NULL,
+ &demo->uniform_data.buf);
assert(!err);
vkGetBufferMemoryRequirements(demo->device, demo->uniform_data.buf, &mem_reqs);
@@ -1262,7 +1265,8 @@
&demo->uniform_data.mem_alloc.memoryTypeIndex);
assert(pass);
- err = vkAllocMemory(demo->device, &demo->uniform_data.mem_alloc, &(demo->uniform_data.mem));
+ err = vkAllocMemory(demo->device, &demo->uniform_data.mem_alloc,
+ NULL, &(demo->uniform_data.mem));
assert(!err);
err = vkMapMemory(demo->device, demo->uniform_data.mem, 0, demo->uniform_data.mem_alloc.allocationSize, 0, (void **) &pData);
@@ -1307,7 +1311,7 @@
VkResult U_ASSERT_ONLY err;
err = vkCreateDescriptorSetLayout(demo->device,
- &descriptor_layout, &demo->desc_layout);
+ &descriptor_layout, NULL, &demo->desc_layout);
assert(!err);
const VkPipelineLayoutCreateInfo pPipelineLayoutCreateInfo = {
@@ -1319,6 +1323,7 @@
err = vkCreatePipelineLayout(demo->device,
&pPipelineLayoutCreateInfo,
+ NULL,
&demo->pipeline_layout);
assert(!err);
}
@@ -1384,7 +1389,7 @@
};
VkResult U_ASSERT_ONLY err;
- err = vkCreateRenderPass(demo->device, &rp_info, &demo->render_pass);
+ err = vkCreateRenderPass(demo->device, &rp_info, NULL, &demo->render_pass);
assert(!err);
}
@@ -1411,14 +1416,14 @@
moduleCreateInfo.codeSize = size;
moduleCreateInfo.pCode = code;
moduleCreateInfo.flags = 0;
- err = vkCreateShaderModule(demo->device, &moduleCreateInfo, pShaderModule);
+ err = vkCreateShaderModule(demo->device, &moduleCreateInfo, NULL, pShaderModule);
assert(!err);
shaderCreateInfo.flags = 0;
shaderCreateInfo.module = *pShaderModule;
shaderCreateInfo.pName = "main";
shaderCreateInfo.stage = stage;
- err = vkCreateShader(demo->device, &shaderCreateInfo, &shader);
+ err = vkCreateShader(demo->device, &shaderCreateInfo, NULL, &shader);
assert(!err);
} else {
// Create fake SPV structure to feed GLSL
@@ -1433,7 +1438,7 @@
((uint32_t *) moduleCreateInfo.pCode)[2] = stage;
memcpy(((uint32_t *) moduleCreateInfo.pCode + 3), code, size + 1);
- err = vkCreateShaderModule(demo->device, &moduleCreateInfo, pShaderModule);
+ err = vkCreateShaderModule(demo->device, &moduleCreateInfo, NULL, pShaderModule);
if (err) {
free((void *) moduleCreateInfo.pCode);
}
@@ -1442,7 +1447,7 @@
shaderCreateInfo.module = *pShaderModule;
shaderCreateInfo.pName = "main";
shaderCreateInfo.stage = stage;
- err = vkCreateShader(demo->device, &shaderCreateInfo, &shader);
+ err = vkCreateShader(demo->device, &shaderCreateInfo, NULL, &shader);
assert(!err);
free((void *) moduleCreateInfo.pCode);
}
@@ -1635,7 +1640,7 @@
memset(&pipelineCache, 0, sizeof(pipelineCache));
pipelineCache.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO;
- err = vkCreatePipelineCache(demo->device, &pipelineCache, &demo->pipelineCache);
+ err = vkCreatePipelineCache(demo->device, &pipelineCache, NULL, &demo->pipelineCache);
assert(!err);
pipeline.pVertexInputState = &vi;
@@ -1651,14 +1656,15 @@
pipeline.renderPass = demo->render_pass;
- err = vkCreateGraphicsPipelines(demo->device, demo->pipelineCache, 1, &pipeline, &demo->pipeline);
+ err = vkCreateGraphicsPipelines(demo->device, demo->pipelineCache,
+ 1, &pipeline, NULL, &demo->pipeline);
assert(!err);
for (uint32_t i = 0; i < pipeline.stageCount; i++) {
- vkDestroyShader(demo->device, shaderStages[i].shader);
+ vkDestroyShader(demo->device, shaderStages[i].shader, NULL);
}
- vkDestroyShaderModule(demo->device, demo->frag_shader_module);
- vkDestroyShaderModule(demo->device, demo->vert_shader_module);
+ vkDestroyShaderModule(demo->device, demo->frag_shader_module, NULL);
+ vkDestroyShaderModule(demo->device, demo->vert_shader_module, NULL);
}
static void demo_prepare_descriptor_pool(struct demo *demo)
@@ -1683,7 +1689,7 @@
VkResult U_ASSERT_ONLY err;
err = vkCreateDescriptorPool(demo->device,
- &descriptor_pool, &demo->desc_pool);
+ &descriptor_pool, NULL, &demo->desc_pool);
assert(!err);
}
@@ -1752,7 +1758,7 @@
for (i = 0; i < demo->swapchainImageCount; i++) {
attachments[0] = demo->buffers[i].view;
- err = vkCreateFramebuffer(demo->device, &fb_info, &demo->framebuffers[i]);
+ err = vkCreateFramebuffer(demo->device, &fb_info, NULL, &demo->framebuffers[i]);
assert(!err);
}
}
@@ -1767,7 +1773,7 @@
.queueFamilyIndex = demo->graphics_queue_node_index,
.flags = 0,
};
- err = vkCreateCommandPool(demo->device, &cmd_pool_info, &demo->cmd_pool);
+ err = vkCreateCommandPool(demo->device, &cmd_pool_info, NULL, &demo->cmd_pool);
assert(!err);
const VkCmdBufferAllocInfo cmd = {
@@ -1819,46 +1825,46 @@
demo->prepared = false;
for (i = 0; i < demo->swapchainImageCount; i++) {
- vkDestroyFramebuffer(demo->device, demo->framebuffers[i]);
+ vkDestroyFramebuffer(demo->device, demo->framebuffers[i], NULL);
}
free(demo->framebuffers);
- vkDestroyDescriptorPool(demo->device, demo->desc_pool);
+ vkDestroyDescriptorPool(demo->device, demo->desc_pool, NULL);
- vkDestroyPipeline(demo->device, demo->pipeline);
- vkDestroyPipelineCache(demo->device, demo->pipelineCache);
- vkDestroyRenderPass(demo->device, demo->render_pass);
- vkDestroyPipelineLayout(demo->device, demo->pipeline_layout);
- vkDestroyDescriptorSetLayout(demo->device, demo->desc_layout);
+ vkDestroyPipeline(demo->device, demo->pipeline, NULL);
+ vkDestroyPipelineCache(demo->device, demo->pipelineCache, NULL);
+ vkDestroyRenderPass(demo->device, demo->render_pass, NULL);
+ vkDestroyPipelineLayout(demo->device, demo->pipeline_layout, NULL);
+ vkDestroyDescriptorSetLayout(demo->device, demo->desc_layout, NULL);
for (i = 0; i < DEMO_TEXTURE_COUNT; i++) {
- vkDestroyImageView(demo->device, demo->textures[i].view);
- vkDestroyImage(demo->device, demo->textures[i].image);
- vkFreeMemory(demo->device, demo->textures[i].mem);
- vkDestroySampler(demo->device, demo->textures[i].sampler);
+ vkDestroyImageView(demo->device, demo->textures[i].view, NULL);
+ vkDestroyImage(demo->device, demo->textures[i].image, NULL);
+ vkFreeMemory(demo->device, demo->textures[i].mem, NULL);
+ vkDestroySampler(demo->device, demo->textures[i].sampler, NULL);
}
demo->fpDestroySwapchainKHR(demo->device, demo->swapchain);
- vkDestroyImageView(demo->device, demo->depth.view);
- vkDestroyImage(demo->device, demo->depth.image);
- vkFreeMemory(demo->device, demo->depth.mem);
+ vkDestroyImageView(demo->device, demo->depth.view, NULL);
+ vkDestroyImage(demo->device, demo->depth.image, NULL);
+ vkFreeMemory(demo->device, demo->depth.mem, NULL);
- vkDestroyBuffer(demo->device, demo->uniform_data.buf);
- vkFreeMemory(demo->device, demo->uniform_data.mem);
+ vkDestroyBuffer(demo->device, demo->uniform_data.buf, NULL);
+ vkFreeMemory(demo->device, demo->uniform_data.mem, NULL);
for (i = 0; i < demo->swapchainImageCount; i++) {
- vkDestroyImageView(demo->device, demo->buffers[i].view);
+ vkDestroyImageView(demo->device, demo->buffers[i].view, NULL);
vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, &demo->buffers[i].cmd);
}
free(demo->buffers);
free(demo->queue_props);
- vkDestroyCommandPool(demo->device, demo->cmd_pool);
- vkDestroyDevice(demo->device);
+ vkDestroyCommandPool(demo->device, demo->cmd_pool, NULL);
+ vkDestroyDevice(demo->device, NULL);
if (demo->validate) {
demo->dbgDestroyMsgCallback(demo->inst, demo->msg_callback);
}
- vkDestroyInstance(demo->inst);
+ vkDestroyInstance(demo->inst, NULL);
#ifndef _WIN32
xcb_destroy_window(demo->connection, demo->window);
@@ -1882,39 +1888,39 @@
demo->prepared = false;
for (i = 0; i < demo->swapchainImageCount; i++) {
- vkDestroyFramebuffer(demo->device, demo->framebuffers[i]);
+ vkDestroyFramebuffer(demo->device, demo->framebuffers[i], NULL);
}
free(demo->framebuffers);
- vkDestroyDescriptorPool(demo->device, demo->desc_pool);
+ vkDestroyDescriptorPool(demo->device, demo->desc_pool, NULL);
- vkDestroyPipeline(demo->device, demo->pipeline);
- vkDestroyPipelineCache(demo->device, demo->pipelineCache);
- vkDestroyRenderPass(demo->device, demo->render_pass);
- vkDestroyPipelineLayout(demo->device, demo->pipeline_layout);
- vkDestroyDescriptorSetLayout(demo->device, demo->desc_layout);
+ vkDestroyPipeline(demo->device, demo->pipeline, NULL);
+ vkDestroyPipelineCache(demo->device, demo->pipelineCache, NULL);
+ vkDestroyRenderPass(demo->device, demo->render_pass, NULL);
+ vkDestroyPipelineLayout(demo->device, demo->pipeline_layout, NULL);
+ vkDestroyDescriptorSetLayout(demo->device, demo->desc_layout, NULL);
for (i = 0; i < DEMO_TEXTURE_COUNT; i++) {
- vkDestroyImageView(demo->device, demo->textures[i].view);
- vkDestroyImage(demo->device, demo->textures[i].image);
- vkFreeMemory(demo->device, demo->textures[i].mem);
- vkDestroySampler(demo->device, demo->textures[i].sampler);
+ vkDestroyImageView(demo->device, demo->textures[i].view, NULL);
+ vkDestroyImage(demo->device, demo->textures[i].image, NULL);
+ vkFreeMemory(demo->device, demo->textures[i].mem, NULL);
+ vkDestroySampler(demo->device, demo->textures[i].sampler, NULL);
}
- vkDestroyImageView(demo->device, demo->depth.view);
- vkDestroyImage(demo->device, demo->depth.image);
- vkFreeMemory(demo->device, demo->depth.mem);
+ vkDestroyImageView(demo->device, demo->depth.view, NULL);
+ vkDestroyImage(demo->device, demo->depth.image, NULL);
+ vkFreeMemory(demo->device, demo->depth.mem, NULL);
- vkDestroyBuffer(demo->device, demo->uniform_data.buf);
- vkFreeMemory(demo->device, demo->uniform_data.mem);
+ vkDestroyBuffer(demo->device, demo->uniform_data.buf, NULL);
+ vkFreeMemory(demo->device, demo->uniform_data.mem, NULL);
for (i = 0; i < demo->swapchainImageCount; i++) {
- vkDestroyImageView(demo->device, demo->buffers[i].view);
+ vkDestroyImageView(demo->device, demo->buffers[i].view, NULL);
vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, &demo->buffers[i].cmd);
}
- vkDestroyCommandPool(demo->device, demo->cmd_pool);
+ vkDestroyCommandPool(demo->device, demo->cmd_pool, NULL);
free(demo->buffers);
- vkDestroyCommandPool(demo->device, demo->cmd_pool);
+ vkDestroyCommandPool(demo->device, demo->cmd_pool, NULL);
// Second, re-perform the demo_prepare() function, which will re-create the
@@ -2268,7 +2274,6 @@
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pNext = NULL,
.pAppInfo = &app,
- .pAllocCb = NULL,
.enabledLayerNameCount = enabled_layer_count,
.ppEnabledLayerNames = (const char *const*) ((demo->validate) ? instance_validation_layers : NULL),
.enabledExtensionNameCount = enabled_extension_count,
@@ -2277,7 +2282,7 @@
uint32_t gpu_count;
- err = vkCreateInstance(&inst_info, &demo->inst);
+ err = vkCreateInstance(&inst_info, NULL, &demo->inst);
if (err == VK_ERROR_INCOMPATIBLE_DRIVER) {
ERR_EXIT("Cannot find a compatible Vulkan installable client driver "
"(ICD).\n\nPlease look at the Getting Started guide for "
@@ -2444,7 +2449,7 @@
.pEnabledFeatures = NULL, // If specific features are required, pass them in here
};
- err = vkCreateDevice(demo->gpu, &device, &demo->device);
+ err = vkCreateDevice(demo->gpu, &device, NULL, &demo->device);
assert(!err);
free(device_layers);
diff --git a/demos/tri.c b/demos/tri.c
index 83f99b7..bd4f8eb 100644
--- a/demos/tri.c
+++ b/demos/tri.c
@@ -169,6 +169,8 @@
bool use_staging_buffer;
bool use_glsl;
+ VkAllocCallbacks allocator;
+
VkInstance inst;
VkPhysicalDevice gpu;
VkDevice device;
@@ -454,6 +456,7 @@
err = vkCreateSemaphore(demo->device,
&presentCompleteSemaphoreCreateInfo,
+ NULL,
&presentCompleteSemaphore);
assert(!err);
@@ -467,7 +470,7 @@
// must be recreated:
demo_resize(demo);
demo_draw(demo);
- vkDestroySemaphore(demo->device, presentCompleteSemaphore);
+ vkDestroySemaphore(demo->device, presentCompleteSemaphore, NULL);
return;
} else if (err == VK_SUBOPTIMAL_KHR) {
// demo->swapchain is not as optimal as it could be, but the platform's
@@ -531,7 +534,7 @@
err = vkQueueWaitIdle(demo->queue);
assert(err == VK_SUCCESS);
- vkDestroySemaphore(demo->device, presentCompleteSemaphore);
+ vkDestroySemaphore(demo->device, presentCompleteSemaphore, NULL);
}
static void demo_prepare_buffers(struct demo *demo)
@@ -679,7 +682,7 @@
color_attachment_view.image = demo->buffers[i].image;
err = vkCreateImageView(demo->device,
- &color_attachment_view, &demo->buffers[i].view);
+ &color_attachment_view, NULL, &demo->buffers[i].view);
assert(!err);
}
@@ -731,7 +734,7 @@
demo->depth.format = depth_format;
/* create image */
- err = vkCreateImage(demo->device, &image,
+ err = vkCreateImage(demo->device, &image, NULL,
&demo->depth.image);
assert(!err);
@@ -748,7 +751,7 @@
assert(pass);
/* allocate memory */
- err = vkAllocMemory(demo->device, &mem_alloc, &demo->depth.mem);
+ err = vkAllocMemory(demo->device, &mem_alloc, NULL, &demo->depth.mem);
assert(!err);
/* bind memory */
@@ -763,7 +766,7 @@
/* create image view */
view.image = demo->depth.image;
- err = vkCreateImageView(demo->device, &view, &demo->depth.view);
+ err = vkCreateImageView(demo->device, &view, NULL, &demo->depth.view);
assert(!err);
}
@@ -805,7 +808,7 @@
VkMemoryRequirements mem_reqs;
- err = vkCreateImage(demo->device, &image_create_info,
+ err = vkCreateImage(demo->device, &image_create_info, NULL,
&tex_obj->image);
assert(!err);
@@ -816,7 +819,7 @@
assert(pass);
/* allocate memory */
- err = vkAllocMemory(demo->device, &mem_alloc, &tex_obj->mem);
+ err = vkAllocMemory(demo->device, &mem_alloc, NULL, &tex_obj->mem);
assert(!err);
/* bind memory */
@@ -859,8 +862,8 @@
static void demo_destroy_texture_image(struct demo *demo, struct texture_object *tex_obj)
{
/* clean up staging resources */
- vkDestroyImage(demo->device, tex_obj->image);
- vkFreeMemory(demo->device, tex_obj->mem);
+ vkDestroyImage(demo->device, tex_obj->image, NULL);
+ vkFreeMemory(demo->device, tex_obj->mem, NULL);
}
static void demo_prepare_textures(struct demo *demo)
@@ -960,13 +963,13 @@
};
/* create sampler */
- err = vkCreateSampler(demo->device, &sampler,
+ err = vkCreateSampler(demo->device, &sampler, NULL,
&demo->textures[i].sampler);
assert(!err);
/* create image view */
view.image = demo->textures[i].image;
- err = vkCreateImageView(demo->device, &view,
+ err = vkCreateImageView(demo->device, &view, NULL,
&demo->textures[i].view);
assert(!err);
}
@@ -1000,7 +1003,7 @@
memset(&demo->vertices, 0, sizeof(demo->vertices));
- err = vkCreateBuffer(demo->device, &buf_info, &demo->vertices.buf);
+ err = vkCreateBuffer(demo->device, &buf_info, NULL, &demo->vertices.buf);
assert(!err);
vkGetBufferMemoryRequirements(demo->device,
@@ -1014,7 +1017,7 @@
&mem_alloc.memoryTypeIndex);
assert(pass);
- err = vkAllocMemory(demo->device, &mem_alloc, &demo->vertices.mem);
+ err = vkAllocMemory(demo->device, &mem_alloc, NULL, &demo->vertices.mem);
assert(!err);
err = vkMapMemory(demo->device, demo->vertices.mem, 0, mem_alloc.allocationSize, 0, &data);
@@ -1067,7 +1070,7 @@
VkResult U_ASSERT_ONLY err;
err = vkCreateDescriptorSetLayout(demo->device,
- &descriptor_layout, &demo->desc_layout);
+ &descriptor_layout, NULL, &demo->desc_layout);
assert(!err);
const VkPipelineLayoutCreateInfo pPipelineLayoutCreateInfo = {
@@ -1079,6 +1082,7 @@
err = vkCreatePipelineLayout(demo->device,
&pPipelineLayoutCreateInfo,
+ NULL,
&demo->pipeline_layout);
assert(!err);
}
@@ -1144,7 +1148,7 @@
};
VkResult U_ASSERT_ONLY err;
- err = vkCreateRenderPass(demo->device, &rp_info, &demo->render_pass);
+ err = vkCreateRenderPass(demo->device, &rp_info, NULL, &demo->render_pass);
assert(!err);
}
@@ -1170,14 +1174,14 @@
moduleCreateInfo.codeSize = size;
moduleCreateInfo.pCode = code;
moduleCreateInfo.flags = 0;
- err = vkCreateShaderModule(demo->device, &moduleCreateInfo, pShaderModule);
+ err = vkCreateShaderModule(demo->device, &moduleCreateInfo, NULL, pShaderModule);
assert(!err);
shaderCreateInfo.flags = 0;
shaderCreateInfo.module = *pShaderModule;
shaderCreateInfo.pName = "main";
shaderCreateInfo.stage = stage;
- err = vkCreateShader(demo->device, &shaderCreateInfo, &shader);
+ err = vkCreateShader(demo->device, &shaderCreateInfo, NULL, &shader);
assert(!err);
} else {
// Create fake SPV structure to feed GLSL
@@ -1192,14 +1196,14 @@
((uint32_t *) moduleCreateInfo.pCode)[2] = stage;
memcpy(((uint32_t *) moduleCreateInfo.pCode + 3), code, size + 1);
- err = vkCreateShaderModule(demo->device, &moduleCreateInfo, pShaderModule);
+ err = vkCreateShaderModule(demo->device, &moduleCreateInfo, NULL, pShaderModule);
assert(!err);
shaderCreateInfo.flags = 0;
shaderCreateInfo.module = *pShaderModule;
shaderCreateInfo.pName = "main";
shaderCreateInfo.stage = stage;
- err = vkCreateShader(demo->device, &shaderCreateInfo, &shader);
+ err = vkCreateShader(demo->device, &shaderCreateInfo, NULL, &shader);
assert(!err);
free((void *) moduleCreateInfo.pCode);
}
@@ -1397,18 +1401,19 @@
memset(&pipelineCache, 0, sizeof(pipelineCache));
pipelineCache.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO;
- err = vkCreatePipelineCache(demo->device, &pipelineCache, &demo->pipelineCache);
+ err = vkCreatePipelineCache(demo->device, &pipelineCache, NULL, &demo->pipelineCache);
assert(!err);
- err = vkCreateGraphicsPipelines(demo->device, demo->pipelineCache, 1, &pipeline, &demo->pipeline);
+ err = vkCreateGraphicsPipelines(demo->device, demo->pipelineCache,
+ 1, &pipeline, NULL, &demo->pipeline);
assert(!err);
- vkDestroyPipelineCache(demo->device, demo->pipelineCache);
+ vkDestroyPipelineCache(demo->device, demo->pipelineCache, NULL);
for (uint32_t i = 0; i < pipeline.stageCount; i++) {
- vkDestroyShader(demo->device, shaderStages[i].shader);
+ vkDestroyShader(demo->device, shaderStages[i].shader, NULL);
}
- vkDestroyShaderModule(demo->device, demo->frag_shader_module);
- vkDestroyShaderModule(demo->device, demo->vert_shader_module);
+ vkDestroyShaderModule(demo->device, demo->frag_shader_module, NULL);
+ vkDestroyShaderModule(demo->device, demo->vert_shader_module, NULL);
}
static void demo_prepare_descriptor_pool(struct demo *demo)
@@ -1427,7 +1432,7 @@
VkResult U_ASSERT_ONLY err;
err = vkCreateDescriptorPool(demo->device,
- &descriptor_pool, &demo->desc_pool);
+ &descriptor_pool, NULL, &demo->desc_pool);
assert(!err);
}
@@ -1488,7 +1493,7 @@
for (i = 0; i < demo->swapchainImageCount; i++) {
attachments[0]= demo->buffers[i].view;
- err = vkCreateFramebuffer(demo->device, &fb_info, &demo->framebuffers[i]);
+ err = vkCreateFramebuffer(demo->device, &fb_info, NULL, &demo->framebuffers[i]);
assert(!err);
}
}
@@ -1503,7 +1508,7 @@
.queueFamilyIndex = demo->graphics_queue_node_index,
.flags = 0,
};
- err = vkCreateCommandPool(demo->device, &cmd_pool_info, &demo->cmd_pool);
+ err = vkCreateCommandPool(demo->device, &cmd_pool_info, NULL, &demo->cmd_pool);
assert(!err);
const VkCmdBufferAllocInfo cmd = {
@@ -1759,7 +1764,7 @@
void* pUserData,
size_t size,
size_t alignment,
- VkSystemAllocType allocType)
+ VkSystemAllocScope allocScope)
{
return malloc(size);
}
@@ -1850,16 +1855,10 @@
.engineVersion = 0,
.apiVersion = VK_API_VERSION,
};
- VkAllocCallbacks cb = {
- .pUserData = NULL,
- .pfnAlloc = myalloc,
- .pfnFree = myfree,
- };
VkInstanceCreateInfo inst_info = {
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pNext = NULL,
.pAppInfo = &app,
- .pAllocCb = &cb,
.enabledLayerNameCount = enabled_layer_count,
.ppEnabledLayerNames = (const char *const*) layer_names,
.enabledExtensionNameCount = enabled_extension_count,
@@ -1875,7 +1874,10 @@
};
uint32_t gpu_count;
- err = vkCreateInstance(&inst_info, &demo->inst);
+ demo->allocator.pfnAlloc = myalloc;
+ demo->allocator.pfnFree = myfree;
+
+ err = vkCreateInstance(&inst_info, &demo->allocator, &demo->inst);
if (err == VK_ERROR_INCOMPATIBLE_DRIVER) {
ERR_EXIT("Cannot find a compatible Vulkan installable client driver "
"(ICD).\n\nPlease look at the Getting Started guide for "
@@ -1996,7 +1998,7 @@
}
- err = vkCreateDevice(demo->gpu, &device, &demo->device);
+ err = vkCreateDevice(demo->gpu, &device, NULL, &demo->device);
assert(!err);
GET_INSTANCE_PROC_ADDR(demo->inst, GetPhysicalDeviceSurfaceSupportKHR);
@@ -2207,45 +2209,45 @@
demo->prepared = false;
for (i = 0; i < demo->swapchainImageCount; i++) {
- vkDestroyFramebuffer(demo->device, demo->framebuffers[i]);
+ vkDestroyFramebuffer(demo->device, demo->framebuffers[i], NULL);
}
free(demo->framebuffers);
- vkDestroyDescriptorPool(demo->device, demo->desc_pool);
+ vkDestroyDescriptorPool(demo->device, demo->desc_pool, NULL);
if (demo->setup_cmd) {
vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, &demo->setup_cmd);
}
vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, &demo->draw_cmd);
- vkDestroyCommandPool(demo->device, demo->cmd_pool);
+ vkDestroyCommandPool(demo->device, demo->cmd_pool, NULL);
- vkDestroyPipeline(demo->device, demo->pipeline);
- vkDestroyRenderPass(demo->device, demo->render_pass);
- vkDestroyPipelineLayout(demo->device, demo->pipeline_layout);
- vkDestroyDescriptorSetLayout(demo->device, demo->desc_layout);
+ vkDestroyPipeline(demo->device, demo->pipeline, NULL);
+ vkDestroyRenderPass(demo->device, demo->render_pass, NULL);
+ vkDestroyPipelineLayout(demo->device, demo->pipeline_layout, NULL);
+ vkDestroyDescriptorSetLayout(demo->device, demo->desc_layout, NULL);
- vkDestroyBuffer(demo->device, demo->vertices.buf);
- vkFreeMemory(demo->device, demo->vertices.mem);
+ vkDestroyBuffer(demo->device, demo->vertices.buf, NULL);
+ vkFreeMemory(demo->device, demo->vertices.mem, NULL);
for (i = 0; i < DEMO_TEXTURE_COUNT; i++) {
- vkDestroyImageView(demo->device, demo->textures[i].view);
- vkDestroyImage(demo->device, demo->textures[i].image);
- vkFreeMemory(demo->device, demo->textures[i].mem);
- vkDestroySampler(demo->device, demo->textures[i].sampler);
+ vkDestroyImageView(demo->device, demo->textures[i].view, NULL);
+ vkDestroyImage(demo->device, demo->textures[i].image, NULL);
+ vkFreeMemory(demo->device, demo->textures[i].mem, NULL);
+ vkDestroySampler(demo->device, demo->textures[i].sampler, NULL);
}
for (i = 0; i < demo->swapchainImageCount; i++) {
- vkDestroyImageView(demo->device, demo->buffers[i].view);
+ vkDestroyImageView(demo->device, demo->buffers[i].view, NULL);
}
- vkDestroyImageView(demo->device, demo->depth.view);
- vkDestroyImage(demo->device, demo->depth.image);
- vkFreeMemory(demo->device, demo->depth.mem);
+ vkDestroyImageView(demo->device, demo->depth.view, NULL);
+ vkDestroyImage(demo->device, demo->depth.image, NULL);
+ vkFreeMemory(demo->device, demo->depth.mem, NULL);
demo->fpDestroySwapchainKHR(demo->device, demo->swapchain);
free(demo->buffers);
- vkDestroyDevice(demo->device);
- vkDestroyInstance(demo->inst);
+ vkDestroyDevice(demo->device, NULL);
+ vkDestroyInstance(demo->inst, &demo->allocator);
free(demo->queue_props);
@@ -2271,39 +2273,39 @@
demo->prepared = false;
for (i = 0; i < demo->swapchainImageCount; i++) {
- vkDestroyFramebuffer(demo->device, demo->framebuffers[i]);
+ vkDestroyFramebuffer(demo->device, demo->framebuffers[i], NULL);
}
free(demo->framebuffers);
- vkDestroyDescriptorPool(demo->device, demo->desc_pool);
+ vkDestroyDescriptorPool(demo->device, demo->desc_pool, NULL);
if (demo->setup_cmd) {
vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, &demo->setup_cmd);
}
vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, &demo->draw_cmd);
- vkDestroyCommandPool(demo->device, demo->cmd_pool);
+ vkDestroyCommandPool(demo->device, demo->cmd_pool, NULL);
- vkDestroyPipeline(demo->device, demo->pipeline);
- vkDestroyRenderPass(demo->device, demo->render_pass);
- vkDestroyPipelineLayout(demo->device, demo->pipeline_layout);
- vkDestroyDescriptorSetLayout(demo->device, demo->desc_layout);
+ vkDestroyPipeline(demo->device, demo->pipeline, NULL);
+ vkDestroyRenderPass(demo->device, demo->render_pass, NULL);
+ vkDestroyPipelineLayout(demo->device, demo->pipeline_layout, NULL);
+ vkDestroyDescriptorSetLayout(demo->device, demo->desc_layout, NULL);
- vkDestroyBuffer(demo->device, demo->vertices.buf);
- vkFreeMemory(demo->device, demo->vertices.mem);
+ vkDestroyBuffer(demo->device, demo->vertices.buf, NULL);
+ vkFreeMemory(demo->device, demo->vertices.mem, NULL);
for (i = 0; i < DEMO_TEXTURE_COUNT; i++) {
- vkDestroyImageView(demo->device, demo->textures[i].view);
- vkDestroyImage(demo->device, demo->textures[i].image);
- vkFreeMemory(demo->device, demo->textures[i].mem);
- vkDestroySampler(demo->device, demo->textures[i].sampler);
+ vkDestroyImageView(demo->device, demo->textures[i].view, NULL);
+ vkDestroyImage(demo->device, demo->textures[i].image, NULL);
+ vkFreeMemory(demo->device, demo->textures[i].mem, NULL);
+ vkDestroySampler(demo->device, demo->textures[i].sampler, NULL);
}
for (i = 0; i < demo->swapchainImageCount; i++) {
- vkDestroyImageView(demo->device, demo->buffers[i].view);
+ vkDestroyImageView(demo->device, demo->buffers[i].view, NULL);
}
- vkDestroyImageView(demo->device, demo->depth.view);
- vkDestroyImage(demo->device, demo->depth.image);
- vkFreeMemory(demo->device, demo->depth.mem);
+ vkDestroyImageView(demo->device, demo->depth.view, NULL);
+ vkDestroyImage(demo->device, demo->depth.image, NULL);
+ vkFreeMemory(demo->device, demo->depth.mem, NULL);
free(demo->buffers);
diff --git a/demos/vulkaninfo.c b/demos/vulkaninfo.c
index 91ded08..69b2896 100644
--- a/demos/vulkaninfo.c
+++ b/demos/vulkaninfo.c
@@ -480,7 +480,7 @@
info.enabledExtensionNameCount = enabled_extension_count;
info.ppEnabledExtensionNames = (const char*const*) known_extensions;
dev->gpu = gpu;
- err = vkCreateDevice(gpu->obj, &info, &dev->obj);
+ err = vkCreateDevice(gpu->obj, &info, NULL, &dev->obj);
if (err)
ERR_EXIT(err);
@@ -488,7 +488,7 @@
static void app_dev_destroy(struct app_dev *dev)
{
- vkDestroyDevice(dev->obj);
+ vkDestroyDevice(dev->obj, NULL);
}
static void app_get_global_layer_extensions(
@@ -532,7 +532,6 @@
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pNext = NULL,
.pAppInfo = &app_info,
- .pAllocCb = NULL,
.enabledLayerNameCount = 0,
.ppEnabledLayerNames = NULL,
.enabledExtensionNameCount = 0,
@@ -613,7 +612,7 @@
inst_info.enabledExtensionNameCount = global_extension_count;
inst_info.ppEnabledExtensionNames = (const char * const *) known_extensions;
- err = vkCreateInstance(&inst_info, &inst->instance);
+ err = vkCreateInstance(&inst_info, NULL, &inst->instance);
if (err == VK_ERROR_INCOMPATIBLE_DRIVER) {
printf("Cannot create Vulkan instance.\n");
ERR_EXIT(err);
@@ -625,7 +624,7 @@
static void app_destroy_instance(struct app_instance *inst)
{
free(inst->global_extensions);
- vkDestroyInstance(inst->instance);
+ vkDestroyInstance(inst->instance, NULL);
}