From 69f7a3dac69bc91464e5cba3ebf859777fa5f742 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 26 Jun 2020 07:19:46 -0400 Subject: [PATCH] glsl: don't lower precision of textureSize Reviewed-by: Alyssa Rosenzweig Part-of: --- src/compiler/glsl/lower_precision.cpp | 4 ++++ src/compiler/glsl/tests/lower_precision_test.py | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/compiler/glsl/lower_precision.cpp b/src/compiler/glsl/lower_precision.cpp index b2d8330a44d..2529a35b4dd 100644 --- a/src/compiler/glsl/lower_precision.cpp +++ b/src/compiler/glsl/lower_precision.cpp @@ -457,6 +457,10 @@ is_lowerable_builtin(ir_call *ir, * uses lower precision. The function parameters don't matter. */ if (var && var->type->without_array()->is_sampler()) { + /* textureSize always returns highp. */ + if (!strcmp(ir->callee_name(), "textureSize")) + return false; + return var->data.precision == GLSL_PRECISION_MEDIUM || var->data.precision == GLSL_PRECISION_LOW; } diff --git a/src/compiler/glsl/tests/lower_precision_test.py b/src/compiler/glsl/tests/lower_precision_test.py index 65f3e25b0d7..9651a066ed6 100644 --- a/src/compiler/glsl/tests/lower_precision_test.py +++ b/src/compiler/glsl/tests/lower_precision_test.py @@ -1161,6 +1161,21 @@ TESTS = [ } """, r'\(expression +f16vec4 +dFdy +\(expression +f16vec4'), + Test("textureSize", + """ + #version 310 es + precision mediump float; + precision mediump int; + + uniform mediump sampler2D tex; + out ivec2 color; + + void main() + { + color = textureSize(tex, 0) * ivec2(2); + } + """, + r'expression ivec2 \* \(txs ivec2 \(var_ref tex'), ] -- 2.30.2