Vulkan: Fix assert when compiling transform feedback shaders.

Transform feedback shaders don't have a fragment shader and should not
fail when it is not given.
This commit is contained in:
2023-01-31 09:25:50 +01:00
parent d44d165e8a
commit 59aefaf3d0
5 changed files with 19 additions and 12 deletions

View File

@@ -633,14 +633,15 @@ void VKShader::compute_shader_from_glsl(MutableSpan<const char *> sources)
build_shader_module(sources, shaderc_compute_shader, &compute_module_);
}
bool VKShader::finalize(const shader::ShaderCreateInfo * /*info*/)
bool VKShader::finalize(const shader::ShaderCreateInfo *info)
{
if (compilation_failed_) {
return false;
}
if (vertex_module_ != VK_NULL_HANDLE) {
BLI_assert(fragment_module_ != VK_NULL_HANDLE);
BLI_assert((fragment_module_ != VK_NULL_HANDLE && info->tf_type_ == GPU_SHADER_TFB_NONE) ||
(fragment_module_ == VK_NULL_HANDLE && info->tf_type_ != GPU_SHADER_TFB_NONE));
BLI_assert(compute_module_ == VK_NULL_HANDLE);
VkPipelineShaderStageCreateInfo vertex_stage_info = {};
@@ -658,12 +659,14 @@ bool VKShader::finalize(const shader::ShaderCreateInfo * /*info*/)
geo_stage_info.pName = "main";
pipeline_infos_.append(geo_stage_info);
}
VkPipelineShaderStageCreateInfo fragment_stage_info = {};
fragment_stage_info.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
fragment_stage_info.stage = VK_SHADER_STAGE_FRAGMENT_BIT;
fragment_stage_info.module = fragment_module_;
fragment_stage_info.pName = "main";
pipeline_infos_.append(fragment_stage_info);
if (fragment_module_ != VK_NULL_HANDLE) {
VkPipelineShaderStageCreateInfo fragment_stage_info = {};
fragment_stage_info.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
fragment_stage_info.stage = VK_SHADER_STAGE_FRAGMENT_BIT;
fragment_stage_info.module = fragment_module_;
fragment_stage_info.pName = "main";
pipeline_infos_.append(fragment_stage_info);
}
}
else {
BLI_assert(vertex_module_ == VK_NULL_HANDLE);
@@ -679,6 +682,10 @@ bool VKShader::finalize(const shader::ShaderCreateInfo * /*info*/)
pipeline_infos_.append(compute_stage_info);
}
#ifdef NDEBUG
UNUSED_VARS(info);
#endif
return true;
}