[PATCH 12/12] wined3d: Use ARB_fragment_coord_conventions for vpos fixups when supported.

Matteo Bruni mbruni at codeweavers.com
Fri May 20 12:56:03 CDT 2016


Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
It turns out that the extension really only affects gl_FragCoord.
I guess it's still worth it but if you think otherwise just shoot these
two patches down.

Or, if I'm missing something, feel free to use the cluebat on me...

 dlls/wined3d/glsl_shader.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index f671e84..ebf1279 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -2081,9 +2081,18 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
         }
         if (reg_maps->vpos || reg_maps->usesdsy)
         {
-            ++extra_constants_needed;
-            shader_addline(buffer, "uniform vec4 ycorrection;\n");
-            shader_addline(buffer, "vec4 vpos;\n");
+            if (reg_maps->usesdsy || !gl_info->supported[ARB_FRAGMENT_COORD_CONVENTIONS])
+            {
+                ++extra_constants_needed;
+                shader_addline(buffer, "uniform vec4 ycorrection;\n");
+            }
+            if (reg_maps->vpos)
+            {
+                if (gl_info->supported[ARB_FRAGMENT_COORD_CONVENTIONS]
+                        && shader->device->wined3d->flags & WINED3D_PIXEL_CENTER_INTEGER)
+                    shader_addline(buffer, "layout(pixel_center_integer) in vec4 gl_FragCoord;\n");
+                shader_addline(buffer, "vec4 vpos;\n");
+            }
         }
 
         if (ps_args->alpha_test_func + 1 != WINED3D_CMP_ALWAYS)
@@ -5665,6 +5674,8 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
 
     shader_addline(buffer, "%s\n", shader_glsl_get_version(gl_info, &reg_maps->shader_version));
 
+    if (gl_info->supported[ARB_FRAGMENT_COORD_CONVENTIONS])
+        shader_addline(buffer, "#extension GL_ARB_fragment_coord_conventions : enable\n");
     if (gl_info->supported[ARB_SHADER_BIT_ENCODING])
         shader_addline(buffer, "#extension GL_ARB_shader_bit_encoding : enable\n");
     if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
@@ -5705,7 +5716,9 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
      * on drivers that returns integer values. */
     if (reg_maps->vpos)
     {
-        if (shader->device->wined3d->flags & WINED3D_PIXEL_CENTER_INTEGER)
+        if (gl_info->supported[ARB_FRAGMENT_COORD_CONVENTIONS])
+            shader_addline(buffer, "vpos = gl_FragCoord;\n");
+        else if (shader->device->wined3d->flags & WINED3D_PIXEL_CENTER_INTEGER)
             shader_addline(buffer,
                     "vpos = floor(vec4(0, ycorrection[0], 0, 0) + gl_FragCoord * vec4(1, ycorrection[1], 1, 1));\n");
         else
-- 
2.7.3




More information about the wine-patches mailing list