Matteo Bruni : wined3d: Avoid the deprecated syntax for SM3 varyings on core profile.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Oct 5 10:30:25 CDT 2015
Module: wine
Branch: master
Commit: 0c84d8dd91f4e305f03a54f941b8ea92a39e5ac4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0c84d8dd91f4e305f03a54f941b8ea92a39e5ac4
Author: Matteo Bruni <mbruni at codeweavers.com>
Date: Fri Oct 2 14:54:44 2015 +0200
wined3d: Avoid the deprecated syntax for SM3 varyings on core profile.
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
dlls/wined3d/glsl_shader.c | 51 +++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 48 insertions(+), 3 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 6de70ba..5361bea 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -1541,6 +1541,51 @@ static unsigned int vec4_varyings(DWORD shader_major, const struct wined3d_gl_in
return ret;
}
+static BOOL needs_legacy_glsl_syntax(const struct wined3d_gl_info *gl_info)
+{
+ return gl_info->supported[WINED3D_GL_LEGACY_CONTEXT];
+}
+
+static void PRINTF_ATTR(4, 5) declare_in_varying(const struct wined3d_gl_info *gl_info,
+ struct wined3d_string_buffer *buffer, BOOL flat, const char *format, ...)
+{
+ va_list args;
+ int ret;
+
+ shader_addline(buffer, "%s%s ", flat ? "flat " : "",
+ needs_legacy_glsl_syntax(gl_info) ? "varying" : "in");
+ for (;;)
+ {
+ va_start(args, format);
+ ret = shader_vaddline(buffer, format, args);
+ va_end(args);
+ if (!ret)
+ return;
+ if (!string_buffer_resize(buffer, ret))
+ return;
+ }
+}
+
+static void PRINTF_ATTR(4, 5) declare_out_varying(const struct wined3d_gl_info *gl_info,
+ struct wined3d_string_buffer *buffer, BOOL flat, const char *format, ...)
+{
+ va_list args;
+ int ret;
+
+ shader_addline(buffer, "%s%s ", flat ? "flat " : "",
+ needs_legacy_glsl_syntax(gl_info) ? "varying" : "out");
+ for (;;)
+ {
+ va_start(args, format);
+ ret = shader_vaddline(buffer, format, args);
+ va_end(args);
+ if (!ret)
+ return;
+ if (!string_buffer_resize(buffer, ret))
+ return;
+ }
+}
+
/** Generate the variable & register declarations for the GLSL output target */
static void shader_generate_glsl_declarations(const struct wined3d_context *context,
struct wined3d_string_buffer *buffer, const struct wined3d_shader *shader,
@@ -1812,7 +1857,7 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
UINT in_count = min(vec4_varyings(version->major, gl_info), shader->limits->packed_input);
if (use_vs(state))
- shader_addline(buffer, "varying vec4 %s_link[%u];\n", prefix, in_count);
+ declare_in_varying(gl_info, buffer, FALSE, "vec4 %s_link[%u];\n", prefix, in_count);
shader_addline(buffer, "vec4 %s_in[%u];\n", prefix, in_count);
}
@@ -4937,8 +4982,8 @@ static GLuint generate_param_reorder_function(struct shader_glsl_priv *priv,
else
{
UINT in_count = min(vec4_varyings(ps_major, gl_info), ps->limits->packed_input);
- /* This one is tricky: a 3.0 pixel shader reads from a 3.0 vertex shader */
- shader_addline(buffer, "varying vec4 ps_link[%u];\n", in_count);
+
+ declare_out_varying(gl_info, buffer, FALSE, "vec4 ps_link[%u];\n", in_count);
shader_addline(buffer, "void order_ps_input(in vec4 vs_out[%u])\n{\n", vs->limits->packed_output);
/* First, sort out position and point size. Those are not passed to the pixel shader */
More information about the wine-cvs
mailing list