Shader: Add support for FragCoord builtin

This commit is contained in:
Jérôme Leclercq 2021-05-26 22:17:07 +02:00
parent 68447ef0da
commit e7a2573221
5 changed files with 14 additions and 2 deletions

View File

@ -43,7 +43,8 @@ namespace Nz::ShaderAst
enum class BuiltinEntry
{
VertexPosition, // gl_Position
FragCoord = 1, // gl_FragCoord
VertexPosition = 0, // gl_Position
};
enum class ExpressionCategory

View File

@ -85,6 +85,7 @@ namespace Nz
};
std::unordered_map<ShaderAst::BuiltinEntry, Builtin> 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;

View File

@ -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;

View File

@ -34,6 +34,7 @@ namespace Nz::ShaderLang
};
std::unordered_map<std::string, ShaderAst::BuiltinEntry> s_builtinMapping = {
{ "fragcoord", ShaderAst::BuiltinEntry::FragCoord },
{ "position", ShaderAst::BuiltinEntry::VertexPosition }
};

View File

@ -36,7 +36,8 @@ namespace Nz
};
std::unordered_map<ShaderAst::BuiltinEntry, Builtin> 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