diff options
-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]; |