From 9922a7c30b64d74b424cb5783b08497396d2365c Mon Sep 17 00:00:00 2001 From: Eleni Maria Stea Date: Tue, 1 May 2018 01:47:30 +0300 Subject: [PATCH] fixes --- src/vulkan/renderer-vk.cc | 24 ++++++++++++++++-------- src/vulkan/renderer-vk.h | 13 ++++++------- src/vulkan/resources.cc | 2 +- src/vulkan/resources.h | 6 ++---- src/vulkan/vkutil-pipeline.cc | 12 ++++++++++-- src/vulkan/vkutil-pipeline.h | 7 +++++-- 6 files changed, 40 insertions(+), 24 deletions(-) diff --git a/src/vulkan/renderer-vk.cc b/src/vulkan/renderer-vk.cc index cbaa950..bb52e94 100644 --- a/src/vulkan/renderer-vk.cc +++ b/src/vulkan/renderer-vk.cc @@ -7,7 +7,7 @@ #include "vkutil.h" #include "vkutil-pipeline.h" -static VkuPipelineGenerator pipe_gen; +static void set_resources_layouts(VkuPipelineGenerator *pipe_gen, std::vector *res); RendererVK::RendererVK() { @@ -34,7 +34,8 @@ RendererVK::~RendererVK() bool RendererVK::create_resources() { - /* default pipeline: create binding points */ + /* default pipeline resources */ + default_vs_ub = gfx_create_uniform_buffer(); if(!default_vs_ub->create(sizeof default_vs_uniforms)) { fprintf(stderr, "Failed to create the default VS uniform buffer.\n"); @@ -62,6 +63,9 @@ bool RendererVK::create_resources() return false; } default_resources.push_back(default_fs_res); + set_resources_layouts(&default_pipe_gen, &default_resources); + + /* sky pipeline resources */ sky_vs_ub = gfx_create_uniform_buffer(); if(!sky_vs_ub->create(sizeof sky_vs_uniforms)) { @@ -76,17 +80,13 @@ bool RendererVK::create_resources() return false; } sky_resources.push_back(sky_vs_res); + set_resources_layouts(&sky_pipe_gen, &sky_resources); return true; } bool RendererVK::create() { - if(!create_default_pipeline()) { - fprintf(stderr, "Failed to create default pipeline.\n"); - return false; - } - /* if(!create_sky_pipeline()) { fprintf(stderr, "Failed to create sky pipeline.\n"); return false; @@ -97,6 +97,14 @@ bool RendererVK::create() bool RendererVK::create_default_pipeline() { - return true; } + +static void set_resources_layouts(VkuPipelineGenerator *pipe_gen, std::vector *res) +{ + for(size_t i=0; isize(); i++) { + if((*res)[i].type == RES_DESC_SET) { + pipe_gen->set_resources_layout((*res)[i].layout); + } + } +} diff --git a/src/vulkan/renderer-vk.h b/src/vulkan/renderer-vk.h index ce52b4e..f571670 100644 --- a/src/vulkan/renderer-vk.h +++ b/src/vulkan/renderer-vk.h @@ -6,18 +6,16 @@ #include "renderer.h" #include "vulkan/resources.h" +#include "vulkan/vkutil-pipeline.h" class RendererVK : public Renderer { private: - VkDescriptorPool uniform_pool; + VkDescriptorPool res_pool; - VkPipeline pipe_default; + VkuPipelineGenerator default_pipe_gen; std::vector default_resources; - VkPipeline pipe_morph; - std::vector morph_resources; - - VkPipeline pipe_sky; + VkuPipelineGenerator sky_pipe_gen; std::vector sky_resources; bool create_default_pipeline(); @@ -25,9 +23,10 @@ public: RendererVK(); ~RendererVK(); - bool create() override; bool create_resources(); + bool create() override; + }; #endif // RENDERER_VK_H_ diff --git a/src/vulkan/resources.cc b/src/vulkan/resources.cc index 22932a6..6a023a6 100644 --- a/src/vulkan/resources.cc +++ b/src/vulkan/resources.cc @@ -10,7 +10,7 @@ ResourceVK::~ResourceVK() {} bool ResourceVK::create_ds_layout(unsigned int num, VkDescriptorType type, VkShaderStageFlags stage, VkSampler *sampler) { - res_type = RES_DESC_SET; + this->type = RES_DESC_SET; /* layout binding */ VkDescriptorSetLayoutBinding bind; diff --git a/src/vulkan/resources.h b/src/vulkan/resources.h index bbe1478..5515779 100644 --- a/src/vulkan/resources.h +++ b/src/vulkan/resources.h @@ -9,13 +9,11 @@ enum ResourceType { }; class ResourceVK { -private: - ResourceType res_type; - +public: + ResourceType type; VkDescriptorSetLayout layout; VkPushConstantRange range; -public: ResourceVK(); ~ResourceVK(); diff --git a/src/vulkan/vkutil-pipeline.cc b/src/vulkan/vkutil-pipeline.cc index 4be1d22..44cf5d6 100644 --- a/src/vulkan/vkutil-pipeline.cc +++ b/src/vulkan/vkutil-pipeline.cc @@ -46,9 +46,13 @@ VkuPipelineGenerator::VkuPipelineGenerator() VkuPipelineGenerator::~VkuPipelineGenerator() { + for(size_t i=0; i +#include enum VkuVertexBindings { VKU_BIND_VERTEX, @@ -33,16 +34,18 @@ private: std::vector res_layouts; // std::vector push_const_ranges; + VkPipelineLayout layout; + public: VkuPipelineGenerator(); ~VkuPipelineGenerator(); - VkPipeline generate(VkuDynState dyn_flags) const; + VkPipeline generate(VkuDynState dyn_flags); void set_shader_modules(VkShaderModule vs, VkShaderModule fs); void set_attribute(uint32_t binding, uint32_t stride, uint32_t location, VkFormat format); - + void set_resources_layout(VkDescriptorSetLayout layout); }; #endif // VKUTIL_PIPELINE_H_ -- 1.7.10.4