diff options
author | Axel Davy <[email protected]> | 2015-01-07 16:34:12 +0100 |
---|---|---|
committer | Axel Davy <[email protected]> | 2015-02-06 00:07:18 +0100 |
commit | 65ce2b2848eafe0d51375edca15fbb91956668e4 (patch) | |
tree | 7025eaea3fa9553f506e5cc8d608fe07fc24ae1b /src | |
parent | 2d2286d17c78af95c4bb5f56ef1b58a09eef7260 (diff) |
st/nine: Commit sampler views again if srgb state changed.
This fixes a wine test and some minor visual issues on some games.
The patch is not optimal, there is probably a more efficient way to
fix this issue, but the code there already has some innefficiencies.
There is plans to rewrite that part of the code to make it more
efficient.
Reviewed-by: Tiziano Bacocco <[email protected]>
Signed-off-by: Axel Davy <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/state_trackers/nine/device9.c | 3 | ||||
-rw-r--r-- | src/gallium/state_trackers/nine/nine_state.c | 5 | ||||
-rw-r--r-- | src/gallium/state_trackers/nine/nine_state.h | 1 |
3 files changed, 7 insertions, 2 deletions
diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c index 656f48860fd..b7e83a4bab9 100644 --- a/src/gallium/state_trackers/nine/device9.c +++ b/src/gallium/state_trackers/nine/device9.c @@ -2327,6 +2327,9 @@ NineDevice9_SetSamplerState( struct NineDevice9 *This, state->changed.group |= NINE_STATE_SAMPLER; state->changed.sampler[Sampler] |= 1 << Type; + if (Type == D3DSAMP_SRGBTEXTURE) + state->changed.srgb = TRUE; + return D3D_OK; } diff --git a/src/gallium/state_trackers/nine/nine_state.c b/src/gallium/state_trackers/nine/nine_state.c index dad665133ac..972ed1f40be 100644 --- a/src/gallium/state_trackers/nine/nine_state.c +++ b/src/gallium/state_trackers/nine/nine_state.c @@ -678,7 +678,7 @@ update_textures_and_samplers(struct NineDevice9 *device) nine_convert_sampler_state(device->cso, s, state->samp[s]); } } - if (state->changed.texture & NINE_PS_SAMPLERS_MASK) + if (state->changed.texture & NINE_PS_SAMPLERS_MASK || state->changed.srgb) pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, num_textures, view); @@ -708,13 +708,14 @@ update_textures_and_samplers(struct NineDevice9 *device) nine_convert_sampler_state(device->cso, s, state->samp[s]); } } - if (state->changed.texture & NINE_VS_SAMPLERS_MASK) + if (state->changed.texture & NINE_VS_SAMPLERS_MASK || state->changed.srgb) pipe->set_sampler_views(pipe, PIPE_SHADER_VERTEX, 0, num_textures, view); if (commit_samplers) cso_single_sampler_done(device->cso, PIPE_SHADER_VERTEX); + state->changed.srgb = FALSE; state->changed.texture = 0; } diff --git a/src/gallium/state_trackers/nine/nine_state.h b/src/gallium/state_trackers/nine/nine_state.h index 028e57df264..6e94e68ef1e 100644 --- a/src/gallium/state_trackers/nine/nine_state.h +++ b/src/gallium/state_trackers/nine/nine_state.h @@ -123,6 +123,7 @@ struct nine_state uint16_t vs_const_b; /* NINE_MAX_CONST_B == 16 */ uint16_t ps_const_b; uint8_t ucp; + boolean srgb; } changed; struct NineSurface9 *rt[NINE_MAX_SIMULTANEOUS_RENDERTARGETS]; |