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(); }