X-Git-Url: https://eleni.mutantstargoat.com/git/?a=blobdiff_plain;f=src%2Fvulkan%2Frenderer-vk.cc;h=0f4074ec57934ae260f8b71b959b7b36c41fe684;hb=1d424e50420a5b04aadb5abac2c02f4e7b797618;hp=187444e319d2ed982503128b5674cc553230935c;hpb=86c912d603be75ac8b2fdb2229f1696e9c0c01d9;p=demo diff --git a/src/vulkan/renderer-vk.cc b/src/vulkan/renderer-vk.cc index 187444e..0f4074e 100644 --- a/src/vulkan/renderer-vk.cc +++ b/src/vulkan/renderer-vk.cc @@ -1,7 +1,13 @@ #include +#include +#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 *res); RendererVK::RendererVK() { @@ -13,33 +19,109 @@ 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(); + int data_size = sizeof default_vs_uniforms; + if(!default_vs_ub->create(data_size)) { + 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_vs_res.size = data_size; + default_resources.push_back(default_vs_res); + + 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 */ -/* if(!create_sky_pipeline()) { - fprintf(stderr, "Failed to create sky pipeline.\n"); + 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; } + +bool RendererVK::create_desc_pool() +{ + int num_desc = default_resources.size() + sky_resources.size(); + VkDescriptorPoolCreateInfo dpinf; + memset(&dpinf, 0, sizeof dpinf); + + dpinf.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; + dpinf.maxSets = num_desc + 1; + dpinf.poolSizeCount = num_desc; + + for(size_t i=0; i *res) +{ + for(size_t i=0; isize(); i++) { + if((*res)[i].type == RES_DESC_SET) { + pipe_gen->set_resources_layout((*res)[i].layout); + } + } +}