return TRUE;
}
+void draw_gs_destroy( struct draw_context *draw )
+{
+ if (!draw->gs.machine)
+ return;
-void draw_gs_set_constants( struct draw_context *draw,
- const float (*constants)[4],
- unsigned size )
+ align_free(draw->gs.machine->Primitives);
+
+ tgsi_exec_machine_destroy(draw->gs.machine);
+}
+
+void
+draw_gs_set_constants(struct draw_context *draw,
+ unsigned slot,
+ const void *constants,
+ unsigned size)
{
}
int idx = 0;
for (slot = 0, vs_slot = 0; slot < shader->info.num_inputs; slot++) {
- debug_printf("Slot = %d (semantic = %d)\n", slot,
- shader->info.input_semantic_name[slot]);
+ /*debug_printf("Slot = %d (semantic = %d)\n", slot,
+ shader->info.input_semantic_name[slot]);*/
if (shader->info.input_semantic_name[slot] ==
- TGSI_SEMANTIC_VERTICES) {
+ TGSI_SEMANTIC_PRIMID) {
for (j = 0; j < num_primitives; ++j) {
- machine->Inputs[idx].xyzw[0].f[j] = (float)num_vertices;
- machine->Inputs[idx].xyzw[1].f[j] = (float)num_vertices;
- machine->Inputs[idx].xyzw[2].f[j] = (float)num_vertices;
- machine->Inputs[idx].xyzw[3].f[j] = (float)num_vertices;
+ machine->Inputs[idx].xyzw[0].f[j] = (float)start_primitive + j;
+ machine->Inputs[idx].xyzw[1].f[j] = (float)start_primitive + j;
+ machine->Inputs[idx].xyzw[2].f[j] = (float)start_primitive + j;
+ machine->Inputs[idx].xyzw[3].f[j] = (float)start_primitive + j;
}
++idx;
} else {
for (j = 0; j < num_primitives; ++j) {
int vidx = idx;
const float (*prim_ptr)[4];
- debug_printf(" %d) Prim (num_verts = %d)\n", start_primitive + j,
- num_vertices);
+ /*debug_printf(" %d) Prim (num_verts = %d)\n", start_primitive + j,
+ num_vertices);*/
prim_ptr = (const float (*)[4])(
(const char *)input_ptr +
(j * num_vertices * input_vertex_stride));
input = (const float (*)[4])(
(const char *)prim_ptr + (k * input_vertex_stride));
vidx = k * TGSI_EXEC_MAX_INPUT_ATTRIBS + slot;
- debug_printf("\t%d)(%d) Input vert:\n", vidx, k);
+ /*debug_printf("\t%d)(%d) Input vert:\n", vidx, k);*/
#if 1
assert(!util_is_inf_or_nan(input[vs_slot][0]));
assert(!util_is_inf_or_nan(input[vs_slot][1]));
void draw_geometry_shader_run(struct draw_geometry_shader *shader,
const float (*input)[4],
float (*output)[4],
- const float (*constants)[4],
+ const void *constants[PIPE_MAX_CONSTANT_BUFFERS],
unsigned count,
unsigned input_stride,
unsigned vertex_size)
unsigned num_primitives = count/num_vertices;
unsigned inputs_from_vs = 0;
- machine->Consts = constants;
+ for (i = 0; i < PIPE_MAX_CONSTANT_BUFFERS; i++) {
+ machine->Consts[i] = constants[i];
+ }
for (i = 0; i < shader->info.num_inputs; ++i) {
- if (shader->info.input_semantic_name[i] != TGSI_SEMANTIC_VERTICES &&
- shader->info.input_semantic_name[i] != TGSI_SEMANTIC_PRIMID)
+ if (shader->info.input_semantic_name[i] != TGSI_SEMANTIC_PRIMID)
++inputs_from_vs;
}
void draw_geometry_shader_prepare(struct draw_geometry_shader *shader,
struct draw_context *draw)
{
- if (shader->machine->Tokens != shader->state.tokens) {
- tgsi_exec_machine_bind_shader(shader->machine,
- shader->state.tokens,
- draw->gs.num_samplers,
- draw->gs.samplers);
- }
+ 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);
+ }
}