r300_mark_atom_dirty(r300, &r300->textures_state);
}
+static void r300_bind_sampler_states(struct pipe_context* pipe,
+ unsigned shader,
+ unsigned start, unsigned count,
+ void** states)
+{
+ struct r300_context* r300 = r300_context(pipe);
+ struct r300_textures_state* state =
+ (struct r300_textures_state*)r300->textures_state.state;
+ unsigned tex_units = r300->screen->caps.num_tex_units;
+
+ assert(start == 0);
+
+ if (shader != PIPE_SHADER_FRAGMENT)
+ return;
+
+ if (count > tex_units)
+ return;
+
+ memcpy(state->sampler_states, states, sizeof(void*) * count);
+ state->sampler_state_count = count;
+
+ r300_mark_atom_dirty(r300, &r300->textures_state);
+}
+
+
static void r300_lacks_vertex_textures(struct pipe_context* pipe,
unsigned count,
void** states)
r300->context.delete_rasterizer_state = r300_delete_rs_state;
r300->context.create_sampler_state = r300_create_sampler_state;
+ r300->context.bind_sampler_states = r300_bind_sampler_states;
r300->context.bind_fragment_sampler_states = r300_bind_fragment_sampler_states;
r300->context.bind_vertex_sampler_states = r300_lacks_vertex_textures;
r300->context.delete_sampler_state = r300_delete_sampler_state;
rctx->b.b.create_vertex_elements_state = r600_create_vertex_fetch_shader;
rctx->b.b.bind_blend_state = r600_bind_blend_state;
rctx->b.b.bind_depth_stencil_alpha_state = r600_bind_dsa_state;
+ rctx->b.b.bind_sampler_states = r600_bind_sampler_states;
rctx->b.b.bind_fragment_sampler_states = r600_bind_ps_sampler_states;
rctx->b.b.bind_fs_state = r600_bind_ps_state;
rctx->b.b.bind_rasterizer_state = r600_bind_rs_state;
si_pm4_set_state(rctx, ps_sampler, pm4);
}
+
+static void si_bind_sampler_states(struct pipe_context *ctx, unsigned shader,
+ unsigned start, unsigned count,
+ void **states)
+{
+ assert(start == 0);
+
+ switch (shader) {
+ case PIPE_SHADER_VERTEX:
+ si_bind_vs_sampler_states(ctx, count, states);
+ break;
+ case PIPE_SHADER_FRAGMENT:
+ si_bind_ps_sampler_states(ctx, count, states);
+ break;
+ default:
+ ;
+ }
+}
+
+
+
static void si_set_sample_mask(struct pipe_context *ctx, unsigned sample_mask)
{
struct r600_context *rctx = (struct r600_context *)ctx;
rctx->b.b.delete_fs_state = si_delete_ps_shader;
rctx->b.b.create_sampler_state = si_create_sampler_state;
+ rctx->b.b.bind_sampler_states = si_bind_sampler_states;
rctx->b.b.bind_vertex_sampler_states = si_bind_vs_sampler_states;
rctx->b.b.bind_fragment_sampler_states = si_bind_ps_sampler_states;
rctx->b.b.delete_sampler_state = si_delete_sampler_state;