nv10: vertex attribute output format
authorPatrice Mandin <pmandin@freedesktop.org>
Fri, 8 Sep 2006 23:18:27 +0000 (23:18 +0000)
committerPatrice Mandin <pmandin@freedesktop.org>
Fri, 8 Sep 2006 23:18:27 +0000 (23:18 +0000)
src/mesa/drivers/dri/nouveau/nouveau_reg.h
src/mesa/drivers/dri/nouveau/nv10_swtcl.c

index 5f4b0624ad358ed9a01998edb7434702cc03e942..583a2b82cb8fd4b3f272a06915a51949c1291231 100644 (file)
@@ -65,6 +65,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define NV20_VERTEX_ATTRIBUTE_TYPE_MASK                    0x0000000f
 #define NV20_VERTEX_ATTRIBUTE_TYPE_FLOAT                   0x00000002
 #define NV20_VERTEX_ATTRIBUTE_SIZE_MASK                    0x000000f0
+#define NV10_VERTEX_ATTRIBUTE(i)                           (0x00000d04+i*8)
+#define NV10_VERTEX_SET_FORMAT                             0x00000cf0
 
 /* Rendering commands */
 #define NV10_PRIMITIVE                                     0x00000dfc
index 35135fc706e036af0be0a8c7e2207cca7327a537..55507b277b9b7c46ec169d7f03d8fca57c2d9fbb 100644 (file)
@@ -670,7 +670,28 @@ static inline void nv10OutputVertexFormat(struct nouveau_context* nmesa, GLuint
         * Tell the hardware about the vertex format
         */
        if (nmesa->screen->card_type==NV_10) {
-               // XXX needs some love
+               int size;
+
+#define NV10_SET_VERTEX_ATTRIB(i,j,k) \
+       do {    \
+               size = attr_size[j] << 4;       \
+               size |= (attr_size[j]*4) << 8;  \
+               size |= NV20_VERTEX_ATTRIBUTE_TYPE_FLOAT;       \
+               BEGIN_RING_SIZE(channel, NV10_VERTEX_ATTRIBUTE(i),1);   \
+               OUT_RING(size); \
+       } while (0)
+
+               NV10_SET_VERTEX_ATTRIB(0, _TNL_ATTRIB_POS);
+               NV10_SET_VERTEX_ATTRIB(1, _TNL_ATTRIB_COLOR0);
+               NV10_SET_VERTEX_ATTRIB(2, _TNL_ATTRIB_COLOR1);
+               NV10_SET_VERTEX_ATTRIB(3, _TNL_ATTRIB_TX0);
+               NV10_SET_VERTEX_ATTRIB(4, _TNL_ATTRIB_TX1);
+               NV10_SET_VERTEX_ATTRIB(5, _TNL_ATTRIB_NORMAL);
+               NV10_SET_VERTEX_ATTRIB(6, _TNL_ATTRIB_WEIGHT);
+               NV10_SET_VERTEX_ATTRIB(7, _TNL_ATTRIB_FOG);
+
+               BEGIN_RING_SIZE(channel, NV10_VERTEX_SET_FORMAT);
+               OUT_RING(0);
        } else if (nmesa->screen->card_type==NV_20) {
                for(i=0;i<16;i++)
                {