+static void
+fd3_sampler_states_bind(struct pipe_context *pctx,
+ enum pipe_shader_type shader, unsigned start,
+ unsigned nr, void **hwcso)
+{
+ struct fd_context *ctx = fd_context(pctx);
+ struct fd3_context *fd3_ctx = fd3_context(ctx);
+ uint16_t saturate_s = 0, saturate_t = 0, saturate_r = 0;
+ unsigned i;
+
+ if (!hwcso)
+ nr = 0;
+
+ for (i = 0; i < nr; i++) {
+ if (hwcso[i]) {
+ struct fd3_sampler_stateobj *sampler =
+ fd3_sampler_stateobj(hwcso[i]);
+ if (sampler->saturate_s)
+ saturate_s |= (1 << i);
+ if (sampler->saturate_t)
+ saturate_t |= (1 << i);
+ if (sampler->saturate_r)
+ saturate_r |= (1 << i);
+ }
+ }
+
+ fd_sampler_states_bind(pctx, shader, start, nr, hwcso);
+
+ if (shader == PIPE_SHADER_FRAGMENT) {
+ fd3_ctx->fsaturate =
+ (saturate_s != 0) ||
+ (saturate_t != 0) ||
+ (saturate_r != 0);
+ fd3_ctx->fsaturate_s = saturate_s;
+ fd3_ctx->fsaturate_t = saturate_t;
+ fd3_ctx->fsaturate_r = saturate_r;
+ } else if (shader == PIPE_SHADER_VERTEX) {
+ fd3_ctx->vsaturate =
+ (saturate_s != 0) ||
+ (saturate_t != 0) ||
+ (saturate_r != 0);
+ fd3_ctx->vsaturate_s = saturate_s;
+ fd3_ctx->vsaturate_t = saturate_t;
+ fd3_ctx->vsaturate_r = saturate_r;
+ }
+}
+