static bool create_zbuffer();
static bool create_renderpass();
static bool create_framebuffers();
+static bool create_pipelines();
static bool begin_init_command_buffer(VkCommandBuffer *cb);
static bool end_init_command_buffer(VkCommandBuffer *cb);
static bool allocate_rendering_command_buffers(VkCommandBuffer *bufs);
return false;
}
+ if(!create_pipelines()) {
+ fprintf(stderr, "Failed to create the pipelines.\n");
+ return false;
+ }
+
if(!end_init_command_buffer(&init_buf)) {
fprintf(stderr, "Failed to end the command buffer.\n");
return false;
VkMemoryRequirements dmem_reqs;
vkGetImageMemoryRequirements(vk_device, dimg, &dmem_reqs);
- gpu_mem = vk_allocate(dmem_reqs.size);
-
- if(!gpu_mem)
+ DevMemBlock block;
+ if(!vku_allocate(dmem_reqs.size, &block)) {
+ fprintf(stderr, "Failed to allocate zbuffer image.\n");
return false;
+ }
- vkBindImageMemory(vk_device, dimg, gpu_mem, 0);
+ vkBindImageMemory(vk_device, dimg, block.dev_mem, 0);
if(!vk_image_set_layout(init_buf, dimg, VK_IMAGE_ASPECT_DEPTH_BIT,
VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
return true;
}
+static bool create_pipelines()
+{
+ VkDescriptorSetLayoutBinding dslb[1];
+ memset(&dslb[0], 0, sizeof dslb[0]);
+ dslb[0].binding = 0;
+ dslb[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
+ dslb[0].descriptorCount = 1;
+ dslb[0].stageFlags = VK_SHADER_STAGE_VERTEX_BIT;
+
+ VkDescriptorSetLayoutCreateInfo dslinf;
+ memset(&dslinf, 0, sizeof dslinf);
+ dslinf.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
+ dslinf.bindingCount = 1; //dslb.size();
+ dslinf.pBindings = dslb;
+
+ VkDescriptorSetLayout dsl;
+ if(vkCreateDescriptorSetLayout(vk_device, &dslinf, 0, &dsl) != VK_SUCCESS) {
+ fprintf(stderr, "Failed to create descriptor set layout.\n");
+ return false;
+ }
+
+ VkPipelineLayoutCreateInfo pinf;
+ memset(&pinf, 0, sizeof pinf);
+ pinf.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
+ pinf.setLayoutCount = 1;
+ pinf.pSetLayouts = &dsl;
+
+ VkPipelineLayout pl;
+ if(vkCreatePipelineLayout(vk_device, &pinf, 0, &pl) != VK_SUCCESS) {
+ fprintf(stderr, "Failed to create pipeline layout.\n");
+ return false;
+ }
+
+ VkPipelineCacheCreateInfo pcinf;
+ memset(&pcinf, 0, sizeof pcinf);
+ pcinf.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO;
+
+ VkPipelineCache pcache;
+ if(vkCreatePipelineCache(vk_device, &pcinf, 0, &pcache) != VK_SUCCESS) {
+ fprintf(stderr, "Failed to create pipeline cache.\n");
+ return false;
+ }
+
+ VkGraphicsPipelineCreateInfo ginf;
+ memset(&ginf, 0, sizeof ginf);
+ ginf.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
+ ginf.stageCount = 2;
+
+ return true;
+}
+
static bool end_init_command_buffer(VkCommandBuffer *cb)
{
if(vkEndCommandBuffer(*cb) != VK_SUCCESS) {
void cleanup_vulkan()
{
- //TODO!!!
free_rendering_command_buffers(rbufs, 2);
if(win) {
glfwDestroyWindow(win);
static void reshape(int width, int height)
{
-// VkSwapchainKHR sc;
-// if(!(sc = vku_create_swapchain(vk_surface, width, height, 2, VK_PRESENT_MODE_FIFO_KHR,
-// vk_swapchain))) {
-// fprintf(stderr, "Failed to create %dx%d double-buffered swapchain\n", width, height);
-// return;
-// }
-// vk_swapchain = sc;
-//
-// delete [] vkswapchain_images;
-// vkswapchain_images = vku_get_swapchain_images(sc, 0);
-// vk_curr_swapchain_image = vku_get_next_image(vk_swapchain);
}
static void clear(float r, float g, float b)