fixes
[demo] / src / vulkan / renderer-vk.cc
1 #include <vulkan/vulkan.h>
2 #include <stdio.h>
3
4 #include "gfxapi.h"
5 #include "renderer-vk.h"
6 #include "uniforms.h"
7 #include "vkutil.h"
8 #include "vkutil-pipeline.h"
9
10 static void set_resources_layouts(VkuPipelineGenerator *pipe_gen, std::vector<ResourceVK> *res);
11
12 RendererVK::RendererVK()
13 {
14         scene = 0;
15         camera = 0;
16         sprog = 0;
17
18         skytex = 0;
19         dskytex = 0;
20
21         fog_density = 0;
22
23         default_vs_ub = 0;
24         default_fs_ub = 0;
25         sky_vs_ub = 0;
26 }
27
28 RendererVK::~RendererVK()
29 {
30         delete default_vs_ub;
31         delete default_fs_ub;
32         delete sky_vs_ub;
33 }
34
35 bool RendererVK::create_resources()
36 {
37         /* default pipeline resources */
38
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");
42                 return false;
43         }
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");
49                 return false;
50         }
51         default_resources.push_back(default_vs_res);
52
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");
56                 return false;
57         }
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");
63                 return false;
64         }
65         default_resources.push_back(default_fs_res);
66         set_resources_layouts(&default_pipe_gen, &default_resources);
67
68         /* sky pipeline resources */
69
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");
73                 return false;
74         }
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");
80                 return false;
81         }
82         sky_resources.push_back(sky_vs_res);
83         set_resources_layouts(&sky_pipe_gen, &sky_resources);
84
85         return true;
86 }
87
88 bool RendererVK::create()
89 {
90         /*      if(!create_sky_pipeline()) {
91                         fprintf(stderr, "Failed to create sky pipeline.\n");
92                         return false;
93                 }*/
94
95         return true;
96 }
97
98 bool RendererVK::create_default_pipeline()
99 {
100         return true;
101 }
102
103 static void set_resources_layouts(VkuPipelineGenerator *pipe_gen, std::vector<ResourceVK> *res)
104 {
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);
108                 }
109         }
110 }