diff options
Diffstat (limited to 'src/gallium/drivers/galahad/glhd_context.c')
-rw-r--r-- | src/gallium/drivers/galahad/glhd_context.c | 98 |
1 files changed, 57 insertions, 41 deletions
diff --git a/src/gallium/drivers/galahad/glhd_context.c b/src/gallium/drivers/galahad/glhd_context.c index dc7f017d91e..601081b0dc1 100644 --- a/src/gallium/drivers/galahad/glhd_context.c +++ b/src/gallium/drivers/galahad/glhd_context.c @@ -182,43 +182,52 @@ galahad_context_create_sampler_state(struct pipe_context *_pipe, } static void -galahad_context_bind_fragment_sampler_states(struct pipe_context *_pipe, - unsigned num_samplers, - void **samplers) +galahad_context_bind_sampler_states(struct pipe_context *_pipe, + unsigned shader, + unsigned start, + unsigned num_samplers, + void **samplers) { struct galahad_context *glhd_pipe = galahad_context(_pipe); struct pipe_context *pipe = glhd_pipe->pipe; if (num_samplers > PIPE_MAX_SAMPLERS) { - glhd_error("%u fragment samplers requested, " + glhd_error("%u samplers requested, " "but only %u are permitted by API", num_samplers, PIPE_MAX_SAMPLERS); } - pipe->bind_fragment_sampler_states(pipe, - num_samplers, - samplers); + switch (shader) { + case PIPE_SHADER_VERTEX: + pipe->bind_vertex_sampler_states(pipe, num_samplers, samplers); + break; + case PIPE_SHADER_FRAGMENT: + pipe->bind_fragment_sampler_states(pipe, num_samplers, samplers); + break; + default: + assert(0); + } } static void galahad_context_bind_vertex_sampler_states(struct pipe_context *_pipe, - unsigned num_samplers, - void **samplers) + unsigned num_samplers, + void **samplers) { - struct galahad_context *glhd_pipe = galahad_context(_pipe); - struct pipe_context *pipe = glhd_pipe->pipe; - - if (num_samplers > PIPE_MAX_SAMPLERS) { - glhd_error("%u vertex samplers requested, " - "but only %u are permitted by API", - num_samplers, PIPE_MAX_SAMPLERS); - } + galahad_context_bind_sampler_states(_pipe, PIPE_SHADER_VERTEX, + 0, num_samplers, samplers); +} - pipe->bind_vertex_sampler_states(pipe, - num_samplers, - samplers); +static void +galahad_context_bind_fragment_sampler_states(struct pipe_context *_pipe, + unsigned num_samplers, + void **samplers) +{ + galahad_context_bind_sampler_states(_pipe, PIPE_SHADER_FRAGMENT, + 0, num_samplers, samplers); } + static void galahad_context_delete_sampler_state(struct pipe_context *_pipe, void *sampler) @@ -558,9 +567,11 @@ galahad_context_set_viewport_state(struct pipe_context *_pipe, } static void -galahad_context_set_fragment_sampler_views(struct pipe_context *_pipe, - unsigned num, - struct pipe_sampler_view **_views) +galahad_context_set_sampler_views(struct pipe_context *_pipe, + unsigned shader, + unsigned start, + unsigned num, + struct pipe_sampler_view **_views) { struct galahad_context *glhd_pipe = galahad_context(_pipe); struct pipe_context *pipe = glhd_pipe->pipe; @@ -577,32 +588,37 @@ galahad_context_set_fragment_sampler_views(struct pipe_context *_pipe, views = unwrapped_views; } - pipe->set_fragment_sampler_views(pipe, num, views); + switch (shader) { + case PIPE_SHADER_VERTEX: + pipe->set_vertex_sampler_views(pipe, num, views); + break; + case PIPE_SHADER_FRAGMENT: + pipe->set_fragment_sampler_views(pipe, num, views); + break; + default: + assert(0); + } } static void galahad_context_set_vertex_sampler_views(struct pipe_context *_pipe, - unsigned num, - struct pipe_sampler_view **_views) + unsigned num, + struct pipe_sampler_view **_views) { - struct galahad_context *glhd_pipe = galahad_context(_pipe); - struct pipe_context *pipe = glhd_pipe->pipe; - struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SAMPLERS]; - struct pipe_sampler_view **views = NULL; - unsigned i; - - if (_views) { - for (i = 0; i < num; i++) - unwrapped_views[i] = galahad_sampler_view_unwrap(_views[i]); - for (; i < Elements(unwrapped_views); i++) - unwrapped_views[i] = NULL; - - views = unwrapped_views; - } + galahad_context_set_sampler_views(_pipe, PIPE_SHADER_VERTEX, + 0, num, _views); +} - pipe->set_vertex_sampler_views(pipe, num, views); +static void +galahad_context_set_fragment_sampler_views(struct pipe_context *_pipe, + unsigned num, + struct pipe_sampler_view **_views) +{ + galahad_context_set_sampler_views(_pipe, PIPE_SHADER_FRAGMENT, + 0, num, _views); } + static void galahad_context_set_vertex_buffers(struct pipe_context *_pipe, unsigned num_buffers, |