aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics/Gal/OpenGL/OGLExtension.cs
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2018-07-19 02:33:27 -0300
committergdkchan <gab.dark.100@gmail.com>2018-07-19 02:33:27 -0300
commitcd203e98f2bed076798972da1d108bb64b1884ec (patch)
tree691de94399ec3720e7b952543ab9cef80e839c5f /Ryujinx.Graphics/Gal/OpenGL/OGLExtension.cs
parentbdb6cbb43514f6d8eb96847a22b70709ae705827 (diff)
Implement Geometry shaders (#280)
* Implement Geometry shaders * Add EmitVertex() and EndPrimitive() * Read output geometry data from header * Stub Vmad * Add Iadd_I32 * Stub Mov_S (S2R) * Stub Isberd * Change vertex index to gpr39 in Abuf * Add stub messages for consistency * Do not print input block when there is no attributes * Use GL_ARB_enhanced_layouts * Skip geometry shaders when there's no GL_ARB_enhanced_layouts * Address feedback * Address feedback
Diffstat (limited to 'Ryujinx.Graphics/Gal/OpenGL/OGLExtension.cs')
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLExtension.cs43
1 files changed, 43 insertions, 0 deletions
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLExtension.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLExtension.cs
new file mode 100644
index 00000000..69fce6d3
--- /dev/null
+++ b/Ryujinx.Graphics/Gal/OpenGL/OGLExtension.cs
@@ -0,0 +1,43 @@
+using OpenTK.Graphics.OpenGL;
+
+namespace Ryujinx.Graphics.Gal.OpenGL
+{
+ static class OGLExtension
+ {
+ private static bool Initialized = false;
+
+ private static bool EnhancedLayouts;
+
+ public static bool HasEnhancedLayouts()
+ {
+ EnsureInitialized();
+
+ return EnhancedLayouts;
+ }
+
+ private static void EnsureInitialized()
+ {
+ if (Initialized)
+ {
+ return;
+ }
+
+ EnhancedLayouts = HasExtension("GL_ARB_enhanced_layouts");
+ }
+
+ private static bool HasExtension(string Name)
+ {
+ int NumExtensions = GL.GetInteger(GetPName.NumExtensions);
+
+ for (int Extension = 0; Extension < NumExtensions; Extension++)
+ {
+ if (GL.GetString(StringNameIndexed.Extensions, Extension) == Name)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+} \ No newline at end of file