From 3176f050c04ab72868c39ce1fb34f4acbf3f7aa1 Mon Sep 17 00:00:00 2001 From: Anand Thakker Date: Fri, 7 Apr 2017 12:14:23 -0400 Subject: Log out shader variable precision Closes #8533 --- src/mbgl/gl/context.cpp | 22 ++++++++++++++++++++++ src/mbgl/gl/context.hpp | 1 + src/mbgl/renderer/painter.cpp | 2 ++ 3 files changed, 25 insertions(+) diff --git a/src/mbgl/gl/context.cpp b/src/mbgl/gl/context.cpp index 565fe33771..58af38042e 100644 --- a/src/mbgl/gl/context.cpp +++ b/src/mbgl/gl/context.cpp @@ -90,6 +90,28 @@ void Context::enableDebugging() { MBGL_CHECK_ERROR(debugging->debugMessageCallback(extension::Debugging::DebugCallback, nullptr)); } +void Context::logGLDiagnostics() { +#ifdef GL_HIGH_FLOAT + int precision; + int range[2]; + MBGL_CHECK_ERROR(glGetShaderPrecisionFormat(GL_VERTEX_SHADER, GL_LOW_FLOAT, range, &precision)); + mbgl::Log::Info(mbgl::Event::General, "vertex shader / lowp float, precision: %i, range: [%i, %i]", precision, range[0], range[1]); + MBGL_CHECK_ERROR(glGetShaderPrecisionFormat(GL_VERTEX_SHADER, GL_MEDIUM_FLOAT, range, &precision)); + mbgl::Log::Info(mbgl::Event::General, "vertex shader / mediump float, precision: %i, range: [%i, %i]", precision, range[0], range[1]); + MBGL_CHECK_ERROR(glGetShaderPrecisionFormat(GL_VERTEX_SHADER, GL_HIGH_FLOAT, range, &precision)); + mbgl::Log::Info(mbgl::Event::General, "vertex shader / highp float, precision: %i, range: [%i, %i]", precision, range[0], range[1]); + + MBGL_CHECK_ERROR(glGetShaderPrecisionFormat(GL_FRAGMENT_SHADER, GL_LOW_FLOAT, range, &precision)); + mbgl::Log::Info(mbgl::Event::General, "fragment shader / lowp float, precision: %i, range: [%i, %i]", precision, range[0], range[1]); + MBGL_CHECK_ERROR(glGetShaderPrecisionFormat(GL_FRAGMENT_SHADER, GL_MEDIUM_FLOAT, range, &precision)); + mbgl::Log::Info(mbgl::Event::General, "fragment shader / mediump float, precision: %i, range: [%i, %i]", precision, range[0], range[1]); + MBGL_CHECK_ERROR(glGetShaderPrecisionFormat(GL_FRAGMENT_SHADER, GL_HIGH_FLOAT, range, &precision)); + mbgl::Log::Info(mbgl::Event::General, "fragment shader / highp float, precision: %i, range: [%i, %i]", precision, range[0], range[1]); +#else + mbgl::Log::Info(mbgl::Event::General, "Shader precision information is not available."); +#endif +} + UniqueShader Context::createShader(ShaderType type, const std::string& source) { UniqueShader result { MBGL_CHECK_ERROR(glCreateShader(static_cast(type))), { this } }; diff --git a/src/mbgl/gl/context.hpp b/src/mbgl/gl/context.hpp index 14af299baa..7aa489e03c 100644 --- a/src/mbgl/gl/context.hpp +++ b/src/mbgl/gl/context.hpp @@ -46,6 +46,7 @@ public: void initializeExtensions(const std::function&); void enableDebugging(); + void logGLDiagnostics(); UniqueShader createShader(ShaderType type, const std::string& source); UniqueProgram createProgram(ShaderID vertexShader, ShaderID fragmentShader); diff --git a/src/mbgl/renderer/painter.cpp b/src/mbgl/renderer/painter.cpp index f7a498ecae..eb5e3c5381 100644 --- a/src/mbgl/renderer/painter.cpp +++ b/src/mbgl/renderer/painter.cpp @@ -96,6 +96,8 @@ Painter::Painter(gl::Context& context_, programs = std::make_unique(context, ProgramParameters{ pixelRatio, false, programCacheDir }); + + context.logGLDiagnostics(); #ifndef NDEBUG overdrawPrograms = std::make_unique(context, ProgramParameters{ pixelRatio, true, programCacheDir }); -- cgit v1.2.1