X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fpipe%2Fdraw%2Fdraw_vertex.c;h=2d6592150fc3ca79593391ee384980f95fb7c267;hb=1e0d30a515e4cac891b6c590f12a33e0e8a8e295;hp=1204a944dea69da88d31952f7431ab6348436df2;hpb=66ea4b7c7c6c61cfacb3640cfc264cae575062cd;p=mesa.git diff --git a/src/mesa/pipe/draw/draw_vertex.c b/src/mesa/pipe/draw/draw_vertex.c index 1204a944dea..2d6592150fc 100644 --- a/src/mesa/pipe/draw/draw_vertex.c +++ b/src/mesa/pipe/draw/draw_vertex.c @@ -34,25 +34,10 @@ */ -#include "pipe/p_defines.h" -#include "pipe/p_util.h" - #include "pipe/draw/draw_private.h" -#include "pipe/draw/draw_context.h" #include "pipe/draw/draw_vertex.h" -static INLINE void -emit_vertex_attr(struct vertex_info *vinfo, - attrib_format format, interp_mode interp) -{ - const uint n = vinfo->num_attribs; - vinfo->interp_mode[n] = interp; - vinfo->format[n] = format; - vinfo->num_attribs++; -} - - /** * Compute the size of a vertex, in dwords/floats, to update the * vinfo->size field. @@ -64,97 +49,31 @@ draw_compute_vertex_size(struct vertex_info *vinfo) vinfo->size = 0; for (i = 0; i < vinfo->num_attribs; i++) { - switch (vinfo->format[i]) { - case FORMAT_OMIT: + switch (vinfo->emit[i]) { + case EMIT_OMIT: break; - case FORMAT_4UB: + case EMIT_4UB: + /* fall-through */ + case EMIT_1F_PSIZE: /* fall-through */ - case FORMAT_1F: + case EMIT_1F: vinfo->size += 1; break; - case FORMAT_2F: + case EMIT_2F: vinfo->size += 2; break; - case FORMAT_3F: + case EMIT_3F: vinfo->size += 3; break; - case FORMAT_4F: - case FORMAT_4F_VIEWPORT: + case EMIT_4F: vinfo->size += 4; break; + case EMIT_ALL: + /* fall-through */ default: assert(0); } } -} - - -/** - * Tell the drawing module about the layout of post-transformation vertices - */ -void -draw_set_vertex_attributes( struct draw_context *draw, - const uint *slot_to_vf_attr, - const interp_mode *interps, - unsigned nr_attrs ) -{ - struct vertex_info *vinfo = &draw->vertex_info; - unsigned i; - -#if 0 - assert(slot_to_vf_attr[0] == TGSI_ATTRIB_POS); -#endif - memset(vinfo, 0, sizeof(*vinfo)); - - /* - * First three attribs are always the same: header, clip pos, winpos - */ - emit_vertex_attr(vinfo, FORMAT_1F, INTERP_NONE); - emit_vertex_attr(vinfo, FORMAT_4F, INTERP_LINEAR); - emit_vertex_attr(vinfo, FORMAT_4F_VIEWPORT, INTERP_LINEAR); - - /* - * Remaining attribs (color, texcoords, etc) - */ - for (i = 1; i < nr_attrs; i++) { - emit_vertex_attr(vinfo, FORMAT_4F, interps[i]); - } - - draw_compute_vertex_size(vinfo); -} - - -/** - * This function is used to tell the draw module about attributes - * (like colors) that need to be selected based on front/back face - * orientation. - * - * The logic is: - * if (polygon is back-facing) { - * vertex->attrib[front0] = vertex->attrib[back0]; - * vertex->attrib[front1] = vertex->attrib[back1]; - * } - * - * \param front0 first attrib to replace if the polygon is back-facing - * \param back0 first attrib to copy if the polygon is back-facing - * \param front1 second attrib to replace if the polygon is back-facing - * \param back1 second attrib to copy if the polygon is back-facing - * - * Pass -1 to disable two-sided attributes. - */ -void -draw_set_twoside_attributes(struct draw_context *draw, - uint front0, uint back0, - uint front1, uint back1) -{ - /* XXX we could alternately pass an array of front/back attribs if there's - * ever need for more than two. One could imagine a shader extension - * that allows arbitrary attributes to be selected based on polygon - * orientation... - */ - draw->attrib_front0 = front0; - draw->attrib_back0 = back0; - draw->attrib_front1 = front1; - draw->attrib_back1 = back1; + assert(vinfo->size * 4 <= MAX_VERTEX_SIZE); }