diff options
Diffstat (limited to 'src/vk/graphics_pipeline_2d.cpp')
| -rw-r--r-- | src/vk/graphics_pipeline_2d.cpp | 147 | 
1 files changed, 18 insertions, 129 deletions
| diff --git a/src/vk/graphics_pipeline_2d.cpp b/src/vk/graphics_pipeline_2d.cpp index bc1eca1..61cfe3f 100644 --- a/src/vk/graphics_pipeline_2d.cpp +++ b/src/vk/graphics_pipeline_2d.cpp @@ -25,119 +25,6 @@ namespace  {  void -load_descriptor_set_layout_projection(void *obj) -{ -  auto self = static_cast<VK::GraphicsPipeline2D*>(obj); - -  std::array<VkDescriptorSetLayoutBinding, 1> layout_bindings{}; - -  layout_bindings[0].binding = 0; -  layout_bindings[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; -  layout_bindings[0].descriptorCount = 1; -  layout_bindings[0].stageFlags = VK_SHADER_STAGE_VERTEX_BIT; -  layout_bindings[0].pImmutableSamplers = nullptr; - -  VkDescriptorSetLayoutCreateInfo layout_info{}; -  layout_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; -  layout_info.pNext = nullptr; -  layout_info.flags = 0; -  layout_info.bindingCount = static_cast<uint32_t>(layout_bindings.size()); -  layout_info.pBindings = layout_bindings.data(); - -  if(vkCreateDescriptorSetLayout( -       cg_core.vk_device_with_swapchain->device, &layout_info, nullptr, -       &self->descriptor_set_layout_projection) != VK_SUCCESS) -    throw CommandError{ -      "Failed to create Vulkan descriptor set layout for projection."}; -} - -void -unload_descriptor_set_layout_projection(void *obj) -{ -  auto self = static_cast<VK::GraphicsPipeline2D*>(obj); - -  vkDestroyDescriptorSetLayout( -    cg_core.vk_device_with_swapchain->device, -    self->descriptor_set_layout_projection, nullptr); -} - -void -load_descriptor_set_layout_sprite(void *obj) -{ -  auto self = static_cast<VK::GraphicsPipeline2D*>(obj); - -  std::array<VkDescriptorSetLayoutBinding, 2> layout_bindings{}; - -  layout_bindings[0].binding = 0; -  layout_bindings[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; -  layout_bindings[0].descriptorCount = 1; -  layout_bindings[0].stageFlags = VK_SHADER_STAGE_VERTEX_BIT; -  layout_bindings[0].pImmutableSamplers = nullptr; - -  layout_bindings[1].binding = 1; -  layout_bindings[1].descriptorType = -    VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; -  layout_bindings[1].descriptorCount = 1; -  layout_bindings[1].stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT; -  layout_bindings[1].pImmutableSamplers = nullptr; - -  VkDescriptorSetLayoutCreateInfo layout_info{}; -  layout_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; -  layout_info.pNext = nullptr; -  layout_info.flags = 0; -  layout_info.bindingCount = static_cast<uint32_t>(layout_bindings.size()); -  layout_info.pBindings = layout_bindings.data(); - -  if(vkCreateDescriptorSetLayout( -       cg_core.vk_device_with_swapchain->device, &layout_info, nullptr, -       &self->descriptor_set_layout_sprite) != VK_SUCCESS) -    throw CommandError{ -      "Failed to create Vulkan descriptor set layout for sprites."}; -} - -void -unload_descriptor_set_layout_sprite(void *obj) -{ -  auto self = static_cast<VK::GraphicsPipeline2D*>(obj); - -  vkDestroyDescriptorSetLayout( -    cg_core.vk_device_with_swapchain->device, -    self->descriptor_set_layout_sprite, nullptr); -} - -void -load_pipeline_layout(void *obj) -{ -  auto self = static_cast<VK::GraphicsPipeline2D*>(obj); - -  std::array<VkDescriptorSetLayout, 2> set_layouts{ -    self->descriptor_set_layout_projection, -    self->descriptor_set_layout_sprite -  }; - -  VkPipelineLayoutCreateInfo pipeline_layout_info{}; -  pipeline_layout_info.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; -  pipeline_layout_info.setLayoutCount = set_layouts.size(); -  pipeline_layout_info.pSetLayouts = set_layouts.data(); -  pipeline_layout_info.pushConstantRangeCount = 0; -  pipeline_layout_info.pPushConstantRanges = nullptr; - -  if(vkCreatePipelineLayout( -       cg_core.vk_device_with_swapchain->device, -       &pipeline_layout_info, nullptr, &self->pipeline_layout) != VK_SUCCESS) -    throw CommandError{"Failed to create Vulkan pipeline layout."}; -} - -void -unload_pipeline_layout(void *obj) -{ -  auto self = static_cast<VK::GraphicsPipeline2D*>(obj); - -  vkDestroyPipelineLayout( -    cg_core.vk_device_with_swapchain->device, self->pipeline_layout, nullptr); -} - -void  load_projection_uniform_buffer(void *obj)  {    auto self = static_cast<VK::GraphicsPipeline2D*>(obj); @@ -181,8 +68,8 @@ load_descriptor_pool(void *obj)    pool_info.pPoolSizes = &descriptor_pool_size;    if(vkCreateDescriptorPool( -       cg_core.vk_device_with_swapchain->device, -       &pool_info, nullptr, &self->descriptor_pool) != VK_SUCCESS) +       cg_core.vk_device_with_swapchain->device, &pool_info, nullptr, +       &self->descriptor_pool) != VK_SUCCESS)      throw CommandError{"Failed to create a Vulkan descriptor pool."};  } @@ -192,7 +79,8 @@ unload_descriptor_pool(void *obj)    auto self = static_cast<VK::GraphicsPipeline2D*>(obj);    vkDestroyDescriptorPool( -    cg_core.vk_device_with_swapchain->device, self->descriptor_pool, nullptr); +    cg_core.vk_device_with_swapchain->device, self->descriptor_pool, +    nullptr);  }  void @@ -202,7 +90,7 @@ load_projection_descriptor_sets(void *obj)    std::vector<VkDescriptorSetLayout> layouts(      self->ub_projection.size(), -    self->descriptor_set_layout_projection); +    cg_core.vk_graphics_pipeline_2d_layout->descriptor_set_projection);    VkDescriptorSetAllocateInfo alloc_info{};    alloc_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; @@ -267,7 +155,8 @@ load_framebuffer(void *obj)      VkFramebufferCreateInfo framebuffer_info{};      framebuffer_info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; -    framebuffer_info.renderPass = cg_core.vk_render_pass_2d; +    framebuffer_info.renderPass = +      cg_core.vk_graphics_pipeline_2d_layout->render_pass;      framebuffer_info.attachmentCount = attachments.size();      framebuffer_info.pAttachments = attachments.data();      framebuffer_info.width = cg_core.screen_width; @@ -276,7 +165,8 @@ load_framebuffer(void *obj)      if(vkCreateFramebuffer(  	 cg_core.vk_device_with_swapchain->device, &framebuffer_info, nullptr, -	 &self->swapchain_framebuffers[i]) != VK_SUCCESS) +	 &self->swapchain_framebuffers[i]) +       != VK_SUCCESS)        throw CommandError{"Failed to create Vulkan Framebuffer."};    }  } @@ -454,15 +344,17 @@ load_pipeline(void *obj)    pipeline_info.pDepthStencilState = nullptr;    pipeline_info.pColorBlendState = &color_blending;    pipeline_info.pDynamicState = &dynamic_state_info; -  pipeline_info.layout = self->pipeline_layout; -  pipeline_info.renderPass = cg_core.vk_render_pass_2d; +  pipeline_info.layout = cg_core.vk_graphics_pipeline_2d_layout->pipeline; +  pipeline_info.renderPass = +    cg_core.vk_graphics_pipeline_2d_layout->render_pass;    pipeline_info.subpass = 0;    pipeline_info.basePipelineHandle = VK_NULL_HANDLE;    pipeline_info.basePipelineIndex = -1;    if(vkCreateGraphicsPipelines(         cg_core.vk_device_with_swapchain->device, VK_NULL_HANDLE, 1, -       &pipeline_info, nullptr, &self->graphic_pipeline) != VK_SUCCESS) +       &pipeline_info, nullptr, &self->graphic_pipeline) +     != VK_SUCCESS)      throw CommandError{"Failed to create graphics pipeline."};  } @@ -476,10 +368,6 @@ unload_pipeline(void *obj)  }  const CommandChain loader{ -  {&load_descriptor_set_layout_projection, -   &unload_descriptor_set_layout_projection}, -  {&load_descriptor_set_layout_sprite, &unload_descriptor_set_layout_sprite}, -  {&load_pipeline_layout, &unload_pipeline_layout},    {&load_projection_uniform_buffer, &unload_projection_uniform_buffer},    {&load_descriptor_pool, &unload_descriptor_pool},    // By destroying the pool the sets are also destroyed. @@ -515,7 +403,8 @@ GraphicsPipeline2D::draw(      VkRenderPassBeginInfo render_pass_begin{};      render_pass_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;      render_pass_begin.pNext = nullptr; -    render_pass_begin.renderPass = cg_core.vk_render_pass_2d; +    render_pass_begin.renderPass = +      cg_core.vk_graphics_pipeline_2d_layout->render_pass;      render_pass_begin.framebuffer = this->swapchain_framebuffers[image_index];      render_pass_begin.renderArea.offset = {0, 0};      render_pass_begin.renderArea.extent = { @@ -552,8 +441,8 @@ GraphicsPipeline2D::draw(  	vkCmdBindDescriptorSets(  	  draw_command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, -	  this->pipeline_layout, 0, vk_descriptor_sets.size(), -	  vk_descriptor_sets.data(), 0, nullptr); +	  cg_core.vk_graphics_pipeline_2d_layout->pipeline, 0, +	  vk_descriptor_sets.size(), vk_descriptor_sets.data(), 0, nullptr);  	vkCmdBindPipeline(  	  draw_command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS,  	  this->graphic_pipeline); | 
