summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/state_trackers/nine/device9.c3
-rw-r--r--src/gallium/state_trackers/nine/nine_state.c5
-rw-r--r--src/gallium/state_trackers/nine/nine_state.h1
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];