1 #include <vulkan/vulkan.h>
5 #include "renderer-vk.h"
8 #include "vkutil-pipeline.h"
10 static void set_resources_layouts(VkuPipelineGenerator *pipe_gen, std::vector<ResourceVK> *res);
12 RendererVK::RendererVK()
28 RendererVK::~RendererVK()
35 bool RendererVK::create_resources()
37 /* default pipeline resources */
39 default_vs_ub = gfx_create_uniform_buffer();
40 if(!default_vs_ub->create(sizeof default_vs_uniforms)) {
41 fprintf(stderr, "Failed to create the default VS uniform buffer.\n");
44 ResourceVK default_vs_res;
45 if(!default_vs_res.create_ds_layout(MATRIX_UNIFORMS,
46 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
47 VK_SHADER_STAGE_VERTEX_BIT, 0)) {
48 fprintf(stderr, "Failed to create the ds layout for the default vs uniform buffer.\n");
51 default_resources.push_back(default_vs_res);
53 default_fs_ub = gfx_create_uniform_buffer();
54 if(!default_fs_ub->create(sizeof default_fs_uniforms)) {
55 fprintf(stderr, "Failed to create the default FS uniform buffer.\n");
58 ResourceVK default_fs_res;
59 if(!default_fs_res.create_ds_layout(SHADING_UNIFORMS,
60 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
61 VK_SHADER_STAGE_FRAGMENT_BIT, 0)) {
62 fprintf(stderr, "Failed to create the ds layout for the default VS uniform buffer.\n");
65 default_resources.push_back(default_fs_res);
66 set_resources_layouts(&default_pipe_gen, &default_resources);
68 /* sky pipeline resources */
70 sky_vs_ub = gfx_create_uniform_buffer();
71 if(!sky_vs_ub->create(sizeof sky_vs_uniforms)) {
72 fprintf(stderr, "Failed to create the VS uniform buffer for the sky.\n");
75 ResourceVK sky_vs_res;
76 if(!sky_vs_res.create_ds_layout(SKY_MATRIX_UNIFORMS,
77 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
78 VK_SHADER_STAGE_FRAGMENT_BIT, 0)) {
79 fprintf(stderr, "Failed to create the ds layout for the sky VS uniform buffer.\n");
82 sky_resources.push_back(sky_vs_res);
83 set_resources_layouts(&sky_pipe_gen, &sky_resources);
88 bool RendererVK::create()
90 /* if(!create_sky_pipeline()) {
91 fprintf(stderr, "Failed to create sky pipeline.\n");
98 bool RendererVK::create_default_pipeline()
103 static void set_resources_layouts(VkuPipelineGenerator *pipe_gen, std::vector<ResourceVK> *res)
105 for(size_t i=0; i<res->size(); i++) {
106 if((*res)[i].type == RES_DESC_SET) {
107 pipe_gen->set_resources_layout((*res)[i].layout);