X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fauxiliary%2Fdraw%2Fdraw_pt_vcache_tmp.h;h=7cba8547f1583df966d4a6fde68d38882c8f4cbc;hb=dff50ff592da7cb1d784fae794dd1647a5445bca;hp=ec05bbeab40289761aee78533111d4f65e1a61de;hpb=608e14c5b265d331f89959b8e477796ac21c297c;p=mesa.git diff --git a/src/gallium/auxiliary/draw/draw_pt_vcache_tmp.h b/src/gallium/auxiliary/draw/draw_pt_vcache_tmp.h index ec05bbeab40..7cba8547f15 100644 --- a/src/gallium/auxiliary/draw/draw_pt_vcache_tmp.h +++ b/src/gallium/auxiliary/draw/draw_pt_vcache_tmp.h @@ -122,7 +122,7 @@ static void FUNC( struct draw_pt_front_end *frontend, get_elt(elts, i + 0), get_elt(elts, i + 1), get_elt(elts, i + 2), - get_elt(elts, i + 3)); + get_elt(elts, i + 3) ); } break; @@ -132,7 +132,7 @@ static void FUNC( struct draw_pt_front_end *frontend, get_elt(elts, i + 2), get_elt(elts, i + 0), get_elt(elts, i + 1), - get_elt(elts, i + 3)); + get_elt(elts, i + 3) ); } break; @@ -144,19 +144,38 @@ static void FUNC( struct draw_pt_front_end *frontend, const ushort edge_first = DRAW_PIPE_EDGE_FLAG_2; const ushort edge_middle = DRAW_PIPE_EDGE_FLAG_0; const ushort edge_last = DRAW_PIPE_EDGE_FLAG_1; + ushort edge_next, edge_finish; - flags = DRAW_PIPE_RESET_STIPPLE | edge_first | edge_middle; + if (flatfirst) { + flags = DRAW_PIPE_RESET_STIPPLE | edge_middle | edge_last; + edge_next = edge_last; + edge_finish = edge_first; + } + else { + flags = DRAW_PIPE_RESET_STIPPLE | edge_first | edge_middle; + edge_next = edge_middle; + edge_finish = edge_last; + } - for (i = 0; i+2 < count; i++, flags = edge_middle) { + for (i = 0; i+2 < count; i++, flags = edge_next) { if (i + 3 == count) - flags |= edge_last; + flags |= edge_finish; - TRIANGLE( vcache, - flags, - get_elt(elts, i + 1), - get_elt(elts, i + 2), - get_elt(elts, 0)); + if (flatfirst) { + TRIANGLE( vcache, + flags, + get_elt(elts, 0), + get_elt(elts, i + 1), + get_elt(elts, i + 2) ); + } + else { + TRIANGLE( vcache, + flags, + get_elt(elts, i + 1), + get_elt(elts, i + 2), + get_elt(elts, 0)); + } } } break;