339
340
/* nvfx_push.c */
340
341
extern void nvfx_push_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info);
342
/* must WAIT_RING(chan, ncomp + 1) or equivalent beforehand! */
343
static inline void nvfx_emit_vtx_attr(struct nouveau_channel* chan, unsigned attrib, const float* v, unsigned ncomp)
343
static inline void nvfx_emit_vtx_attr(struct nouveau_channel* chan,
344
struct nouveau_grobj *eng3d, unsigned attrib, const float* v,
347
OUT_RING(chan, RING_3D(NV30_3D_VTX_ATTR_4F_X(attrib), 4));
349
BEGIN_RING(chan, eng3d, NV30_3D_VTX_ATTR_4F_X(attrib), 4);
348
350
OUT_RING(chan, fui(v[0]));
349
351
OUT_RING(chan, fui(v[1]));
350
352
OUT_RING(chan, fui(v[2]));
351
353
OUT_RING(chan, fui(v[3]));
354
OUT_RING(chan, RING_3D(NV30_3D_VTX_ATTR_3F_X(attrib), 3));
356
BEGIN_RING(chan, eng3d, NV30_3D_VTX_ATTR_3F_X(attrib), 3);
355
357
OUT_RING(chan, fui(v[0]));
356
358
OUT_RING(chan, fui(v[1]));
357
359
OUT_RING(chan, fui(v[2]));
360
OUT_RING(chan, RING_3D(NV30_3D_VTX_ATTR_2F_X(attrib), 2));
362
BEGIN_RING(chan, eng3d, NV30_3D_VTX_ATTR_2F_X(attrib), 2);
361
363
OUT_RING(chan, fui(v[0]));
362
364
OUT_RING(chan, fui(v[1]));
365
OUT_RING(chan, RING_3D(NV30_3D_VTX_ATTR_1F(attrib), 1));
367
BEGIN_RING(chan, eng3d, NV30_3D_VTX_ATTR_1F(attrib), 1);
366
368
OUT_RING(chan, fui(v[0]));