static void fd5_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 fd5_context *fd5_ctx = fd5_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 fd5_sampler_stateobj *sampler = fd5_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) { fd5_ctx->fsaturate = (saturate_s != 0) || (saturate_t != 0) || (saturate_r != 0); fd5_ctx->fsaturate_s = saturate_s; fd5_ctx->fsaturate_t = saturate_t; fd5_ctx->fsaturate_r = saturate_r; } else if (shader == PIPE_SHADER_VERTEX) { fd5_ctx->vsaturate = (saturate_s != 0) || (saturate_t != 0) || (saturate_r != 0); fd5_ctx->vsaturate_s = saturate_s; fd5_ctx->vsaturate_t = saturate_t; fd5_ctx->vsaturate_r = saturate_r; } }
static void fd2_sampler_states_bind(struct pipe_context *pctx, unsigned shader, unsigned start, unsigned nr, void **hwcso) { if (shader == PIPE_SHADER_FRAGMENT) { struct fd_context *ctx = fd_context(pctx); /* on a2xx, since there is a flat address space for textures/samplers, * a change in # of fragment textures/samplers will trigger patching and * re-emitting the vertex shader: */ if (nr != ctx->fragtex.num_samplers) ctx->dirty |= FD_DIRTY_TEXSTATE; } fd_sampler_states_bind(pctx, shader, start, nr, hwcso); }