wined3d: Get rid of state access in shader_generate_glsl_declarations().
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
ab1ae26520
commit
f08896aa73
|
@ -1646,11 +1646,9 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
|
||||||
const struct wined3d_shader_reg_maps *reg_maps, const struct shader_glsl_ctx_priv *ctx_priv)
|
const struct wined3d_shader_reg_maps *reg_maps, const struct shader_glsl_ctx_priv *ctx_priv)
|
||||||
{
|
{
|
||||||
const struct wined3d_shader_version *version = ®_maps->shader_version;
|
const struct wined3d_shader_version *version = ®_maps->shader_version;
|
||||||
const struct wined3d_state *state = &shader->device->state;
|
|
||||||
const struct vs_compile_args *vs_args = ctx_priv->cur_vs_args;
|
const struct vs_compile_args *vs_args = ctx_priv->cur_vs_args;
|
||||||
const struct ps_compile_args *ps_args = ctx_priv->cur_ps_args;
|
const struct ps_compile_args *ps_args = ctx_priv->cur_ps_args;
|
||||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||||
const struct wined3d_fb_state *fb = &shader->device->fb;
|
|
||||||
unsigned int i, extra_constants_needed = 0;
|
unsigned int i, extra_constants_needed = 0;
|
||||||
const struct wined3d_shader_lconst *lconst;
|
const struct wined3d_shader_lconst *lconst;
|
||||||
const char *prefix;
|
const char *prefix;
|
||||||
|
@ -1953,7 +1951,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);
|
UINT in_count = min(vec4_varyings(version->major, gl_info), shader->limits->packed_input);
|
||||||
|
|
||||||
if (use_vs(state))
|
if (ps_args->vp_mode == vertexshader)
|
||||||
declare_in_varying(gl_info, buffer, FALSE, "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);
|
shader_addline(buffer, "vec4 %s_in[%u];\n", prefix, in_count);
|
||||||
}
|
}
|
||||||
|
@ -1986,32 +1984,13 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
|
||||||
}
|
}
|
||||||
if (reg_maps->vpos || reg_maps->usesdsy)
|
if (reg_maps->vpos || reg_maps->usesdsy)
|
||||||
{
|
{
|
||||||
if (shader->limits->constant_float + extra_constants_needed
|
++extra_constants_needed;
|
||||||
+ 1 < gl_info->limits.glsl_ps_float_constants)
|
shader_addline(buffer, "uniform vec4 ycorrection;\n");
|
||||||
{
|
|
||||||
shader_addline(buffer, "uniform vec4 ycorrection;\n");
|
|
||||||
extra_constants_needed++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
float ycorrection[] =
|
|
||||||
{
|
|
||||||
context->render_offscreen ? 0.0f : fb->render_targets[0]->height,
|
|
||||||
context->render_offscreen ? 1.0f : -1.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* This happens because we do not have proper tracking of the
|
|
||||||
* constant registers that are actually used, only the max
|
|
||||||
* limit of the shader version. */
|
|
||||||
FIXME("Cannot find a free uniform for vpos correction params\n");
|
|
||||||
shader_addline(buffer, "const vec4 ycorrection = ");
|
|
||||||
shader_glsl_append_imm_vec4(buffer, ycorrection);
|
|
||||||
shader_addline(buffer, ";\n");
|
|
||||||
}
|
|
||||||
shader_addline(buffer, "vec4 vpos;\n");
|
shader_addline(buffer, "vec4 vpos;\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (shader->limits->constant_float + extra_constants_needed >= gl_info->limits.glsl_ps_float_constants)
|
||||||
|
FIXME("Insufficient uniforms to run this shader.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Declare output register temporaries */
|
/* Declare output register temporaries */
|
||||||
|
|
Loading…
Reference in New Issue