[haiku-commits] haiku: hrev43656 - src/add-ons/opengl/mesa_software_renderer

  • From: kallisti5@xxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 13 Jan 2012 00:54:52 +0100 (CET)

hrev43656 adds 3 changesets to branch 'master'
old head: 69001466e234f527d0cd7f27a80c9fcf1931cab3
new head: 58dbd25f6bcb8a60779cd3cca5ffa739d497e3a7

----------------------------------------------------------------------------

3df3057: mesa: Code cleanup and optimization
  
  * Rename _SetSpan to _SetupRenderBuffer to perform more general
    render buffer setup and consolidate code
  * Remove CMAP8 calls. Mesa no longer supports CMAP8. CMAP8 GL
    use cases are non-existent

0c99c75: mesa: Always check color space before deciding to reconfigure
  
  * Gives a slight performance boost
  * Variable name cleanup

58dbd25: mesa: Whitespace, style cleanup. No functional change

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

----------------------------------------------------------------------------

2 files changed, 66 insertions(+), 108 deletions(-)
.../MesaSoftwareRenderer.cpp                       |  170 ++++++----------
.../mesa_software_renderer/MesaSoftwareRenderer.h  |    4 +-

############################################################################

Commit:      3df3057e3c32a44561e2300c7f59ef2e822e91ba
URL:         http://cgit.haiku-os.org/haiku/commit/?id=3df3057
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Thu Jan 12 23:41:30 2012 UTC

mesa: Code cleanup and optimization

* Rename _SetSpan to _SetupRenderBuffer to perform more general
  render buffer setup and consolidate code
* Remove CMAP8 calls. Mesa no longer supports CMAP8. CMAP8 GL
  use cases are non-existent

----------------------------------------------------------------------------

diff --git a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp 
b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp
index f94b8f4..6a1c8fa 100644
--- a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp
+++ b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp
@@ -180,27 +180,6 @@ extern "C" {
        DST[BCOMP] = ((*SRC & 0x001f) << 3); \
        DST[ACOMP] = 0xff
 #include "swrast/s_spantemp.h"
-
-/* 8-bit CMAP */
-#define NAME(PREFIX) PREFIX##_CMAP8
-#define RB_TYPE GLubyte
-#define SPAN_VARS \
-       MesaSoftwareRenderer* mr = (MesaSoftwareRenderer*)ctx->DriverCtx; \
-       const color_map* colorMap = system_colors();
-#define INIT_PIXEL_PTR(P, X, Y) \
-       GLubyte* P = ((GLubyte**) mr->GetRows())[Y] + (X)
-#define INC_PIXEL_PTR(P) P += 1
-#define STORE_PIXEL(DST, X, Y, VALUE) \
-       *DST = colorMap->index_map[( (((VALUE[BCOMP]) ) >> 3) | \
-               (((VALUE[GCOMP]) & 0xf8) << 2) | \
-               (((VALUE[RCOMP]) & 0xf8) << 7) )]
-#define FETCH_PIXEL(DST, SRC) \
-       DST[RCOMP] = (colorMap->color_list[*SRC].red); \
-       DST[GCOMP] = (colorMap->color_list[*SRC].green); \
-       DST[BCOMP] = (colorMap->color_list[*SRC].blue); \
-       DST[ACOMP] = 0xff
-#include "swrast/s_spantemp.h"
-
 }
 
 
@@ -305,65 +284,30 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView* view, 
ulong options,
                sizeof(*fFrameBuffer));
        _mesa_initialize_window_framebuffer(&fFrameBuffer->base, fVisual);
 
+       // Setup front render buffer
        fFrontRenderBuffer = (struct msr_renderbuffer*)calloc(1,
                sizeof(*fFrontRenderBuffer));
        _mesa_init_renderbuffer(&fFrontRenderBuffer->base, 0);
-
        fFrontRenderBuffer->active = true;
