draw: Include draw_decompose_tmp.h in draw_so_emit_tmp.h.

Use draw_decompose_tmp.h to replace stream out primitive decomposer.
This commit is contained in:
Chia-I Wu
2010-08-02 01:38:58 +08:00
parent 23176779f8
commit 94d256591d
2 changed files with 35 additions and 135 deletions

View File

@@ -218,25 +218,15 @@ static void so_tri(struct pt_so_emit *so, int i0, int i1, int i2)
}
#define TRIANGLE(gs,i0,i1,i2) so_tri(so,i0,i1,i2)
#define LINE(gs,i0,i1) so_line(so,i0,i1)
#define POINT(gs,i0) so_point(so,i0)
#define FUNC so_run_linear
#define LOCAL_VARS
#define FUNC so_run_linear
#define GET_ELT(idx) (start + (idx))
#include "draw_so_emit_tmp.h"
#undef LOCAL_VARS
#undef FUNC
#define TRIANGLE(gs,i0,i1,i2) so_tri(gs,elts[i0],elts[i1],elts[i2])
#define LINE(gs,i0,i1) so_line(gs,elts[i0],elts[i1])
#define POINT(gs,i0) so_point(gs,elts[i0])
#define FUNC so_run_elts
#define LOCAL_VARS \
const ushort *elts = input_prims->elts;
#define FUNC so_run_elts
#define LOCAL_VARS const ushort *elts = input_prims->elts;
#define GET_ELT(idx) (elts[start + (idx)])
#include "draw_so_emit_tmp.h"
#undef LOCAL_VARS
#undef FUNC
void draw_pt_so_emit( struct pt_so_emit *emit,

View File

@@ -1,123 +1,33 @@
#define FUNC_VARS \
struct pt_so_emit *so, \
const struct draw_prim_info *input_prims, \
const struct draw_vertex_info *input_verts, \
unsigned start, \
unsigned count
static void FUNC( struct pt_so_emit *so,
const struct draw_prim_info *input_prims,
const struct draw_vertex_info *input_verts,
unsigned start,
unsigned count)
{
struct draw_context *draw = so->draw;
#define FUNC_ENTER \
/* declare more local vars */ \
struct draw_context *draw = so->draw; \
const unsigned prim = input_prims->prim; \
const boolean last_vertex_last = \
!(draw->rasterizer->flatshade && \
draw->rasterizer->flatshade_first); \
do { \
debug_assert(input_prims->primitive_count == 1); \
switch (prim) { \
case PIPE_PRIM_LINES_ADJACENCY: \
case PIPE_PRIM_LINE_STRIP_ADJACENCY: \
case PIPE_PRIM_TRIANGLES_ADJACENCY: \
case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY: \
debug_assert(!"unexpected primitive type in stream output"); \
return; \
default: \
break; \
} \
} while (0) \
boolean flatfirst = (draw->rasterizer->flatshade &&
draw->rasterizer->flatshade_first);
unsigned i;
LOCAL_VARS
#define POINT(i0) so_point(so,i0)
#define LINE(flags,i0,i1) so_line(so,i0,i1)
#define TRIANGLE(flags,i0,i1,i2) so_tri(so,i0,i1,i2)
if (0) debug_printf("%s %d\n", __FUNCTION__, count);
debug_assert(input_prims->primitive_count == 1);
switch (input_prims->prim) {
case PIPE_PRIM_POINTS:
for (i = 0; i < count; i++) {
POINT( so, start + i + 0 );
}
break;
case PIPE_PRIM_LINES:
for (i = 0; i+1 < count; i += 2) {
LINE( so , start + i + 0 , start + i + 1 );
}
break;
case PIPE_PRIM_LINE_LOOP:
if (count >= 2) {
for (i = 1; i < count; i++) {
LINE( so, start + i - 1, start + i );
}
LINE( so, start + i - 1, start );
}
break;
case PIPE_PRIM_LINE_STRIP:
for (i = 1; i < count; i++) {
LINE( so, start + i - 1, start + i );
}
break;
case PIPE_PRIM_TRIANGLES:
for (i = 0; i+2 < count; i += 3) {
TRIANGLE( so, start + i + 0, start + i + 1, start + i + 2 );
}
break;
case PIPE_PRIM_TRIANGLE_STRIP:
if (flatfirst) {
for (i = 0; i+2 < count; i++) {
TRIANGLE( so,
start + i + 0,
start + i + 1 + (i&1),
start + i + 2 - (i&1) );
}
}
else {
for (i = 0; i+2 < count; i++) {
TRIANGLE( so,
start + i + 0 + (i&1),
start + i + 1 - (i&1),
start + i + 2 );
}
}
break;
case PIPE_PRIM_TRIANGLE_FAN:
if (count >= 3) {
if (flatfirst) {
for (i = 0; i+2 < count; i++) {
TRIANGLE( so,
start + i + 1,
start + i + 2,
start );
}
}
else {
for (i = 0; i+2 < count; i++) {
TRIANGLE( so,
start,
start + i + 1,
start + i + 2 );
}
}
}
break;
case PIPE_PRIM_POLYGON:
{
/* These bitflags look a little odd because we submit the
* vertices as (1,2,0) to satisfy flatshade requirements.
*/
for (i = 0; i+2 < count; i++) {
if (flatfirst) {
TRIANGLE( so, start + 0, start + i + 1, start + i + 2 );
}
else {
TRIANGLE( so, start + i + 1, start + i + 2, start + 0 );
}
}
}
break;
default:
debug_assert(!"Unsupported primitive in stream output");
break;
}
}
#undef TRIANGLE
#undef POINT
#undef LINE
#undef FUNC
#include "draw_decompose_tmp.h"