From: Matteo Bruni Subject: [PATCH 12/12] wined3d: Use ARB_fragment_coord_conventions for vpos fixups when supported. Message-Id: <1463766963-7734-12-git-send-email-mbruni@codeweavers.com> Date: Fri, 20 May 2016 19:56:03 +0200 In-Reply-To: <1463766963-7734-1-git-send-email-mbruni@codeweavers.com> References: <1463766963-7734-1-git-send-email-mbruni@codeweavers.com> Signed-off-by: Matteo Bruni --- 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, ®_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