forked from suyu/suyu
gl_shader_gen: Always declare extensions after the version declaration
This addresses a bug on geometry shaders where code was being written before all #extension declarations were done. Ref to #2523
This commit is contained in:
parent
90c9d703ba
commit
84928e6d67
2 changed files with 5 additions and 7 deletions
|
@ -170,7 +170,8 @@ GLShader::ProgramResult CreateProgram(const Device& device, Maxwell::ShaderProgr
|
||||||
CachedProgram SpecializeShader(const std::string& code, const GLShader::ShaderEntries& entries,
|
CachedProgram SpecializeShader(const std::string& code, const GLShader::ShaderEntries& entries,
|
||||||
Maxwell::ShaderProgram program_type, BaseBindings base_bindings,
|
Maxwell::ShaderProgram program_type, BaseBindings base_bindings,
|
||||||
GLenum primitive_mode, bool hint_retrievable = false) {
|
GLenum primitive_mode, bool hint_retrievable = false) {
|
||||||
std::string source = "#version 430 core\n";
|
std::string source = "#version 430 core\n"
|
||||||
|
"#extension GL_ARB_separate_shader_objects : enable\n\n";
|
||||||
source += fmt::format("#define EMULATION_UBO_BINDING {}\n", base_bindings.cbuf++);
|
source += fmt::format("#define EMULATION_UBO_BINDING {}\n", base_bindings.cbuf++);
|
||||||
|
|
||||||
for (const auto& cbuf : entries.const_buffers) {
|
for (const auto& cbuf : entries.const_buffers) {
|
||||||
|
|
|
@ -19,8 +19,7 @@ static constexpr u32 PROGRAM_OFFSET{10};
|
||||||
ProgramResult GenerateVertexShader(const Device& device, const ShaderSetup& setup) {
|
ProgramResult GenerateVertexShader(const Device& device, const ShaderSetup& setup) {
|
||||||
const std::string id = fmt::format("{:016x}", setup.program.unique_identifier);
|
const std::string id = fmt::format("{:016x}", setup.program.unique_identifier);
|
||||||
|
|
||||||
std::string out = "#extension GL_ARB_separate_shader_objects : enable\n\n";
|
std::string out = "// Shader Unique Id: VS" + id + "\n\n";
|
||||||
out += "// Shader Unique Id: VS" + id + "\n\n";
|
|
||||||
out += GetCommonDeclarations();
|
out += GetCommonDeclarations();
|
||||||
|
|
||||||
out += R"(
|
out += R"(
|
||||||
|
@ -82,8 +81,7 @@ void main() {
|
||||||
ProgramResult GenerateGeometryShader(const Device& device, const ShaderSetup& setup) {
|
ProgramResult GenerateGeometryShader(const Device& device, const ShaderSetup& setup) {
|
||||||
const std::string id = fmt::format("{:016x}", setup.program.unique_identifier);
|
const std::string id = fmt::format("{:016x}", setup.program.unique_identifier);
|
||||||
|
|
||||||
std::string out = "#extension GL_ARB_separate_shader_objects : enable\n\n";
|
std::string out = "// Shader Unique Id: GS" + id + "\n\n";
|
||||||
out += "// Shader Unique Id: GS" + id + "\n\n";
|
|
||||||
out += GetCommonDeclarations();
|
out += GetCommonDeclarations();
|
||||||
|
|
||||||
out += R"(
|
out += R"(
|
||||||
|
@ -113,8 +111,7 @@ void main() {
|
||||||
ProgramResult GenerateFragmentShader(const Device& device, const ShaderSetup& setup) {
|
ProgramResult GenerateFragmentShader(const Device& device, const ShaderSetup& setup) {
|
||||||
const std::string id = fmt::format("{:016x}", setup.program.unique_identifier);
|
const std::string id = fmt::format("{:016x}", setup.program.unique_identifier);
|
||||||
|
|
||||||
std::string out = "#extension GL_ARB_separate_shader_objects : enable\n\n";
|
std::string out = "// Shader Unique Id: FS" + id + "\n\n";
|
||||||
out += "// Shader Unique Id: FS" + id + "\n\n";
|
|
||||||
out += GetCommonDeclarations();
|
out += GetCommonDeclarations();
|
||||||
|
|
||||||
out += R"(
|
out += R"(
|
||||||
|
|
Loading…
Reference in a new issue