mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 19:40:10 +01:00
radeon: implement pipe_context::bind_sampler_states()
This commit is contained in:
parent
0de99d52b7
commit
8280b29d7c
3 changed files with 49 additions and 0 deletions
|
|
@ -1541,6 +1541,31 @@ static void r300_bind_fragment_sampler_states(struct pipe_context* pipe,
|
|||
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)
|
||||
|
|
@ -2157,6 +2182,7 @@ void r300_init_state_functions(struct r300_context* r300)
|
|||
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;
|
||||
|
|
|
|||
|
|
@ -2085,6 +2085,7 @@ void r600_init_common_state_functions(struct r600_context *rctx)
|
|||
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;
|
||||
|
|
|
|||
|
|
@ -2772,6 +2772,27 @@ static void si_bind_ps_sampler_states(struct pipe_context *ctx, unsigned count,
|
|||
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;
|
||||
|
|
@ -3009,6 +3030,7 @@ void si_init_state_functions(struct r600_context *rctx)
|
|||
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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue