summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/r300/r300_render.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers/dri/r300/r300_render.c')
-rw-r--r--src/mesa/drivers/dri/r300/r300_render.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_render.c b/src/mesa/drivers/dri/r300/r300_render.c
index 8799024745..1dac3142ee 100644
--- a/src/mesa/drivers/dri/r300/r300_render.c
+++ b/src/mesa/drivers/dri/r300/r300_render.c
@@ -270,6 +270,50 @@ static void r300RunRenderPrimitive(r300ContextPtr rmesa, GLcontext * ctx,
}
}
+#define CONV_VB(a, b) rvb->AttribPtr[(a)].size = vb->b->size, \
+ rvb->AttribPtr[(a)].type = GL_FLOAT, \
+ rvb->AttribPtr[(a)].stride = vb->b->stride, \
+ rvb->AttribPtr[(a)].data = vb->b->data
+
+static void radeon_vb_to_rvb(r300ContextPtr rmesa, struct radeon_vertex_buffer *rvb, struct vertex_buffer *vb)
+{
+ int i;
+ GLcontext *ctx;
+ ctx = rmesa->radeon.glCtx;
+
+ memset(rvb, 0, sizeof(*rvb));
+
+ rvb->Elts = vb->Elts;
+ rvb->elt_size = 4;
+ rvb->elt_min = 0;
+ rvb->elt_max = vb->Count;
+
+ rvb->Count = vb->Count;
+
+ if (hw_tcl_on) {
+ CONV_VB(VERT_ATTRIB_POS, ObjPtr);
+ } else {
+ assert(vb->ClipPtr);
+ CONV_VB(VERT_ATTRIB_POS, ClipPtr);
+ }
+
+ CONV_VB(VERT_ATTRIB_NORMAL, NormalPtr);
+ CONV_VB(VERT_ATTRIB_COLOR0, ColorPtr[0]);
+ CONV_VB(VERT_ATTRIB_COLOR1, SecondaryColorPtr[0]);
+ CONV_VB(VERT_ATTRIB_FOG, FogCoordPtr);
+
+ for (i=0; i < ctx->Const.MaxTextureCoordUnits; i++)
+ CONV_VB(VERT_ATTRIB_TEX0 + i, TexCoordPtr[i]);
+
+ for (i=0; i < MAX_VERTEX_PROGRAM_ATTRIBS; i++)
+ CONV_VB(VERT_ATTRIB_GENERIC0 + i, AttribPtr[VERT_ATTRIB_GENERIC0 + i]);
+
+ rvb->Primitive = vb->Primitive;
+ rvb->PrimitiveCount = vb->PrimitiveCount;
+ rvb->LockFirst = rvb->LockCount = 0;
+ rvb->lock_uptodate = GL_FALSE;
+}
+
GLboolean r300RunRender(GLcontext * ctx,
struct tnl_pipeline_stage *stage)
{