fixes
[demo] / src / vulkan / renderer-vk.cc
index 187444e..bb52e94 100644 (file)
@@ -1,7 +1,13 @@
 #include <vulkan/vulkan.h>
+#include <stdio.h>
 
+#include "gfxapi.h"
 #include "renderer-vk.h"
 #include "uniforms.h"
+#include "vkutil.h"
+#include "vkutil-pipeline.h"
+
+static void set_resources_layouts(VkuPipelineGenerator *pipe_gen, std::vector<ResourceVK> *res);
 
 RendererVK::RendererVK()
 {
@@ -13,33 +19,92 @@ RendererVK::RendererVK()
        dskytex = 0;
 
        fog_density = 0;
-       vbuf = fbuf = svbuf = 0;
+
+       default_vs_ub = 0;
+       default_fs_ub = 0;
+       sky_vs_ub = 0;
 }
 
 RendererVK::~RendererVK()
 {
-       delete vbuf;
-       delete fbuf;
-       delete svbuf;
+       delete default_vs_ub;
+       delete default_fs_ub;
+       delete sky_vs_ub;
 }
 
-bool RendererVK::create()
+bool RendererVK::create_resources()
 {
-       if(!create_default_pipeline()) {
-               fprintf(stderr, "Failed to create default pipeline.\n");
+       /* 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");
                return false;
        }
+       ResourceVK default_vs_res;
+       if(!default_vs_res.create_ds_layout(MATRIX_UNIFORMS,
+                                           VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+                                           VK_SHADER_STAGE_VERTEX_BIT, 0)) {
+               fprintf(stderr, "Failed to create the ds layout for the default vs uniform buffer.\n");
+               return false;
+       }
+       default_resources.push_back(default_vs_res);
 
-/*     if(!create_sky_pipeline()) {
-               fprintf(stderr, "Failed to create sky pipeline.\n");
+       default_fs_ub = gfx_create_uniform_buffer();
+       if(!default_fs_ub->create(sizeof default_fs_uniforms)) {
+               fprintf(stderr, "Failed to create the default FS uniform buffer.\n");
                return false;
-       }*/
+       }
+       ResourceVK default_fs_res;
+       if(!default_fs_res.create_ds_layout(SHADING_UNIFORMS,
+                                           VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+                                           VK_SHADER_STAGE_FRAGMENT_BIT, 0)) {
+               fprintf(stderr, "Failed to create the ds layout for the default VS uniform buffer.\n");
+               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)) {
+               fprintf(stderr, "Failed to create the VS uniform buffer for the sky.\n");
+               return false;
+       }
+       ResourceVK sky_vs_res;
+       if(!sky_vs_res.create_ds_layout(SKY_MATRIX_UNIFORMS,
+                                       VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+                                       VK_SHADER_STAGE_FRAGMENT_BIT, 0)) {
+               fprintf(stderr, "Failed to create the ds layout for the sky VS uniform buffer.\n");
+               return false;
+       }
+       sky_resources.push_back(sky_vs_res);
+       set_resources_layouts(&sky_pipe_gen, &sky_resources);
+
+       return true;
+}
+
+bool RendererVK::create()
+{
+       /*      if(!create_sky_pipeline()) {
+                       fprintf(stderr, "Failed to create sky pipeline.\n");
+                       return false;
+               }*/
 
        return true;
 }
 
 bool RendererVK::create_default_pipeline()
 {
-       /* vertex */
        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);
+               }
+       }
+}