summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/auxiliary/draw/draw_context.c10
-rw-r--r--src/gallium/auxiliary/draw/draw_gs.c22
-rw-r--r--src/gallium/auxiliary/draw/draw_private.h21
-rw-r--r--src/gallium/auxiliary/draw/draw_vs.c6
-rw-r--r--src/gallium/auxiliary/draw/draw_vs_exec.c6
5 files changed, 35 insertions, 30 deletions
diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c
index dd4698be952..3c9c7f1690e 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -576,7 +576,7 @@ draw_num_shader_outputs(const struct draw_context *draw)
/**
* Provide TGSI sampler objects for vertex/geometry shaders that use
- * texture fetches.
+ * texture fetches. This state only needs to be set once per context.
* This might only be used by software drivers for the time being.
*/
void
@@ -586,12 +586,12 @@ draw_texture_samplers(struct draw_context *draw,
struct tgsi_sampler **samplers)
{
if (shader == PIPE_SHADER_VERTEX) {
- draw->vs.num_samplers = num_samplers;
- draw->vs.samplers = samplers;
+ draw->vs.tgsi.num_samplers = num_samplers;
+ draw->vs.tgsi.samplers = samplers;
} else {
debug_assert(shader == PIPE_SHADER_GEOMETRY);
- draw->gs.num_samplers = num_samplers;
- draw->gs.samplers = samplers;
+ draw->gs.tgsi.num_samplers = num_samplers;
+ draw->gs.tgsi.samplers = samplers;
}
}
diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c
index 50a03ac95a5..b2b40871af7 100644
--- a/src/gallium/auxiliary/draw/draw_gs.c
+++ b/src/gallium/auxiliary/draw/draw_gs.c
@@ -45,15 +45,15 @@
boolean
draw_gs_init( struct draw_context *draw )
{
- draw->gs.machine = tgsi_exec_machine_create();
- if (!draw->gs.machine)
+ draw->gs.tgsi.machine = tgsi_exec_machine_create();
+ if (!draw->gs.tgsi.machine)
return FALSE;
- draw->gs.machine->Primitives = align_malloc(
+ draw->gs.tgsi.machine->Primitives = align_malloc(
MAX_PRIMITIVES * sizeof(struct tgsi_exec_vector), 16);
- if (!draw->gs.machine->Primitives)
+ if (!draw->gs.tgsi.machine->Primitives)
return FALSE;
- memset(draw->gs.machine->Primitives, 0,
+ memset(draw->gs.tgsi.machine->Primitives, 0,
MAX_PRIMITIVES * sizeof(struct tgsi_exec_vector));
return TRUE;
@@ -61,12 +61,12 @@ draw_gs_init( struct draw_context *draw )
void draw_gs_destroy( struct draw_context *draw )
{
- if (!draw->gs.machine)
+ if (!draw->gs.tgsi.machine)
return;
- align_free(draw->gs.machine->Primitives);
+ align_free(draw->gs.tgsi.machine->Primitives);
- tgsi_exec_machine_destroy(draw->gs.machine);
+ tgsi_exec_machine_destroy(draw->gs.tgsi.machine);
}
void
@@ -121,7 +121,7 @@ draw_create_geometry_shader(struct draw_context *draw,
gs->max_output_vertices = gs->info.properties[i].data[0];
}
- gs->machine = draw->gs.machine;
+ gs->machine = draw->gs.tgsi.machine;
if (gs)
{
@@ -483,7 +483,7 @@ 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.num_samplers,
- draw->gs.samplers);
+ draw->gs.tgsi.num_samplers,
+ draw->gs.tgsi.samplers);
}
}
diff --git a/src/gallium/auxiliary/draw/draw_private.h b/src/gallium/auxiliary/draw/draw_private.h
index 9cede2108db..6a085be27fc 100644
--- a/src/gallium/auxiliary/draw/draw_private.h
+++ b/src/gallium/auxiliary/draw/draw_private.h
@@ -240,12 +240,14 @@ struct draw_context
uint edgeflag_output;
uint clipvertex_output;
uint clipdistance_output[2];
- /** TGSI program interpreter runtime state */
- struct tgsi_exec_machine *machine;
- uint num_samplers;
- struct tgsi_sampler **samplers;
+ /** Fields for TGSI interpreter / execution */
+ struct {
+ struct tgsi_exec_machine *machine;
+ struct tgsi_sampler **samplers;
+ uint num_samplers;
+ } tgsi;
const void *aligned_constants[PIPE_MAX_CONSTANT_BUFFERS];
@@ -265,11 +267,14 @@ struct draw_context
uint num_gs_outputs; /**< convenience, from geometry_shader */
uint position_output;
- /** TGSI program interpreter runtime state */
- struct tgsi_exec_machine *machine;
+ /** Fields for TGSI interpreter / execution */
+ struct {
+ struct tgsi_exec_machine *machine;
+
+ struct tgsi_sampler **samplers;
+ uint num_samplers;
+ } tgsi;
- uint num_samplers;
- struct tgsi_sampler **samplers;
} gs;
/** Fragment shader state */
diff --git a/src/gallium/auxiliary/draw/draw_vs.c b/src/gallium/auxiliary/draw/draw_vs.c
index 56c4f882cae..0aea2f23a9e 100644
--- a/src/gallium/auxiliary/draw/draw_vs.c
+++ b/src/gallium/auxiliary/draw/draw_vs.c
@@ -193,8 +193,8 @@ draw_vs_init( struct draw_context *draw )
{
draw->dump_vs = debug_get_option_gallium_dump_vs();
- draw->vs.machine = tgsi_exec_machine_create();
- if (!draw->vs.machine)
+ draw->vs.tgsi.machine = tgsi_exec_machine_create();
+ if (!draw->vs.tgsi.machine)
return FALSE;
draw->vs.emit_cache = translate_cache_create();
@@ -225,7 +225,7 @@ draw_vs_destroy( struct draw_context *draw )
}
}
- tgsi_exec_machine_destroy(draw->vs.machine);
+ tgsi_exec_machine_destroy(draw->vs.tgsi.machine);
}
diff --git a/src/gallium/auxiliary/draw/draw_vs_exec.c b/src/gallium/auxiliary/draw/draw_vs_exec.c
index 84ce8c15190..828a155d716 100644
--- a/src/gallium/auxiliary/draw/draw_vs_exec.c
+++ b/src/gallium/auxiliary/draw/draw_vs_exec.c
@@ -69,8 +69,8 @@ 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.num_samplers,
- draw->vs.samplers);
+ draw->vs.tgsi.num_samplers,
+ draw->vs.tgsi.samplers);
}
}
@@ -235,7 +235,7 @@ draw_create_vs_exec(struct draw_context *draw,
vs->base.run_linear = vs_exec_run_linear;
vs->base.delete = vs_exec_delete;
vs->base.create_variant = draw_vs_create_variant_generic;
- vs->machine = draw->vs.machine;
+ vs->machine = draw->vs.tgsi.machine;
return &vs->base;
}