mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 16:40:13 +01:00
gallium: optimizations to flatshade, two-side prim stages
This commit is contained in:
parent
48355538a6
commit
a148cc51fb
2 changed files with 36 additions and 23 deletions
|
|
@ -70,18 +70,31 @@ static void flatshade_begin( struct draw_stage *stage )
|
|||
|
||||
|
||||
/** Copy all the color attributes from 'src' vertex to 'dst' vertex */
|
||||
static INLINE void copy_colors( struct draw_stage *stage,
|
||||
struct vertex_header *dst,
|
||||
static INLINE void copy_colors( struct draw_stage *stage,
|
||||
struct vertex_header *dst,
|
||||
const struct vertex_header *src )
|
||||
{
|
||||
const struct flat_stage *flat = flat_stage(stage);
|
||||
uint i;
|
||||
|
||||
/* Look for constant/flat attribs and duplicate from src to dst vertex */
|
||||
/* skip attrib[0] which is vert pos */
|
||||
for (i = 0; i < flat->num_color_attribs; i++) {
|
||||
const uint attr = flat->color_attribs[i];
|
||||
memcpy(dst->data[attr], src->data[attr], sizeof(src->data[0]));
|
||||
COPY_4FV(dst->data[attr], src->data[attr]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** Copy all the color attributes from src vertex to dst0 & dst1 vertices */
|
||||
static INLINE void copy_colors2( struct draw_stage *stage,
|
||||
struct vertex_header *dst0,
|
||||
struct vertex_header *dst1,
|
||||
const struct vertex_header *src )
|
||||
{
|
||||
const struct flat_stage *flat = flat_stage(stage);
|
||||
uint i;
|
||||
for (i = 0; i < flat->num_color_attribs; i++) {
|
||||
const uint attr = flat->color_attribs[i];
|
||||
COPY_4FV(dst0->data[attr], src->data[attr]);
|
||||
COPY_4FV(dst1->data[attr], src->data[attr]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -101,8 +114,7 @@ static void flatshade_tri( struct draw_stage *stage,
|
|||
tmp.v[1] = dup_vert(stage, header->v[1], 1);
|
||||
tmp.v[2] = header->v[2];
|
||||
|
||||
copy_colors(stage, tmp.v[0], tmp.v[2]);
|
||||
copy_colors(stage, tmp.v[1], tmp.v[2]);
|
||||
copy_colors2(stage, tmp.v[0], tmp.v[1], tmp.v[2]);
|
||||
|
||||
stage->next->tri( stage->next, &tmp );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,6 +75,12 @@ static void twoside_begin( struct draw_stage *stage )
|
|||
}
|
||||
}
|
||||
|
||||
if (!twoside->attrib_back0)
|
||||
twoside->attrib_front0 = 0;
|
||||
|
||||
if (!twoside->attrib_back1)
|
||||
twoside->attrib_front1 = 0;
|
||||
|
||||
/*
|
||||
* We'll multiply the primitive's determinant by this sign to determine
|
||||
* if the triangle is back-facing (negative).
|
||||
|
|
@ -86,28 +92,23 @@ static void twoside_begin( struct draw_stage *stage )
|
|||
}
|
||||
|
||||
|
||||
static INLINE void copy_attrib( unsigned attr_dst,
|
||||
unsigned attr_src,
|
||||
struct vertex_header *v )
|
||||
{
|
||||
COPY_4FV(v->data[attr_dst], v->data[attr_src]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Copy back color(s) to front color(s).
|
||||
*/
|
||||
static struct vertex_header *copy_bfc( struct twoside_stage *twoside,
|
||||
const struct vertex_header *v,
|
||||
unsigned idx )
|
||||
static INLINE struct vertex_header *
|
||||
copy_bfc( struct twoside_stage *twoside,
|
||||
const struct vertex_header *v,
|
||||
unsigned idx )
|
||||
{
|
||||
struct vertex_header *tmp = dup_vert( &twoside->stage, v, idx );
|
||||
|
||||
if (twoside->attrib_front0 && twoside->attrib_back0) {
|
||||
copy_attrib(twoside->attrib_front0, twoside->attrib_back0, tmp);
|
||||
if (twoside->attrib_back0) {
|
||||
COPY_4FV(tmp->data[twoside->attrib_front0],
|
||||
tmp->data[twoside->attrib_back0]);
|
||||
}
|
||||
if (twoside->attrib_front1 && twoside->attrib_back1) {
|
||||
copy_attrib(twoside->attrib_front1, twoside->attrib_back1, tmp);
|
||||
if (twoside->attrib_back1) {
|
||||
COPY_4FV(tmp->data[twoside->attrib_front1],
|
||||
tmp->data[twoside->attrib_back1]);
|
||||
}
|
||||
|
||||
return tmp;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue