aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2018-08-16 02:26:03 -0300
committergdkchan <gab.dark.100@gmail.com>2018-08-16 02:26:03 -0300
commit6e1a6c5b2baf0baa79d3a164167a8ffb14c99bc8 (patch)
tree99abb0080dc2cbcb07550d304e550eeafe81917b /Ryujinx.Graphics
parentc393cdf8e3775bc95850e4d8c8e4c446b286d3b4 (diff)
Implement PointCoord and PointSize shader attributes (#353)
* Implement PointCoord and PointSize shader attributes * Address feedback
Diffstat (limited to 'Ryujinx.Graphics')
-rw-r--r--Ryujinx.Graphics/Gal/Shader/GlslDecl.cs18
-rw-r--r--Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs13
2 files changed, 22 insertions, 9 deletions
diff --git a/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs b/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs
index 691ab800..ccc59e04 100644
--- a/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs
+++ b/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs
@@ -6,6 +6,9 @@ namespace Ryujinx.Graphics.Gal.Shader
class GlslDecl
{
public const int LayerAttr = 0x064;
+ public const int PointSizeAttr = 0x06c;
+ public const int PointCoordAttrX = 0x2e0;
+ public const int PointCoordAttrY = 0x2e4;
public const int TessCoordAttrX = 0x2f0;
public const int TessCoordAttrY = 0x2f4;
public const int TessCoordAttrZ = 0x2f8;
@@ -249,11 +252,14 @@ namespace Ryujinx.Graphics.Gal.Shader
case ShaderIrOperAbuf Abuf:
{
- //This is a built-in input variable.
- if (Abuf.Offs == VertexIdAttr ||
- Abuf.Offs == InstanceIdAttr ||
- Abuf.Offs == FaceAttr ||
- Abuf.Offs == LayerAttr)
+ //This is a built-in variable.
+ if (Abuf.Offs == LayerAttr ||
+ Abuf.Offs == PointSizeAttr ||
+ Abuf.Offs == PointCoordAttrX ||
+ Abuf.Offs == PointCoordAttrY ||
+ Abuf.Offs == VertexIdAttr ||
+ Abuf.Offs == InstanceIdAttr ||
+ Abuf.Offs == FaceAttr)
{
break;
}
@@ -345,4 +351,4 @@ namespace Ryujinx.Graphics.Gal.Shader
return Decls.ContainsKey(Index);
}
}
-} \ No newline at end of file
+}
diff --git a/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs b/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs
index 94bdd2fa..7f1cfabc 100644
--- a/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs
+++ b/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs
@@ -795,6 +795,9 @@ namespace Ryujinx.Graphics.Gal.Shader
{
switch (Abuf.Offs)
{
+ case GlslDecl.PointCoordAttrX: return "gl_PointCoord.x";
+ case GlslDecl.PointCoordAttrY: return "gl_PointCoord.y";
+
//Note: It's a guess that Maxwell's face is 1 when gl_FrontFacing == true
case GlslDecl.FaceAttr: return "(gl_FrontFacing ? 1 : 0)";
}
@@ -813,7 +816,7 @@ namespace Ryujinx.Graphics.Gal.Shader
if (!Decl.Attributes.TryGetValue(Index, out ShaderDeclInfo DeclInfo))
{
//Handle special vec4 attributes here
- //(for example, index 7 is aways gl_Position).
+ //(for example, index 7 is always gl_Position).
if (Index == GlslDecl.GlPositionVec4Index)
{
string Name =
@@ -822,6 +825,10 @@ namespace Ryujinx.Graphics.Gal.Shader
return Name + Swizzle;
}
+ else if (Abuf.Offs == GlslDecl.PointSizeAttr)
+ {
+ return "gl_PointSize";
+ }
throw new InvalidOperationException();
}
@@ -1265,9 +1272,9 @@ namespace Ryujinx.Graphics.Gal.Shader
switch (Node)
{
case ShaderIrOperAbuf Abuf:
- return Abuf.Offs == GlslDecl.LayerAttr ||
+ return Abuf.Offs == GlslDecl.LayerAttr ||
Abuf.Offs == GlslDecl.InstanceIdAttr ||
- Abuf.Offs == GlslDecl.VertexIdAttr ||
+ Abuf.Offs == GlslDecl.VertexIdAttr ||
Abuf.Offs == GlslDecl.FaceAttr
? OperType.I32
: OperType.F32;