summaryrefslogtreecommitdiff
path: root/src/vk/graphics_pipeline_3d_layout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vk/graphics_pipeline_3d_layout.cpp')
-rw-r--r--src/vk/graphics_pipeline_3d_layout.cpp69
1 files changed, 53 insertions, 16 deletions
diff --git a/src/vk/graphics_pipeline_3d_layout.cpp b/src/vk/graphics_pipeline_3d_layout.cpp
index 62c894c..4374ab9 100644
--- a/src/vk/graphics_pipeline_3d_layout.cpp
+++ b/src/vk/graphics_pipeline_3d_layout.cpp
@@ -22,8 +22,9 @@
namespace
{
+
void
-load_descriptor_set_layout_world_view(void *obj)
+load_descriptor_set_world(void *obj)
{
auto self = static_cast<VK::GraphicsPipeline3DLayout*>(obj);
@@ -49,23 +50,59 @@ load_descriptor_set_layout_world_view(void *obj)
if(vkCreateDescriptorSetLayout(
cg_core.vk_device_with_swapchain->device, &layout_info, nullptr,
- &self->descriptor_set_world_view) != VK_SUCCESS)
+ &self->descriptor_set_world) != VK_SUCCESS)
throw CommandError{
"Failed to create Vulkan descriptor set layout for world view."};
}
void
-unload_descriptor_set_layout_world_view(void *obj)
+unload_descriptor_set_world(void *obj)
{
auto self = static_cast<VK::GraphicsPipeline3DLayout*>(obj);
vkDestroyDescriptorSetLayout(
- cg_core.vk_device_with_swapchain->device,
- self->descriptor_set_world_view, nullptr);
+ cg_core.vk_device_with_swapchain->device, self->descriptor_set_world,
+ nullptr);
+}
+
+void
+load_descriptor_set_view(void *obj)
+{
+ auto self = static_cast<VK::GraphicsPipeline3DLayout*>(obj);
+
+ std::array<VkDescriptorSetLayoutBinding, 1> set_layouts{};
+ set_layouts[0].binding = 0;
+ set_layouts[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
+ set_layouts[0].descriptorCount = 1;
+ set_layouts[0].stageFlags = VK_SHADER_STAGE_VERTEX_BIT;
+ set_layouts[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 = set_layouts.size();
+ layout_info.pBindings = set_layouts.data();
+
+ if(vkCreateDescriptorSetLayout(
+ cg_core.vk_device_with_swapchain->device, &layout_info, nullptr,
+ &self->descriptor_set_view) != VK_SUCCESS)
+ throw CommandError{
+ "Failed to create Vulkan descriptor set layout for world view."};
+}
+
+void
+unload_descriptor_set_view(void *obj)
+{
+ auto self = static_cast<VK::GraphicsPipeline3DLayout*>(obj);
+
+ vkDestroyDescriptorSetLayout(
+ cg_core.vk_device_with_swapchain->device, self->descriptor_set_view,
+ nullptr);
}
void
-load_descriptor_set_layout_model_instance(void *obj)
+load_descriptor_set_model_instance(void *obj)
{
auto self = static_cast<VK::GraphicsPipeline3DLayout*>(obj);
@@ -99,7 +136,7 @@ load_descriptor_set_layout_model_instance(void *obj)
}
void
-unload_descriptor_set_layout_model_instance(void *obj)
+unload_descriptor_set_model_instance(void *obj)
{
auto self = static_cast<VK::GraphicsPipeline3DLayout*>(obj);
@@ -109,12 +146,13 @@ unload_descriptor_set_layout_model_instance(void *obj)
}
void
-load_pipeline_layout(void *obj)
+load_pipeline(void *obj)
{
auto self = static_cast<VK::GraphicsPipeline3DLayout*>(obj);
- std::array<VkDescriptorSetLayout, 2> set_layouts{
- self->descriptor_set_world_view,
+ std::array<VkDescriptorSetLayout, 3> set_layouts{
+ self->descriptor_set_world,
+ self->descriptor_set_view,
self->descriptor_set_model_instance};
VkPipelineLayoutCreateInfo pipeline_layout_info{};
@@ -131,7 +169,7 @@ load_pipeline_layout(void *obj)
}
void
-unload_pipeline_layout(void *obj)
+unload_pipeline(void *obj)
{
auto self = static_cast<VK::GraphicsPipeline3DLayout*>(obj);
@@ -226,11 +264,10 @@ unload_render_pass(void *obj)
}
const CommandChain loader{
- {&load_descriptor_set_layout_world_view,
- &unload_descriptor_set_layout_world_view},
- {&load_descriptor_set_layout_model_instance,
- &unload_descriptor_set_layout_model_instance},
- {&load_pipeline_layout, &unload_pipeline_layout},
+ {&load_descriptor_set_world, &unload_descriptor_set_world},
+ {&load_descriptor_set_view, &unload_descriptor_set_view},
+ {&load_descriptor_set_model_instance, &unload_descriptor_set_model_instance},
+ {&load_pipeline, &unload_pipeline},
{&load_render_pass, &unload_render_pass}
};