wined3d: Just check the vertex declaration for texcoord usage.

Do not check the stream info.

This would make a difference if the usage was included in the vertex declaration
but the corresponding stream is not bound; however, in that case we supply a
default stream containing zero, which provides the same behaviour as if the
usage is not included in the vertex declaration.
This commit is contained in:
Elizabeth Figura 2024-05-03 17:28:06 -05:00 committed by Alexandre Julliard
parent 89a71df48e
commit c825c885d3
3 changed files with 6 additions and 4 deletions

View file

@ -6507,11 +6507,10 @@ void wined3d_ffp_get_fs_settings(const struct wined3d_context *context,
}
else
{
const struct wined3d_stream_info *si = &context->stream_info;
unsigned int coord_idx = state->texture_states[i][WINED3D_TSS_TEXCOORD_INDEX];
if ((state->texture_states[i][WINED3D_TSS_TEXCOORD_INDEX] >> WINED3D_FFP_TCI_SHIFT)
& WINED3D_FFP_TCI_MASK
|| (coord_idx < WINED3D_MAX_FFP_TEXTURES && (si->use_map & (1u << (WINED3D_FFP_TEXCOORD0 + coord_idx)))))
|| (coord_idx < WINED3D_MAX_FFP_TEXTURES && (state->vertex_declaration->texcoords & (1u << coord_idx))))
settings->texcoords_initialized |= 1u << i;
}
}
@ -6588,7 +6587,7 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context,
for (i = 0; i < WINED3D_MAX_FFP_TEXTURES; ++i)
{
coord_idx = state->texture_states[i][WINED3D_TSS_TEXCOORD_INDEX];
if (coord_idx < WINED3D_MAX_FFP_TEXTURES && (si->use_map & (1u << (WINED3D_FFP_TEXCOORD0 + coord_idx))))
if (coord_idx < WINED3D_MAX_FFP_TEXTURES && (vdecl->texcoords & (1u << coord_idx)))
settings->texcoords |= 1u << i;
settings->texgen[i] = state->texture_states[i][WINED3D_TSS_TEXCOORD_INDEX];
}
@ -6638,7 +6637,7 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context,
for (i = 0; i < WINED3D_MAX_FFP_TEXTURES; ++i)
{
coord_idx = state->texture_states[i][WINED3D_TSS_TEXCOORD_INDEX];
if (coord_idx < WINED3D_MAX_FFP_TEXTURES && (si->use_map & (1u << (WINED3D_FFP_TEXCOORD0 + coord_idx))))
if (coord_idx < WINED3D_MAX_FFP_TEXTURES && (vdecl->texcoords & (1u << coord_idx)))
settings->texcoords |= 1u << i;
settings->texgen[i] = state->texture_states[i][WINED3D_TSS_TEXCOORD_INDEX];
}

View file

@ -228,6 +228,8 @@ static HRESULT vertexdeclaration_init(struct wined3d_vertex_declaration *declara
declaration->specular = true;
else if (e->usage == WINED3D_DECL_USAGE_NORMAL)
declaration->normal = true;
else if (e->usage == WINED3D_DECL_USAGE_TEXCOORD)
declaration->texcoords |= (1u << e->usage_idx);
/* Find the streams used in the declaration. The vertex buffers have
* to be loaded when drawing, but filter tessellation pseudo streams. */

View file

@ -3496,6 +3496,7 @@ struct wined3d_vertex_declaration
bool diffuse;
bool specular;
bool normal;
uint8_t texcoords;
};
bool wined3d_light_state_enable_light(struct wined3d_light_state *state, const struct wined3d_d3d_info *d3d_info,