swrast: use swrast_renderbuffer instead of gl_renderbuffer
authorBrian Paul <brianp@vmware.com>
Mon, 16 Jan 2012 20:02:19 +0000 (13:02 -0700)
committerBrian Paul <brianp@vmware.com>
Tue, 24 Jan 2012 21:12:32 +0000 (14:12 -0700)
src/mesa/swrast/s_context.h
src/mesa/swrast/s_copypix.c
src/mesa/swrast/s_depth.c
src/mesa/swrast/s_drawpix.c
src/mesa/swrast/s_renderbuffer.c
src/mesa/swrast/s_span.c
src/mesa/swrast/s_stencil.c
src/mesa/swrast/s_texrender.c
src/mesa/swrast/s_texture.c

index f03f048..2fb61ea 100644 (file)
@@ -453,8 +453,9 @@ _swrast_unmap_renderbuffers(struct gl_context *ctx);
 static inline GLubyte *
 _swrast_pixel_address(struct gl_renderbuffer *rb, GLint x, GLint y)
 {
+   struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
    const GLint bpp = _mesa_get_format_bytes(rb->Format);
-   const GLint rowStride = rb->RowStrideBytes;
+   const GLint rowStride = srb->RowStride;
    assert(x >= 0);
    assert(y >= 0);
    /* NOTE: using <= only because of s_tritemp.h which gets a pixel
@@ -462,8 +463,8 @@ _swrast_pixel_address(struct gl_renderbuffer *rb, GLint x, GLint y)
     */
    assert(x <= (GLint) rb->Width);
    assert(y <= (GLint) rb->Height);
-   assert(rb->Map);
-   return (GLubyte *) rb->Map + y * rowStride + x * bpp;
+   assert(srb->Map);
+   return (GLubyte *) srb->Map + y * rowStride + x * bpp;
 }
 
 
index 91541d2..592d35a 100644 (file)
@@ -567,6 +567,7 @@ map_readbuffer(struct gl_context *ctx, GLenum type)
 {
    struct gl_framebuffer *fb = ctx->ReadBuffer;
    struct gl_renderbuffer *rb;
+   struct swrast_renderbuffer *srb;
 
    switch (type) {
    case GL_COLOR:
@@ -583,7 +584,9 @@ map_readbuffer(struct gl_context *ctx, GLenum type)
       return NULL;
    }
 
-   if (!rb || rb->Map) {
+   srb = swrast_renderbuffer(rb);
+
+   if (!srb || srb->Map) {
       /* no buffer, or buffer is mapped already, we're done */
       return NULL;
    }
@@ -591,7 +594,7 @@ map_readbuffer(struct gl_context *ctx, GLenum type)
    ctx->Driver.MapRenderbuffer(ctx, rb,
                                0, 0, rb->Width, rb->Height,
                                GL_MAP_READ_BIT,
-                               &rb->Map, &rb->RowStrideBytes);
+                               &srb->Map, &srb->RowStride);
 
    return rb;
 }
@@ -650,7 +653,8 @@ _swrast_CopyPixels( struct gl_context *ctx,
    swrast_render_finish(ctx);
 
    if (rb) {
+      struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
       ctx->Driver.UnmapRenderbuffer(ctx, rb);
-      rb->Map = NULL;
+      srb->Map = NULL;
    }
 }