-       fFrontRenderBuffer->base.InternalFormat = GL_RGBA;
-       fFrontRenderBuffer->base._BaseFormat = GL_RGBA;
-       fFrontRenderBuffer->base.DataType = GL_UNSIGNED_BYTE;
-
-       switch(fColorSpace) {
-               case B_RGB32:
-#if HAIKU_MESA_VER >= 709
-                       // Only in New Mesa
-                       fFrontRenderBuffer->base.Format = MESA_FORMAT_XRGB8888;
-                       break;
-#endif
-               case B_RGBA32:
-                       fFrontRenderBuffer->base.Format = MESA_FORMAT_ARGB8888;
-                       break;
-               case B_RGB24:
-                       fFrontRenderBuffer->base.Format = MESA_FORMAT_ARGB8888;
-                       break;
-               case B_RGB16:
-                       fFrontRenderBuffer->base.Format = MESA_FORMAT_RGB565;
-                       break;
-               case B_RGB15:
-               case B_RGBA15:
-                       fFrontRenderBuffer->base.Format = MESA_FORMAT_ARGB1555;
-                       break;
-               case B_CMAP8:
-               default:
-                       fprintf(stderr, "Unsupported screen color space %d\n", 
fColorSpace);
-                       debugger("Unsupported OpenGL color space");
-                       break;
+       if (_SetupRenderBuffer(fFrontRenderBuffer, fColorSpace) != B_OK) {
+               free(fFrameBuffer);
+               _mesa_destroy_visual(fVisual);
+               return;
        }
-
        fFrontRenderBuffer->base.AllocStorage = _FrontRenderbufferStorage;
-       fFrontRenderBuffer->base.Data = NULL;
-
-       _SetSpanFuncs(fFrontRenderBuffer, fColorSpace);
        _mesa_add_renderbuffer(&fFrameBuffer->base, BUFFER_FRONT_LEFT,
                &fFrontRenderBuffer->base);
 
+       // Setup back render buffer (if needed)
        fBackRenderBuffer = (struct msr_renderbuffer*)calloc(1,
                sizeof(*fBackRenderBuffer));
        if (dblFlag) {
                _mesa_init_renderbuffer(&fBackRenderBuffer->base, 0);
 
                fBackRenderBuffer->active = true;
+               _SetupRenderBuffer(fBackRenderBuffer, fColorSpace);
                fBackRenderBuffer->base.AllocStorage = _BackRenderbufferStorage;
-               fBackRenderBuffer->base.Data = NULL;
                fBackRenderBuffer->base.Delete = _DeleteBackBuffer;
-               fBackRenderBuffer->base.InternalFormat
-                       = fFrontRenderBuffer->base.InternalFormat;
-               fBackRenderBuffer->base._BaseFormat
-                       = fFrontRenderBuffer->base._BaseFormat;
-               fBackRenderBuffer->base.Format = 
fFrontRenderBuffer->base.Format;
-
-               _SetSpanFuncs(fBackRenderBuffer, fColorSpace);
                _mesa_add_renderbuffer(&fFrameBuffer->base, BUFFER_BACK_LEFT,
                        &fBackRenderBuffer->base);
        } else {
@@ -435,9 +379,9 @@ MesaSoftwareRenderer::LockGL()
 
        if (cs != fColorSpace) {
                fColorSpace = cs;
-               _SetSpanFuncs(fFrontRenderBuffer, fColorSpace);
+               _SetupRenderBuffer(fFrontRenderBuffer, fColorSpace);
                if (fBackRenderBuffer->active)
-                       _SetSpanFuncs(fBackRenderBuffer, fColorSpace);
+                       _SetupRenderBuffer(fBackRenderBuffer, fColorSpace);
        }
 
        if (fBitmap && fNewWidth == fWidth
@@ -837,15 +781,21 @@ MesaSoftwareRenderer::_Flush(gl_context* ctx)
 }
 
 
-void
-MesaSoftwareRenderer::_SetSpanFuncs(
+status_t
+MesaSoftwareRenderer::_SetupRenderBuffer(
        struct msr_renderbuffer* buffer, color_space colorSpace)
 {
        if (!buffer->active)
-               return;
+               return B_OK;
+
+       buffer->base.DataType = GL_UNSIGNED_BYTE;
+       buffer->base.Data = NULL;
 
        switch (colorSpace) {
                case B_RGBA32:
+                       buffer->base._BaseFormat = GL_RGBA;
+                       buffer->base.Format = MESA_FORMAT_ARGB8888;
+
                        buffer->base.GetRow = get_row_RGBA32;
                        buffer->base.GetValues = get_values_RGBA32;
                        buffer->base.PutRow = put_row_RGBA32;
@@ -857,6 +807,14 @@ MesaSoftwareRenderer::_SetSpanFuncs(
 #endif
                        break;
                case B_RGB32:
+                       buffer->base._BaseFormat = GL_RGB;
+#if HAIKU_MESA_VER >= 709
+                       // XRGB8888 only in newer Mesa
+                       buffer->base.Format = MESA_FORMAT_XRGB8888;
+#else
+                       buffer->base.Format = MESA_FORMAT_ARGB8888;
+#endif
+
                        buffer->base.GetRow = get_row_RGB32;
                        buffer->base.GetValues = get_values_RGB32;
                        buffer->base.PutRow = put_row_RGB32;
@@ -868,6 +826,9 @@ MesaSoftwareRenderer::_SetSpanFuncs(
 #endif
                        break;
                case B_RGB24:
+                       buffer->base._BaseFormat = GL_RGB;
+                       buffer->base.Format = MESA_FORMAT_RGB888;
+
                        buffer->base.GetRow = get_row_RGB24;
                        buffer->base.GetValues = get_values_RGB24;
                        buffer->base.PutRow = put_row_RGB24;
@@ -879,6 +840,9 @@ MesaSoftwareRenderer::_SetSpanFuncs(
 #endif
                        break;
                case B_RGB16:
+                       buffer->base._BaseFormat = GL_RGB;
+                       buffer->base.Format = MESA_FORMAT_RGB565;
+
                        buffer->base.GetRow = get_row_RGB16;
                        buffer->base.GetValues = get_values_RGB16;
                        buffer->base.PutRow = put_row_RGB16;
@@ -890,6 +854,9 @@ MesaSoftwareRenderer::_SetSpanFuncs(
 #endif
                        break;
                case B_RGB15:
+                       buffer->base._BaseFormat = GL_RGB;
+                       buffer->base.Format = MESA_FORMAT_ARGB1555;
+
                        buffer->base.GetRow = get_row_RGB15;
                        buffer->base.GetValues = get_values_RGB15;
                        buffer->base.PutRow = put_row_RGB15;
@@ -900,22 +867,13 @@ MesaSoftwareRenderer::_SetSpanFuncs(
                        buffer->base.PutMonoValues = put_values_RGB15;
 #endif
                        break;
-               case B_CMAP8:
-                       buffer->base.GetRow = get_row_CMAP8;
-                       buffer->base.GetValues = get_values_CMAP8;
-                       buffer->base.PutRow = put_row_CMAP8;
-                       buffer->base.PutValues = put_values_CMAP8;
-#if HAIKU_MESA_VER <= 711
-                       buffer->base.PutRowRGB = put_row_rgb_CMAP8;
-                       buffer->base.PutMonoRow = put_mono_row_CMAP8;
-                       buffer->base.PutMonoValues = put_values_CMAP8;
-#endif
-                       break;
                default:
-                       fprintf(stderr, "Unsupported screen color space %d\n", 
fColorSpace);
+                       fprintf(stderr, "Unsupported screen color space %s\n",
+                               color_space_name(fColorSpace));
                        debugger("Unsupported OpenGL color space");
-                       break;
+                       return B_ERROR;
        }
+       return B_OK;
 }
 
 
diff --git a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h 
b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h
index c49e09e..3f0ca46 100644
--- a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h
+++ b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h
@@ -103,8 +103,8 @@ private:
                                                                        GLenum 
internalFormat,
                                                                        GLuint 
width, GLuint height);
                static void                             _Flush(gl_context *ctx);
-               void                                    _SetSpanFuncs(struct 
msr_renderbuffer* buffer,
-                                                                       
color_space colorSpace);
+               status_t                                
_SetupRenderBuffer(struct msr_renderbuffer*
+                                                                       buffer, 
color_space colorSpace);
                static void                             
_DeleteBackBuffer(struct gl_renderbuffer* rb);
 
                void                                    _AllocateBitmap();

############################################################################

Commit:      0c99c75edf65c2b2864bf52287e993528a67778d
URL:         http://cgit.haiku-os.org/haiku/commit/?id=0c99c75
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Thu Jan 12 23:53:48 2012 UTC

mesa: Always check color space before deciding to reconfigure

* Gives a slight performance boost
* Variable name cleanup

----------------------------------------------------------------------------

diff --git a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp 
b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp
index 6a1c8fa..7d0046e 100644
--- a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp
+++ b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp
@@ -366,19 +366,18 @@ MesaSoftwareRenderer::LockGL()
 
        _mesa_make_current(fContext, &fFrameBuffer->base, &fFrameBuffer->base);
 
-       color_space cs = B_RGBA32;
+       color_space colorSpace = BScreen(GLView()->Window()).ColorSpace();
 
        BAutolock lock(fInfoLocker);
        if (fDirectModeEnabled && fInfo != NULL) {
-               cs = BScreen(GLView()->Window()).ColorSpace();
                fNewWidth = fInfo->window_bounds.right
                        - fInfo->window_bounds.left + 1;
                fNewHeight = fInfo->window_bounds.bottom
                        - fInfo->window_bounds.top + 1;
        }
 
-       if (cs != fColorSpace) {
-               fColorSpace = cs;
+       if (fColorSpace != colorSpace) {
+               fColorSpace = colorSpace;
                _SetupRenderBuffer(fFrontRenderBuffer, fColorSpace);
                if (fBackRenderBuffer->active)
                        _SetupRenderBuffer(fBackRenderBuffer, fColorSpace);

############################################################################

Revision:    hrev43656
Commit:      58dbd25f6bcb8a60779cd3cca5ffa739d497e3a7
URL:         http://cgit.haiku-os.org/haiku/commit/?id=58dbd25
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Fri Jan 13 00:04:34 2012 UTC

mesa: Whitespace, style cleanup. No functional change

----------------------------------------------------------------------------

diff --git a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp 
b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp
index 7d0046e..7d9a93a 100644
--- a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp
+++ b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp
@@ -15,14 +15,15 @@
  * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
  */
 
+
 #include "MesaSoftwareRenderer.h"
 
-#include <stdio.h>
-#include <string.h>
 #include <Autolock.h>
 #include <DirectWindowPrivate.h>
 #include <GraphicsDefs.h>
 #include <Screen.h>
+#include <stdio.h>
+#include <string.h>
 
 extern "C" {
 #include "extensions.h"
@@ -56,28 +57,28 @@ extern "C" {
 #endif
 }
 
+
 extern const char* color_space_name(color_space space);
 
+
 // BeOS component ordering for B_RGBA32 bitmap format
 #if B_HOST_IS_LENDIAN
 #define BE_RCOMP 2
 #define BE_GCOMP 1
 #define BE_BCOMP 0
 #define BE_ACOMP 3
-
 #else
 // Big Endian B_RGBA32 bitmap format
 #define BE_RCOMP 1
 #define BE_GCOMP 2
 #define BE_BCOMP 3
 #define BE_ACOMP 0
-
 #endif
 
+
 /**********************************************************************/
 /*****        Read/write spans/arrays of pixels                   *****/
 /**********************************************************************/
-
 extern "C" {
 
 /* 32-bit RGBA */
@@ -89,20 +90,20 @@ extern "C" {
        GLubyte* P = ((GLubyte**)mr->GetRows())[Y] + (X) * 4
 #define INC_PIXEL_PTR(P) P += 4
 #define STORE_PIXEL(DST, X, Y, VALUE) \
-   DST[BE_RCOMP] = VALUE[RCOMP];  \
-   DST[BE_GCOMP] = VALUE[GCOMP];  \
-   DST[BE_BCOMP] = VALUE[BCOMP];  \
-   DST[BE_ACOMP] = VALUE[ACOMP]
+       DST[BE_RCOMP] = VALUE[RCOMP];  \
+       DST[BE_GCOMP] = VALUE[GCOMP];  \
+       DST[BE_BCOMP] = VALUE[BCOMP];  \
+       DST[BE_ACOMP] = VALUE[ACOMP]
 #define STORE_PIXEL_RGB(DST, X, Y, VALUE) \
-   DST[BE_RCOMP] = VALUE[RCOMP];  \
-   DST[BE_GCOMP] = VALUE[GCOMP];  \
-   DST[BE_BCOMP] = VALUE[BCOMP];  \
-   DST[BE_ACOMP] = 255
+       DST[BE_RCOMP] = VALUE[RCOMP];  \
+       DST[BE_GCOMP] = VALUE[GCOMP];  \
+       DST[BE_BCOMP] = VALUE[BCOMP];  \
+       DST[BE_ACOMP] = 255
 #define FETCH_PIXEL(DST, SRC) \
-   DST[RCOMP] = SRC[BE_RCOMP];  \
-   DST[GCOMP] = SRC[BE_GCOMP];  \
-   DST[BCOMP] = SRC[BE_BCOMP];  \
-   DST[ACOMP] = SRC[BE_ACOMP]
+       DST[RCOMP] = SRC[BE_RCOMP];  \
+       DST[GCOMP] = SRC[BE_GCOMP];  \
+       DST[BCOMP] = SRC[BE_BCOMP];  \
+       DST[ACOMP] = SRC[BE_ACOMP]
 #include "swrast/s_spantemp.h"
 
 /* 32-bit RGB */
@@ -115,8 +116,8 @@ extern "C" {
 #define INC_PIXEL_PTR(P) P += 1
 #define STORE_PIXEL(DST, X, Y, VALUE) \
        *DST = ( ((VALUE[RCOMP]) << 16) | \
-                       ((VALUE[GCOMP]) << 8) | \
-                       ((VALUE[BCOMP]) ) )
+               ((VALUE[GCOMP]) << 8) | \
+               ((VALUE[BCOMP]) ) )
 #define FETCH_PIXEL(DST, SRC) \
        DST[RCOMP] = ((*SRC & 0x00ff0000) >> 16);  \
        DST[GCOMP] = ((*SRC & 0x0000ff00) >> 8);  \
@@ -166,7 +167,7 @@ extern "C" {
 #define NAME(PREFIX) PREFIX##_RGB15
 #define RB_TYPE GLubyte
 #define SPAN_VARS \
-        MesaSoftwareRenderer* mr = (MesaSoftwareRenderer*)ctx->DriverCtx;
+       MesaSoftwareRenderer* mr = (MesaSoftwareRenderer*)ctx->DriverCtx;
 #define INIT_PIXEL_PTR(P, X, Y) \
        GLushort* P = (GLushort*)(((GLubyte**)mr->GetRows())[Y] + (X) * 2)
 #define INC_PIXEL_PTR(P) P += 1
@@ -423,7 +424,7 @@ MesaSoftwareRenderer::SwapBuffers(bool VSync)
                        GLView()->UnlockLooper();
                }
        } else {
-               // TODO: Here the BGLView needs to be drawlocked.               
+               // TODO: Here the BGLView needs to be drawlocked.
                _CopyToDirect();
        }
 


Other related posts:

  • » [haiku-commits] haiku: hrev43656 - src/add-ons/opengl/mesa_software_renderer - kallisti5