static void gs_flush(struct draw_geometry_shader *shader, unsigned input_primitives) { unsigned out_prim_count; struct tgsi_exec_machine *machine = shader->machine; debug_assert(input_primitives > 0 && input_primitives < 4); tgsi_set_exec_mask(machine, 1, input_primitives > 1, input_primitives > 2, input_primitives > 3); /* run interpreter */ tgsi_exec_machine_run(machine); out_prim_count = machine->Temps[TGSI_EXEC_TEMP_PRIMITIVE_I].xyzw[TGSI_EXEC_TEMP_PRIMITIVE_C].u[0]; #if 0 debug_printf("PRIM emitted prims = %d (verts=%d), cur prim count = %d\n", shader->emitted_primitives, shader->emitted_vertices, out_prim_count); #endif draw_geometry_fetch_outputs(shader, out_prim_count, &shader->tmp_output); }
static unsigned tgsi_gs_run(struct draw_geometry_shader *shader, unsigned input_primitives) { struct tgsi_exec_machine *machine = shader->machine; tgsi_set_exec_mask(machine, 1, input_primitives > 1, input_primitives > 2, input_primitives > 3); /* run interpreter */ tgsi_exec_machine_run(machine); return machine->Temps[TGSI_EXEC_TEMP_PRIMITIVE_I].xyzw[TGSI_EXEC_TEMP_PRIMITIVE_C].u[0]; }