#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
* 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++)
{