[PATCH 5/5] wined3d: User clip planes emulation for core profile contexts.
Matteo Bruni
mbruni at codeweavers.com
Wed Jun 1 16:16:56 CDT 2016
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
dlls/wined3d/glsl_shader.c | 201 +++++++++++++++++++++++++++++++----------
dlls/wined3d/wined3d_private.h | 37 ++++----
2 files changed, 172 insertions(+), 66 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 4e773b6..77b1de6 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -153,6 +153,7 @@ struct glsl_vs_program
GLint pointsize_c_att_location;
GLint pointsize_l_att_location;
GLint pointsize_q_att_location;
+ GLint clip_planes_location;
};
struct glsl_gs_program
@@ -1299,6 +1300,21 @@ static void shader_glsl_load_fog_uniform(const struct wined3d_context *context,
checkGLcall("fog emulation uniforms");
}
+static void shader_glsl_clip_plane_uniform(const struct wined3d_context *context,
+ const struct wined3d_state *state, unsigned int index, struct glsl_shader_prog_link *prog)
+{
+ const struct wined3d_gl_info *gl_info = context->gl_info;
+ struct wined3d_vec4 plane;
+
+ /* Clip planes are affected by the view transform in d3d for FFP draws. */
+ if (!use_vs(state))
+ multiply_vector_matrix(&plane, &state->clip_planes[index], &state->transforms[WINED3D_TS_VIEW]);
+ else
+ plane = state->clip_planes[index];
+
+ GL_EXTCALL(glUniform4fv(prog->vs.clip_planes_location + index, 1, &plane.x));
+}
+
/* Context activation is done by the caller (state handler). */
static void shader_glsl_load_color_key_constant(const struct glsl_ps_program *ps,
const struct wined3d_gl_info *gl_info, const struct wined3d_state *state)
@@ -1345,6 +1361,12 @@ static void shader_glsl_load_constants(void *shader_priv, struct wined3d_context
shader_glsl_load_constantsB(vshader, gl_info, prog->vs.uniform_b_locations, state->vs_consts_b,
vshader->reg_maps.boolean_constants);
+ if (update_mask & WINED3D_SHADER_CONST_VS_CLIP_PLANES)
+ {
+ for (i = 0; i < gl_info->limits.clipplanes; ++i)
+ shader_glsl_clip_plane_uniform(context, state, i, prog);
+ }
+
if (update_mask & WINED3D_SHADER_CONST_VS_POINTSIZE)
shader_glsl_pointsize_uniform(context, state, prog);
@@ -2020,12 +2042,18 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
shader_addline(buffer, "} ffp_point;\n");
}
- if (!gl_info->supported[WINED3D_GL_LEGACY_CONTEXT] && version->major < 3)
+ if (!gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
{
- 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, FALSE, "vec4 ffp_varying_texcoord[%u];\n", MAX_TEXTURES);
- declare_out_varying(gl_info, buffer, FALSE, "float ffp_varying_fogcoord;\n");
+ if (vs_args->clip_enabled)
+ shader_addline(buffer, "uniform vec4 clip_planes[%u];\n", gl_info->limits.clipplanes);
+
+ if (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_specular;\n");
+ 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");
+ }
}
if (version->major < 4)
@@ -5816,9 +5844,10 @@ static GLuint shader_glsl_generate_vshader(const struct wined3d_context *context
const struct wined3d_shader_reg_maps *reg_maps = &shader->reg_maps;
struct wined3d_string_buffer *buffer = &priv->shader_buffer;
const struct wined3d_gl_info *gl_info = context->gl_info;
+ BOOL legacy_context = gl_info->supported[WINED3D_GL_LEGACY_CONTEXT];
const DWORD *function = shader->function;
struct shader_glsl_ctx_priv priv_ctx;
- BOOL legacy_context = gl_info->supported[WINED3D_GL_LEGACY_CONTEXT];
+ unsigned int i;
/* Create the hw GLSL shader program and assign it as the shader->prgId */
GLuint shader_id = GL_EXTCALL(glCreateShader(GL_VERTEX_SHADER));
@@ -5883,7 +5912,13 @@ static GLuint shader_glsl_generate_vshader(const struct wined3d_context *context
/* We always store the clipplanes without y inversion */
if (args->clip_enabled)
- shader_addline(buffer, "gl_ClipVertex = gl_Position;\n");
+ {
+ if (legacy_context)
+ shader_addline(buffer, "gl_ClipVertex = gl_Position;\n");
+ else
+ for (i = 0; i < gl_info->limits.clipplanes; ++i)
+ shader_addline(buffer, "gl_ClipDistance[%u] = dot(gl_Position, clip_planes[%u]);\n", i, i);
+ }
if (args->point_size && !args->per_vertex_point_size)
shader_addline(buffer, "gl_PointSize = clamp(ffp_point.size, ffp_point.size_min, ffp_point.size_max);\n");
@@ -6426,6 +6461,9 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr
}
else
{
+ if (settings->clipping)
+ shader_addline(buffer, "uniform vec4 clip_planes[%u];\n", gl_info->limits.clipplanes);
+
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, FALSE, "vec4 ffp_varying_texcoord[%u];\n", MAX_TEXTURES);
@@ -6469,7 +6507,13 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr
shader_addline(buffer, "gl_Position = ffp_projection_matrix * ec_pos;\n");
if (settings->clipping)
- shader_addline(buffer, "gl_ClipVertex = ec_pos;\n");
+ {
+ if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
+ shader_addline(buffer, "gl_ClipVertex = ec_pos;\n");
+ else
+ for (i = 0; i < gl_info->limits.clipplanes; ++i)
+ shader_addline(buffer, "gl_ClipDistance[%u] = dot(ec_pos, clip_planes[%u]);\n", i, i);
+ }
shader_addline(buffer, "ec_pos /= ec_pos.w;\n");
}
@@ -7380,6 +7424,7 @@ static void shader_glsl_init_vs_uniform_locations(const struct wined3d_gl_info *
vs->pointsize_c_att_location = GL_EXTCALL(glGetUniformLocation(program_id, "ffp_point.c_att"));
vs->pointsize_l_att_location = GL_EXTCALL(glGetUniformLocation(program_id, "ffp_point.l_att"));
vs->pointsize_q_att_location = GL_EXTCALL(glGetUniformLocation(program_id, "ffp_point.q_att"));
+ vs->clip_planes_location = GL_EXTCALL(glGetUniformLocation(program_id, "clip_planes"));
string_buffer_release(&priv->string_buffers, name);
}
@@ -7780,6 +7825,8 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const
if (entry->vs.light_ambient_location != -1)
entry->constant_update_mask |= WINED3D_SHADER_CONST_FFP_LIGHTS;
}
+ if (entry->vs.clip_planes_location != -1)
+ entry->constant_update_mask |= WINED3D_SHADER_CONST_VS_CLIP_PLANES;
if (entry->vs.pointsize_min_location != -1)
entry->constant_update_mask |= WINED3D_SHADER_CONST_VS_POINTSIZE;
@@ -8775,6 +8822,7 @@ static void glsl_vertex_pipe_vdecl(struct wined3d_context *context,
{
const struct wined3d_gl_info *gl_info = context->gl_info;
BOOL normal = !!(context->stream_info.use_map & (1u << WINED3D_FFP_NORMAL));
+ BOOL legacy_context = gl_info->supported[WINED3D_GL_LEGACY_CONTEXT];
BOOL transformed = context->stream_info.position_transformed;
BOOL wasrhw = context->last_was_rhw;
unsigned int i;
@@ -8791,8 +8839,11 @@ static void glsl_vertex_pipe_vdecl(struct wined3d_context *context,
{
if (context->last_was_vshader)
{
- for (i = 0; i < gl_info->limits.clipplanes; ++i)
- clipplane(context, state, STATE_CLIPPLANE(i));
+ if (legacy_context)
+ for (i = 0; i < gl_info->limits.clipplanes; ++i)
+ clipplane(context, state, STATE_CLIPPLANE(i));
+ else
+ context->constant_update_mask |= WINED3D_SHADER_CONST_VS_CLIP_PLANES;
}
context->constant_update_mask |= WINED3D_SHADER_CONST_FFP_TEXMATRIX;
@@ -8813,9 +8864,12 @@ static void glsl_vertex_pipe_vdecl(struct wined3d_context *context,
{
if (!context->last_was_vshader)
{
- /* Vertex shader clipping ignores the view matrix. Update all clipplanes. */
- for (i = 0; i < gl_info->limits.clipplanes; ++i)
- clipplane(context, state, STATE_CLIPPLANE(i));
+ /* Vertex shader clipping ignores the view matrix. Update all clip planes. */
+ if (legacy_context)
+ for (i = 0; i < gl_info->limits.clipplanes; ++i)
+ clipplane(context, state, STATE_CLIPPLANE(i));
+ else
+ context->constant_update_mask |= WINED3D_SHADER_CONST_VS_CLIP_PLANES;
}
}
@@ -8871,10 +8925,17 @@ static void glsl_vertex_pipe_view(struct wined3d_context *context, const struct
| WINED3D_SHADER_CONST_FFP_LIGHTS
| WINED3D_SHADER_CONST_FFP_VERTEXBLEND;
- for (k = 0; k < gl_info->limits.clipplanes; ++k)
+ if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
+ {
+ for (k = 0; k < gl_info->limits.clipplanes; ++k)
+ {
+ if (!isStateDirty(context, STATE_CLIPPLANE(k)))
+ clipplane(context, state, STATE_CLIPPLANE(k));
+ }
+ }
+ else
{
- if (!isStateDirty(context, STATE_CLIPPLANE(k)))
- clipplane(context, state, STATE_CLIPPLANE(k));
+ context->constant_update_mask |= WINED3D_SHADER_CONST_VS_CLIP_PLANES;
}
}
@@ -8970,6 +9031,18 @@ static void glsl_vertex_pipe_shademode(struct wined3d_context *context,
context->shader_update_mask |= 1 << WINED3D_SHADER_TYPE_VERTEX;
}
+void glsl_vertex_pipe_clip_plane(struct wined3d_context *context,
+ const struct wined3d_state *state, DWORD state_id)
+{
+ const struct wined3d_gl_info *gl_info = context->gl_info;
+ UINT index = state_id - STATE_CLIPPLANE(0);
+
+ if (index >= gl_info->limits.clipplanes)
+ return;
+
+ context->constant_update_mask |= WINED3D_SHADER_CONST_VS_CLIP_PLANES;
+}
+
static const struct StateEntryTemplate glsl_vertex_pipe_vp_states[] =
{
{STATE_VDECL, {STATE_VDECL, glsl_vertex_pipe_vdecl }, WINED3D_GL_EXT_NONE },
@@ -8979,38 +9052,70 @@ static const struct StateEntryTemplate glsl_vertex_pipe_vp_states[] =
{STATE_MATERIAL, {STATE_RENDER(WINED3D_RS_SPECULARENABLE), NULL }, WINED3D_GL_EXT_NONE },
{STATE_RENDER(WINED3D_RS_SPECULARENABLE), {STATE_RENDER(WINED3D_RS_SPECULARENABLE), glsl_vertex_pipe_material}, WINED3D_GL_EXT_NONE },
/* Clip planes */
- {STATE_CLIPPLANE(0), {STATE_CLIPPLANE(0), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(1), {STATE_CLIPPLANE(1), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(2), {STATE_CLIPPLANE(2), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(3), {STATE_CLIPPLANE(3), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(4), {STATE_CLIPPLANE(4), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(5), {STATE_CLIPPLANE(5), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(6), {STATE_CLIPPLANE(6), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(7), {STATE_CLIPPLANE(7), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(8), {STATE_CLIPPLANE(8), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(9), {STATE_CLIPPLANE(9), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(10), {STATE_CLIPPLANE(10), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(11), {STATE_CLIPPLANE(11), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(12), {STATE_CLIPPLANE(12), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(13), {STATE_CLIPPLANE(13), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(14), {STATE_CLIPPLANE(14), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(15), {STATE_CLIPPLANE(15), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(16), {STATE_CLIPPLANE(16), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(17), {STATE_CLIPPLANE(17), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(18), {STATE_CLIPPLANE(18), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(19), {STATE_CLIPPLANE(19), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(20), {STATE_CLIPPLANE(20), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(21), {STATE_CLIPPLANE(21), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(22), {STATE_CLIPPLANE(22), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(23), {STATE_CLIPPLANE(23), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(24), {STATE_CLIPPLANE(24), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(25), {STATE_CLIPPLANE(25), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(26), {STATE_CLIPPLANE(26), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(27), {STATE_CLIPPLANE(27), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(28), {STATE_CLIPPLANE(28), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(29), {STATE_CLIPPLANE(29), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(30), {STATE_CLIPPLANE(30), clipplane }, WINED3D_GL_EXT_NONE },
- {STATE_CLIPPLANE(31), {STATE_CLIPPLANE(31), clipplane }, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(0), {STATE_CLIPPLANE(0), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(0), {STATE_CLIPPLANE(0), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(1), {STATE_CLIPPLANE(1), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(1), {STATE_CLIPPLANE(1), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(2), {STATE_CLIPPLANE(2), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(2), {STATE_CLIPPLANE(2), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(3), {STATE_CLIPPLANE(3), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(3), {STATE_CLIPPLANE(3), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(4), {STATE_CLIPPLANE(4), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(4), {STATE_CLIPPLANE(4), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(5), {STATE_CLIPPLANE(5), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(5), {STATE_CLIPPLANE(5), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(6), {STATE_CLIPPLANE(6), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(6), {STATE_CLIPPLANE(6), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(7), {STATE_CLIPPLANE(7), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(7), {STATE_CLIPPLANE(7), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(8), {STATE_CLIPPLANE(8), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(8), {STATE_CLIPPLANE(8), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(9), {STATE_CLIPPLANE(9), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(9), {STATE_CLIPPLANE(9), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(10), {STATE_CLIPPLANE(10), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(10), {STATE_CLIPPLANE(10), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(11), {STATE_CLIPPLANE(11), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(11), {STATE_CLIPPLANE(11), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(12), {STATE_CLIPPLANE(12), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(12), {STATE_CLIPPLANE(12), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(13), {STATE_CLIPPLANE(13), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(13), {STATE_CLIPPLANE(13), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(14), {STATE_CLIPPLANE(14), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(14), {STATE_CLIPPLANE(14), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(15), {STATE_CLIPPLANE(15), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(15), {STATE_CLIPPLANE(15), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(16), {STATE_CLIPPLANE(16), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(16), {STATE_CLIPPLANE(16), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(17), {STATE_CLIPPLANE(17), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(17), {STATE_CLIPPLANE(17), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(18), {STATE_CLIPPLANE(18), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(18), {STATE_CLIPPLANE(18), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(19), {STATE_CLIPPLANE(19), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(19), {STATE_CLIPPLANE(19), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(20), {STATE_CLIPPLANE(20), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(20), {STATE_CLIPPLANE(20), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(21), {STATE_CLIPPLANE(21), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(21), {STATE_CLIPPLANE(21), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(22), {STATE_CLIPPLANE(22), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(22), {STATE_CLIPPLANE(22), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(23), {STATE_CLIPPLANE(23), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(23), {STATE_CLIPPLANE(23), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(24), {STATE_CLIPPLANE(24), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(24), {STATE_CLIPPLANE(24), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(25), {STATE_CLIPPLANE(25), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(25), {STATE_CLIPPLANE(25), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(26), {STATE_CLIPPLANE(26), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(26), {STATE_CLIPPLANE(26), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(27), {STATE_CLIPPLANE(27), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(27), {STATE_CLIPPLANE(27), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(28), {STATE_CLIPPLANE(28), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(28), {STATE_CLIPPLANE(28), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(29), {STATE_CLIPPLANE(29), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(29), {STATE_CLIPPLANE(29), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(30), {STATE_CLIPPLANE(30), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(30), {STATE_CLIPPLANE(30), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
+ {STATE_CLIPPLANE(31), {STATE_CLIPPLANE(31), clipplane }, WINED3D_GL_LEGACY_CONTEXT },
+ {STATE_CLIPPLANE(31), {STATE_CLIPPLANE(31), glsl_vertex_pipe_clip_plane}, WINED3D_GL_EXT_NONE },
/* Lights */
{STATE_LIGHT_TYPE, {STATE_RENDER(WINED3D_RS_FOGENABLE), NULL }, WINED3D_GL_EXT_NONE },
{STATE_ACTIVELIGHT(0), {STATE_ACTIVELIGHT(0), glsl_vertex_pipe_light }, WINED3D_GL_EXT_NONE },
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 814ac49..1a5e2a0 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -330,24 +330,25 @@ enum wined3d_shader_resource_type
#define WINED3D_SHADER_CONST_VS_F 0x00000001
#define WINED3D_SHADER_CONST_VS_I 0x00000002
#define WINED3D_SHADER_CONST_VS_B 0x00000004
-#define WINED3D_SHADER_CONST_VS_POINTSIZE 0x00000008
-#define WINED3D_SHADER_CONST_POS_FIXUP 0x00000010
-#define WINED3D_SHADER_CONST_PS_F 0x00000020
-#define WINED3D_SHADER_CONST_PS_I 0x00000040
-#define WINED3D_SHADER_CONST_PS_B 0x00000080
-#define WINED3D_SHADER_CONST_PS_BUMP_ENV 0x00000100
-#define WINED3D_SHADER_CONST_PS_FOG 0x00000200
-#define WINED3D_SHADER_CONST_PS_ALPHA_TEST 0x00000400
-#define WINED3D_SHADER_CONST_PS_Y_CORR 0x00000800
-#define WINED3D_SHADER_CONST_PS_NP2_FIXUP 0x00001000
-#define WINED3D_SHADER_CONST_FFP_MODELVIEW 0x00002000
-#define WINED3D_SHADER_CONST_FFP_VERTEXBLEND 0x00004000
-#define WINED3D_SHADER_CONST_FFP_PROJ 0x00008000
-#define WINED3D_SHADER_CONST_FFP_TEXMATRIX 0x00010000
-#define WINED3D_SHADER_CONST_FFP_MATERIAL 0x00020000
-#define WINED3D_SHADER_CONST_FFP_LIGHTS 0x00040000
-#define WINED3D_SHADER_CONST_FFP_PS 0x00080000
-#define WINED3D_SHADER_CONST_FFP_COLOR_KEY 0x00100000
+#define WINED3D_SHADER_CONST_VS_CLIP_PLANES 0x00000008
+#define WINED3D_SHADER_CONST_VS_POINTSIZE 0x00000010
+#define WINED3D_SHADER_CONST_POS_FIXUP 0x00000020
+#define WINED3D_SHADER_CONST_PS_F 0x00000040
+#define WINED3D_SHADER_CONST_PS_I 0x00000080
+#define WINED3D_SHADER_CONST_PS_B 0x00000100
+#define WINED3D_SHADER_CONST_PS_BUMP_ENV 0x00000200
+#define WINED3D_SHADER_CONST_PS_FOG 0x00000400
+#define WINED3D_SHADER_CONST_PS_ALPHA_TEST 0x00000800
+#define WINED3D_SHADER_CONST_PS_Y_CORR 0x00001000
+#define WINED3D_SHADER_CONST_PS_NP2_FIXUP 0x00002000
+#define WINED3D_SHADER_CONST_FFP_MODELVIEW 0x00004000
+#define WINED3D_SHADER_CONST_FFP_VERTEXBLEND 0x00008000
+#define WINED3D_SHADER_CONST_FFP_PROJ 0x00010000
+#define WINED3D_SHADER_CONST_FFP_TEXMATRIX 0x00020000
+#define WINED3D_SHADER_CONST_FFP_MATERIAL 0x00040000
+#define WINED3D_SHADER_CONST_FFP_LIGHTS 0x00080000
+#define WINED3D_SHADER_CONST_FFP_PS 0x00100000
+#define WINED3D_SHADER_CONST_FFP_COLOR_KEY 0x00200000
enum wined3d_shader_register_type
{
--
2.7.3
More information about the wine-patches
mailing list