summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2020-01-08 15:11:53 +0200
committerAntti Määttä <antti.maatta@qt.io>2020-01-13 11:32:08 +0200
commit7b5d524ab3e4cc6dd88987bd4afd2cee3054e9da (patch)
treecc518f4d4f8260da05564c273d1915826ca639f3
parentad501c46845fbb2efa66ee327c63cf2e9a0c2d71 (diff)
Add env variable to configure shader precision
Add QT3DS_PRECISION and QT3DS_SAMPLER_PRECISION to enable changing the used precision in the shaders. Task-number: QT3DS-1994 Change-Id: I5816fccf25a1bbebdb29f8d9db94832eea2fe97f Reviewed-by: Janne Kangas <janne.kangas@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r--src/runtimerender/Qt3DSRenderShaderCache.cpp48
1 files changed, 38 insertions, 10 deletions
diff --git a/src/runtimerender/Qt3DSRenderShaderCache.cpp b/src/runtimerender/Qt3DSRenderShaderCache.cpp
index 4693cb6..e26405c 100644
--- a/src/runtimerender/Qt3DSRenderShaderCache.cpp
+++ b/src/runtimerender/Qt3DSRenderShaderCache.cpp
@@ -291,23 +291,51 @@ struct ShaderCache : public IShaderCache
// add precision qualifier depending on backend
if (IQt3DSRenderer::IsGlEs3Context(m_RenderContext.GetRenderContextType())) {
- m_InsertStr.append("precision highp float;\n"
- "precision highp int;\n");
- if( m_RenderContext.GetRenderBackendCap(render::NVRenderBackend::NVRenderBackendCaps::gpuShader5) ) {
- m_InsertStr.append("precision mediump sampler2D;\n"
- "precision mediump sampler2DArray;\n"
- "precision mediump sampler2DShadow;\n");
+ QString precision = qEnvironmentVariable("QT3DS_PRECISION");
+ QString samplerPrecision = qEnvironmentVariable("QT3DS_SAMPLER_PRECISION");
+
+ if ((!precision.isEmpty() && precision != QStringLiteral("mediump")
+ && precision != QStringLiteral("lowp")
+ && precision != QStringLiteral("highp")) || precision.isEmpty()) {
+ precision = "highp";
+ }
+ if ((!samplerPrecision.isEmpty()
+ && samplerPrecision != QStringLiteral("mediump")
+ && samplerPrecision != QStringLiteral("lowp")
+ && samplerPrecision != QStringLiteral("highp"))
+ || samplerPrecision.isEmpty()) {
+ samplerPrecision = "mediump";
+ }
+
+ QString precisionQualifiers("precision %1 float;\n"
+ "precision %1 int;\n");
+ m_InsertStr.append(precisionQualifiers.arg(precision));
+ if (m_RenderContext.GetRenderBackendCap(
+ NVRenderBackend::NVRenderBackendCaps::gpuShader5)) {
+ QString samplerQualifiers("precision %1 sampler2D;\n"
+ "precision %1 sampler2DArray;\n"
+ "precision %1 sampler2DShadow;\n");
+ m_InsertStr.append(samplerQualifiers.arg(samplerPrecision));
if (m_RenderContext.IsShaderImageLoadStoreSupported()) {
- m_InsertStr.append("precision mediump image2D;\n");
+ QString imageQualifiers("precision %1 image2D;\n");
+ m_InsertStr.append(imageQualifiers.arg(samplerPrecision));
}
}
AddBackwardCompatibilityDefines(shaderType);
} else {
// GLES2
- m_InsertStr.append("precision mediump float;\n"
- "precision mediump int;\n"
- "#define texture texture2D\n");
+ QString precision = qEnvironmentVariable("QT3DS_PRECISION");
+ if ((!precision.isEmpty() && precision != QStringLiteral("mediump")
+ && precision != QStringLiteral("lowp")
+ && precision != QStringLiteral("highp")) || precision.isEmpty()) {
+ precision = "mediump";
+ }
+ QString precisionQualifiers("precision %1 float;\n"
+ "precision %1 int;\n");
+ m_InsertStr.append(precisionQualifiers.arg(precision));
+ m_InsertStr.append("#define texture texture2D\n");
+
if (m_RenderContext.IsTextureLodSupported())
m_InsertStr.append("#define textureLod texture2DLodEXT\n");
else