diff --git a/include/Nazara/Shader/Ast/Enums.hpp b/include/Nazara/Shader/Ast/Enums.hpp index d87aae0b0..4717c2ab9 100644 --- a/include/Nazara/Shader/Ast/Enums.hpp +++ b/include/Nazara/Shader/Ast/Enums.hpp @@ -43,7 +43,8 @@ namespace Nz::ShaderAst enum class BuiltinEntry { - VertexPosition, // gl_Position + FragCoord = 1, // gl_FragCoord + VertexPosition = 0, // gl_Position }; enum class ExpressionCategory diff --git a/src/Nazara/Shader/GlslWriter.cpp b/src/Nazara/Shader/GlslWriter.cpp index 004bbc7da..f93f1c216 100644 --- a/src/Nazara/Shader/GlslWriter.cpp +++ b/src/Nazara/Shader/GlslWriter.cpp @@ -85,6 +85,7 @@ namespace Nz }; std::unordered_map s_builtinMapping = { + { ShaderAst::BuiltinEntry::FragCoord, { "gl_FragCoord", ShaderStageType::Fragment } }, { ShaderAst::BuiltinEntry::VertexPosition, { "gl_Position", ShaderStageType::Vertex } } }; } @@ -191,6 +192,10 @@ namespace Nz { switch (builtin) { + case ShaderAst::BuiltinEntry::FragCoord: + Append("gl_FragCoord"); + break; + case ShaderAst::BuiltinEntry::VertexPosition: Append("gl_Position"); break; diff --git a/src/Nazara/Shader/LangWriter.cpp b/src/Nazara/Shader/LangWriter.cpp index ebaae6ea7..0d0b8c237 100644 --- a/src/Nazara/Shader/LangWriter.cpp +++ b/src/Nazara/Shader/LangWriter.cpp @@ -231,6 +231,10 @@ namespace Nz switch (*builtin.builtin) { + case ShaderAst::BuiltinEntry::FragCoord: + Append("builtin(fragcoord)"); + break; + case ShaderAst::BuiltinEntry::VertexPosition: Append("builtin(position)"); break; diff --git a/src/Nazara/Shader/ShaderLangParser.cpp b/src/Nazara/Shader/ShaderLangParser.cpp index fc09a3a13..8531a8d5a 100644 --- a/src/Nazara/Shader/ShaderLangParser.cpp +++ b/src/Nazara/Shader/ShaderLangParser.cpp @@ -34,6 +34,7 @@ namespace Nz::ShaderLang }; std::unordered_map s_builtinMapping = { + { "fragcoord", ShaderAst::BuiltinEntry::FragCoord }, { "position", ShaderAst::BuiltinEntry::VertexPosition } }; diff --git a/src/Nazara/Shader/SpirvWriter.cpp b/src/Nazara/Shader/SpirvWriter.cpp index d9b2da928..4406719d5 100644 --- a/src/Nazara/Shader/SpirvWriter.cpp +++ b/src/Nazara/Shader/SpirvWriter.cpp @@ -36,7 +36,8 @@ namespace Nz }; std::unordered_map s_builtinMapping = { - { ShaderAst::BuiltinEntry::VertexPosition, { "VertexPosition", ShaderStageType::Vertex, SpirvBuiltIn::Position } } + { ShaderAst::BuiltinEntry::FragCoord, { "FragmentCoordinates", ShaderStageType::Fragment, SpirvBuiltIn::FragCoord } }, + { ShaderAst::BuiltinEntry::VertexPosition, { "VertexPosition", ShaderStageType::Vertex, SpirvBuiltIn::Position } } }; class PreVisitor : public ShaderAst::AstRecursiveVisitor