Lines Matching refs:shader

164 draw_geometry_fetch_outputs(struct draw_geometry_shader *shader,
168 struct tgsi_exec_machine *machine = shader->machine;
179 shader->primitive_lengths[prim_idx + shader->emitted_primitives] =
181 shader->emitted_vertices += num_verts_per_prim;
184 shader->info.num_outputs;
186 debug_printf("%d) Output vert:\n", idx / shader->info.num_outputs);
188 for (slot = 0; slot < shader->info.num_outputs; slot++) {
202 output = (float (*)[4])((char *)output + shader->vertex_size);
206 shader->emitted_primitives += num_primitives;
210 static void draw_fetch_gs_input(struct draw_geometry_shader *shader,
215 struct tgsi_exec_machine *machine = shader->machine;
217 unsigned input_vertex_stride = shader->input_vertex_stride;
220 input_ptr = shader->input;
230 for (slot = 0, vs_slot = 0; slot < shader->info.num_inputs; ++slot) {
232 if (shader->info.input_semantic_name[slot] == TGSI_SEMANTIC_PRIMID) {
234 (float)shader->in_prim_idx;
236 (float)shader->in_prim_idx;
238 (float)shader->in_prim_idx;
240 (float)shader->in_prim_idx;
269 static void gs_flush(struct draw_geometry_shader *shader,
273 struct tgsi_exec_machine *machine = shader->machine;
292 shader->emitted_primitives, shader->emitted_vertices,
295 draw_geometry_fetch_outputs(shader, out_prim_count,
296 &shader->tmp_output);
299 static void gs_point(struct draw_geometry_shader *shader,
306 draw_fetch_gs_input(shader, indices, 1, 0);
307 ++shader->in_prim_idx;
309 gs_flush(shader, 1);
312 static void gs_line(struct draw_geometry_shader *shader,
320 draw_fetch_gs_input(shader, indices, 2, 0);
321 ++shader->in_prim_idx;
323 gs_flush(shader, 1);
326 static void gs_line_adj(struct draw_geometry_shader *shader,
336 draw_fetch_gs_input(shader, indices, 4, 0);
337 ++shader->in_prim_idx;
339 gs_flush(shader, 1);
342 static void gs_tri(struct draw_geometry_shader *shader,
351 draw_fetch_gs_input(shader, indices, 3, 0);
352 ++shader->in_prim_idx;
354 gs_flush(shader, 1);
357 static void gs_tri_adj(struct draw_geometry_shader *shader,
370 draw_fetch_gs_input(shader, indices, 6, 0);
371 ++shader->in_prim_idx;
373 gs_flush(shader, 1);
388 * Execute geometry shader using TGSI interpreter.
390 int draw_geometry_shader_run(struct draw_geometry_shader *shader,
401 struct tgsi_exec_machine *machine = shader->machine;
407 u_gs_prims_for_vertices(shader->input_primitive, num_input_verts));
408 unsigned max_out_prims = u_gs_prims_for_vertices(shader->output_primitive,
409 shader->max_output_vertices)
417 shader->max_output_vertices);
425 debug_printf("\tprimt pipe = %d, shader in = %d, shader out = %d, max out = %d\n",
426 input_prim->prim, shader->input_primitive,
427 shader->output_primitive,
428 shader->max_output_vertices);
431 shader->emitted_vertices = 0;
432 shader->emitted_primitives = 0;
433 shader->vertex_size = vertex_size;
434 shader->tmp_output = (float (*)[4])output_verts->verts->data;
435 shader->in_prim_idx = 0;
436 shader->input_vertex_stride = input_stride;
437 shader->input = input;
438 if (shader->primitive_lengths) {
439 FREE(shader->primitive_lengths);
441 shader->primitive_lengths = MALLOC(max_out_prims * sizeof(unsigned));
447 gs_run(shader, input_prim, input_verts,
450 gs_run_elts(shader, input_prim, input_verts,
458 output_prims->count = shader->emitted_vertices;
459 output_prims->prim = shader->output_primitive;
461 output_prims->primitive_lengths = shader->primitive_lengths;
462 output_prims->primitive_count = shader->emitted_primitives;
463 output_verts->count = shader->emitted_vertices;
471 return shader->emitted_vertices;
474 void draw_geometry_shader_delete(struct draw_geometry_shader *shader)
476 FREE((void*) shader->state.tokens);
477 FREE(shader);
480 void draw_geometry_shader_prepare(struct draw_geometry_shader *shader,
483 if (shader && shader->machine->Tokens != shader->state.tokens) {
484 tgsi_exec_machine_bind_shader(shader->machine,
485 shader->state.tokens,