From e7a25732210755ad0f4aaa1db69b25f90ae6bb36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Wed, 26 May 2021 22:17:07 +0200 Subject: [PATCH] Shader: Add support for FragCoord builtin --- include/Nazara/Shader/Ast/Enums.hpp | 3 ++- src/Nazara/Shader/GlslWriter.cpp | 5 +++++ src/Nazara/Shader/LangWriter.cpp | 4 ++++ src/Nazara/Shader/ShaderLangParser.cpp | 1 + src/Nazara/Shader/SpirvWriter.cpp | 3 ++- 5 files changed, 14 insertions(+), 2 deletions(-) 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