wined3d: Avoid using deprecated built-in shader inputs/outputs.
Signed-off-by: Józef Kucia <jkucia@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
a830d7808f
commit
451f583585
|
@ -4161,6 +4161,8 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter,
|
||||||
/* The format of the GLSL version string is "major.minor[.release] [vendor info]". */
|
/* The format of the GLSL version string is "major.minor[.release] [vendor info]". */
|
||||||
sscanf(str, "%u.%u", &major, &minor);
|
sscanf(str, "%u.%u", &major, &minor);
|
||||||
gl_info->glsl_version = MAKEDWORD_VERSION(major, minor);
|
gl_info->glsl_version = MAKEDWORD_VERSION(major, minor);
|
||||||
|
if (gl_info->glsl_version >= MAKEDWORD_VERSION(1, 30))
|
||||||
|
gl_info->supported[WINED3D_GLSL_130] = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
checkGLcall("extension detection");
|
checkGLcall("extension detection");
|
||||||
|
|
|
@ -2553,18 +2553,15 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
|
||||||
shader_addline(buffer, "} ffp_point;\n");
|
shader_addline(buffer, "} ffp_point;\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
|
if (!gl_info->supported[WINED3D_GL_LEGACY_CONTEXT] && vs_args->clip_enabled)
|
||||||
{
|
shader_addline(buffer, "uniform vec4 clip_planes[%u];\n", gl_info->limits.user_clip_distances);
|
||||||
if (vs_args->clip_enabled)
|
|
||||||
shader_addline(buffer, "uniform vec4 clip_planes[%u];\n", gl_info->limits.user_clip_distances);
|
|
||||||
|
|
||||||
if (version->major < 3)
|
if (!needs_legacy_glsl_syntax(gl_info) && version->major < 3)
|
||||||
{
|
{
|
||||||
declare_out_varying(gl_info, buffer, vs_args->flatshading, "vec4 ffp_varying_diffuse;\n");
|
declare_out_varying(gl_info, buffer, vs_args->flatshading, "vec4 ffp_varying_diffuse;\n");
|
||||||
declare_out_varying(gl_info, buffer, vs_args->flatshading, "vec4 ffp_varying_specular;\n");
|
declare_out_varying(gl_info, buffer, vs_args->flatshading, "vec4 ffp_varying_specular;\n");
|
||||||
declare_out_varying(gl_info, buffer, FALSE, "vec4 ffp_varying_texcoord[%u];\n", MAX_TEXTURES);
|
declare_out_varying(gl_info, buffer, FALSE, "vec4 ffp_varying_texcoord[%u];\n", MAX_TEXTURES);
|
||||||
declare_out_varying(gl_info, buffer, FALSE, "float ffp_varying_fogcoord;\n");
|
declare_out_varying(gl_info, buffer, FALSE, "float ffp_varying_fogcoord;\n");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version->major < 4)
|
if (version->major < 4)
|
||||||
|
@ -2595,7 +2592,7 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
|
||||||
shader_addline(buffer, " float scale;\n");
|
shader_addline(buffer, " float scale;\n");
|
||||||
shader_addline(buffer, "} ffp_fog;\n");
|
shader_addline(buffer, "} ffp_fog;\n");
|
||||||
|
|
||||||
if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
|
if (needs_legacy_glsl_syntax(gl_info))
|
||||||
{
|
{
|
||||||
if (glsl_is_color_reg_read(shader, 0))
|
if (glsl_is_color_reg_read(shader, 0))
|
||||||
shader_addline(buffer, "vec4 ffp_varying_diffuse;\n");
|
shader_addline(buffer, "vec4 ffp_varying_diffuse;\n");
|
||||||
|
@ -2897,7 +2894,7 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
|
||||||
* OS X doesn't see the NOP operation there. */
|
* OS X doesn't see the NOP operation there. */
|
||||||
if (idx)
|
if (idx)
|
||||||
{
|
{
|
||||||
if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT]
|
if (needs_legacy_glsl_syntax(gl_info)
|
||||||
&& shader->u.ps.declared_in_count > in_count)
|
&& shader->u.ps.declared_in_count > in_count)
|
||||||
{
|
{
|
||||||
sprintf(register_name,
|
sprintf(register_name,
|
||||||
|
@ -2912,7 +2909,7 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT]
|
if (needs_legacy_glsl_syntax(gl_info)
|
||||||
&& shader->u.ps.declared_in_count > in_count)
|
&& shader->u.ps.declared_in_count > in_count)
|
||||||
{
|
{
|
||||||
sprintf(register_name, "((%s) > %u ? (%s) > %u ? gl_SecondaryColor : gl_Color : %s_in[%s])",
|
sprintf(register_name, "((%s) > %u ? (%s) > %u ? gl_SecondaryColor : gl_Color : %s_in[%s])",
|
||||||
|
@ -6555,7 +6552,7 @@ static void shader_glsl_input_pack(const struct wined3d_shader *shader, struct w
|
||||||
else if (args->vp_mode == pretransformed && args->texcoords_initialized & (1u << semantic_idx))
|
else if (args->vp_mode == pretransformed && args->texcoords_initialized & (1u << semantic_idx))
|
||||||
shader_addline(buffer, "ps_in[%u]%s = %s[%u]%s;\n",
|
shader_addline(buffer, "ps_in[%u]%s = %s[%u]%s;\n",
|
||||||
shader->u.ps.input_reg_map[input->register_idx], reg_mask,
|
shader->u.ps.input_reg_map[input->register_idx], reg_mask,
|
||||||
gl_info->supported[WINED3D_GL_LEGACY_CONTEXT]
|
needs_legacy_glsl_syntax(gl_info)
|
||||||
? "gl_TexCoord" : "ffp_varying_texcoord", semantic_idx, reg_mask);
|
? "gl_TexCoord" : "ffp_varying_texcoord", semantic_idx, reg_mask);
|
||||||
else
|
else
|
||||||
shader_addline(buffer, "ps_in[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
|
shader_addline(buffer, "ps_in[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
|
||||||
|
@ -6631,10 +6628,9 @@ static void shader_glsl_setup_vs3_output(struct shader_glsl_priv *priv,
|
||||||
const struct wined3d_shader_reg_maps *reg_maps_out, const char *out_array_name)
|
const struct wined3d_shader_reg_maps *reg_maps_out, const char *out_array_name)
|
||||||
{
|
{
|
||||||
struct wined3d_string_buffer *destination = string_buffer_get(&priv->string_buffers);
|
struct wined3d_string_buffer *destination = string_buffer_get(&priv->string_buffers);
|
||||||
BOOL legacy_context = gl_info->supported[WINED3D_GL_LEGACY_CONTEXT];
|
|
||||||
struct wined3d_string_buffer *buffer = &priv->shader_buffer;
|
struct wined3d_string_buffer *buffer = &priv->shader_buffer;
|
||||||
unsigned int in_count = vec4_varyings(3, gl_info);
|
unsigned int in_count = vec4_varyings(3, gl_info);
|
||||||
unsigned int max_varyings = legacy_context ? in_count + 2 : in_count;
|
unsigned int max_varyings = needs_legacy_glsl_syntax(gl_info) ? in_count + 2 : in_count;
|
||||||
DWORD in_idx, *set = NULL;
|
DWORD in_idx, *set = NULL;
|
||||||
unsigned int i, j;
|
unsigned int i, j;
|
||||||
char reg_mask[6];
|
char reg_mask[6];
|
||||||
|
@ -6842,14 +6838,14 @@ static GLuint shader_glsl_generate_vs3_rasterizer_input_setup(struct shader_glsl
|
||||||
const struct wined3d_shader *vs, const struct wined3d_shader *ps,
|
const struct wined3d_shader *vs, const struct wined3d_shader *ps,
|
||||||
BOOL per_vertex_point_size, BOOL flatshading, const struct wined3d_gl_info *gl_info)
|
BOOL per_vertex_point_size, BOOL flatshading, const struct wined3d_gl_info *gl_info)
|
||||||
{
|
{
|
||||||
struct wined3d_string_buffer *buffer = &priv->shader_buffer;
|
const BOOL legacy_syntax = needs_legacy_glsl_syntax(gl_info);
|
||||||
GLuint ret;
|
|
||||||
DWORD ps_major = ps ? ps->reg_maps.shader_version.major : 0;
|
DWORD ps_major = ps ? ps->reg_maps.shader_version.major : 0;
|
||||||
unsigned int i;
|
struct wined3d_string_buffer *buffer = &priv->shader_buffer;
|
||||||
const char *semantic_name;
|
const char *semantic_name;
|
||||||
UINT semantic_idx;
|
UINT semantic_idx;
|
||||||
char reg_mask[6];
|
char reg_mask[6];
|
||||||
BOOL legacy_context = gl_info->supported[WINED3D_GL_LEGACY_CONTEXT];
|
unsigned int i;
|
||||||
|
GLuint ret;
|
||||||
|
|
||||||
string_buffer_clear(buffer);
|
string_buffer_clear(buffer);
|
||||||
|
|
||||||
|
@ -6868,7 +6864,7 @@ static GLuint shader_glsl_generate_vs3_rasterizer_input_setup(struct shader_glsl
|
||||||
DWORD colors_written_mask[2] = {0};
|
DWORD colors_written_mask[2] = {0};
|
||||||
DWORD texcoords_written_mask[MAX_TEXTURES] = {0};
|
DWORD texcoords_written_mask[MAX_TEXTURES] = {0};
|
||||||
|
|
||||||
if (!legacy_context)
|
if (!legacy_syntax)
|
||||||
{
|
{
|
||||||
declare_out_varying(gl_info, buffer, flatshading, "vec4 ffp_varying_diffuse;\n");
|
declare_out_varying(gl_info, buffer, flatshading, "vec4 ffp_varying_diffuse;\n");
|
||||||
declare_out_varying(gl_info, buffer, flatshading, "vec4 ffp_varying_specular;\n");
|
declare_out_varying(gl_info, buffer, flatshading, "vec4 ffp_varying_specular;\n");
|
||||||
|
@ -6893,7 +6889,7 @@ static GLuint shader_glsl_generate_vs3_rasterizer_input_setup(struct shader_glsl
|
||||||
|
|
||||||
if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_COLOR) && semantic_idx < 2)
|
if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_COLOR) && semantic_idx < 2)
|
||||||
{
|
{
|
||||||
if (legacy_context)
|
if (legacy_syntax)
|
||||||
shader_addline(buffer, "gl_Front%sColor%s = shader_out[%u]%s;\n",
|
shader_addline(buffer, "gl_Front%sColor%s = shader_out[%u]%s;\n",
|
||||||
semantic_idx ? "Secondary" : "", reg_mask, output->register_idx, reg_mask);
|
semantic_idx ? "Secondary" : "", reg_mask, output->register_idx, reg_mask);
|
||||||
else
|
else
|
||||||
|
@ -6912,7 +6908,7 @@ static GLuint shader_glsl_generate_vs3_rasterizer_input_setup(struct shader_glsl
|
||||||
if (semantic_idx < MAX_TEXTURES)
|
if (semantic_idx < MAX_TEXTURES)
|
||||||
{
|
{
|
||||||
shader_addline(buffer, "%s[%u]%s = shader_out[%u]%s;\n",
|
shader_addline(buffer, "%s[%u]%s = shader_out[%u]%s;\n",
|
||||||
legacy_context ? "gl_TexCoord" : "ffp_varying_texcoord",
|
legacy_syntax ? "gl_TexCoord" : "ffp_varying_texcoord",
|
||||||
semantic_idx, reg_mask, output->register_idx, reg_mask);
|
semantic_idx, reg_mask, output->register_idx, reg_mask);
|
||||||
texcoords_written_mask[semantic_idx] = write_mask;
|
texcoords_written_mask[semantic_idx] = write_mask;
|
||||||
}
|
}
|
||||||
|
@ -6925,7 +6921,7 @@ static GLuint shader_glsl_generate_vs3_rasterizer_input_setup(struct shader_glsl
|
||||||
else if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_FOG))
|
else if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_FOG))
|
||||||
{
|
{
|
||||||
shader_addline(buffer, "%s = clamp(shader_out[%u].%c, 0.0, 1.0);\n",
|
shader_addline(buffer, "%s = clamp(shader_out[%u].%c, 0.0, 1.0);\n",
|
||||||
legacy_context ? "gl_FogFragCoord" : "ffp_varying_fogcoord",
|
legacy_syntax ? "gl_FogFragCoord" : "ffp_varying_fogcoord",
|
||||||
output->register_idx, reg_mask[1]);
|
output->register_idx, reg_mask[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6937,11 +6933,11 @@ static GLuint shader_glsl_generate_vs3_rasterizer_input_setup(struct shader_glsl
|
||||||
shader_glsl_write_mask_to_str(~colors_written_mask[i] & WINED3DSP_WRITEMASK_ALL, reg_mask);
|
shader_glsl_write_mask_to_str(~colors_written_mask[i] & WINED3DSP_WRITEMASK_ALL, reg_mask);
|
||||||
if (!i)
|
if (!i)
|
||||||
shader_addline(buffer, "%s%s = vec4(1.0)%s;\n",
|
shader_addline(buffer, "%s%s = vec4(1.0)%s;\n",
|
||||||
legacy_context ? "gl_FrontColor" : "ffp_varying_diffuse",
|
legacy_syntax ? "gl_FrontColor" : "ffp_varying_diffuse",
|
||||||
reg_mask, reg_mask);
|
reg_mask, reg_mask);
|
||||||
else
|
else
|
||||||
shader_addline(buffer, "%s%s = vec4(0.0)%s;\n",
|
shader_addline(buffer, "%s%s = vec4(0.0)%s;\n",
|
||||||
legacy_context ? "gl_FrontSecondaryColor" : "ffp_varying_specular",
|
legacy_syntax ? "gl_FrontSecondaryColor" : "ffp_varying_specular",
|
||||||
reg_mask, reg_mask);
|
reg_mask, reg_mask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6958,7 +6954,7 @@ static GLuint shader_glsl_generate_vs3_rasterizer_input_setup(struct shader_glsl
|
||||||
|
|
||||||
shader_glsl_write_mask_to_str(~texcoords_written_mask[i] & WINED3DSP_WRITEMASK_ALL, reg_mask);
|
shader_glsl_write_mask_to_str(~texcoords_written_mask[i] & WINED3DSP_WRITEMASK_ALL, reg_mask);
|
||||||
shader_addline(buffer, "%s[%u]%s = vec4(0.0)%s;\n",
|
shader_addline(buffer, "%s[%u]%s = vec4(0.0)%s;\n",
|
||||||
legacy_context ? "gl_TexCoord" : "ffp_varying_texcoord", i, reg_mask, reg_mask);
|
legacy_syntax ? "gl_TexCoord" : "ffp_varying_texcoord", i, reg_mask, reg_mask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7131,8 +7127,8 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
|
||||||
{
|
{
|
||||||
const struct wined3d_shader_reg_maps *reg_maps = &shader->reg_maps;
|
const struct wined3d_shader_reg_maps *reg_maps = &shader->reg_maps;
|
||||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||||
|
const BOOL legacy_syntax = needs_legacy_glsl_syntax(gl_info);
|
||||||
struct shader_glsl_ctx_priv priv_ctx;
|
struct shader_glsl_ctx_priv priv_ctx;
|
||||||
BOOL legacy_context = gl_info->supported[WINED3D_GL_LEGACY_CONTEXT];
|
|
||||||
GLuint shader_id;
|
GLuint shader_id;
|
||||||
|
|
||||||
memset(&priv_ctx, 0, sizeof(priv_ctx));
|
memset(&priv_ctx, 0, sizeof(priv_ctx));
|
||||||
|
@ -7196,7 +7192,7 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
WORD map = reg_maps->texcoord;
|
WORD map = reg_maps->texcoord;
|
||||||
|
|
||||||
if (legacy_context)
|
if (legacy_syntax)
|
||||||
{
|
{
|
||||||
if (glsl_is_color_reg_read(shader, 0))
|
if (glsl_is_color_reg_read(shader, 0))
|
||||||
shader_addline(buffer, "ffp_varying_diffuse = gl_Color;\n");
|
shader_addline(buffer, "ffp_varying_diffuse = gl_Color;\n");
|
||||||
|
@ -7212,14 +7208,14 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
|
||||||
shader_addline(buffer, "ffp_texcoord[%u] = vec4(gl_PointCoord.xy, 0.0, 0.0);\n", i);
|
shader_addline(buffer, "ffp_texcoord[%u] = vec4(gl_PointCoord.xy, 0.0, 0.0);\n", i);
|
||||||
else if (args->texcoords_initialized & (1u << i))
|
else if (args->texcoords_initialized & (1u << i))
|
||||||
shader_addline(buffer, "ffp_texcoord[%u] = %s[%u];\n", i,
|
shader_addline(buffer, "ffp_texcoord[%u] = %s[%u];\n", i,
|
||||||
legacy_context ? "gl_TexCoord" : "ffp_varying_texcoord", i);
|
legacy_syntax ? "gl_TexCoord" : "ffp_varying_texcoord", i);
|
||||||
else
|
else
|
||||||
shader_addline(buffer, "ffp_texcoord[%u] = vec4(0.0);\n", i);
|
shader_addline(buffer, "ffp_texcoord[%u] = vec4(0.0);\n", i);
|
||||||
shader_addline(buffer, "vec4 T%u = ffp_texcoord[%u];\n", i, i);
|
shader_addline(buffer, "vec4 T%u = ffp_texcoord[%u];\n", i, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (legacy_context)
|
if (legacy_syntax)
|
||||||
shader_addline(buffer, "ffp_varying_fogcoord = gl_FogFragCoord;\n");
|
shader_addline(buffer, "ffp_varying_fogcoord = gl_FogFragCoord;\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7249,7 +7245,7 @@ static void shader_glsl_generate_vs_epilogue(const struct wined3d_gl_info *gl_in
|
||||||
const struct vs_compile_args *args)
|
const struct vs_compile_args *args)
|
||||||
{
|
{
|
||||||
const struct wined3d_shader_reg_maps *reg_maps = &shader->reg_maps;
|
const struct wined3d_shader_reg_maps *reg_maps = &shader->reg_maps;
|
||||||
BOOL legacy_context = gl_info->supported[WINED3D_GL_LEGACY_CONTEXT];
|
const BOOL legacy_syntax = needs_legacy_glsl_syntax(gl_info);
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
/* Unpack outputs. */
|
/* Unpack outputs. */
|
||||||
|
@ -7264,16 +7260,16 @@ static void shader_glsl_generate_vs_epilogue(const struct wined3d_gl_info *gl_in
|
||||||
{
|
{
|
||||||
if (args->fog_src == VS_FOG_Z)
|
if (args->fog_src == VS_FOG_Z)
|
||||||
shader_addline(buffer, "%s = gl_Position.z;\n",
|
shader_addline(buffer, "%s = gl_Position.z;\n",
|
||||||
legacy_context ? "gl_FogFragCoord" : "ffp_varying_fogcoord");
|
legacy_syntax ? "gl_FogFragCoord" : "ffp_varying_fogcoord");
|
||||||
else if (!reg_maps->fog)
|
else if (!reg_maps->fog)
|
||||||
shader_addline(buffer, "%s = 0.0;\n",
|
shader_addline(buffer, "%s = 0.0;\n",
|
||||||
legacy_context ? "gl_FogFragCoord" : "ffp_varying_fogcoord");
|
legacy_syntax ? "gl_FogFragCoord" : "ffp_varying_fogcoord");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We always store the clipplanes without y inversion. */
|
/* We always store the clipplanes without y inversion. */
|
||||||
if (args->clip_enabled)
|
if (args->clip_enabled)
|
||||||
{
|
{
|
||||||
if (legacy_context)
|
if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
|
||||||
shader_addline(buffer, "gl_ClipVertex = gl_Position;\n");
|
shader_addline(buffer, "gl_ClipVertex = gl_Position;\n");
|
||||||
else
|
else
|
||||||
for (i = 0; i < gl_info->limits.user_clip_distances; ++i)
|
for (i = 0; i < gl_info->limits.user_clip_distances; ++i)
|
||||||
|
@ -7884,12 +7880,12 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr
|
||||||
{"vec4", "ffp_attrib_diffuse"}, /* WINED3D_FFP_DIFFUSE */
|
{"vec4", "ffp_attrib_diffuse"}, /* WINED3D_FFP_DIFFUSE */
|
||||||
{"vec4", "ffp_attrib_specular"}, /* WINED3D_FFP_SPECULAR */
|
{"vec4", "ffp_attrib_specular"}, /* WINED3D_FFP_SPECULAR */
|
||||||
};
|
};
|
||||||
|
const BOOL legacy_syntax = needs_legacy_glsl_syntax(gl_info);
|
||||||
struct wined3d_string_buffer *buffer = &priv->shader_buffer;
|
struct wined3d_string_buffer *buffer = &priv->shader_buffer;
|
||||||
|
BOOL output_legacy_fogcoord = legacy_syntax;
|
||||||
BOOL legacy_lighting = priv->legacy_lighting;
|
BOOL legacy_lighting = priv->legacy_lighting;
|
||||||
GLuint shader_obj;
|
GLuint shader_obj;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
BOOL legacy_context = gl_info->supported[WINED3D_GL_LEGACY_CONTEXT];
|
|
||||||
BOOL output_legacy_fogcoord = legacy_context;
|
|
||||||
|
|
||||||
string_buffer_clear(buffer);
|
string_buffer_clear(buffer);
|
||||||
|
|
||||||
|
@ -7949,7 +7945,10 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr
|
||||||
shader_addline(buffer, "} ffp_point;\n");
|
shader_addline(buffer, "} ffp_point;\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (legacy_context)
|
if (!gl_info->supported[WINED3D_GL_LEGACY_CONTEXT] && settings->clipping)
|
||||||
|
shader_addline(buffer, "uniform vec4 clip_planes[%u];\n", gl_info->limits.user_clip_distances);
|
||||||
|
|
||||||
|
if (legacy_syntax)
|
||||||
{
|
{
|
||||||
shader_addline(buffer, "vec4 ffp_varying_diffuse;\n");
|
shader_addline(buffer, "vec4 ffp_varying_diffuse;\n");
|
||||||
shader_addline(buffer, "vec4 ffp_varying_specular;\n");
|
shader_addline(buffer, "vec4 ffp_varying_specular;\n");
|
||||||
|
@ -7958,9 +7957,6 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (settings->clipping)
|
|
||||||
shader_addline(buffer, "uniform vec4 clip_planes[%u];\n", gl_info->limits.user_clip_distances);
|
|
||||||
|
|
||||||
declare_out_varying(gl_info, buffer, settings->flatshading, "vec4 ffp_varying_diffuse;\n");
|
declare_out_varying(gl_info, buffer, settings->flatshading, "vec4 ffp_varying_diffuse;\n");
|
||||||
declare_out_varying(gl_info, buffer, settings->flatshading, "vec4 ffp_varying_specular;\n");
|
declare_out_varying(gl_info, buffer, settings->flatshading, "vec4 ffp_varying_specular;\n");
|
||||||
declare_out_varying(gl_info, buffer, FALSE, "vec4 ffp_varying_texcoord[%u];\n", MAX_TEXTURES);
|
declare_out_varying(gl_info, buffer, FALSE, "vec4 ffp_varying_texcoord[%u];\n", MAX_TEXTURES);
|
||||||
|
@ -8032,7 +8028,7 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr
|
||||||
}
|
}
|
||||||
|
|
||||||
shader_glsl_ffp_vertex_lighting(buffer, settings, legacy_lighting);
|
shader_glsl_ffp_vertex_lighting(buffer, settings, legacy_lighting);
|
||||||
if (legacy_context)
|
if (legacy_syntax)
|
||||||
{
|
{
|
||||||
shader_addline(buffer, "gl_FrontColor = ffp_varying_diffuse;\n");
|
shader_addline(buffer, "gl_FrontColor = ffp_varying_diffuse;\n");
|
||||||
shader_addline(buffer, "gl_FrontSecondaryColor = ffp_varying_specular;\n");
|
shader_addline(buffer, "gl_FrontSecondaryColor = ffp_varying_specular;\n");
|
||||||
|
@ -8045,7 +8041,7 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr
|
||||||
|
|
||||||
for (i = 0; i < MAX_TEXTURES; ++i)
|
for (i = 0; i < MAX_TEXTURES; ++i)
|
||||||
{
|
{
|
||||||
BOOL output_legacy_texcoord = gl_info->supported[WINED3D_GL_LEGACY_CONTEXT];
|
BOOL output_legacy_texcoord = legacy_syntax;
|
||||||
|
|
||||||
switch (settings->texgen[i] & 0xffff0000)
|
switch (settings->texgen[i] & 0xffff0000)
|
||||||
{
|
{
|
||||||
|
@ -8395,7 +8391,7 @@ static GLuint shader_glsl_generate_ffp_fragment_shader(struct shader_glsl_priv *
|
||||||
struct wined3d_string_buffer *buffer = &priv->shader_buffer;
|
struct wined3d_string_buffer *buffer = &priv->shader_buffer;
|
||||||
BYTE lum_map = 0, bump_map = 0, tex_map = 0, tss_const_map = 0;
|
BYTE lum_map = 0, bump_map = 0, tex_map = 0, tss_const_map = 0;
|
||||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||||
BOOL legacy_context = gl_info->supported[WINED3D_GL_LEGACY_CONTEXT];
|
const BOOL legacy_syntax = needs_legacy_glsl_syntax(gl_info);
|
||||||
BOOL tempreg_used = FALSE, tfactor_used = FALSE;
|
BOOL tempreg_used = FALSE, tfactor_used = FALSE;
|
||||||
UINT lowest_disabled_stage;
|
UINT lowest_disabled_stage;
|
||||||
GLuint shader_id;
|
GLuint shader_id;
|
||||||
|
@ -8563,7 +8559,7 @@ static GLuint shader_glsl_generate_ffp_fragment_shader(struct shader_glsl_priv *
|
||||||
if (alpha_test_func != WINED3D_CMP_ALWAYS)
|
if (alpha_test_func != WINED3D_CMP_ALWAYS)
|
||||||
shader_addline(buffer, "uniform float alpha_test_ref;\n");
|
shader_addline(buffer, "uniform float alpha_test_ref;\n");
|
||||||
|
|
||||||
if (legacy_context)
|
if (legacy_syntax)
|
||||||
{
|
{
|
||||||
shader_addline(buffer, "vec4 ffp_varying_diffuse;\n");
|
shader_addline(buffer, "vec4 ffp_varying_diffuse;\n");
|
||||||
shader_addline(buffer, "vec4 ffp_varying_specular;\n");
|
shader_addline(buffer, "vec4 ffp_varying_specular;\n");
|
||||||
|
@ -8582,7 +8578,7 @@ static GLuint shader_glsl_generate_ffp_fragment_shader(struct shader_glsl_priv *
|
||||||
|
|
||||||
shader_addline(buffer, "void main()\n{\n");
|
shader_addline(buffer, "void main()\n{\n");
|
||||||
|
|
||||||
if (legacy_context)
|
if (legacy_syntax)
|
||||||
{
|
{
|
||||||
shader_addline(buffer, "ffp_varying_diffuse = gl_Color;\n");
|
shader_addline(buffer, "ffp_varying_diffuse = gl_Color;\n");
|
||||||
shader_addline(buffer, "ffp_varying_specular = gl_SecondaryColor;\n");
|
shader_addline(buffer, "ffp_varying_specular = gl_SecondaryColor;\n");
|
||||||
|
@ -8596,13 +8592,13 @@ static GLuint shader_glsl_generate_ffp_fragment_shader(struct shader_glsl_priv *
|
||||||
shader_addline(buffer, "ffp_texcoord[%u] = vec4(gl_PointCoord.xy, 0.0, 0.0);\n", stage);
|
shader_addline(buffer, "ffp_texcoord[%u] = vec4(gl_PointCoord.xy, 0.0, 0.0);\n", stage);
|
||||||
else if (settings->texcoords_initialized & (1u << stage))
|
else if (settings->texcoords_initialized & (1u << stage))
|
||||||
shader_addline(buffer, "ffp_texcoord[%u] = %s[%u];\n",
|
shader_addline(buffer, "ffp_texcoord[%u] = %s[%u];\n",
|
||||||
stage, legacy_context ? "gl_TexCoord" : "ffp_varying_texcoord", stage);
|
stage, legacy_syntax ? "gl_TexCoord" : "ffp_varying_texcoord", stage);
|
||||||
else
|
else
|
||||||
shader_addline(buffer, "ffp_texcoord[%u] = vec4(0.0);\n", stage);
|
shader_addline(buffer, "ffp_texcoord[%u] = vec4(0.0);\n", stage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (legacy_context && settings->fog != WINED3D_FFP_PS_FOG_OFF)
|
if (legacy_syntax && settings->fog != WINED3D_FFP_PS_FOG_OFF)
|
||||||
shader_addline(buffer, "ffp_varying_fogcoord = gl_FogFragCoord;\n");
|
shader_addline(buffer, "ffp_varying_fogcoord = gl_FogFragCoord;\n");
|
||||||
|
|
||||||
if (lowest_disabled_stage < 7 && settings->emul_clipplanes)
|
if (lowest_disabled_stage < 7 && settings->emul_clipplanes)
|
||||||
|
@ -8695,7 +8691,7 @@ static GLuint shader_glsl_generate_ffp_fragment_shader(struct shader_glsl_priv *
|
||||||
coord_mask = "xyzw";
|
coord_mask = "xyzw";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!needs_legacy_glsl_syntax(gl_info))
|
if (!legacy_syntax)
|
||||||
texture_function = proj ? "textureProj" : "texture";
|
texture_function = proj ? "textureProj" : "texture";
|
||||||
|
|
||||||
if (stage > 0
|
if (stage > 0
|
||||||
|
@ -9335,7 +9331,7 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const
|
||||||
pshader ? pshader->limits->constant_float : 0);
|
pshader ? pshader->limits->constant_float : 0);
|
||||||
checkGLcall("Find glsl program uniform locations");
|
checkGLcall("Find glsl program uniform locations");
|
||||||
|
|
||||||
if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
|
if (needs_legacy_glsl_syntax(gl_info))
|
||||||
{
|
{
|
||||||
if (pshader && pshader->reg_maps.shader_version.major >= 3
|
if (pshader && pshader->reg_maps.shader_version.major >= 3
|
||||||
&& pshader->u.ps.declared_in_count > vec4_varyings(3, gl_info))
|
&& pshader->u.ps.declared_in_count > vec4_varyings(3, gl_info))
|
||||||
|
@ -9570,7 +9566,7 @@ static void shader_glsl_disable(void *shader_priv, struct wined3d_context *conte
|
||||||
priv->vertex_pipe->vp_enable(gl_info, FALSE);
|
priv->vertex_pipe->vp_enable(gl_info, FALSE);
|
||||||
priv->fragment_pipe->enable_extension(gl_info, FALSE);
|
priv->fragment_pipe->enable_extension(gl_info, FALSE);
|
||||||
|
|
||||||
if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT] && gl_info->supported[ARB_COLOR_BUFFER_FLOAT])
|
if (needs_legacy_glsl_syntax(gl_info) && gl_info->supported[ARB_COLOR_BUFFER_FLOAT])
|
||||||
{
|
{
|
||||||
ctx_data->vertex_color_clamp = GL_FIXED_ONLY_ARB;
|
ctx_data->vertex_color_clamp = GL_FIXED_ONLY_ARB;
|
||||||
GL_EXTCALL(glClampColorARB(GL_CLAMP_VERTEX_COLOR_ARB, GL_FIXED_ONLY_ARB));
|
GL_EXTCALL(glClampColorARB(GL_CLAMP_VERTEX_COLOR_ARB, GL_FIXED_ONLY_ARB));
|
||||||
|
@ -10264,7 +10260,7 @@ static void glsl_vertex_pipe_vp_enable(const struct wined3d_gl_info *gl_info, BO
|
||||||
static void glsl_vertex_pipe_vp_get_caps(const struct wined3d_gl_info *gl_info, struct wined3d_vertex_caps *caps)
|
static void glsl_vertex_pipe_vp_get_caps(const struct wined3d_gl_info *gl_info, struct wined3d_vertex_caps *caps)
|
||||||
{
|
{
|
||||||
caps->xyzrhw = TRUE;
|
caps->xyzrhw = TRUE;
|
||||||
caps->emulated_flatshading = !gl_info->supported[WINED3D_GL_LEGACY_CONTEXT];
|
caps->emulated_flatshading = !needs_legacy_glsl_syntax(gl_info);
|
||||||
caps->ffp_generic_attributes = TRUE;
|
caps->ffp_generic_attributes = TRUE;
|
||||||
caps->max_active_lights = MAX_ACTIVE_LIGHTS;
|
caps->max_active_lights = MAX_ACTIVE_LIGHTS;
|
||||||
caps->max_vertex_blend_matrices = MAX_VERTEX_BLENDS;
|
caps->max_vertex_blend_matrices = MAX_VERTEX_BLENDS;
|
||||||
|
@ -10743,8 +10739,8 @@ static const struct StateEntryTemplate glsl_vertex_pipe_vp_states[] =
|
||||||
{STATE_SAMPLER(7), {0, NULL }, WINED3D_GL_NORMALIZED_TEXRECT},
|
{STATE_SAMPLER(7), {0, NULL }, WINED3D_GL_NORMALIZED_TEXRECT},
|
||||||
{STATE_SAMPLER(7), {STATE_SAMPLER(7), glsl_vertex_pipe_texmatrix_np2}, WINED3D_GL_EXT_NONE },
|
{STATE_SAMPLER(7), {STATE_SAMPLER(7), glsl_vertex_pipe_texmatrix_np2}, WINED3D_GL_EXT_NONE },
|
||||||
{STATE_POINT_ENABLE, {STATE_POINT_ENABLE, glsl_vertex_pipe_shader}, WINED3D_GL_EXT_NONE },
|
{STATE_POINT_ENABLE, {STATE_POINT_ENABLE, glsl_vertex_pipe_shader}, WINED3D_GL_EXT_NONE },
|
||||||
{STATE_RENDER(WINED3D_RS_SHADEMODE), {STATE_RENDER(WINED3D_RS_SHADEMODE), glsl_vertex_pipe_nop }, WINED3D_GL_LEGACY_CONTEXT },
|
{STATE_RENDER(WINED3D_RS_SHADEMODE), {STATE_RENDER(WINED3D_RS_SHADEMODE), glsl_vertex_pipe_shademode}, WINED3D_GLSL_130 },
|
||||||
{STATE_RENDER(WINED3D_RS_SHADEMODE), {STATE_RENDER(WINED3D_RS_SHADEMODE), glsl_vertex_pipe_shademode}, WINED3D_GL_EXT_NONE },
|
{STATE_RENDER(WINED3D_RS_SHADEMODE), {STATE_RENDER(WINED3D_RS_SHADEMODE), glsl_vertex_pipe_nop }, WINED3D_GL_EXT_NONE },
|
||||||
{0 /* Terminate */, {0, NULL }, WINED3D_GL_EXT_NONE },
|
{0 /* Terminate */, {0, NULL }, WINED3D_GL_EXT_NONE },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -11100,8 +11096,8 @@ static const struct StateEntryTemplate glsl_fragment_pipe_state_template[] =
|
||||||
{STATE_TEXTURESTAGE(7, WINED3D_TSS_CONSTANT), {STATE_TEXTURESTAGE(7, WINED3D_TSS_CONSTANT), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE },
|
{STATE_TEXTURESTAGE(7, WINED3D_TSS_CONSTANT), {STATE_TEXTURESTAGE(7, WINED3D_TSS_CONSTANT), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE },
|
||||||
{STATE_RENDER(WINED3D_RS_SPECULARENABLE), {STATE_RENDER(WINED3D_RS_SPECULARENABLE), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE },
|
{STATE_RENDER(WINED3D_RS_SPECULARENABLE), {STATE_RENDER(WINED3D_RS_SPECULARENABLE), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE },
|
||||||
{STATE_POINT_ENABLE, {STATE_POINT_ENABLE, glsl_fragment_pipe_shader }, WINED3D_GL_EXT_NONE },
|
{STATE_POINT_ENABLE, {STATE_POINT_ENABLE, glsl_fragment_pipe_shader }, WINED3D_GL_EXT_NONE },
|
||||||
{STATE_RENDER(WINED3D_RS_SHADEMODE), {STATE_RENDER(WINED3D_RS_SHADEMODE), state_shademode }, WINED3D_GL_LEGACY_CONTEXT},
|
{STATE_RENDER(WINED3D_RS_SHADEMODE), {STATE_RENDER(WINED3D_RS_SHADEMODE), glsl_fragment_pipe_shademode }, WINED3D_GLSL_130 },
|
||||||
{STATE_RENDER(WINED3D_RS_SHADEMODE), {STATE_RENDER(WINED3D_RS_SHADEMODE), glsl_fragment_pipe_shademode }, WINED3D_GL_EXT_NONE },
|
{STATE_RENDER(WINED3D_RS_SHADEMODE), {STATE_RENDER(WINED3D_RS_SHADEMODE), state_shademode }, WINED3D_GL_EXT_NONE },
|
||||||
{0 /* Terminate */, {0, 0 }, WINED3D_GL_EXT_NONE },
|
{0 /* Terminate */, {0, 0 }, WINED3D_GL_EXT_NONE },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -202,6 +202,7 @@ enum wined3d_gl_extension
|
||||||
WINED3D_GL_VERSION_2_0,
|
WINED3D_GL_VERSION_2_0,
|
||||||
WINED3D_GL_VERSION_3_2,
|
WINED3D_GL_VERSION_3_2,
|
||||||
WINED3D_GL_VERSION_4_3,
|
WINED3D_GL_VERSION_4_3,
|
||||||
|
WINED3D_GLSL_130,
|
||||||
|
|
||||||
WINED3D_GL_EXT_COUNT,
|
WINED3D_GL_EXT_COUNT,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue