X-Git-Url: https://eleni.mutantstargoat.com/git/?p=demo;a=blobdiff_plain;f=src%2Fvulkan%2Fshader-vk.cc;fp=src%2Fvulkan%2Fshader-vk.cc;h=13bed2ef885876113a9a2ff2faa6e62e979e6e6d;hp=1fa9fb3a6e2f6e8fed2f25fe2287cd4eb6adb720;hb=86c912d603be75ac8b2fdb2229f1696e9c0c01d9;hpb=e04bbfa8eb50d10fc87c3cbd6667de5de767eaa7 diff --git a/src/vulkan/shader-vk.cc b/src/vulkan/shader-vk.cc index 1fa9fb3..13bed2e 100644 --- a/src/vulkan/shader-vk.cc +++ b/src/vulkan/shader-vk.cc @@ -11,7 +11,7 @@ ShaderVK::~ShaderVK() destroy(); } -bool ShaderVK::load(const char *fname, SType type) +bool ShaderVK::load(const char *fname, ShaderType type) { char *vk_fname = new char[strlen(fname) + strlen(".spirv") + 1]; strcpy(vk_fname, fname); @@ -41,7 +41,7 @@ bool ShaderVK::create(char *buf, unsigned int bsz, const char *fname) sminf.codeSize = bsz; sminf.pCode = (uint32_t *)buf; - if(vkCreateShaderModule(vk_device, &sminf, 0, &sm) != VK_SUCCESS) { + if(vkCreateShaderModule(vk_device, &sminf, 0, &sdr) != VK_SUCCESS) { delete [] buf; fprintf(stderr, "Failed to create vertex shader module.\n"); @@ -54,7 +54,7 @@ bool ShaderVK::create(char *buf, unsigned int bsz, const char *fname) void ShaderVK::destroy() { - vkDestroyShaderModule(vk_device, sm, 0); + vkDestroyShaderModule(vk_device, sdr, 0); } ShaderProgramVK::ShaderProgramVK() @@ -63,48 +63,12 @@ ShaderProgramVK::ShaderProgramVK() ShaderProgramVK::~ShaderProgramVK() { + destroy(); } bool ShaderProgramVK::create() { - /* pipeline cache */ - VkPipelineCacheCreateInfo pcinf; - memset(&pcinf, 0, sizeof pcinf); - pcinf.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO; - - VkPipelineCache pcache; - if(!vkCreatePipelineCache(vk_device, &pcinf, 0, &pcache) != VK_SUCCESS) { - fprintf(stderr, "Failed to create pipeline cache.\n"); - return false; - } - - /* pipeline */ - VkGraphicsPipelineCreateInfo gpinf; - memset(&gpinf, 0, sizeof gpinf); - gpinf.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; - gpinf.stageCount = 2; - - VkPipelineShaderStageCreateInfo ssinf[2]; - for(int i=0; i<2; i++) { - memset(&ssinf[i], 0, sizeof ssinf[i]); - ssinf[i].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; - - switch(shaders[i]->get_type()) { - case SDR_VERTEX: - ssinf[i].stage = VK_SHADER_STAGE_VERTEX_BIT; - break; - case SDR_FRAGMENT: - ssinf[i].stage = VK_SHADER_STAGE_FRAGMENT_BIT; - break; - default: - fprintf(stderr, "Failed to create graphics pipeline: Invalid shader type.\n"); - return false; - } - ssinf[i].module = ((ShaderVK *)shaders[i])->sm; - } - - gpinf.pStages = ssinf; - + return true; } @@ -120,6 +84,12 @@ bool ShaderProgramVK::use() const void ShaderProgramVK::destroy() { + int len = sizeof shaders / sizeof *shaders; + + for(int i=0; i