summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnand Thakker <github@anandthakker.net>2017-04-07 12:14:23 -0400
committerAnand Thakker <github@anandthakker.net>2017-04-07 12:14:23 -0400
commit3176f050c04ab72868c39ce1fb34f4acbf3f7aa1 (patch)
treeb27bc49a2f1232483817b977f2c1b2f00471572b
parent6c3c4211197d79fd7671c2ada09b1f4498e9d37c (diff)
downloadqtlocation-mapboxgl-upstream/log-precision.tar.gz
Log out shader variable precisionupstream/log-precision
Closes #8533
-rw-r--r--src/mbgl/gl/context.cpp22
-rw-r--r--src/mbgl/gl/context.hpp1
-rw-r--r--src/mbgl/renderer/painter.cpp2
3 files changed, 25 insertions, 0 deletions
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<GLenum>(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<gl::ProcAddress(const char*)>&);
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<Programs>(context,
ProgramParameters{ pixelRatio, false, programCacheDir });
+
+ context.logGLDiagnostics();
#ifndef NDEBUG
overdrawPrograms =
std::make_unique<Programs>(context, ProgramParameters{ pixelRatio, true, programCacheDir });