summaryrefslogtreecommitdiff
path: root/generated_tests
diff options
context:
space:
mode:
authorTimothy Arceri <tarceri@itsqueeze.com>2020-05-01 11:14:17 +1000
committerMarge Bot <eric+marge@anholt.net>2020-05-02 01:32:14 +0000
commitc6a4c8ee1373a13df9ea88d4ef55da510074927d (patch)
tree1ec11afe3dc2c5ce0d9b66518f02e754bdec1e66 /generated_tests
parent7331a4ad24b004b6daefa0b2aebb475de5ee67da (diff)
gen_variable_index_write_tests: stop arrays from being optimised away
Previously these tests would generate something that looked like this: mat3x3[3] dst_matrix = mat3x3[3](mat3x3(0.0), mat3x3(0.0), mat3x3(0.0)); dst_matrix[index] = src_matrix; dst_matrix[index][1] = value; gl_FrontColor = (distanceSqr(dst_matrix[index] * v, expect) < 4e-9) ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); Because we are writing to and reading from the array with the same uniform index Mesas NIR optimisations were smart enough to eliminate the array altogether. With an upcoming Mesa improvement to eliminate dead uniforms this was also causing the tests to fail because the uniform index gets eliminated and the test can no longer set it. With this change we add index2 which will be set to the same value as index but only used when reading from the array. With this NIR can no longer eliminate the array. An example of the new code: mat3x3[3] dst_matrix = mat3x3[3](mat3x3(0.0), mat3x3(0.0), mat3x3(0.0)); dst_matrix[index] = src_matrix; dst_matrix[index][1] = value; gl_FrontColor = (distanceSqr(dst_matrix[index2] * v, expect) < 4e-9) ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/piglit/-/merge_requests/273>
Diffstat (limited to 'generated_tests')
-rw-r--r--generated_tests/gen_variable_index_write_tests.py10
-rw-r--r--generated_tests/templates/gen_variable_index_write_tests/helpers.mako4
-rw-r--r--generated_tests/templates/gen_variable_index_write_tests/vs.shader_test.mako2
3 files changed, 14 insertions, 2 deletions
diff --git a/generated_tests/gen_variable_index_write_tests.py b/generated_tests/gen_variable_index_write_tests.py
index e1920fdbf..8b422730b 100644
--- a/generated_tests/gen_variable_index_write_tests.py
+++ b/generated_tests/gen_variable_index_write_tests.py
@@ -104,6 +104,16 @@ class TestParams(object):
return ''
@utils.lazy_property
+ def idx2(self):
+ if self.array_dim != 0:
+ if self.index_value == 'index':
+ return '[{}2]'.format(self.index_value)
+ else:
+ return '[{}]'.format(self.index_value)
+ else:
+ return ''
+
+ @utils.lazy_property
def test_vec(self):
if self.matrix_dim == 2:
return ["0.803161418975390", "0.852987140792140"]
diff --git a/generated_tests/templates/gen_variable_index_write_tests/helpers.mako b/generated_tests/templates/gen_variable_index_write_tests/helpers.mako
index 997d1ea33..f4236acfc 100644
--- a/generated_tests/templates/gen_variable_index_write_tests/helpers.mako
+++ b/generated_tests/templates/gen_variable_index_write_tests/helpers.mako
@@ -78,6 +78,7 @@
% if params.array_dim != 0:
uniform int index;
+ uniform int index2;
% endif
% if params.value_type == 'float':
@@ -148,7 +149,7 @@ void main()
${emit_transform(params)}
% endif
- gl_FragColor = (distanceSqr(dst_matrix${params.idx} * v, expect) < 4e-9)
+ gl_FragColor = (distanceSqr(dst_matrix${params.idx2} * v, expect) < 4e-9)
? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
}
</%def>
@@ -157,6 +158,7 @@ void main()
% for i in params.test_sizes:
% if params.array_dim != 0 and params.index_value == 'index':
uniform int index ${i - 1}
+ uniform int index2 ${i - 1}
% endif
<% x_base = (i - 1) * (15 * params.matrix_dim + 10) %>
diff --git a/generated_tests/templates/gen_variable_index_write_tests/vs.shader_test.mako b/generated_tests/templates/gen_variable_index_write_tests/vs.shader_test.mako
index 06e539cfc..71dd55f42 100644
--- a/generated_tests/templates/gen_variable_index_write_tests/vs.shader_test.mako
+++ b/generated_tests/templates/gen_variable_index_write_tests/vs.shader_test.mako
@@ -52,7 +52,7 @@ void main()
${helpers.emit_transform(params)}
% if params.mode != 'varying':
- gl_FrontColor = (distanceSqr(dst_matrix${params.idx} * v, expect) < 4e-9)
+ gl_FrontColor = (distanceSqr(dst_matrix${params.idx2} * v, expect) < 4e-9)
? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
% endif
}