From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/wined3d/cs.c | 29 ----------------------------- dlls/wined3d/ffp_gl.c | 1 - dlls/wined3d/glsl_shader.c | 23 ++++++++++------------- dlls/wined3d/shader_spirv.c | 1 - dlls/wined3d/stateblock.c | 15 +++++---------- dlls/wined3d/utils.c | 2 -- dlls/wined3d/wined3d_private.h | 9 ++------- 7 files changed, 17 insertions(+), 63 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index f7f8021e8ba..d35c33f678c 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -121,7 +121,6 @@ enum wined3d_cs_op WINED3D_CS_OP_SET_TRANSFORM, WINED3D_CS_OP_SET_CLIP_PLANE, WINED3D_CS_OP_SET_COLOR_KEY, - WINED3D_CS_OP_SET_MATERIAL, WINED3D_CS_OP_SET_LIGHT, WINED3D_CS_OP_SET_LIGHT_ENABLE, WINED3D_CS_OP_SET_FEATURE_LEVEL, @@ -383,12 +382,6 @@ struct wined3d_cs_set_clip_plane struct wined3d_vec4 plane; };
-struct wined3d_cs_set_material -{ - enum wined3d_cs_op opcode; - struct wined3d_material material; -}; - struct wined3d_cs_set_light { enum wined3d_cs_op opcode; @@ -604,7 +597,6 @@ static const char *debug_cs_op(enum wined3d_cs_op op) WINED3D_TO_STR(WINED3D_CS_OP_SET_TRANSFORM); WINED3D_TO_STR(WINED3D_CS_OP_SET_CLIP_PLANE); WINED3D_TO_STR(WINED3D_CS_OP_SET_COLOR_KEY); - WINED3D_TO_STR(WINED3D_CS_OP_SET_MATERIAL); WINED3D_TO_STR(WINED3D_CS_OP_SET_LIGHT); WINED3D_TO_STR(WINED3D_CS_OP_SET_LIGHT_ENABLE); WINED3D_TO_STR(WINED3D_CS_OP_SET_FEATURE_LEVEL); @@ -2015,26 +2007,6 @@ void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture wined3d_device_context_submit(&cs->c, WINED3D_CS_QUEUE_DEFAULT); }
-static void wined3d_cs_exec_set_material(struct wined3d_cs *cs, const void *data) -{ - const struct wined3d_cs_set_material *op = data; - - cs->state.material = op->material; - device_invalidate_state(cs->c.device, STATE_MATERIAL); -} - -void wined3d_device_context_emit_set_material(struct wined3d_device_context *context, - const struct wined3d_material *material) -{ - struct wined3d_cs_set_material *op; - - op = wined3d_device_context_require_space(context, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); - op->opcode = WINED3D_CS_OP_SET_MATERIAL; - op->material = *material; - - wined3d_device_context_submit(context, WINED3D_CS_QUEUE_DEFAULT); -} - static void wined3d_cs_exec_set_light(struct wined3d_cs *cs, const void *data) { const struct wined3d_cs_set_light *op = data; @@ -2957,7 +2929,6 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void /* WINED3D_CS_OP_SET_TRANSFORM */ wined3d_cs_exec_set_transform, /* WINED3D_CS_OP_SET_CLIP_PLANE */ wined3d_cs_exec_set_clip_plane, /* WINED3D_CS_OP_SET_COLOR_KEY */ wined3d_cs_exec_set_color_key, - /* WINED3D_CS_OP_SET_MATERIAL */ wined3d_cs_exec_set_material, /* WINED3D_CS_OP_SET_LIGHT */ wined3d_cs_exec_set_light, /* WINED3D_CS_OP_SET_LIGHT_ENABLE */ wined3d_cs_exec_set_light_enable, /* WINED3D_CS_OP_SET_FEATURE_LEVEL */ wined3d_cs_exec_set_feature_level, diff --git a/dlls/wined3d/ffp_gl.c b/dlls/wined3d/ffp_gl.c index f1f995f6e4c..a518521b101 100644 --- a/dlls/wined3d/ffp_gl.c +++ b/dlls/wined3d/ffp_gl.c @@ -1684,7 +1684,6 @@ static void validate_state_table(struct wined3d_state_entry *state_table) }; static const unsigned int simple_states[] = { - STATE_MATERIAL, STATE_VDECL, STATE_STREAMSRC, STATE_INDEXBUFFER, diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 3fe7640106f..b4973c71343 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -1509,16 +1509,20 @@ static void shader_glsl_ffp_vertex_texmatrix_uniform(const struct wined3d_contex checkGLcall("glUniformMatrix4fv"); }
-static void shader_glsl_ffp_vertex_material_uniform(const struct wined3d_context_gl *context_gl, +static void shader_glsl_ffp_vertex_material_uniform(struct wined3d_context_gl *context_gl, const struct wined3d_state *state, struct glsl_shader_prog_link *prog) { const struct wined3d_gl_info *gl_info = context_gl->gl_info; + const struct wined3d_ffp_vs_constants *constants;
- GL_EXTCALL(glUniform4fv(prog->vs.material_specular_location, 1, &state->material.specular.r)); - GL_EXTCALL(glUniform1f(prog->vs.material_shininess_location, state->material.power)); - GL_EXTCALL(glUniform4fv(prog->vs.material_ambient_location, 1, &state->material.ambient.r)); - GL_EXTCALL(glUniform4fv(prog->vs.material_diffuse_location, 1, &state->material.diffuse.r)); - GL_EXTCALL(glUniform4fv(prog->vs.material_emissive_location, 1, &state->material.emissive.r)); + constants = wined3d_buffer_load_sysmem( + context_gl->c.device->push_constants[WINED3D_PUSH_CONSTANTS_VS_FFP], &context_gl->c); + + GL_EXTCALL(glUniform4fv(prog->vs.material_specular_location, 1, &constants->material.specular.r)); + GL_EXTCALL(glUniform1f(prog->vs.material_shininess_location, constants->material.power)); + GL_EXTCALL(glUniform4fv(prog->vs.material_ambient_location, 1, &constants->material.ambient.r)); + GL_EXTCALL(glUniform4fv(prog->vs.material_diffuse_location, 1, &constants->material.diffuse.r)); + GL_EXTCALL(glUniform4fv(prog->vs.material_emissive_location, 1, &constants->material.emissive.r)); checkGLcall("setting FFP material uniforms"); }
@@ -11847,12 +11851,6 @@ static void glsl_vertex_pipe_viewport(struct wined3d_context *context, context->constant_update_mask |= WINED3D_SHADER_CONST_POS_FIXUP; }
-static void glsl_vertex_pipe_material(struct wined3d_context *context, - const struct wined3d_state *state, DWORD state_id) -{ - context->constant_update_mask |= WINED3D_SHADER_CONST_FFP_MATERIAL; -} - static void glsl_vertex_pipe_pointsize(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -11902,7 +11900,6 @@ static const struct wined3d_state_entry_template glsl_vertex_pipe_vp_states[] = {STATE_SHADER(WINED3D_SHADER_TYPE_HULL), {STATE_SHADER(WINED3D_SHADER_TYPE_HULL), glsl_vertex_pipe_hs }, WINED3D_GL_EXT_NONE }, {STATE_SHADER(WINED3D_SHADER_TYPE_GEOMETRY), {STATE_SHADER(WINED3D_SHADER_TYPE_GEOMETRY), glsl_vertex_pipe_geometry_shader}, WINED3D_GL_EXT_NONE }, {STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL), {STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL), glsl_vertex_pipe_pixel_shader}, WINED3D_GL_EXT_NONE }, - {STATE_MATERIAL, {STATE_MATERIAL, glsl_vertex_pipe_material}, WINED3D_GL_EXT_NONE }, /* Clip planes */ {STATE_CLIPPLANE(0), {STATE_CLIPPLANE(0), glsl_vertex_pipe_clip_plane}, WINED3D_GLSL_130 }, {STATE_CLIPPLANE(0), {STATE_CLIPPLANE(0), clipplane }, WINED3D_GL_EXT_NONE }, diff --git a/dlls/wined3d/shader_spirv.c b/dlls/wined3d/shader_spirv.c index a4b311ae8d2..a5461d3d998 100644 --- a/dlls/wined3d/shader_spirv.c +++ b/dlls/wined3d/shader_spirv.c @@ -1176,7 +1176,6 @@ static const struct wined3d_state_entry_template spirv_vertex_pipe_vk_vp_states[ {STATE_RENDER(WINED3D_RS_POINTSCALE_B), {STATE_RENDER(WINED3D_RS_POINTSCALE_B), state_nop}}, {STATE_RENDER(WINED3D_RS_POINTSCALE_C), {STATE_RENDER(WINED3D_RS_POINTSCALE_C), state_nop}}, {STATE_RENDER(WINED3D_RS_POINTSIZE_MAX), {STATE_RENDER(WINED3D_RS_POINTSIZE_MAX), state_nop}}, - {STATE_MATERIAL, {STATE_MATERIAL, state_nop}}, {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), state_nop}}, {STATE_LIGHT_TYPE, {STATE_LIGHT_TYPE, state_nop}}, {0}, /* Terminate */ diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index 67c696fa4f5..0618f982315 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -2250,6 +2250,7 @@ static void wined3d_stateblock_invalidate_push_constants(struct wined3d_stateblo stateblock->changed.ffp_ps_constants = 1; stateblock->changed.lights = 1; stateblock->changed.texture_matrices = 1; + stateblock->changed.material = 1; }
static HRESULT stateblock_init(struct wined3d_stateblock *stateblock, const struct wined3d_stateblock *device_state, @@ -2610,14 +2611,6 @@ static void wined3d_device_set_texture(struct wined3d_device *device, return; }
-static void wined3d_device_set_material(struct wined3d_device *device, const struct wined3d_material *material) -{ - TRACE("device %p, material %p.\n", device, material); - - device->cs->c.state->material = *material; - wined3d_device_context_emit_set_material(&device->cs->c, material); -} - static void wined3d_device_set_transform(struct wined3d_device *device, enum wined3d_transform_state state, const struct wined3d_matrix *matrix) { @@ -3355,8 +3348,6 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, wined3d_device_set_base_vertex_index(device, state->base_vertex_index); if (changed->vertexDecl) wined3d_device_context_set_vertex_declaration(context, state->vertex_declaration); - if (changed->material) - wined3d_device_set_material(device, &state->material); if (changed->viewport) wined3d_device_context_set_viewports(context, 1, &state->viewport); if (changed->scissorRect) @@ -3426,6 +3417,10 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, } }
+ if (changed->material) + wined3d_device_context_push_constants(context, WINED3D_PUSH_CONSTANTS_VS_FFP, WINED3D_SHADER_CONST_FFP_MATERIAL, + offsetof(struct wined3d_ffp_vs_constants, material), sizeof(state->material), &state->material); + if (changed->lights) { unsigned int point_idx, spot_idx, directional_idx, parallel_point_idx; diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index cd3458770aa..495831c40e5 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -5369,8 +5369,6 @@ const char *debug_d3dstate(uint32_t state) return "STATE_SCISSORRECT"; if (STATE_IS_CLIPPLANE(state)) return wine_dbg_sprintf("STATE_CLIPPLANE(%#x)", state - STATE_CLIPPLANE(0)); - if (STATE_IS_MATERIAL(state)) - return "STATE_MATERIAL"; if (STATE_IS_RASTERIZER(state)) return "STATE_RASTERIZER"; if (STATE_IS_DEPTH_BOUNDS(state)) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index a2db15d6c9e..7d36979b8da 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1757,10 +1757,7 @@ void dispatch_compute(struct wined3d_device *device, const struct wined3d_state #define STATE_CLIPPLANE(a) (STATE_SCISSORRECT + 1 + (a)) #define STATE_IS_CLIPPLANE(a) ((a) >= STATE_CLIPPLANE(0) && (a) <= STATE_CLIPPLANE(WINED3D_MAX_CLIP_DISTANCES - 1))
-#define STATE_MATERIAL (STATE_CLIPPLANE(WINED3D_MAX_CLIP_DISTANCES)) -#define STATE_IS_MATERIAL(a) ((a) == STATE_MATERIAL) - -#define STATE_RASTERIZER (STATE_MATERIAL + 1) +#define STATE_RASTERIZER (STATE_CLIPPLANE(WINED3D_MAX_CLIP_DISTANCES)) #define STATE_IS_RASTERIZER(a) ((a) == STATE_RASTERIZER)
#define STATE_DEPTH_BOUNDS (STATE_RASTERIZER + 1) @@ -2772,6 +2769,7 @@ BOOL wined3d_get_app_name(char *app_name, unsigned int app_name_size); struct wined3d_ffp_vs_constants { struct wined3d_matrix texture_matrices[WINED3D_MAX_FFP_TEXTURES]; + struct wined3d_material material; struct wined3d_ffp_light_constants { struct wined3d_color ambient; @@ -2889,7 +2887,6 @@ struct wined3d_state
struct wined3d_matrix transforms[WINED3D_HIGHEST_TRANSFORM_STATE + 1]; struct wined3d_vec4 clip_planes[WINED3D_MAX_CLIP_DISTANCES]; - struct wined3d_material material; struct wined3d_viewport viewports[WINED3D_MAX_VIEWPORTS]; unsigned int viewport_count; RECT scissor_rects[WINED3D_MAX_VIEWPORTS]; @@ -3702,8 +3699,6 @@ void wined3d_device_context_emit_set_light(struct wined3d_device_context *contex const struct wined3d_light_info *light); void wined3d_device_context_emit_set_light_enable(struct wined3d_device_context *context, unsigned int idx, BOOL enable); -void wined3d_device_context_emit_set_material(struct wined3d_device_context *context, - const struct wined3d_material *material); void wined3d_device_context_emit_set_predication(struct wined3d_device_context *context, struct wined3d_query *predicate, BOOL value); void wined3d_device_context_emit_set_rasterizer_state(struct wined3d_device_context *context,