gallium: add a shader stage/type param to some draw functions
To prepare for geometry shader texture support in the draw module. Note: we still only handle the vertex shader case.
This commit is contained in:
@@ -754,11 +754,13 @@ draw_set_so_state(struct draw_context *draw,
|
||||
|
||||
void
|
||||
draw_set_sampler_views(struct draw_context *draw,
|
||||
unsigned shader_stage,
|
||||
struct pipe_sampler_view **views,
|
||||
unsigned num)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
if (shader_stage == PIPE_SHADER_VERTEX) {
|
||||
debug_assert(num <= PIPE_MAX_VERTEX_SAMPLERS);
|
||||
|
||||
for (i = 0; i < num; ++i)
|
||||
@@ -768,14 +770,17 @@ draw_set_sampler_views(struct draw_context *draw,
|
||||
|
||||
draw->num_sampler_views = num;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
draw_set_samplers(struct draw_context *draw,
|
||||
unsigned shader_stage,
|
||||
struct pipe_sampler_state **samplers,
|
||||
unsigned num)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
if (shader_stage == PIPE_SHADER_VERTEX) {
|
||||
debug_assert(num <= PIPE_MAX_VERTEX_SAMPLERS);
|
||||
|
||||
for (i = 0; i < num; ++i)
|
||||
@@ -790,9 +795,11 @@ draw_set_samplers(struct draw_context *draw,
|
||||
draw_llvm_set_sampler_state(draw);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
draw_set_mapped_texture(struct draw_context *draw,
|
||||
unsigned shader_stage,
|
||||
unsigned sampler_idx,
|
||||
uint32_t width, uint32_t height, uint32_t depth,
|
||||
uint32_t first_level, uint32_t last_level,
|
||||
@@ -800,12 +807,14 @@ draw_set_mapped_texture(struct draw_context *draw,
|
||||
uint32_t img_stride[PIPE_MAX_TEXTURE_LEVELS],
|
||||
const void *data[PIPE_MAX_TEXTURE_LEVELS])
|
||||
{
|
||||
if (shader_stage == PIPE_SHADER_VERTEX) {
|
||||
#ifdef HAVE_LLVM
|
||||
if (draw->llvm)
|
||||
draw_llvm_set_mapped_texture(draw,
|
||||
sampler_idx,
|
||||
width, height, depth, first_level, last_level,
|
||||
row_stride, img_stride, data);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -139,15 +139,18 @@ draw_texture_samplers(struct draw_context *draw,
|
||||
|
||||
void
|
||||
draw_set_sampler_views(struct draw_context *draw,
|
||||
unsigned shader_stage,
|
||||
struct pipe_sampler_view **views,
|
||||
unsigned num);
|
||||
void
|
||||
draw_set_samplers(struct draw_context *draw,
|
||||
unsigned shader_stage,
|
||||
struct pipe_sampler_state **samplers,
|
||||
unsigned num);
|
||||
|
||||
void
|
||||
draw_set_mapped_texture(struct draw_context *draw,
|
||||
unsigned shader_stage,
|
||||
unsigned sampler_idx,
|
||||
uint32_t width, uint32_t height, uint32_t depth,
|
||||
uint32_t first_level, uint32_t last_level,
|
||||
|
@@ -325,6 +325,7 @@ i915_bind_vertex_sampler_states(struct pipe_context *pipe,
|
||||
i915->num_vertex_samplers = num_samplers;
|
||||
|
||||
draw_set_samplers(i915->draw,
|
||||
PIPE_SHADER_VERTEX,
|
||||
i915->vertex_samplers,
|
||||
i915->num_vertex_samplers);
|
||||
}
|
||||
@@ -405,6 +406,7 @@ i915_prepare_vertex_sampling(struct i915_context *i915)
|
||||
}
|
||||
|
||||
draw_set_mapped_texture(i915->draw,
|
||||
PIPE_SHADER_VERTEX,
|
||||
i,
|
||||
tex->width0, tex->height0, tex->depth0,
|
||||
view->u.tex.first_level, tex->last_level,
|
||||
@@ -792,6 +794,7 @@ i915_set_vertex_sampler_views(struct pipe_context *pipe,
|
||||
i915->num_vertex_sampler_views = num;
|
||||
|
||||
draw_set_sampler_views(i915->draw,
|
||||
PIPE_SHADER_VERTEX,
|
||||
i915->vertex_sampler_views,
|
||||
i915->num_vertex_sampler_views);
|
||||
}
|
||||
|
@@ -88,13 +88,11 @@ llvmpipe_bind_sampler_states(struct pipe_context *pipe,
|
||||
|
||||
llvmpipe->num_samplers[shader] = num;
|
||||
|
||||
/* XXX call draw_set_samplers() here for geometry shaders once
|
||||
* draw_set_samplers() is extended to accept a shader argument.
|
||||
*/
|
||||
if (shader == PIPE_SHADER_VERTEX) {
|
||||
if (shader == PIPE_SHADER_VERTEX || shader == PIPE_SHADER_GEOMETRY) {
|
||||
draw_set_samplers(llvmpipe->draw,
|
||||
llvmpipe->samplers[PIPE_SHADER_VERTEX],
|
||||
llvmpipe->num_samplers[PIPE_SHADER_VERTEX]);
|
||||
shader,
|
||||
llvmpipe->samplers[shader],
|
||||
llvmpipe->num_samplers[shader]);
|
||||
}
|
||||
|
||||
llvmpipe->dirty |= LP_NEW_SAMPLER;
|
||||
@@ -150,13 +148,11 @@ llvmpipe_set_sampler_views(struct pipe_context *pipe,
|
||||
|
||||
llvmpipe->num_sampler_views[shader] = num;
|
||||
|
||||
/* XXX call draw_set_sampler_views() here for geometry shaders once
|
||||
* draw_set_sampler_views() is extended to accept a shader argument.
|
||||
*/
|
||||
if (shader == PIPE_SHADER_VERTEX) {
|
||||
if (shader == PIPE_SHADER_VERTEX || shader == PIPE_SHADER_GEOMETRY) {
|
||||
draw_set_sampler_views(llvmpipe->draw,
|
||||
llvmpipe->sampler_views[PIPE_SHADER_VERTEX],
|
||||
llvmpipe->num_sampler_views[PIPE_SHADER_VERTEX]);
|
||||
shader,
|
||||
llvmpipe->sampler_views[shader],
|
||||
llvmpipe->num_sampler_views[shader]);
|
||||
}
|
||||
|
||||
llvmpipe->dirty |= LP_NEW_SAMPLER_VIEW;
|
||||
@@ -279,6 +275,7 @@ llvmpipe_prepare_vertex_sampling(struct llvmpipe_context *lp,
|
||||
assert(data[0]);
|
||||
}
|
||||
draw_set_mapped_texture(lp->draw,
|
||||
PIPE_SHADER_VERTEX,
|
||||
i,
|
||||
tex->width0, tex->height0, tex->depth0,
|
||||
view->u.tex.first_level, tex->last_level,
|
||||
|
@@ -90,10 +90,11 @@ softpipe_bind_sampler_states(struct pipe_context *pipe,
|
||||
|
||||
softpipe->num_samplers[shader] = num;
|
||||
|
||||
if (shader == PIPE_SHADER_VERTEX) {
|
||||
if (shader == PIPE_SHADER_VERTEX || shader == PIPE_SHADER_GEOMETRY) {
|
||||
draw_set_samplers(softpipe->draw,
|
||||
softpipe->samplers[PIPE_SHADER_VERTEX],
|
||||
softpipe->num_samplers[PIPE_SHADER_VERTEX]);
|
||||
shader,
|
||||
softpipe->samplers[shader],
|
||||
softpipe->num_samplers[shader]);
|
||||
}
|
||||
|
||||
softpipe->dirty |= SP_NEW_SAMPLER;
|
||||
@@ -183,10 +184,11 @@ softpipe_set_sampler_views(struct pipe_context *pipe,
|
||||
|
||||
softpipe->num_sampler_views[shader] = num;
|
||||
|
||||
if (shader == PIPE_SHADER_VERTEX) {
|
||||
if (shader == PIPE_SHADER_VERTEX || shader == PIPE_SHADER_GEOMETRY) {
|
||||
draw_set_sampler_views(softpipe->draw,
|
||||
softpipe->sampler_views[PIPE_SHADER_VERTEX],
|
||||
softpipe->num_sampler_views[PIPE_SHADER_VERTEX]);
|
||||
shader,
|
||||
softpipe->sampler_views[shader],
|
||||
softpipe->num_sampler_views[shader]);
|
||||
}
|
||||
|
||||
softpipe->dirty |= SP_NEW_TEXTURE;
|
||||
|
Reference in New Issue
Block a user