Add hacks for older gcc2 Mesa 7.8.2 support

* Call different functions depending on Mesa version
* The --no-warnings is for the GL headers which produce
  large numbers of attribute directive ignored warnings
  that cannot be disabled on gcc2
This commit is contained in:
Alexander von Gluck IV
2012-01-10 05:13:19 +00:00
parent 27fdeae9e1
commit 3e0c69a0e6
8 changed files with 102 additions and 6 deletions
@@ -21,7 +21,13 @@ if $(TARGET_PLATFORM) != haiku {
defines += USE_SPARC_ASM ; defines += USE_SPARC_ASM ;
} }
SubDirC++Flags [ FDefines $(defines) ] ; # For GCC2
local flags ;
if $(HAIKU_GCC_VERSION[1]) < 3 {
flags = --no-warnings ;
}
SubDirC++Flags [ FDefines $(defines) ] $(flags) ;
} }
@@ -37,6 +43,11 @@ UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa main ] ;
UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi ] ; UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi ] ;
UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi glapi ] ; UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi glapi ] ;
# For older versions of Mesa
UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa glapi ] ;
UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa tnl ] ;
UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa x86 ] ;
Addon Mesa\ Software\ Renderer : Addon Mesa\ Software\ Renderer :
MesaSoftwareRenderer.cpp MesaSoftwareRenderer.cpp
: libGL.so be $(TARGET_LIBSUPC++) : libGL.so be $(TARGET_LIBSUPC++)
@@ -30,12 +30,12 @@ extern "C" {
#include "drivers/common/meta.h" #include "drivers/common/meta.h"
#include "main/colormac.h" #include "main/colormac.h"
#include "main/buffers.h" #include "main/buffers.h"
#include "main/formats.h"
#include "main/framebuffer.h" #include "main/framebuffer.h"
#include "main/renderbuffer.h" #include "main/renderbuffer.h"
#include "main/state.h" #include "main/state.h"
#include "main/version.h"
#include "swrast/swrast.h" #include "swrast/swrast.h"
#ifdef NEW_MESA #if __GNUC__ > 2
#include "swrast/s_renderbuffer.h" #include "swrast/s_renderbuffer.h"
#endif #endif
#include "swrast_setup/swrast_setup.h" #include "swrast_setup/swrast_setup.h"
@@ -44,7 +44,8 @@ extern "C" {
#include "tnl/t_pipeline.h" #include "tnl/t_pipeline.h"
#include "vbo/vbo.h" #include "vbo/vbo.h"
#define CALLED() printf("CALLED %s\n",__PRETTY_FUNCTION__)
#define CALLED() //printf("CALLED %s\n",__PRETTY_FUNCTION__)
#if defined(USE_X86_ASM) #if defined(USE_X86_ASM)
#include "x86/common_x86_asm.h" #include "x86/common_x86_asm.h"
@@ -269,8 +270,12 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView* view, ulong options,
functions.Flush = _Flush; functions.Flush = _Flush;
// create core context // create core context
#if HAIKU_MESA_VER <= 708
fContext = _mesa_create_context(fVisual, NULL, &functions, this);
#else
fContext = _mesa_create_context(API_OPENGL, fVisual, NULL, fContext = _mesa_create_context(API_OPENGL, fVisual, NULL,
&functions, this); &functions, this);
#endif
if (!fContext) { if (!fContext) {
_mesa_destroy_visual(fVisual); _mesa_destroy_visual(fVisual);
@@ -311,8 +316,11 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView* view, ulong options,
switch(fColorSpace) { switch(fColorSpace) {
case B_RGB32: case B_RGB32:
#if HAIKU_MESA_VER >= 709
// Only in New Mesa
fFrontRenderBuffer->base.Format = MESA_FORMAT_XRGB8888; fFrontRenderBuffer->base.Format = MESA_FORMAT_XRGB8888;
break; break;
#endif
case B_RGBA32: case B_RGBA32:
fFrontRenderBuffer->base.Format = MESA_FORMAT_ARGB8888; fFrontRenderBuffer->base.Format = MESA_FORMAT_ARGB8888;
break; break;
@@ -362,9 +370,17 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView* view, ulong options,
fBackRenderBuffer->active = false; fBackRenderBuffer->active = false;
} }
#if HAIKU_MESA_VER >= 709
// New Mesa
_swrast_add_soft_renderbuffers(&fFrameBuffer->base, GL_FALSE, _swrast_add_soft_renderbuffers(&fFrameBuffer->base, GL_FALSE,
fVisual->haveDepthBuffer, fVisual->haveStencilBuffer, fVisual->haveDepthBuffer, fVisual->haveStencilBuffer,
fVisual->haveAccumBuffer, alphaFlag, GL_FALSE); fVisual->haveAccumBuffer, alphaFlag, GL_FALSE);
#else
// Old Mesa
_mesa_add_soft_renderbuffers(&fFrameBuffer->base, GL_FALSE,
fVisual->haveDepthBuffer, fVisual->haveStencilBuffer,
fVisual->haveAccumBuffer, alphaFlag, GL_FALSE);
#endif
BRect bounds = view->Bounds(); BRect bounds = view->Bounds();
fWidth = fNewWidth = (GLint)bounds.Width(); fWidth = fNewWidth = (GLint)bounds.Width();
@@ -786,7 +802,9 @@ MesaSoftwareRenderer::_FrontRenderbufferStorage(gl_context* ctx,
render->Data = NULL; render->Data = NULL;
render->Width = width; render->Width = width;
render->Height = height; render->Height = height;
#if HAIKU_MESA_VER >= 712
render->RowStride = width; render->RowStride = width;
#endif
return GL_TRUE; return GL_TRUE;
} }
@@ -832,36 +850,66 @@ MesaSoftwareRenderer::_SetSpanFuncs(
buffer->base.GetValues = get_values_RGBA32; buffer->base.GetValues = get_values_RGBA32;
buffer->base.PutRow = put_row_RGBA32; buffer->base.PutRow = put_row_RGBA32;
buffer->base.PutValues = put_values_RGBA32; buffer->base.PutValues = put_values_RGBA32;
#if HAIKU_MESA_VER <= 711
buffer->base.PutRowRGB = put_row_rgb_RGBA32;
buffer->base.PutMonoRow = put_mono_row_RGBA32;
buffer->base.PutMonoValues = put_values_RGBA32;
#endif
break; break;
case B_RGB32: case B_RGB32:
buffer->base.GetRow = get_row_RGB32; buffer->base.GetRow = get_row_RGB32;
buffer->base.GetValues = get_values_RGB32; buffer->base.GetValues = get_values_RGB32;
buffer->base.PutRow = put_row_RGB32; buffer->base.PutRow = put_row_RGB32;
buffer->base.PutValues = put_values_RGB32; buffer->base.PutValues = put_values_RGB32;
#if HAIKU_MESA_VER <= 711
buffer->base.PutRowRGB = put_row_rgb_RGB32;
buffer->base.PutMonoRow = put_mono_row_RGB32;
buffer->base.PutMonoValues = put_values_RGB32;
#endif
break; break;
case B_RGB24: case B_RGB24:
buffer->base.GetRow = get_row_RGB24; buffer->base.GetRow = get_row_RGB24;
buffer->base.GetValues = get_values_RGB24; buffer->base.GetValues = get_values_RGB24;
buffer->base.PutRow = put_row_RGB24; buffer->base.PutRow = put_row_RGB24;
buffer->base.PutValues = put_values_RGB24; buffer->base.PutValues = put_values_RGB24;
#if HAIKU_MESA_VER <= 711
buffer->base.PutRowRGB = put_row_rgb_RGB24;
buffer->base.PutMonoRow = put_mono_row_RGB24;
buffer->base.PutMonoValues = put_values_RGB24;
#endif
break; break;
case B_RGB16: case B_RGB16:
buffer->base.GetRow = get_row_RGB16; buffer->base.GetRow = get_row_RGB16;
buffer->base.GetValues = get_values_RGB16; buffer->base.GetValues = get_values_RGB16;
buffer->base.PutRow = put_row_RGB16; buffer->base.PutRow = put_row_RGB16;
buffer->base.PutValues = put_values_RGB16; buffer->base.PutValues = put_values_RGB16;
#if HAIKU_MESA_VER <= 711
buffer->base.PutRowRGB = put_row_rgb_RGB16;
buffer->base.PutMonoRow = put_mono_row_RGB16;
buffer->base.PutMonoValues = put_values_RGB16;
#endif
break; break;
case B_RGB15: case B_RGB15:
buffer->base.GetRow = get_row_RGB15; buffer->base.GetRow = get_row_RGB15;
buffer->base.GetValues = get_values_RGB15; buffer->base.GetValues = get_values_RGB15;
buffer->base.PutRow = put_row_RGB15; buffer->base.PutRow = put_row_RGB15;
buffer->base.PutValues = put_values_RGB15; buffer->base.PutValues = put_values_RGB15;
#if HAIKU_MESA_VER <= 711
buffer->base.PutRowRGB = put_row_rgb_RGB15;
buffer->base.PutMonoRow = put_mono_row_RGB15;
buffer->base.PutMonoValues = put_values_RGB15;
#endif
break; break;
case B_CMAP8: case B_CMAP8:
buffer->base.GetRow = get_row_CMAP8; buffer->base.GetRow = get_row_CMAP8;
buffer->base.GetValues = get_values_CMAP8; buffer->base.GetValues = get_values_CMAP8;
buffer->base.PutRow = put_row_CMAP8; buffer->base.PutRow = put_row_CMAP8;
buffer->base.PutValues = put_values_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; break;
default: default:
fprintf(stderr, "Unsupported screen color space %d\n", fColorSpace); fprintf(stderr, "Unsupported screen color space %d\n", fColorSpace);
@@ -19,13 +19,19 @@
#include "GLRenderer.h" #include "GLRenderer.h"
extern "C" { extern "C" {
#include "main/version.h"
#define HAIKU_MESA_VER (MESA_MAJOR * 100) + MESA_MINOR
#include "context.h" #include "context.h"
#if HAIKU_MESA_VER >= 712
#include "swrast/s_chan.h" #include "swrast/s_chan.h"
#endif
#if defined(__GNUC__) && (__GNUC__ > 2) #if HAIKU_MESA_VER <= 711
#define NEW_MESA #define gl_context GLcontext
#define gl_config GLvisual
#endif #endif
+6
View File
@@ -1,6 +1,12 @@
SubDir HAIKU_TOP src add-ons screen_savers flurry ; SubDir HAIKU_TOP src add-ons screen_savers flurry ;
SubDirSysHdrs $(HAIKU_MESA_HEADERS) ; SubDirSysHdrs $(HAIKU_MESA_HEADERS) ;
# For GCC2
if $(HAIKU_GCC_VERSION[1]) < 3 {
SubDirC++Flags --no-warnings ;
}
AddResources Message : Flurry.rdef ; AddResources Message : Flurry.rdef ;
ScreenSaver Flurry : ScreenSaver Flurry :
+6
View File
@@ -3,6 +3,12 @@ SubDirSysHdrs $(HAIKU_MESA_HEADERS) ;
SetSubDirSupportedPlatformsBeOSCompatible ; SetSubDirSupportedPlatformsBeOSCompatible ;
# For GCC2
if $(HAIKU_GCC_VERSION[1]) < 3 {
SubDirC++Flags --no-warnings ;
}
Application GLTeapot : Application GLTeapot :
FPS.cpp FPS.cpp
GLObject.cpp GLObject.cpp
+5
View File
@@ -35,8 +35,11 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
extern "C" { extern "C" {
#include "glapi.h" #include "glapi.h"
#if __GNUC__ > 2
// New Mesa
#include "glapi_priv.h" #include "glapi_priv.h"
#include "glapitable.h" #include "glapitable.h"
#endif
/* /*
* NOTE: this file portion implements C-based dispatch of the OpenGL entrypoints * NOTE: this file portion implements C-based dispatch of the OpenGL entrypoints
@@ -64,7 +67,9 @@ extern "C" {
return (dispatch->func) args return (dispatch->func) args
#if __GNUC__ > 2
#include "glapitemp.h" #include "glapitemp.h"
#endif
#endif /* USE_X86_ASM */ #endif /* USE_X86_ASM */
+8
View File
@@ -28,10 +28,18 @@ UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa main ] ;
UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi ] ; UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi ] ;
UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi glapi ] ; UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi glapi ] ;
# For older versions of Mesa
UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa glapi ] ;
LINKFLAGS on libGL.so = [ on libGL.so return $(LINKFLAGS) ] LINKFLAGS on libGL.so = [ on libGL.so return $(LINKFLAGS) ]
-Xlinker --strip-debug -Xlinker --whole-archive -Xlinker -zmuldefs ; -Xlinker --strip-debug -Xlinker --whole-archive -Xlinker -zmuldefs ;
# For GCC2
if $(HAIKU_GCC_VERSION[1]) < 3 {
SubDirC++Flags --no-warnings ;
}
SharedLibrary libGL.so : $(sources) : SharedLibrary libGL.so : $(sources) :
# Mesa libraries (from Mesa optional package): # Mesa libraries (from Mesa optional package):
+6
View File
@@ -1,6 +1,12 @@
SubDir HAIKU_TOP src preferences opengl ; SubDir HAIKU_TOP src preferences opengl ;
SubDirSysHdrs $(HAIKU_MESA_HEADERS) ; SubDirSysHdrs $(HAIKU_MESA_HEADERS) ;
# For GCC2
if $(HAIKU_GCC_VERSION[1]) < 3 {
SubDirC++Flags --no-warnings ;
}
UsePrivateHeaders interface ; UsePrivateHeaders interface ;
Preference OpenGL : Preference OpenGL :