fixes
authorEleni Maria Stea <estea@igalia.com>
Mon, 30 Apr 2018 22:47:30 +0000 (01:47 +0300)
committerEleni Maria Stea <estea@igalia.com>
Mon, 30 Apr 2018 22:47:30 +0000 (01:47 +0300)
src/vulkan/renderer-vk.cc
src/vulkan/renderer-vk.h
src/vulkan/resources.cc
src/vulkan/resources.h
src/vulkan/vkutil-pipeline.cc
src/vulkan/vkutil-pipeline.h

index cbaa950..bb52e94 100644 (file)
@@ -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<ResourceVK> *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<ResourceVK> *res)
+{
+       for(size_t i=0; i<res->size(); i++) {
+               if((*res)[i].type == RES_DESC_SET) {
+                       pipe_gen->set_resources_layout((*res)[i].layout);
+               }
+       }
+}
index ce52b4e..f571670 100644 (file)
@@ -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<ResourceVK> default_resources;
 
-       VkPipeline pipe_morph;
-       std::vector<ResourceVK> morph_resources;
-
-       VkPipeline pipe_sky;
+       VkuPipelineGenerator sky_pipe_gen;
        std::vector<ResourceVK> 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_
index 22932a6..6a023a6 100644 (file)
@@ -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;
index bbe1478..5515779 100644 (file)
@@ -9,13 +9,11 @@ enum ResourceType {
 };
 
 class ResourceVK {
-private:
-       ResourceType res_type;
-
+public:
+       ResourceType type;
        VkDescriptorSetLayout layout;
        VkPushConstantRange range;
 
-public:
        ResourceVK();
        ~ResourceVK();
 
index 4be1d22..44cf5d6 100644 (file)
@@ -46,9 +46,13 @@ VkuPipelineGenerator::VkuPipelineGenerator()
 
 VkuPipelineGenerator::~VkuPipelineGenerator()
 {
+       for(size_t i=0; i<res_layouts.size(); i++) {
+               vkDestroyDescriptorSetLayout(vk_device, res_layouts[i], 0);
+       }
+       vkDestroyPipelineLayout(vk_device, layout, 0);
 }
 
-VkPipeline VkuPipelineGenerator::generate(VkuDynState dyn_flags) const
+VkPipeline VkuPipelineGenerator::generate(VkuDynState dyn_flags)
 {
        VkPipelineDynamicStateCreateInfo dyni;
        memset(&dyni, 0, sizeof dyni);
@@ -87,7 +91,6 @@ VkPipeline VkuPipelineGenerator::generate(VkuDynState dyn_flags) const
        //linf.pPushConstantRanges = push_const_ranges.data();
        //maxPushConstantsSize from VkPhysicalDeviceLimits
 
-       VkPipelineLayout layout;
        if(vkCreatePipelineLayout(vk_device, &linf, 0, &layout) != VK_SUCCESS) {
                fprintf(stderr, "Failed to create pipeline layout.\n");
                return 0;
@@ -151,3 +154,8 @@ void VkuPipelineGenerator::set_attribute(uint32_t binding, uint32_t stride,
        adsc.binding = binding;
        adsc.format = format;
 }
+
+void VkuPipelineGenerator::set_resources_layout(VkDescriptorSetLayout layout)
+{
+       res_layouts.push_back(layout);
+}
index 9cd99fa..281d489 100644 (file)
@@ -2,6 +2,7 @@
 #define VKUTIL_PIPELINE_H_
 
 #include <vulkan/vulkan.h>
+#include <vector>
 
 enum VkuVertexBindings {
        VKU_BIND_VERTEX,
@@ -33,16 +34,18 @@ private:
        std::vector<VkDescriptorSetLayout> res_layouts;
 //     std::vector<VkPushConstantRange> 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_