From aab6f8f9485e73eb4098e7c4b497da5c30f1cf06 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Mon, 10 Dec 2007 16:47:47 +1100 Subject: [PATCH] nv40: more flexible vbo format translation --- src/mesa/pipe/nv40/nv40_vbo.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/mesa/pipe/nv40/nv40_vbo.c b/src/mesa/pipe/nv40/nv40_vbo.c index 8491f2a..b911ba5 100644 --- a/src/mesa/pipe/nv40/nv40_vbo.c +++ b/src/mesa/pipe/nv40/nv40_vbo.c @@ -158,16 +158,28 @@ nv40_draw_elements(struct pipe_context *pipe, } static INLINE int -nv40_vbo_format_to_ncomp(uint format) +nv40_vbo_ncomp(uint format) { - switch (format) { - case PIPE_FORMAT_R32G32B32A32_FLOAT: return 4; - case PIPE_FORMAT_R32G32B32_FLOAT: return 3; - case PIPE_FORMAT_R32G32_FLOAT: return 2; - case PIPE_FORMAT_R32_FLOAT: return 1; + int ncomp = 0; + + if (pf_size_x(format)) ncomp++; + if (pf_size_y(format)) ncomp++; + if (pf_size_z(format)) ncomp++; + if (pf_size_w(format)) ncomp++; + + return ncomp; +} + +static INLINE int +nv40_vbo_type(uint format) +{ + switch (pf_type(format)) { + case PIPE_FORMAT_TYPE_FLOAT: + return NV40TCL_VTXFMT_TYPE_FLOAT; + case PIPE_FORMAT_TYPE_UNORM: + return NV40TCL_VTXFMT_TYPE_UBYTE; default: - NOUVEAU_ERR("AII, unknown vbo format %d\n", format); - return 1; + assert(0); } } @@ -207,9 +219,9 @@ nv40_vbo_arrays_update(struct nv40_context *nv40) NOUVEAU_BO_OR | NOUVEAU_BO_RD, 0, NV40TCL_VTXBUF_ADDRESS_DMA1); vtxfmt[hw] = ((vb->pitch << NV40TCL_VTXFMT_STRIDE_SHIFT) | - (nv40_vbo_format_to_ncomp(ve->src_format) << + (nv40_vbo_ncomp(ve->src_format) << NV40TCL_VTXFMT_SIZE_SHIFT) | - NV40TCL_VTXFMT_TYPE_FLOAT); + nv40_vbo_type(ve->src_format)); } BEGIN_RING(curie, 0x1710, 1); -- 2.7.4