mirror of https://github.com/PCSX2/pcsx2.git
Shaderc: Make non-semantic debug optional
Don't you hate it when you come up with more ideas just minutes AFTER the PR has been merged?
This commit is contained in:
parent
e6a4cee86c
commit
500e2c43b1
|
@ -114,6 +114,15 @@ diff --git a/libshaderc/include/shaderc/shaderc.h b/libshaderc/include/shaderc/s
|
||||||
index 3a3e97d..65d5b77 100644
|
index 3a3e97d..65d5b77 100644
|
||||||
--- a/libshaderc/include/shaderc/shaderc.h
|
--- a/libshaderc/include/shaderc/shaderc.h
|
||||||
+++ b/libshaderc/include/shaderc/shaderc.h
|
+++ b/libshaderc/include/shaderc/shaderc.h
|
||||||
|
@@ -15,6 +15,8 @@
|
||||||
|
#ifndef SHADERC_SHADERC_H_
|
||||||
|
#define SHADERC_SHADERC_H_
|
||||||
|
|
||||||
|
+#define SHADERC_PCSX2_CUSTOM 1
|
||||||
|
+
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
@@ -317,7 +317,7 @@ SHADERC_EXPORT void shaderc_compile_options_set_source_language(
|
@@ -317,7 +317,7 @@ SHADERC_EXPORT void shaderc_compile_options_set_source_language(
|
||||||
|
|
||||||
// Sets the compiler mode to generate debug information in the output.
|
// Sets the compiler mode to generate debug information in the output.
|
||||||
|
@ -123,69 +132,6 @@ index 3a3e97d..65d5b77 100644
|
||||||
|
|
||||||
// Sets the compiler optimization level to the given level. Only the last one
|
// Sets the compiler optimization level to the given level. Only the last one
|
||||||
// takes effect if multiple calls of this function exist.
|
// takes effect if multiple calls of this function exist.
|
||||||
@@ -506,6 +506,10 @@ SHADERC_EXPORT void shaderc_compile_options_set_invert_y(
|
|
||||||
SHADERC_EXPORT void shaderc_compile_options_set_nan_clamp(
|
|
||||||
shaderc_compile_options_t options, bool enable);
|
|
||||||
|
|
||||||
+// Returns a string representation of the specified compilation status.
|
|
||||||
+SHADERC_EXPORT const char* shaderc_compilation_status_to_string(
|
|
||||||
+ shaderc_compilation_status status);
|
|
||||||
+
|
|
||||||
// An opaque handle to the results of a call to any shaderc_compile_into_*()
|
|
||||||
// function.
|
|
||||||
typedef struct shaderc_compilation_result* shaderc_compilation_result_t;
|
|
||||||
@@ -529,28 +533,31 @@ typedef struct shaderc_compilation_result* shaderc_compilation_result_t;
|
|
||||||
// present. May be safely called from multiple threads without explicit
|
|
||||||
// synchronization. If there was failure in allocating the compiler object,
|
|
||||||
// null will be returned.
|
|
||||||
-SHADERC_EXPORT shaderc_compilation_result_t shaderc_compile_into_spv(
|
|
||||||
+SHADERC_EXPORT shaderc_compilation_status shaderc_compile_into_spv(
|
|
||||||
const shaderc_compiler_t compiler, const char* source_text,
|
|
||||||
size_t source_text_size, shaderc_shader_kind shader_kind,
|
|
||||||
const char* input_file_name, const char* entry_point_name,
|
|
||||||
- const shaderc_compile_options_t additional_options);
|
|
||||||
+ const shaderc_compile_options_t additional_options,
|
|
||||||
+ shaderc_compilation_result_t* result);
|
|
||||||
|
|
||||||
// Like shaderc_compile_into_spv, but the result contains SPIR-V assembly text
|
|
||||||
// instead of a SPIR-V binary module. The SPIR-V assembly syntax is as defined
|
|
||||||
// by the SPIRV-Tools open source project.
|
|
||||||
-SHADERC_EXPORT shaderc_compilation_result_t shaderc_compile_into_spv_assembly(
|
|
||||||
+SHADERC_EXPORT shaderc_compilation_status shaderc_compile_into_spv_assembly(
|
|
||||||
const shaderc_compiler_t compiler, const char* source_text,
|
|
||||||
size_t source_text_size, shaderc_shader_kind shader_kind,
|
|
||||||
const char* input_file_name, const char* entry_point_name,
|
|
||||||
- const shaderc_compile_options_t additional_options);
|
|
||||||
+ const shaderc_compile_options_t additional_options,
|
|
||||||
+ shaderc_compilation_result_t* result);
|
|
||||||
|
|
||||||
// Like shaderc_compile_into_spv, but the result contains preprocessed source
|
|
||||||
// code instead of a SPIR-V binary module
|
|
||||||
-SHADERC_EXPORT shaderc_compilation_result_t shaderc_compile_into_preprocessed_text(
|
|
||||||
+SHADERC_EXPORT shaderc_compilation_status shaderc_compile_into_preprocessed_text(
|
|
||||||
const shaderc_compiler_t compiler, const char* source_text,
|
|
||||||
size_t source_text_size, shaderc_shader_kind shader_kind,
|
|
||||||
const char* input_file_name, const char* entry_point_name,
|
|
||||||
- const shaderc_compile_options_t additional_options);
|
|
||||||
+ const shaderc_compile_options_t additional_options,
|
|
||||||
+ shaderc_compilation_result_t* result);
|
|
||||||
|
|
||||||
// Takes an assembly string of the format defined in the SPIRV-Tools project
|
|
||||||
// (https://github.com/KhronosGroup/SPIRV-Tools/blob/master/syntax.md),
|
|
||||||
@@ -561,10 +568,11 @@ SHADERC_EXPORT shaderc_compilation_result_t shaderc_compile_into_preprocessed_te
|
|
||||||
// May be safely called from multiple threads without explicit synchronization.
|
|
||||||
// If there was failure in allocating the compiler object, null will be
|
|
||||||
// returned.
|
|
||||||
-SHADERC_EXPORT shaderc_compilation_result_t shaderc_assemble_into_spv(
|
|
||||||
+SHADERC_EXPORT shaderc_compilation_status shaderc_assemble_into_spv(
|
|
||||||
const shaderc_compiler_t compiler, const char* source_assembly,
|
|
||||||
size_t source_assembly_size,
|
|
||||||
- const shaderc_compile_options_t additional_options);
|
|
||||||
+ const shaderc_compile_options_t additional_options,
|
|
||||||
+ shaderc_compilation_result_t* result);
|
|
||||||
|
|
||||||
// The following functions, operating on shaderc_compilation_result_t objects,
|
|
||||||
// offer only the basic thread-safety guarantee.
|
|
||||||
diff --git a/libshaderc/include/shaderc/shaderc.hpp b/libshaderc/include/shaderc/shaderc.hpp
|
diff --git a/libshaderc/include/shaderc/shaderc.hpp b/libshaderc/include/shaderc/shaderc.hpp
|
||||||
index 3817af8..5592b49 100644
|
index 3817af8..5592b49 100644
|
||||||
--- a/libshaderc/include/shaderc/shaderc.hpp
|
--- a/libshaderc/include/shaderc/shaderc.hpp
|
||||||
|
@ -202,119 +148,6 @@ index 3817af8..5592b49 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sets the compiler optimization level to the given level. Only the last one
|
// Sets the compiler optimization level to the given level. Only the last one
|
||||||
@@ -425,9 +426,10 @@ class Compiler {
|
|
||||||
const char* input_file_name,
|
|
||||||
const char* entry_point_name,
|
|
||||||
const CompileOptions& options) const {
|
|
||||||
- shaderc_compilation_result_t compilation_result = shaderc_compile_into_spv(
|
|
||||||
+ shaderc_compilation_result_t compilation_result = nullptr;
|
|
||||||
+ shaderc_compile_into_spv(
|
|
||||||
compiler_, source_text, source_text_size, shader_kind, input_file_name,
|
|
||||||
- entry_point_name, options.options_);
|
|
||||||
+ entry_point_name, options.options_, &compilation_result);
|
|
||||||
return SpvCompilationResult(compilation_result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -451,9 +453,10 @@ class Compiler {
|
|
||||||
size_t source_text_size,
|
|
||||||
shaderc_shader_kind shader_kind,
|
|
||||||
const char* input_file_name) const {
|
|
||||||
- shaderc_compilation_result_t compilation_result =
|
|
||||||
- shaderc_compile_into_spv(compiler_, source_text, source_text_size,
|
|
||||||
- shader_kind, input_file_name, "main", nullptr);
|
|
||||||
+ shaderc_compilation_result_t compilation_result = nullptr;
|
|
||||||
+ shaderc_compile_into_spv(compiler_, source_text, source_text_size,
|
|
||||||
+ shader_kind, input_file_name, "main", nullptr,
|
|
||||||
+ &compilation_result);
|
|
||||||
return SpvCompilationResult(compilation_result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -504,8 +507,11 @@ class Compiler {
|
|
||||||
SpvCompilationResult AssembleToSpv(const char* source_assembly,
|
|
||||||
size_t source_assembly_size,
|
|
||||||
const CompileOptions& options) const {
|
|
||||||
- return SpvCompilationResult(shaderc_assemble_into_spv(
|
|
||||||
- compiler_, source_assembly, source_assembly_size, options.options_));
|
|
||||||
+ shaderc_compilation_result_t compilation_result = nullptr;
|
|
||||||
+ shaderc_assemble_into_spv(
|
|
||||||
+ compiler_, source_assembly, source_assembly_size, options.options_,
|
|
||||||
+ &compilation_result);
|
|
||||||
+ return SpvCompilationResult(compilation_result);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Assembles the given SPIR-V assembly and returns a SPIR-V binary module
|
|
||||||
@@ -513,8 +519,11 @@ class Compiler {
|
|
||||||
// Like the first AssembleToSpv method but uses the default compiler options.
|
|
||||||
SpvCompilationResult AssembleToSpv(const char* source_assembly,
|
|
||||||
size_t source_assembly_size) const {
|
|
||||||
- return SpvCompilationResult(shaderc_assemble_into_spv(
|
|
||||||
- compiler_, source_assembly, source_assembly_size, nullptr));
|
|
||||||
+ shaderc_compilation_result_t compilation_result = nullptr;
|
|
||||||
+ shaderc_assemble_into_spv(
|
|
||||||
+ compiler_, source_assembly, source_assembly_size, nullptr,
|
|
||||||
+ &compilation_result);
|
|
||||||
+ return SpvCompilationResult(compilation_result);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Assembles the given SPIR-V assembly and returns a SPIR-V binary module
|
|
||||||
@@ -523,9 +532,11 @@ class Compiler {
|
|
||||||
// std::string.
|
|
||||||
SpvCompilationResult AssembleToSpv(const std::string& source_assembly,
|
|
||||||
const CompileOptions& options) const {
|
|
||||||
- return SpvCompilationResult(
|
|
||||||
- shaderc_assemble_into_spv(compiler_, source_assembly.data(),
|
|
||||||
- source_assembly.size(), options.options_));
|
|
||||||
+ shaderc_compilation_result_t compilation_result = nullptr;
|
|
||||||
+ shaderc_assemble_into_spv(
|
|
||||||
+ compiler_, source_assembly.data(), source_assembly.size(),
|
|
||||||
+ options.options_, &compilation_result);
|
|
||||||
+ return SpvCompilationResult(compilation_result);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Assembles the given SPIR-V assembly and returns a SPIR-V binary module
|
|
||||||
@@ -533,8 +544,10 @@ class Compiler {
|
|
||||||
// Like the first AssembleToSpv method but the source is provided as a
|
|
||||||
// std::string and also uses default compiler options.
|
|
||||||
SpvCompilationResult AssembleToSpv(const std::string& source_assembly) const {
|
|
||||||
- return SpvCompilationResult(shaderc_assemble_into_spv(
|
|
||||||
- compiler_, source_assembly.data(), source_assembly.size(), nullptr));
|
|
||||||
+ shaderc_compilation_result_t compilation_result = nullptr;
|
|
||||||
+ shaderc_assemble_into_spv(compiler_, source_assembly.data(),
|
|
||||||
+ source_assembly.size(), nullptr, &compilation_result);
|
|
||||||
+ return SpvCompilationResult(compilation_result);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compiles the given source GLSL and returns the SPIR-V assembly text
|
|
||||||
@@ -544,10 +557,11 @@ class Compiler {
|
|
||||||
const char* source_text, size_t source_text_size,
|
|
||||||
shaderc_shader_kind shader_kind, const char* input_file_name,
|
|
||||||
const char* entry_point_name, const CompileOptions& options) const {
|
|
||||||
- shaderc_compilation_result_t compilation_result =
|
|
||||||
- shaderc_compile_into_spv_assembly(
|
|
||||||
- compiler_, source_text, source_text_size, shader_kind,
|
|
||||||
- input_file_name, entry_point_name, options.options_);
|
|
||||||
+ shaderc_compilation_result_t compilation_result = nullptr;
|
|
||||||
+ shaderc_compile_into_spv_assembly(
|
|
||||||
+ compiler_, source_text, source_text_size, shader_kind,
|
|
||||||
+ input_file_name, entry_point_name, options.options_,
|
|
||||||
+ &compilation_result);
|
|
||||||
return AssemblyCompilationResult(compilation_result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -592,10 +606,10 @@ class Compiler {
|
|
||||||
const char* source_text, size_t source_text_size,
|
|
||||||
shaderc_shader_kind shader_kind, const char* input_file_name,
|
|
||||||
const CompileOptions& options) const {
|
|
||||||
- shaderc_compilation_result_t compilation_result =
|
|
||||||
- shaderc_compile_into_preprocessed_text(
|
|
||||||
+ shaderc_compilation_result_t compilation_result;
|
|
||||||
+ shaderc_compile_into_preprocessed_text(
|
|
||||||
compiler_, source_text, source_text_size, shader_kind,
|
|
||||||
- input_file_name, "main", options.options_);
|
|
||||||
+ input_file_name, "main", options.options_, &compilation_result);
|
|
||||||
return PreprocessedSourceCompilationResult(compilation_result);
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/libshaderc/src/shaderc.cc b/libshaderc/src/shaderc.cc
|
diff --git a/libshaderc/src/shaderc.cc b/libshaderc/src/shaderc.cc
|
||||||
index 63f1bbc..c1a9b12 100644
|
index 63f1bbc..c1a9b12 100644
|
||||||
--- a/libshaderc/src/shaderc.cc
|
--- a/libshaderc/src/shaderc.cc
|
||||||
|
@ -334,146 +167,6 @@ index 63f1bbc..c1a9b12 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
void shaderc_compile_options_set_optimization_level(
|
void shaderc_compile_options_set_optimization_level(
|
||||||
@@ -591,8 +595,31 @@ void shaderc_compiler_release(shaderc_compiler_t compiler) {
|
|
||||||
delete compiler;
|
|
||||||
}
|
|
||||||
|
|
||||||
+const char* shaderc_compilation_status_to_string(shaderc_compilation_status status)
|
|
||||||
+{
|
|
||||||
+ static constexpr const std::pair<shaderc_compilation_status, const char*> status_names[] = {
|
|
||||||
+ {shaderc_compilation_status_success, "shaderc_compilation_status_success"},
|
|
||||||
+ {shaderc_compilation_status_invalid_stage, "shaderc_compilation_status_invalid_stage"},
|
|
||||||
+ {shaderc_compilation_status_compilation_error, "shaderc_compilation_status_compilation_error"},
|
|
||||||
+ {shaderc_compilation_status_internal_error, "shaderc_compilation_status_internal_error"},
|
|
||||||
+ {shaderc_compilation_status_null_result_object, "shaderc_compilation_status_null_result_object"},
|
|
||||||
+ {shaderc_compilation_status_invalid_assembly, "shaderc_compilation_status_invalid_assembly"},
|
|
||||||
+ {shaderc_compilation_status_validation_error, "shaderc_compilation_status_validation_error"},
|
|
||||||
+ {shaderc_compilation_status_transformation_error, "shaderc_compilation_status_transformation_error"},
|
|
||||||
+ {shaderc_compilation_status_configuration_error, "shaderc_compilation_status_configuration_error"},
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ for (const auto& it : status_names)
|
|
||||||
+ {
|
|
||||||
+ if (status == it.first)
|
|
||||||
+ return it.second;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return "shaderc_compilation_status_unknown";
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
namespace {
|
|
||||||
-shaderc_compilation_result_t CompileToSpecifiedOutputType(
|
|
||||||
+shaderc_compilation_result_vector* CompileToSpecifiedOutputType(
|
|
||||||
const shaderc_compiler_t compiler, const char* source_text,
|
|
||||||
size_t source_text_size, shaderc_shader_kind shader_kind,
|
|
||||||
const char* input_file_name, const char* entry_point_name,
|
|
||||||
@@ -669,48 +696,59 @@ shaderc_compilation_result_t CompileToSpecifiedOutputType(
|
|
||||||
}
|
|
||||||
} // anonymous namespace
|
|
||||||
|
|
||||||
-shaderc_compilation_result_t shaderc_compile_into_spv(
|
|
||||||
+shaderc_compilation_status shaderc_compile_into_spv(
|
|
||||||
const shaderc_compiler_t compiler, const char* source_text,
|
|
||||||
size_t source_text_size, shaderc_shader_kind shader_kind,
|
|
||||||
const char* input_file_name, const char* entry_point_name,
|
|
||||||
- const shaderc_compile_options_t additional_options) {
|
|
||||||
- return CompileToSpecifiedOutputType(
|
|
||||||
+ const shaderc_compile_options_t additional_options,
|
|
||||||
+ shaderc_compilation_result_t* result) {
|
|
||||||
+ shaderc_compilation_result_vector* resultv = CompileToSpecifiedOutputType(
|
|
||||||
compiler, source_text, source_text_size, shader_kind, input_file_name,
|
|
||||||
entry_point_name, additional_options,
|
|
||||||
shaderc_util::Compiler::OutputType::SpirvBinary);
|
|
||||||
+ *result = resultv;
|
|
||||||
+ return resultv ? resultv->compilation_status : shaderc_compilation_status_internal_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
-shaderc_compilation_result_t shaderc_compile_into_spv_assembly(
|
|
||||||
+shaderc_compilation_status shaderc_compile_into_spv_assembly(
|
|
||||||
const shaderc_compiler_t compiler, const char* source_text,
|
|
||||||
size_t source_text_size, shaderc_shader_kind shader_kind,
|
|
||||||
const char* input_file_name, const char* entry_point_name,
|
|
||||||
- const shaderc_compile_options_t additional_options) {
|
|
||||||
- return CompileToSpecifiedOutputType(
|
|
||||||
+ const shaderc_compile_options_t additional_options,
|
|
||||||
+ shaderc_compilation_result_t* result) {
|
|
||||||
+ shaderc_compilation_result_vector* resultv = CompileToSpecifiedOutputType(
|
|
||||||
compiler, source_text, source_text_size, shader_kind, input_file_name,
|
|
||||||
entry_point_name, additional_options,
|
|
||||||
shaderc_util::Compiler::OutputType::SpirvAssemblyText);
|
|
||||||
+ *result = resultv;
|
|
||||||
+ return resultv ? resultv->compilation_status : shaderc_compilation_status_internal_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
-shaderc_compilation_result_t shaderc_compile_into_preprocessed_text(
|
|
||||||
+shaderc_compilation_status shaderc_compile_into_preprocessed_text(
|
|
||||||
const shaderc_compiler_t compiler, const char* source_text,
|
|
||||||
size_t source_text_size, shaderc_shader_kind shader_kind,
|
|
||||||
const char* input_file_name, const char* entry_point_name,
|
|
||||||
- const shaderc_compile_options_t additional_options) {
|
|
||||||
- return CompileToSpecifiedOutputType(
|
|
||||||
+ const shaderc_compile_options_t additional_options,
|
|
||||||
+ shaderc_compilation_result_t* result) {
|
|
||||||
+ shaderc_compilation_result_vector* resultv = CompileToSpecifiedOutputType(
|
|
||||||
compiler, source_text, source_text_size, shader_kind, input_file_name,
|
|
||||||
entry_point_name, additional_options,
|
|
||||||
shaderc_util::Compiler::OutputType::PreprocessedText);
|
|
||||||
+ *result = resultv;
|
|
||||||
+ return resultv ? resultv->compilation_status : shaderc_compilation_status_internal_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
-shaderc_compilation_result_t shaderc_assemble_into_spv(
|
|
||||||
+shaderc_compilation_status shaderc_assemble_into_spv(
|
|
||||||
const shaderc_compiler_t compiler, const char* source_assembly,
|
|
||||||
size_t source_assembly_size,
|
|
||||||
- const shaderc_compile_options_t additional_options) {
|
|
||||||
- auto* result = new (std::nothrow) shaderc_compilation_result_spv_binary;
|
|
||||||
- if (!result) return nullptr;
|
|
||||||
- result->compilation_status = shaderc_compilation_status_invalid_assembly;
|
|
||||||
- if (!compiler->initializer) return result;
|
|
||||||
- if (source_assembly == nullptr) return result;
|
|
||||||
+ const shaderc_compile_options_t additional_options,
|
|
||||||
+ shaderc_compilation_result_t* result) {
|
|
||||||
+ auto* bresult = new (std::nothrow) shaderc_compilation_result_spv_binary;
|
|
||||||
+ if (!bresult) return shaderc_compilation_status_internal_error;
|
|
||||||
+ bresult->compilation_status = shaderc_compilation_status_invalid_assembly;
|
|
||||||
+ *result = bresult;
|
|
||||||
+ if (!compiler->initializer) return bresult->compilation_status;
|
|
||||||
+ if (source_assembly == nullptr) return bresult->compilation_status;
|
|
||||||
|
|
||||||
TRY_IF_EXCEPTIONS_ENABLED {
|
|
||||||
spv_binary assembling_output_data = nullptr;
|
|
||||||
@@ -724,22 +762,22 @@ shaderc_compilation_result_t shaderc_assemble_into_spv(
|
|
||||||
GetCompilerTargetEnvVersion(target_env_version),
|
|
||||||
{source_assembly, source_assembly + source_assembly_size},
|
|
||||||
&assembling_output_data, &errors);
|
|
||||||
- result->num_errors = !assembling_succeeded;
|
|
||||||
+ bresult->num_errors = !assembling_succeeded;
|
|
||||||
if (assembling_succeeded) {
|
|
||||||
- result->SetOutputData(assembling_output_data);
|
|
||||||
- result->output_data_size =
|
|
||||||
+ bresult->SetOutputData(assembling_output_data);
|
|
||||||
+ bresult->output_data_size =
|
|
||||||
assembling_output_data->wordCount * sizeof(uint32_t);
|
|
||||||
- result->compilation_status = shaderc_compilation_status_success;
|
|
||||||
+ bresult->compilation_status = shaderc_compilation_status_success;
|
|
||||||
} else {
|
|
||||||
- result->messages = std::move(errors);
|
|
||||||
- result->compilation_status = shaderc_compilation_status_invalid_assembly;
|
|
||||||
+ bresult->messages = std::move(errors);
|
|
||||||
+ bresult->compilation_status = shaderc_compilation_status_invalid_assembly;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CATCH_IF_EXCEPTIONS_ENABLED(...) {
|
|
||||||
- result->compilation_status = shaderc_compilation_status_internal_error;
|
|
||||||
+ bresult->compilation_status = shaderc_compilation_status_internal_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return result;
|
|
||||||
+ return bresult->compilation_status;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t shaderc_result_get_length(const shaderc_compilation_result_t result) {
|
|
||||||
diff --git a/libshaderc_util/include/libshaderc_util/compiler.h b/libshaderc_util/include/libshaderc_util/compiler.h
|
diff --git a/libshaderc_util/include/libshaderc_util/compiler.h b/libshaderc_util/include/libshaderc_util/compiler.h
|
||||||
index d9d02b9..b076ec8 100644
|
index d9d02b9..b076ec8 100644
|
||||||
--- a/libshaderc_util/include/libshaderc_util/compiler.h
|
--- a/libshaderc_util/include/libshaderc_util/compiler.h
|
||||||
|
|
|
@ -108,13 +108,13 @@ static void FillPipelineCacheHeader(VK_PIPELINE_CACHE_HEADER* header)
|
||||||
X(shaderc_compile_options_set_generate_debug_info) \
|
X(shaderc_compile_options_set_generate_debug_info) \
|
||||||
X(shaderc_compile_options_set_optimization_level) \
|
X(shaderc_compile_options_set_optimization_level) \
|
||||||
X(shaderc_compile_options_set_target_env) \
|
X(shaderc_compile_options_set_target_env) \
|
||||||
X(shaderc_compilation_status_to_string) \
|
|
||||||
X(shaderc_compile_into_spv) \
|
X(shaderc_compile_into_spv) \
|
||||||
X(shaderc_result_release) \
|
X(shaderc_result_release) \
|
||||||
X(shaderc_result_get_length) \
|
X(shaderc_result_get_length) \
|
||||||
X(shaderc_result_get_num_warnings) \
|
X(shaderc_result_get_num_warnings) \
|
||||||
X(shaderc_result_get_bytes) \
|
X(shaderc_result_get_bytes) \
|
||||||
X(shaderc_result_get_error_message)
|
X(shaderc_result_get_error_message) \
|
||||||
|
X(shaderc_result_get_compilation_status)
|
||||||
|
|
||||||
// TODO: NOT thread safe, yet.
|
// TODO: NOT thread safe, yet.
|
||||||
namespace dyn_shaderc
|
namespace dyn_shaderc
|
||||||
|
@ -216,21 +216,25 @@ std::optional<VKShaderCache::SPIRVCodeVector> VKShaderCache::CompileShaderToSPV(
|
||||||
|
|
||||||
dyn_shaderc::shaderc_compile_options_set_source_language(options, shaderc_source_language_glsl);
|
dyn_shaderc::shaderc_compile_options_set_source_language(options, shaderc_source_language_glsl);
|
||||||
dyn_shaderc::shaderc_compile_options_set_target_env(options, shaderc_target_env_vulkan, 0);
|
dyn_shaderc::shaderc_compile_options_set_target_env(options, shaderc_target_env_vulkan, 0);
|
||||||
|
#ifdef SHADERC_PCSX2_CUSTOM
|
||||||
dyn_shaderc::shaderc_compile_options_set_generate_debug_info(options, debug,
|
dyn_shaderc::shaderc_compile_options_set_generate_debug_info(options, debug,
|
||||||
debug && GSDeviceVK::GetInstance()->GetOptionalExtensions().vk_khr_shader_non_semantic_info);
|
debug && GSDeviceVK::GetInstance()->GetOptionalExtensions().vk_khr_shader_non_semantic_info);
|
||||||
|
#else
|
||||||
|
if (debug)
|
||||||
|
dyn_shaderc::shaderc_compile_options_set_generate_debug_info(options);
|
||||||
|
#endif
|
||||||
dyn_shaderc::shaderc_compile_options_set_optimization_level(
|
dyn_shaderc::shaderc_compile_options_set_optimization_level(
|
||||||
options, debug ? shaderc_optimization_level_zero : shaderc_optimization_level_performance);
|
options, debug ? shaderc_optimization_level_zero : shaderc_optimization_level_performance);
|
||||||
|
|
||||||
shaderc_compilation_result_t result;
|
const shaderc_compilation_result_t result = dyn_shaderc::shaderc_compile_into_spv(
|
||||||
const shaderc_compilation_status status = dyn_shaderc::shaderc_compile_into_spv(
|
|
||||||
dyn_shaderc::s_compiler, source.data(), source.length(), static_cast<shaderc_shader_kind>(stage), "source",
|
dyn_shaderc::s_compiler, source.data(), source.length(), static_cast<shaderc_shader_kind>(stage), "source",
|
||||||
"main", options, &result);
|
"main", options);
|
||||||
if (status != shaderc_compilation_status_success)
|
|
||||||
|
if (!result || dyn_shaderc::shaderc_result_get_compilation_status(result) != shaderc_compilation_status_success)
|
||||||
{
|
{
|
||||||
const std::string_view errors(result ? dyn_shaderc::shaderc_result_get_error_message(result) :
|
const std::string_view errors(result ? dyn_shaderc::shaderc_result_get_error_message(result) :
|
||||||
"null result object");
|
"null result object");
|
||||||
ERROR_LOG("Failed to compile shader to SPIR-V: {}\n{}",
|
ERROR_LOG("Failed to compile shader to SPIR-V: {}", errors);
|
||||||
dyn_shaderc::shaderc_compilation_status_to_string(status), errors);
|
|
||||||
DumpBadShader(source, errors);
|
DumpBadShader(source, errors);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue