From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/wined3d/glsl_shader.c | 2 +- dlls/wined3d/utils.c | 15 +++++++++------ dlls/wined3d/wined3d_private.h | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index b4308906e4c..49d8870bb88 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -1505,7 +1505,7 @@ static void shader_glsl_ffp_vertex_texmatrix_uniform(const struct wined3d_contex if (prog->vs.texture_matrix_location[tex] == -1) return;
- get_texture_matrix(&context_gl->c, state, tex, &mat); + get_texture_matrix(&context_gl->c.stream_info, state, tex, &mat); GL_EXTCALL(glUniformMatrix4fv(prog->vs.texture_matrix_location[tex], 1, FALSE, &mat._11)); checkGLcall("glUniformMatrix4fv"); } diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 71b629da50e..3ec6ef40508 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -5746,20 +5746,23 @@ static void compute_texture_matrix(const struct wined3d_matrix *matrix, uint32_t *out_matrix = mat; }
-void get_texture_matrix(const struct wined3d_context *context, const struct wined3d_state *state, - const unsigned int tex, struct wined3d_matrix *mat) +void get_texture_matrix(const struct wined3d_stream_info *si, + const struct wined3d_state *state, const unsigned int tex, struct wined3d_matrix *mat) { BOOL generated = (state->texture_states[tex][WINED3D_TSS_TEXCOORD_INDEX] & 0xffff0000) != WINED3DTSS_TCI_PASSTHRU; unsigned int coord_idx = min(state->texture_states[tex][WINED3D_TSS_TEXCOORD_INDEX] & 0x0000ffff, WINED3D_MAX_FFP_TEXTURES - 1); + enum wined3d_format_id attribute_format; + + if (si->use_map & (1u << (WINED3D_FFP_TEXCOORD0 + coord_idx))) + attribute_format = si->elements[WINED3D_FFP_TEXCOORD0 + coord_idx].format->id; + else + attribute_format = WINED3DFMT_UNKNOWN;
compute_texture_matrix(&state->transforms[WINED3D_TS_TEXTURE0 + tex], state->texture_states[tex][WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS], - generated, context->stream_info.position_transformed, - context->stream_info.use_map & (1u << (WINED3D_FFP_TEXCOORD0 + coord_idx)) - ? context->stream_info.elements[WINED3D_FFP_TEXCOORD0 + coord_idx].format->id - : WINED3DFMT_UNKNOWN, mat); + generated, si->position_transformed, attribute_format, mat); }
void get_pointsize_minmax(const struct wined3d_context *context, const struct wined3d_state *state, diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index c8b437aa524..58dacd4f5d2 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -4381,8 +4381,8 @@ void get_modelview_matrix(const struct wined3d_context *context, const struct wi unsigned int index, struct wined3d_matrix *mat); void get_projection_matrix(const struct wined3d_context *context, const struct wined3d_state *state, struct wined3d_matrix *mat); -void get_texture_matrix(const struct wined3d_context *context, const struct wined3d_state *state, - unsigned int tex, struct wined3d_matrix *mat); +void get_texture_matrix(const struct wined3d_stream_info *si, + const struct wined3d_state *state, const unsigned int tex, struct wined3d_matrix *mat); void get_pointsize_minmax(const struct wined3d_context *context, const struct wined3d_state *state, float *out_min, float *out_max); void get_pointsize(const struct wined3d_context *context, const struct wined3d_state *state,