TCU_THROW(InternalError, "Unknown optimization recipe requested");
}
- const bool ok = optimizer.Run(binary.data(), binary.size(), &binary);
+ spvtools::OptimizerOptions optimizer_options;
+ optimizer_options.set_run_validator(false);
+ const bool ok = optimizer.Run(binary.data(), binary.size(), &binary, optimizer_options);
if (!ok)
TCU_THROW(InternalError, "Optimizer call failed");
}
}
+void validateCompiledBinary(const vector<deUint32>& binary, SpirVProgramInfo* buildInfo, const SpirvValidatorOptions& options)
+{
+ std::ostringstream validationLog;
+
+ if (!validateSpirV(binary.size(), &binary[0], &validationLog, options))
+ {
+ buildInfo->compileOk = false;
+ buildInfo->infoLog += "\n" + validationLog.str();
+
+ TCU_THROW(InternalError, "Validation failed for compiled SPIR-V binary");
+ }
+}
+
de::Mutex cacheFileMutex;
map<deUint32, vector<deUint32> > cacheFileIndex;
bool cacheFileFirstRun = true;
TCU_CHECK_INTERNAL(!binary.empty());
}
- if (validateBinary)
+ if (optimizationRecipe != 0)
{
validateCompiledBinary(binary, buildInfo, program.buildOptions.getSpirvValidatorOptions());
+ optimizeCompiledBinary(binary, optimizationRecipe, spirvVersion);
}
- if (optimizationRecipe != 0)
- optimizeCompiledBinary(binary, optimizationRecipe, spirvVersion);
+ if (validateBinary)
+ {
+ validateCompiledBinary(binary, buildInfo, program.buildOptions.getSpirvValidatorOptions());
+ }
res = createProgramBinaryFromSpirV(binary);
if (commandLine.isShadercacheEnabled())
TCU_CHECK_INTERNAL(!binary.empty());
}
- if (validateBinary)
+ if (optimizationRecipe != 0)
{
validateCompiledBinary(binary, buildInfo, program.buildOptions.getSpirvValidatorOptions());
+ optimizeCompiledBinary(binary, optimizationRecipe, spirvVersion);
}
- if (optimizationRecipe != 0)
- optimizeCompiledBinary(binary, optimizationRecipe, spirvVersion);
+ if (validateBinary)
+ {
+ validateCompiledBinary(binary, buildInfo, program.buildOptions.getSpirvValidatorOptions());
+ }
res = createProgramBinaryFromSpirV(binary);
if (commandLine.isShadercacheEnabled())
if (!assembleSpirV(&program, &binary, buildInfo, spirvVersion))
TCU_THROW(InternalError, "Failed to assemble SPIR-V");
- if (validateBinary)
+ if (optimizationRecipe != 0)
{
- std::ostringstream validationLog;
-
- if (!validateSpirV(binary.size(), &binary[0], &validationLog, program.buildOptions.getSpirvValidatorOptions()))
- {
- buildInfo->compileOk = false;
- buildInfo->infoLog += "\n" + validationLog.str();
-
- TCU_THROW(InternalError, "Validation failed for assembled SPIR-V binary");
- }
+ validateCompiledBinary(binary, buildInfo, program.buildOptions.getSpirvValidatorOptions());
+ optimizeCompiledBinary(binary, optimizationRecipe, spirvVersion);
}
- if (optimizationRecipe != 0)
- optimizeCompiledBinary(binary, optimizationRecipe, spirvVersion);
+ if (validateBinary)
+ {
+ validateCompiledBinary(binary, buildInfo, program.buildOptions.getSpirvValidatorOptions());
+ }
res = createProgramBinaryFromSpirV(binary);
if (commandLine.isShadercacheEnabled())