index 0788644..1336407 100644 (file)
@@ -212,12 +212,13 @@ get_z32_values(struct gl_context *ctx, struct gl_renderbuffer *rb,
                GLuint count, const GLint x[], const GLint y[],
                GLuint zbuffer[])
 {
+   struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
    const GLint w = rb->Width, h = rb->Height;
    const GLubyte *map = _swrast_pixel_address(rb, 0, 0);
    GLuint i;
 
    if (rb->Format == MESA_FORMAT_Z32) {
-      const GLint rowStride = rb->RowStrideBytes;
+      const GLint rowStride = srb->RowStride;
       for (i = 0; i < count; i++) {
          if (x[i] >= 0 && y[i] >= 0 && x[i] < w && y[i] < h) {
             zbuffer[i] = *((GLuint *) (map + y[i] * rowStride + x[i] * 4));
@@ -226,7 +227,7 @@ get_z32_values(struct gl_context *ctx, struct gl_renderbuffer *rb,
    }
    else {
       const GLint bpp = _mesa_get_format_bytes(rb->Format);
-      const GLint rowStride = rb->RowStrideBytes;
+      const GLint rowStride = srb->RowStride;
       for (i = 0; i < count; i++) {
          if (x[i] >= 0 && y[i] >= 0 && x[i] < w && y[i] < h) {
             const GLubyte *src = map + y[i] * rowStride+ x[i] * bpp;
@@ -246,12 +247,13 @@ put_z32_values(struct gl_context *ctx, struct gl_renderbuffer *rb,
                GLuint count, const GLint x[], const GLint y[],
                const GLuint zvalues[], const GLubyte mask[])
 {
+   struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
    const GLint w = rb->Width, h = rb->Height;
    GLubyte *map = _swrast_pixel_address(rb, 0, 0);
    GLuint i;
 
    if (rb->Format == MESA_FORMAT_Z32) {
-      const GLuint rowStride = rb->RowStrideBytes;
+      const GLuint rowStride = srb->RowStride;
       for (i = 0; i < count; i++) {
          if (mask[i] && x[i] >= 0 && y[i] >= 0 && x[i] < w && y[i] < h) {
             GLuint *dst = (GLuint *) (map + y[i] * rowStride + x[i] * 4);
@@ -262,7 +264,7 @@ put_z32_values(struct gl_context *ctx, struct gl_renderbuffer *rb,
    else {
       gl_pack_uint_z_func packZ = _mesa_get_pack_uint_z_func(rb->Format);
       const GLint bpp = _mesa_get_format_bytes(rb->Format);
-      const GLint rowStride = rb->RowStrideBytes;
+      const GLint rowStride = srb->RowStride;
       for (i = 0; i < count; i++) {
          if (mask[i] && x[i] >= 0 && y[i] >= 0 && x[i] < w && y[i] < h) {
             void *dst = map + y[i] * rowStride + x[i] * bpp;
index 5050ad9..c5466dd 100644 (file)
@@ -513,6 +513,7 @@ fast_draw_depth_stencil(struct gl_context *ctx, GLint x, GLint y,
    const GLenum type = GL_UNSIGNED_INT_24_8;
    struct gl_renderbuffer *rb =
       ctx->DrawBuffer->Attachment[BUFFER_DEPTH].Renderbuffer;
+   struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
    GLubyte *src, *dst;
    GLint srcRowStride, dstRowStride;
    GLint i;
@@ -522,7 +523,7 @@ fast_draw_depth_stencil(struct gl_context *ctx, GLint x, GLint y,
    srcRowStride = _mesa_image_row_stride(unpack, width, format, type);
 
    dst = _swrast_pixel_address(rb, x, y);
-   dstRowStride = rb->RowStrideBytes;
+   dstRowStride = srb->RowStride;
 
    for (i = 0; i < height; i++) {
       _mesa_pack_uint_24_8_depth_stencil_row(rb->Format, width,
index af02b02..f0dbb01 100644 (file)
@@ -37,6 +37,7 @@
 #include "main/formats.h"
 #include "main/mtypes.h"
 #include "main/renderbuffer.h"
+#include "swrast/s_context.h"
 #include "swrast/s_renderbuffer.h"
 
 
@@ -56,6 +57,8 @@ soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
                           GLenum internalFormat,
                           GLuint width, GLuint height)
 {
+   struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
+
    switch (internalFormat) {
    case GL_RGB:
    case GL_R3_G3_B2:
@@ -113,18 +116,19 @@ soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
    }
 
    /* free old buffer storage */
-   if (rb->Buffer) {
-      free(rb->Buffer);
-      rb->Buffer = NULL;
+   if (srb->Buffer) {
+      free(srb->Buffer);
+      srb->Buffer = NULL;
    }
 
-   rb->RowStrideBytes = width * _mesa_get_format_bytes(rb->Format);
+   srb->RowStride = width * _mesa_get_format_bytes(rb->Format);
 
    if (width > 0 && height > 0) {
       /* allocate new buffer storage */
-      rb->Buffer = malloc(width * height * _mesa_get_format_bytes(rb->Format));
+      srb->Buffer = malloc(width * height
+                           * _mesa_get_format_bytes(rb->Format));
 
-      if (rb->Buffer == NULL) {
+      if (srb->Buffer == NULL) {
          rb->Width = 0;
          rb->Height = 0;
          _mesa_error(ctx, GL_OUT_OF_MEMORY,
@@ -162,11 +166,13 @@ soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
 static void
 soft_renderbuffer_delete(struct gl_renderbuffer *rb)
 {
-   if (rb->Buffer) {
-      free(rb->Buffer);
-      rb->Buffer = NULL;
+   struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
+
+   if (srb->Buffer) {
+      free(srb->Buffer);
+      srb->Buffer = NULL;
    }
-   free(rb);
+   free(srb);
 }
 
 
@@ -178,7 +184,8 @@ _swrast_map_soft_renderbuffer(struct gl_context *ctx,
                               GLubyte **out_map,
                               GLint *out_stride)
 {
-   GLubyte *map = rb->Buffer;
+   struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
+   GLubyte *map = srb->Buffer;
    int cpp = _mesa_get_format_bytes(rb->Format);
    int stride = rb->Width * cpp;
 
@@ -212,12 +219,13 @@ _swrast_unmap_soft_renderbuffer(struct gl_context *ctx,
 struct gl_renderbuffer *
 _swrast_new_soft_renderbuffer(struct gl_context *ctx, GLuint name)
 {
-   struct gl_renderbuffer *rb = _mesa_new_renderbuffer(ctx, name);
-   if (rb) {
-      rb->AllocStorage = soft_renderbuffer_storage;
-      rb->Delete = soft_renderbuffer_delete;
+   struct swrast_renderbuffer *srb = CALLOC_STRUCT(swrast_renderbuffer);
+   if (srb) {
+      _mesa_init_renderbuffer(&srb->Base, name);
+      srb->Base.AllocStorage = soft_renderbuffer_storage;
+      srb->Base.Delete = soft_renderbuffer_delete;
    }
-   return rb;
+   return &srb->Base;
 }
 
 
index fa63ade..8fbd322 100644 (file)
@@ -1414,6 +1414,7 @@ _swrast_read_rgba_span( struct gl_context *ctx, struct gl_renderbuffer *rb,
                         GLuint n, GLint x, GLint y,
                         GLvoid *rgba)
 {
+   struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
    GLenum dstType = GL_FLOAT;
    const GLint bufWidth = (GLint) rb->Width;
    const GLint bufHeight = (GLint) rb->Height;
@@ -1464,7 +1465,7 @@ _swrast_read_rgba_span( struct gl_context *ctx, struct gl_renderbuffer *rb,
             rb->_BaseFormat == GL_LUMINANCE_ALPHA ||
             rb->_BaseFormat == GL_ALPHA);
 
-      assert(rb->Map);
+      assert(srb->Map);
 
       src = _swrast_pixel_address(rb, x + skip, y);
 
index 9aa7ffc..bbfbf44 100644 (file)
@@ -292,12 +292,13 @@ get_s8_values(struct gl_context *ctx, struct gl_renderbuffer *rb,
               GLuint count, const GLint x[], const GLint y[],
               GLubyte stencil[])
 {
+   struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
    const GLint w = rb->Width, h = rb->Height;
    const GLubyte *map = _swrast_pixel_address(rb, 0, 0);
    GLuint i;
 
    if (rb->Format == MESA_FORMAT_S8) {
-      const GLint rowStride = rb->RowStrideBytes;
+      const GLint rowStride = srb->RowStride;
       for (i = 0; i < count; i++) {
          if (x[i] >= 0 && y[i] >= 0 && x[i] < w && y[i] < h) {
             stencil[i] = *(map + y[i] * rowStride + x[i]);
@@ -306,7 +307,7 @@ get_s8_values(struct gl_context *ctx, struct gl_renderbuffer *rb,
    }
    else {
       const GLint bpp = _mesa_get_format_bytes(rb->Format);
-      const GLint rowStride = rb->RowStrideBytes;
+      const GLint rowStride = srb->RowStride;
       for (i = 0; i < count; i++) {
          if (x[i] >= 0 && y[i] >= 0 && x[i] < w && y[i] < h) {
             const GLubyte *src = map + y[i] * rowStride + x[i] * bpp;
index 23a7388..140e4b5 100644 (file)
@@ -62,6 +62,7 @@ static void
 update_wrapper(struct gl_context *ctx, struct gl_renderbuffer_attachment *att)
 {
    struct gl_renderbuffer *rb = att->Renderbuffer;
+   struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
    struct swrast_texture_image *swImage;
    gl_format format;
    GLuint zOffset;
@@ -93,11 +94,11 @@ update_wrapper(struct gl_context *ctx, struct gl_renderbuffer_attachment *att)
      */
    if (att->Texture->Target == GL_TEXTURE_3D ||
        att->Texture->Target == GL_TEXTURE_2D_ARRAY_EXT) {
-      rb->Buffer = swImage->Buffer +
+      srb->Buffer = swImage->Buffer +
          swImage->ImageOffsets[zOffset] * _mesa_get_format_bytes(format);
    }
    else {
-      rb->Buffer = swImage->Buffer;
+      srb->Buffer = swImage->Buffer;
    }
 }
 
index 0453640..0a87b73 100644 (file)
@@ -322,6 +322,7 @@ map_attachment(struct gl_context *ctx,
 {
    struct gl_texture_object *texObj = fb->Attachment[buffer].Texture;
    struct gl_renderbuffer *rb = fb->Attachment[buffer].Renderbuffer;
+   struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
 
    if (texObj) {
       const GLuint level = fb->Attachment[buffer].TextureLevel;
@@ -333,20 +334,20 @@ map_attachment(struct gl_context *ctx,
 
          /* XXX we'll eventually call _swrast_map_teximage() here */
          swImage->Map = swImage->Buffer;
-         if (rb) {
-            rb->Map = swImage->Buffer;
-            rb->RowStrideBytes = swImage->RowStride *
+         if (srb) {
+            srb->Map = swImage->Buffer;
+            srb->RowStride = swImage->RowStride *
                _mesa_get_format_bytes(swImage->Base.TexFormat);
          }
       }
    }
    else if (rb) {
       /* Map ordinary renderbuffer */
-         ctx->Driver.MapRenderbuffer(ctx, rb,
-                                     0, 0, rb->Width, rb->Height,
-                                     GL_MAP_READ_BIT | GL_MAP_WRITE_BIT,
-                                     &rb->Map, &rb->RowStrideBytes);
-         assert(rb->Map);
+      ctx->Driver.MapRenderbuffer(ctx, rb,
+                                  0, 0, rb->Width, rb->Height,
+                                  GL_MAP_READ_BIT | GL_MAP_WRITE_BIT,
+                                  &srb->Map, &srb->RowStride);
+      assert(srb->Map);
    }
 }
  
@@ -358,6 +359,7 @@ unmap_attachment(struct gl_context *ctx,
 {
    struct gl_texture_object *texObj = fb->Attachment[buffer].Texture;
    struct gl_renderbuffer *rb = fb->Attachment[buffer].Renderbuffer;
+   struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
 
    if (texObj) {
       const GLuint level = fb->Attachment[buffer].TextureLevel;
@@ -373,7 +375,7 @@ unmap_attachment(struct gl_context *ctx,
       ctx->Driver.UnmapRenderbuffer(ctx, rb);
    }
 
-   rb->Map = NULL;
+   srb->Map = NULL;
 }