wined3d: Dirtify pixel shader on texture format change.
This commit is contained in:
parent
ea85db2a3f
commit
2dd237e200
|
@ -636,10 +636,15 @@ static void wined3d_cs_exec_set_texture(struct wined3d_cs *cs, const void *data)
|
|||
|
||||
if (op->texture)
|
||||
{
|
||||
const struct wined3d_format *new_format = op->texture->resource.format;
|
||||
const struct wined3d_format *old_format = prev ? prev->resource.format : NULL;
|
||||
|
||||
if (InterlockedIncrement(&op->texture->resource.bind_count) == 1)
|
||||
op->texture->sampler = op->stage;
|
||||
|
||||
if (!prev || op->texture->target != prev->target)
|
||||
if (!prev || op->texture->target != prev->target
|
||||
|| !is_same_fixup(new_format->color_fixup, old_format->color_fixup)
|
||||
|| (new_format->flags & WINED3DFMT_FLAG_SHADOW) != (old_format->flags & WINED3DFMT_FLAG_SHADOW))
|
||||
device_invalidate_state(cs->device, STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL));
|
||||
|
||||
if (!prev && op->stage < d3d_info->limits.ffp_blend_stages)
|
||||
|
|
|
@ -145,6 +145,14 @@ static inline BOOL is_complex_fixup(struct color_fixup_desc fixup)
|
|||
return fixup.x_source == CHANNEL_SOURCE_COMPLEX0 || fixup.x_source == CHANNEL_SOURCE_COMPLEX1;
|
||||
}
|
||||
|
||||
static inline BOOL is_same_fixup(struct color_fixup_desc f1, struct color_fixup_desc f2)
|
||||
{
|
||||
return f1.x_sign_fixup == f2.x_sign_fixup && f1.x_source == f2.x_source
|
||||
&& f1.y_sign_fixup == f2.y_sign_fixup && f1.y_source == f2.y_source
|
||||
&& f1.z_sign_fixup == f2.z_sign_fixup && f1.z_source == f2.z_source
|
||||
&& f1.w_sign_fixup == f2.w_sign_fixup && f1.w_source == f2.w_source;
|
||||
}
|
||||
|
||||
static inline enum complex_fixup get_complex_fixup(struct color_fixup_desc fixup)
|
||||
{
|
||||
enum complex_fixup complex_fixup = 0;
|
||||
|
|
Loading…
Reference in New Issue