From 3c0d5dcaf1efee8798e0d9a6543f1733abb96155 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Tue, 17 Jan 2012 14:57:49 +0000 Subject: [PATCH] opengl: Improve libGL linking and Mesa optional package * Move compiled binaries into lib.haiku within Mesa optional pacakge, this enables us to use Make or scons to build Mesa * Untangle libGL linking and order library inclusion * Remove zmuldef hacks * Compile libgallium into the libGL on Mesa 8.0 / gcc4 images * Don't Mesa calculate cpu optimizations due to visibility issues, use Mesa cpu functions for this. * Don't allow undefined symbols in libGL.so to ensure sanity. * Move Mesa optional packages to haiku-files --- build/jam/OptionalBuildFeatures | 32 +++++------- .../opengl/mesa_software_renderer/Jamfile | 6 ++- .../MesaSoftwareRenderer.cpp | 52 +++---------------- src/kits/opengl/GLDispatcher.cpp | 4 -- src/kits/opengl/Jamfile | 10 ++-- 5 files changed, 29 insertions(+), 75 deletions(-) diff --git a/build/jam/OptionalBuildFeatures b/build/jam/OptionalBuildFeatures index d9709a686c..27697da31f 100644 --- a/build/jam/OptionalBuildFeatures +++ b/build/jam/OptionalBuildFeatures @@ -171,13 +171,18 @@ if $(HAIKU_BUILD_FEATURE_CLUCENE) { # Mesa -local mesaBaseURL = http://pub.haikufire.com/mesa ; +local mesaBaseURL = http://haiku-files.org/files/optional-packages ; if $(TARGET_ARCH) = x86 { + local glslObject ; + local galliumObjects ; local zipFile ; if $(HAIKU_GCC_VERSION[1]) >= 4 { - HAIKU_MESA_FILE = mesa-8.0-devel-gcc4-x86.zip ; + #HAIKU_MESA_FILE = mesa-8.0dev-x86-gcc4-2012-01-17.zip ; + HAIKU_MESA_FILE = mesa-8.0devdbg-x86-gcc4-2012-01-17.zip ; + glslObject = lib.haiku/libglsl.a ; + galliumObjects = lib.haiku/libgallium.a ; } else { - HAIKU_MESA_FILE = mesa-7.8.2-gcc2-x86.zip ; + HAIKU_MESA_FILE = mesa-7.8.2-x86-gcc2-2012-01-17.zip ; } zipFile = [ DownloadFile $(HAIKU_MESA_FILE) @@ -189,24 +194,15 @@ if $(TARGET_ARCH) = x86 { HAIKU_MESA_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_MESA_DIR) : include/ : $(zipFile) : extracted-mesa ] ; - if $(HAIKU_GCC_VERSION[1]) >= 4 { - HAIKU_MESA_LIBS = [ ExtractArchive $(HAIKU_MESA_DIR) + HAIKU_MESA_LIBS = [ ExtractArchive $(HAIKU_MESA_DIR) : - src/mesa/libmesa.a - src/mapi/glapi/libglapi.a - lib/libGLU.a + lib.haiku/libglu.a + $(galliumObjects) + lib.haiku/libglapi.a + $(glslObject) + lib.haiku/libmesa.a : $(zipFile) : extracted-mesa ] ; - } else { - # Older Mesa 7.8 - HAIKU_MESA_LIBS = [ ExtractArchive $(HAIKU_MESA_DIR) - : - src/mesa/libmesa.a - src/mesa/libglapi.a - lib/libGLU.a - : $(zipFile) - : extracted-mesa ] ; - } HAIKU_MESA_HEADERS = [ FDirName $(HAIKU_MESA_DIR) include ] ; diff --git a/src/add-ons/opengl/mesa_software_renderer/Jamfile b/src/add-ons/opengl/mesa_software_renderer/Jamfile index 855bda7c7e..95177f456f 100644 --- a/src/add-ons/opengl/mesa_software_renderer/Jamfile +++ b/src/add-ons/opengl/mesa_software_renderer/Jamfile @@ -49,6 +49,8 @@ UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa tnl ] ; UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa x86 ] ; Addon Mesa\ Software\ Renderer : - MesaSoftwareRenderer.cpp - : libGL.so be $(TARGET_LIBSUPC++) + MesaSoftwareRenderer.cpp : + libGL.so + be + $(TARGET_LIBSUPC++) ; diff --git a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp index 7d9a93ab12..4dd4df9804 100644 --- a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp +++ b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp @@ -30,6 +30,7 @@ extern "C" { #include "drivers/common/driverfuncs.h" #include "drivers/common/meta.h" #include "main/colormac.h" +#include "main/cpuinfo.h" #include "main/buffers.h" #include "main/formats.h" #include "main/framebuffer.h" @@ -600,60 +601,19 @@ MesaSoftwareRenderer::_Error(gl_context* ctx) const GLubyte* MesaSoftwareRenderer::_GetString(gl_context* ctx, GLenum name) { + switch (name) { case GL_VENDOR: return (const GLubyte*) "Mesa Project"; case GL_RENDERER: { + _mesa_get_cpu_features(); static char buffer[256] = { '\0' }; if (!buffer[0]) { + char* cpuInfo = _mesa_get_cpu_string(); // Let's build an renderer string - strncat(buffer, "Software Rasterizer", sizeof(buffer)); - - // Append any CPU-specific information. -#ifdef USE_X86_ASM - if (_mesa_x86_cpu_features) - strncat(buffer, ", optimized for x86", sizeof(buffer)); -#ifdef USE_MMX_ASM - if (cpu_has_mmx) { - strncat(buffer, (cpu_has_mmxext) ? "/MMX+" : "/MMX", - sizeof(buffer)); - } -#endif -#ifdef USE_3DNOW_ASM - if (cpu_has_3dnow) { - strncat(buffer, (cpu_has_3dnowext) ? "/3DNow!+" : "/3DNow!", - sizeof(buffer)); - } -#endif -#ifdef USE_SSE_ASM - if (cpu_has_xmm) { - strncat(buffer, (cpu_has_xmm2) ? "/SSE2" : "/SSE", - sizeof(buffer)); - } -#endif - -#elif defined(USE_SPARC_ASM) - - strncat(buffer, ", optimized for SPARC", sizeof(buffer)); - -#elif defined(USE_PPC_ASM) - - if (_mesa_ppc_cpu_features) { - strncat(buffer, (cpu_has_64) ? ", optimized for " - "PowerPC 64" : ", optimized for PowerPC", - sizeof(buffer)); - } - -#ifdef USE_VMX_ASM - if (cpu_has_vmx) - strncat(buffer, "/Altivec", sizeof(buffer)); -#endif - - if (! cpu_has_fpu) - strncat(buffer, "/No FPU", sizeof(buffer)); -#endif - + sprintf(buffer, "Software Rasterizer for %s", cpuInfo); + free(cpuInfo); } return (const GLubyte*) buffer; } diff --git a/src/kits/opengl/GLDispatcher.cpp b/src/kits/opengl/GLDispatcher.cpp index 31a35b655a..953339b64c 100644 --- a/src/kits/opengl/GLDispatcher.cpp +++ b/src/kits/opengl/GLDispatcher.cpp @@ -67,10 +67,6 @@ extern "C" { return (dispatch->func) args -#if __GNUC__ > 2 -#include "glapitemp.h" -#endif - #endif /* USE_X86_ASM */ } diff --git a/src/kits/opengl/Jamfile b/src/kits/opengl/Jamfile index c18cb651d9..ca60fd2702 100644 --- a/src/kits/opengl/Jamfile +++ b/src/kits/opengl/Jamfile @@ -32,7 +32,7 @@ UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi glapi ] ; UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa glapi ] ; LINKFLAGS on libGL.so = [ on libGL.so return $(LINKFLAGS) ] - -Xlinker --strip-debug -Xlinker --whole-archive -Xlinker -zmuldefs ; + -Xlinker --whole-archive -Xlinker --no-undefined -fvisibility=default ; # For GCC2 if $(HAIKU_GCC_VERSION[1]) < 3 { @@ -41,15 +41,15 @@ if $(HAIKU_GCC_VERSION[1]) < 3 { SharedLibrary libGL.so : $(sources) : + # Glut + glut.o # Mesa libraries (from Mesa optional package): $(HAIKU_MESA_LIBS) - # Glut - glut.o - # External libraries: - be game # BWindowScreen needed by BGLScreen stub class + network + be $(TARGET_LIBSTDC++) ;