X-Git-Url: http://git.mutantstargoat.com?a=blobdiff_plain;f=src%2Fvulkan%2Fvk.cc;h=4a232113119c98ccf85a1e253ec3a8b6cb9b69cd;hb=d90ed8aef9e3547eee75ad793c352ee022d35050;hp=ce55be2417b33ee4138901d34247c06d8f679170;hpb=ecb47604bb2b8ab3ac5a133e78ef6cb19a20d9cc;p=demo diff --git a/src/vulkan/vk.cc b/src/vulkan/vk.cc index ce55be2..4a23211 100644 --- a/src/vulkan/vk.cc +++ b/src/vulkan/vk.cc @@ -59,6 +59,7 @@ static bool create_swapchain(VkSwapchainKHR *sc); 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); @@ -129,6 +130,11 @@ bool init_vulkan() 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; @@ -348,12 +354,13 @@ static bool create_zbuffer() 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, @@ -468,6 +475,57 @@ static bool create_framebuffers() 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) { @@ -599,7 +657,6 @@ static bool begin_rendering_command_buffers(VkCommandBuffer *bufs, int count) void cleanup_vulkan() { - //TODO!!! free_rendering_command_buffers(rbufs, 2); if(win) { glfwDestroyWindow(win); @@ -618,17 +675,6 @@ static void error_callback(int error, const char *description) 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)