Drop GLcontext typedef and use struct gl_context instead
[mesa.git] / src / mesa / drivers / dri / r200 / r200_maos_arrays.c
index 7f7ae2ba7929633af8e2d3ae191bea285cf8a300..8a047e6419b38522ebcbdb3595ae1355490f1256 100644 (file)
@@ -50,110 +50,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "r200_maos.h"
 #include "r200_tcl.h"
 
-
-#if 0
-/* Usage:
- *   - from r200_tcl_render
- *   - call r200EmitArrays to ensure uptodate arrays in dma
- *   - emit primitives (new type?) which reference the data
- *       -- need to use elts for lineloop, quads, quadstrip/flat
- *       -- other primitives are all well-formed (need tristrip-1,fake-poly)
- *
- */
-static void emit_ubyte_rgba3( GLcontext *ctx,
-                      struct radeon_dma_region *rvb,
-                      char *data,
-                      int stride,
-                      int count )
-{
-   int i;
-   r200_color_t *out = (r200_color_t *)(rvb->start + rvb->address);
-
-   if (R200_DEBUG & DEBUG_VERTS)
-      fprintf(stderr, "%s count %d stride %d out %p\n",
-             __FUNCTION__, count, stride, (void *)out);
-
-   for (i = 0; i < count; i++) {
-      out->red   = *data;
-      out->green = *(data+1);
-      out->blue  = *(data+2);
-      out->alpha = 0xFF;
-      out++;
-      data += stride;
-   }
-}
-
-static void emit_ubyte_rgba4( GLcontext *ctx,
-                             struct radeon_dma_region *rvb,
-                             char *data,
-                             int stride,
-                             int count )
-{
-   int i;
-   int *out = (int *)(rvb->address + rvb->start);
-
-   if (R200_DEBUG & DEBUG_VERTS)
-      fprintf(stderr, "%s count %d stride %d\n",
-             __FUNCTION__, count, stride);
-
-   if (stride == 4) {
-      for (i = 0; i < count; i++)
-        ((int *)out)[i] = LE32_TO_CPU(((int *)data)[i]);
-   } else {
-      for (i = 0; i < count; i++) {
-        *(int *)out++ = LE32_TO_CPU(*(int *)data);
-        data += stride;
-      }
-   }
-}
-
-
-static void emit_ubyte_rgba( GLcontext *ctx,
-                            struct radeon_dma_region *rvb,
-                            char *data,
-                            int size,
-                            int stride,
-                            int count )
-{
-   r200ContextPtr rmesa = R200_CONTEXT(ctx);
-
-   if (R200_DEBUG & DEBUG_VERTS)
-      fprintf(stderr, "%s %d/%d\n", __FUNCTION__, count, size);
-
-   assert (!rvb->buf);
-
-   if (stride == 0) {
-     //       r200AllocDmaRegion( rmesa, rvb, 4, 4 );
-      count = 1;
-      rvb->aos_start = GET_START(rvb);
-      rvb->aos_stride = 0;
-      rvb->aos_size = 1;
-   }
-   else {
-     //      r200AllocDmaRegion( rmesa, rvb, 4 * count, 4 );   /* alignment? */
-      rvb->aos_start = GET_START(rvb);
-      rvb->aos_stride = 1;
-      rvb->aos_size = 1;
-   }
-
-   /* Emit the data
-    */
-   switch (size) {
-   case 3:
-      emit_ubyte_rgba3( ctx, rvb, data, stride, count );
-      break;
-   case 4:
-      emit_ubyte_rgba4( ctx, rvb, data, stride, count );
-      break;
-   default:
-      assert(0);
-      exit(1);
-      break;
-   }
-}
-#endif
-
-
 #if defined(USE_X86_ASM)
 #define COPY_DWORDS( dst, src, nr )                                    \
 do {                                                                   \
@@ -174,32 +70,28 @@ do {                                               \
 } while (0)
 #endif
 
-static void r200_emit_vecfog(GLcontext *ctx, struct radeon_aos *aos,
+static void r200_emit_vecfog(struct gl_context *ctx, struct radeon_aos *aos,
                             GLvoid *data, int stride, int count)
 {
        radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
-       uint32_t *out;
-       uint32_t bo_size;
+       GLfloat *out;
        int i;
        int size = 1;
 
-       memset(aos, 0, sizeof(struct radeon_aos));
        if (stride == 0) {
-               bo_size = size * 4;
+               radeonAllocDmaRegion(rmesa, &aos->bo, &aos->offset, size * 4, 32);
                count = 1;
                aos->stride = 0;
        } else {
-               bo_size = size * count * 4;
+               radeonAllocDmaRegion(rmesa, &aos->bo, &aos->offset, size * 4, 32);
                aos->stride = size;
        }
-       aos->bo = radeon_bo_open(rmesa->radeonScreen->bom,
-                                0, bo_size, 32, RADEON_GEM_DOMAIN_GTT, 0);
-       aos->offset = 0;
+
        aos->components = size;
        aos->count = count;
 
        radeon_bo_map(aos->bo, 1);
-       out = (uint32_t*)((char*)aos->bo->ptr + aos->offset);
+       out = (GLfloat*)((char*)aos->bo->ptr + aos->offset);
        for (i = 0; i < count; i++) {
          out[0] = r200ComputeFogBlendFactor( ctx, *(GLfloat *)data );
          out++;
@@ -208,22 +100,19 @@ static void r200_emit_vecfog(GLcontext *ctx, struct radeon_aos *aos,
        radeon_bo_unmap(aos->bo);
 }
 
-
-
 /* Emit any changed arrays to new GART memory, re-emit a packet to
  * update the arrays.  
  */
-void r200EmitArrays( GLcontext *ctx, GLubyte *vimap_rev )
+void r200EmitArrays( struct gl_context *ctx, GLubyte *vimap_rev )
 {
    r200ContextPtr rmesa = R200_CONTEXT( ctx );
    struct vertex_buffer *VB = &TNL_CONTEXT( ctx )->vb;
-   //   struct radeon_dma_region **component = rmesa->tcl.aos_components;
    GLuint nr = 0;
    GLuint vfmt0 = 0, vfmt1 = 0;
    GLuint count = VB->Count;
    GLuint i, emitsize;
 
-   fprintf(stderr,"emit arrays\n");
+   //   fprintf(stderr,"emit arrays\n");
    for ( i = 0; i < 15; i++ ) {
       GLubyte attrib = vimap_rev[i];
       if (attrib != 255) {
@@ -255,17 +144,17 @@ void r200EmitArrays( GLcontext *ctx, GLubyte *vimap_rev )
         case 3:
            /* special handling to fix up fog. Will get us into trouble with vbos...*/
            assert(attrib == VERT_ATTRIB_FOG);
-           if (!rmesa->tcl.vertex_data[i].buf) {
+           if (!rmesa->radeon.tcl.aos[i].bo) {
               if (ctx->VertexProgram._Enabled)
                  rcommon_emit_vector( ctx,
-                                      &(rmesa->tcl.aos[nr]),
+                                      &(rmesa->radeon.tcl.aos[nr]),
                                       (char *)VB->AttribPtr[attrib]->data,
                                       1,
                                       VB->AttribPtr[attrib]->stride,
                                       count);
               else
                 r200_emit_vecfog( ctx,
-                                  &(rmesa->tcl.aos[nr]),
+                                  &(rmesa->radeon.tcl.aos[nr]),
                                   (char *)VB->AttribPtr[attrib]->data,
                                   VB->AttribPtr[attrib]->stride,
                                   count);
@@ -312,9 +201,9 @@ void r200EmitArrays( GLcontext *ctx, GLubyte *vimap_rev )
         default:
            assert(0);
         }
-        if (!rmesa->tcl.vertex_data[i].buf) {
+        if (!rmesa->radeon.tcl.aos[nr].bo) {
           rcommon_emit_vector( ctx,
-                               &(rmesa->tcl.aos[nr]),
+                               &(rmesa->radeon.tcl.aos[nr]),
                                (char *)VB->AttribPtr[attrib]->data,
                                emitsize,
                                VB->AttribPtr[attrib]->stride,
@@ -323,7 +212,6 @@ void r200EmitArrays( GLcontext *ctx, GLubyte *vimap_rev )
 after_emit:
         assert(nr < 12);
         nr++;
-        //      component[nr++] = &rmesa->tcl.vertex_data[i];
       }
    }
 
@@ -334,17 +222,6 @@ after_emit:
       rmesa->hw.vtx.cmd[VTX_VTXFMT_1] = vfmt1;
    }
 
-   rmesa->tcl.nr_aos_components = nr;
+   rmesa->radeon.tcl.aos_count = nr;
 }
 
-
-void r200ReleaseArrays( GLcontext *ctx, GLuint newinputs )
-{
-   r200ContextPtr rmesa = R200_CONTEXT( ctx );
-   int i;
-   for (i = 0; i < rmesa->tcl.nr_aos_components; i++) {
-     if (rmesa->tcl.aos[i].bo) {
-       rmesa->tcl.aos[i].bo = radeon_bo_unref(rmesa->tcl.aos[i].bo);
-     }
-   }
-}