From 11f47ddeedeff34882c13728a41dcd0781d7a01e Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 16 Jul 2019 13:42:39 -0700 Subject: [PATCH] BUGZ-753: bad skyboxes on intel GPUs --- libraries/gl/src/gl/GLHelpers.cpp | 17 ++++++++++++++++- libraries/gl/src/gl/GLHelpers.h | 1 + tests-manual/gpu/CMakeLists.txt | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/libraries/gl/src/gl/GLHelpers.cpp b/libraries/gl/src/gl/GLHelpers.cpp index 7b47736a3d..c9f17b686d 100644 --- a/libraries/gl/src/gl/GLHelpers.cpp +++ b/libraries/gl/src/gl/GLHelpers.cpp @@ -26,13 +26,19 @@ size_t evalGLFormatSwapchainPixelSize(const QSurfaceFormat& format) { return pixelSize; } +static bool FORCE_DISABLE_OPENGL_45 = false; + +void gl::setDisableGl45(bool disable) { + FORCE_DISABLE_OPENGL_45 = disable; +} + bool gl::disableGl45() { #if defined(USE_GLES) return false; #else static const QString DEBUG_FLAG("HIFI_DISABLE_OPENGL_45"); static bool disableOpenGL45 = QProcessEnvironment::systemEnvironment().contains(DEBUG_FLAG); - return disableOpenGL45; + return FORCE_DISABLE_OPENGL_45 || disableOpenGL45; #endif } @@ -202,6 +208,15 @@ uint16_t gl::getAvailableVersion() { return; } gl::initModuleGl(); + + std::string glvendor{ (const char*)glGetString(GL_VENDOR) }; + std::transform(glvendor.begin(), glvendor.end(), glvendor.begin(), ::tolower); + + // Intel has *notoriously* buggy DSA implementations, especially around cubemaps + if (std::string::npos != glvendor.find("intel")) { + gl::setDisableGl45(true); + } + wglMakeCurrent(0, 0); hGLRC.reset(); if (!wglChoosePixelFormatARB || !wglCreateContextAttribsARB) { diff --git a/libraries/gl/src/gl/GLHelpers.h b/libraries/gl/src/gl/GLHelpers.h index 95c3b6a5c2..c09f9d4963 100644 --- a/libraries/gl/src/gl/GLHelpers.h +++ b/libraries/gl/src/gl/GLHelpers.h @@ -55,6 +55,7 @@ namespace gl { bool checkGLErrorDebug(const char* name); bool disableGl45(); + void setDisableGl45(bool disable); uint16_t getTargetVersion(); diff --git a/tests-manual/gpu/CMakeLists.txt b/tests-manual/gpu/CMakeLists.txt index 2b04bdc3f2..6e3781acff 100644 --- a/tests-manual/gpu/CMakeLists.txt +++ b/tests-manual/gpu/CMakeLists.txt @@ -6,7 +6,7 @@ set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") link_hifi_libraries( shared task networking gl ktx shaders gpu procedural octree image - graphics model-networking fbx hfm animation + graphics model-networking fbx hfm animation material-networking script-engine render render-utils ${PLATFORM_GL_BACKEND} )