projects
/
demo
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
f6ceb16
)
fixes
author
Eleni Maria Stea
<estea@igalia.com>
Mon, 30 Apr 2018 22:47:30 +0000
(
01:47
+0300)
committer
Eleni Maria Stea
<estea@igalia.com>
Mon, 30 Apr 2018 22:47:30 +0000
(
01:47
+0300)
src/vulkan/renderer-vk.cc
patch
|
blob
|
history
src/vulkan/renderer-vk.h
patch
|
blob
|
history
src/vulkan/resources.cc
patch
|
blob
|
history
src/vulkan/resources.h
patch
|
blob
|
history
src/vulkan/vkutil-pipeline.cc
patch
|
blob
|
history
src/vulkan/vkutil-pipeline.h
patch
|
blob
|
history
diff --git
a/src/vulkan/renderer-vk.cc
b/src/vulkan/renderer-vk.cc
index
cbaa950
..
bb52e94
100644
(file)
--- a/
src/vulkan/renderer-vk.cc
+++ b/
src/vulkan/renderer-vk.cc
@@
-7,7
+7,7
@@
#include "vkutil.h"
#include "vkutil-pipeline.h"
#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()
{
RendererVK::RendererVK()
{
@@
-34,7
+34,8
@@
RendererVK::~RendererVK()
bool RendererVK::create_resources()
{
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");
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);
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)) {
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);
return false;
}
sky_resources.push_back(sky_vs_res);
+ set_resources_layouts(&sky_pipe_gen, &sky_resources);
return true;
}
bool RendererVK::create()
{
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;
/* 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()
{
bool RendererVK::create_default_pipeline()
{
-
return true;
}
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);
+ }
+ }
+}
diff --git
a/src/vulkan/renderer-vk.h
b/src/vulkan/renderer-vk.h
index
ce52b4e
..
f571670
100644
(file)
--- a/
src/vulkan/renderer-vk.h
+++ b/
src/vulkan/renderer-vk.h
@@
-6,18
+6,16
@@
#include "renderer.h"
#include "vulkan/resources.h"
#include "renderer.h"
#include "vulkan/resources.h"
+#include "vulkan/vkutil-pipeline.h"
class RendererVK : public Renderer {
private:
class RendererVK : public Renderer {
private:
- VkDescriptorPool uniform_pool;
+ VkDescriptorPool res_pool;
- VkPipeline pipe_default;
+ VkuPipelineGenerator default_pipe_gen;
std::vector<ResourceVK> default_resources;
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();
std::vector<ResourceVK> sky_resources;
bool create_default_pipeline();
@@
-25,9
+23,10
@@
public:
RendererVK();
~RendererVK();
RendererVK();
~RendererVK();
- bool create() override;
bool create_resources();
bool create_resources();
+ bool create() override;
+
};
#endif // RENDERER_VK_H_
};
#endif // RENDERER_VK_H_
diff --git
a/src/vulkan/resources.cc
b/src/vulkan/resources.cc
index
22932a6
..
6a023a6
100644
(file)
--- 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)
{
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;
/* layout binding */
VkDescriptorSetLayoutBinding bind;
diff --git
a/src/vulkan/resources.h
b/src/vulkan/resources.h
index
bbe1478
..
5515779
100644
(file)
--- a/
src/vulkan/resources.h
+++ b/
src/vulkan/resources.h
@@
-9,13
+9,11
@@
enum ResourceType {
};
class ResourceVK {
};
class ResourceVK {
-private:
- ResourceType res_type;
-
+public:
+ ResourceType type;
VkDescriptorSetLayout layout;
VkPushConstantRange range;
VkDescriptorSetLayout layout;
VkPushConstantRange range;
-public:
ResourceVK();
~ResourceVK();
ResourceVK();
~ResourceVK();
diff --git
a/src/vulkan/vkutil-pipeline.cc
b/src/vulkan/vkutil-pipeline.cc
index
4be1d22
..
44cf5d6
100644
(file)
--- a/
src/vulkan/vkutil-pipeline.cc
+++ b/
src/vulkan/vkutil-pipeline.cc
@@
-46,9
+46,13
@@
VkuPipelineGenerator::VkuPipelineGenerator()
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);
{
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
//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;
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;
}
adsc.binding = binding;
adsc.format = format;
}
+
+void VkuPipelineGenerator::set_resources_layout(VkDescriptorSetLayout layout)
+{
+ res_layouts.push_back(layout);
+}
diff --git
a/src/vulkan/vkutil-pipeline.h
b/src/vulkan/vkutil-pipeline.h
index
9cd99fa
..
281d489
100644
(file)
--- a/
src/vulkan/vkutil-pipeline.h
+++ b/
src/vulkan/vkutil-pipeline.h
@@
-2,6
+2,7
@@
#define VKUTIL_PIPELINE_H_
#include <vulkan/vulkan.h>
#define VKUTIL_PIPELINE_H_
#include <vulkan/vulkan.h>
+#include <vector>
enum VkuVertexBindings {
VKU_BIND_VERTEX,
enum VkuVertexBindings {
VKU_BIND_VERTEX,
@@
-33,16
+34,18
@@
private:
std::vector<VkDescriptorSetLayout> res_layouts;
// std::vector<VkPushConstantRange> push_const_ranges;
std::vector<VkDescriptorSetLayout> res_layouts;
// std::vector<VkPushConstantRange> push_const_ranges;
+ VkPipelineLayout layout;
+
public:
VkuPipelineGenerator();
~VkuPipelineGenerator();
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_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_
};
#endif // VKUTIL_PIPELINE_H_