Prechádzať zdrojové kódy

vulkan: generate shader debug info when LOVE_GRAPHICS_DEBUG is set.

Sasha Szpakowski 1 mesiac pred
rodič
commit
1c8d34ac27
1 zmenil súbory, kde vykonal 13 pridanie a 2 odobranie
  1. 13 2
      src/modules/graphics/vulkan/Shader.cpp

+ 13 - 2
src/modules/graphics/vulkan/Shader.cpp

@@ -581,6 +581,10 @@ void Shader::compileShaders()
 
 	const auto &enabledExtensions = vgfx->getEnabledOptionalDeviceExtensions();
 
+	uint32 glslangOpts = EShMsgDefault;
+	if (isDebugEnabled())
+		glslangOpts |= EShMsgDebugInfo;
+
 	for (int i = 0; i < SHADERSTAGE_MAX_ENUM; i++)
 	{
 		if (!stages[i])
@@ -616,7 +620,7 @@ void Shader::compileShaders()
 		bool forceDefault = false;
 		bool forwardCompat = true;
 
-		if (!tshader->parse(GetResources(), defaultVersion, defaultProfile, forceDefault, forwardCompat, EShMsgSuppressWarnings))
+		if (!tshader->parse(GetResources(), defaultVersion, defaultProfile, forceDefault, forwardCompat, (EShMessages)(glslangOpts | EShMsgSuppressWarnings)))
 		{
 			const char *stageName = "unknown";
 			ShaderStage::getConstant(stage, stageName);
@@ -632,7 +636,7 @@ void Shader::compileShaders()
 		glslangShaders.push_back(std::move(tshader));
 	}
 
-	if (!program->link(EShMsgDefault))
+	if (!program->link((EShMessages)(glslangOpts | EShMsgLinkTimeOptimization)))
 		throw love::Exception("link failed! %s\n", program->getInfoLog());
 
 	if (!program->mapIO())
@@ -655,6 +659,13 @@ void Shader::compileShaders()
 		glslang::SpvOptions opt;
 		opt.validate = true;
 
+		if (isDebugEnabled())
+		{
+			opt.generateDebugInfo = true;
+			opt.emitNonSemanticShaderDebugInfo = true;
+			opt.emitNonSemanticShaderDebugSource = true;
+		}
+
 		std::vector<uint32> spirv;
 
 		GlslangToSpv(*intermediate, spirv, &logger, &opt);