diff options
author | Roland Scheidegger <[email protected]> | 2013-02-27 19:07:18 +0100 |
---|---|---|
committer | Roland Scheidegger <[email protected]> | 2013-02-28 03:39:53 +0100 |
commit | 6b35c2b110be0d9ae6a292250fdcbab11a9190a5 (patch) | |
tree | 5141a7490ac67ee8df3542f8396b2ba4e6423ec7 /src/gallium/auxiliary/draw | |
parent | 0845d16976b41e0a151f96b900fb58a7f26d7774 (diff) |
softpipe/draw/tgsi: simplify driver/tgsi sampler interface
Use a single sampler adapter instead of per-sampler-unit samplers,
and just pass along texture unit and sampler unit in the calls.
The reason is that for dx10-style sample opcodes pre-wired
samplers including all the texture state aren't really feasible (and for
sample_i/sviewinfo we don't even have samplers).
Of course right now softpipe doesn't actually do anything more than
just look up all its pre-wired per-texunit/per-samplerunit sampler as
it did before so this doesn't really achieve much except one more
function call, however this is now all softpipe's fault (fixing that in
a way which doesn't suck is still an unsolved problem).
Reviewed-by: Jose Fonseca <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/draw')
-rw-r--r-- | src/gallium/auxiliary/draw/draw_context.c | 13 | ||||
-rw-r--r-- | src/gallium/auxiliary/draw/draw_context.h | 7 | ||||
-rw-r--r-- | src/gallium/auxiliary/draw/draw_gs.c | 3 | ||||
-rw-r--r-- | src/gallium/auxiliary/draw/draw_private.h | 6 | ||||
-rw-r--r-- | src/gallium/auxiliary/draw/draw_vs_exec.c | 3 |
5 files changed, 12 insertions, 20 deletions
diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c index 045bb6b2ae8..6b70ac88be6 100644 --- a/src/gallium/auxiliary/draw/draw_context.c +++ b/src/gallium/auxiliary/draw/draw_context.c @@ -581,18 +581,15 @@ draw_num_shader_outputs(const struct draw_context *draw) * This might only be used by software drivers for the time being. */ void -draw_texture_samplers(struct draw_context *draw, - uint shader, - uint num_samplers, - struct tgsi_sampler **samplers) +draw_texture_sampler(struct draw_context *draw, + uint shader, + struct tgsi_sampler *sampler) { if (shader == PIPE_SHADER_VERTEX) { - draw->vs.tgsi.num_samplers = num_samplers; - draw->vs.tgsi.samplers = samplers; + draw->vs.tgsi.sampler = sampler; } else { debug_assert(shader == PIPE_SHADER_GEOMETRY); - draw->gs.tgsi.num_samplers = num_samplers; - draw->gs.tgsi.samplers = samplers; + draw->gs.tgsi.sampler = sampler; } } diff --git a/src/gallium/auxiliary/draw/draw_context.h b/src/gallium/auxiliary/draw/draw_context.h index e8e2d9487b3..18c8595f8cf 100644 --- a/src/gallium/auxiliary/draw/draw_context.h +++ b/src/gallium/auxiliary/draw/draw_context.h @@ -132,10 +132,9 @@ draw_num_shader_outputs(const struct draw_context *draw); void -draw_texture_samplers(struct draw_context *draw, - uint shader_type, - uint num_samplers, - struct tgsi_sampler **samplers); +draw_texture_sampler(struct draw_context *draw, + uint shader_type, + struct tgsi_sampler *sampler); void draw_set_sampler_views(struct draw_context *draw, diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c index 5c5552394e8..25c117bafae 100644 --- a/src/gallium/auxiliary/draw/draw_gs.c +++ b/src/gallium/auxiliary/draw/draw_gs.c @@ -465,7 +465,6 @@ void draw_geometry_shader_prepare(struct draw_geometry_shader *shader, if (shader && shader->machine->Tokens != shader->state.tokens) { tgsi_exec_machine_bind_shader(shader->machine, shader->state.tokens, - draw->gs.tgsi.num_samplers, - draw->gs.tgsi.samplers); + draw->gs.tgsi.sampler); } } diff --git a/src/gallium/auxiliary/draw/draw_private.h b/src/gallium/auxiliary/draw/draw_private.h index ec5791cbc17..5063c3c8f64 100644 --- a/src/gallium/auxiliary/draw/draw_private.h +++ b/src/gallium/auxiliary/draw/draw_private.h @@ -248,8 +248,7 @@ struct draw_context struct { struct tgsi_exec_machine *machine; - struct tgsi_sampler **samplers; - uint num_samplers; + struct tgsi_sampler *sampler; } tgsi; struct translate *fetch; @@ -268,8 +267,7 @@ struct draw_context struct { struct tgsi_exec_machine *machine; - struct tgsi_sampler **samplers; - uint num_samplers; + struct tgsi_sampler *sampler; } tgsi; } gs; diff --git a/src/gallium/auxiliary/draw/draw_vs_exec.c b/src/gallium/auxiliary/draw/draw_vs_exec.c index 828a155d716..610039498a3 100644 --- a/src/gallium/auxiliary/draw/draw_vs_exec.c +++ b/src/gallium/auxiliary/draw/draw_vs_exec.c @@ -69,8 +69,7 @@ vs_exec_prepare( struct draw_vertex_shader *shader, if (evs->machine->Tokens != shader->state.tokens) { tgsi_exec_machine_bind_shader(evs->machine, shader->state.tokens, - draw->vs.tgsi.num_samplers, - draw->vs.tgsi.samplers); + draw->vs.tgsi.sampler); } } |