On 04/27/2018 12:01 AM, Ilia Mirkin wrote: > NVIDIA hardware has "short" immediates, and some instructions have both > long and short immediate variants. Nouveau was picking the wrong one > under certain conditions. This adds tests which are likely to cause > these kinds of issues to surface in a backend.
It might be worth putting a note about this in the test scripts. Otherwise, someone may come along later, and, thinking the tests are redundant, try to remove them. > Since this tests for very precise bit patterns, restrict to GLSL 1.30, > which introduced bit operations for integers. > > Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> > Reviewed-by: Eric Anholt <e...@anholt.net> > --- > > v1 -> v2: move from GLSL 1.10 to GLSL 1.30 > > .../immediates/fs-op-add-int-immed-1.shader_test | 24 > ++++++++++++++++++++++ > .../immediates/fs-op-add-int-immed-2.shader_test | 24 > ++++++++++++++++++++++ > .../immediates/fs-op-add-int-immed-3.shader_test | 24 > ++++++++++++++++++++++ > .../immediates/fs-op-add-int-immed-4.shader_test | 24 > ++++++++++++++++++++++ > .../fs-op-bitand-int-immed-1.shader_test | 21 +++++++++++++++++++ > .../fs-op-bitand-int-immed-2.shader_test | 21 +++++++++++++++++++ > .../fs-op-bitand-int-immed-3.shader_test | 21 +++++++++++++++++++ > .../fs-op-bitand-int-immed-4.shader_test | 21 +++++++++++++++++++ > .../immediates/fs-op-mul-int-immed-1.shader_test | 24 > ++++++++++++++++++++++ > .../immediates/fs-op-mul-int-immed-2.shader_test | 24 > ++++++++++++++++++++++ > .../immediates/fs-op-mul-int-immed-3.shader_test | 24 > ++++++++++++++++++++++ > .../immediates/fs-op-mul-int-immed-4.shader_test | 24 > ++++++++++++++++++++++ > 12 files changed, 276 insertions(+) > create mode 100644 > tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-1.shader_test > create mode 100644 > tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-2.shader_test > create mode 100644 > tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-3.shader_test > create mode 100644 > tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-4.shader_test > create mode 100644 > tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-1.shader_test > create mode 100644 > tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-2.shader_test > create mode 100644 > tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-3.shader_test > create mode 100644 > tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-4.shader_test > create mode 100644 > tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-1.shader_test > create mode 100644 > tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-2.shader_test > create mode 100644 > tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-3.shader_test > create mode 100644 > tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-4.shader_test > > diff --git > a/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-1.shader_test > b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-1.shader_test > new file mode 100644 > index 000000000..d4421e613 > --- /dev/null > +++ > b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-1.shader_test > @@ -0,0 +1,24 @@ > +[require] > +GLSL >= 1.30 > + > +[vertex shader passthrough] > + > +[fragment shader] > +uniform int arg0; > +uniform int expected; > + > +void main() > +{ > + int result = (arg0 + 0x80000); > + gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, > 0.0, 0.0, 1.0); > +} > + > +[test] > +clear color 0.0 0.0 1.0 0.0 > +clear > + > +uniform int arg0 0 > +uniform int expected 0x80000 > + > +draw rect -1 -1 2 2 > +probe all rgba 0 1 0 1 > diff --git > a/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-2.shader_test > b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-2.shader_test > new file mode 100644 > index 000000000..f20b3383f > --- /dev/null > +++ > b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-2.shader_test > @@ -0,0 +1,24 @@ > +[require] > +GLSL >= 1.30 > + > +[vertex shader passthrough] > + > +[fragment shader] > +uniform int arg0; > +uniform int expected; > + > +void main() > +{ > + int result = (arg0 + 0x7ffff); > + gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, > 0.0, 0.0, 1.0); > +} > + > +[test] > +clear color 0.0 0.0 1.0 0.0 > +clear > + > +uniform int arg0 0 > +uniform int expected 0x7ffff > + > +draw rect -1 -1 2 2 > +probe all rgba 0 1 0 1 > diff --git > a/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-3.shader_test > b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-3.shader_test > new file mode 100644 > index 000000000..45570ba03 > --- /dev/null > +++ > b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-3.shader_test > @@ -0,0 +1,24 @@ > +[require] > +GLSL >= 1.30 > + > +[vertex shader passthrough] > + > +[fragment shader] > +uniform int arg0; > +uniform int expected; > + > +void main() > +{ > + int result = (arg0 - 0x80000); > + gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, > 0.0, 0.0, 1.0); > +} > + > +[test] > +clear color 0.0 0.0 1.0 0.0 > +clear > + > +uniform int arg0 0 > +uniform int expected -0x80000 > + > +draw rect -1 -1 2 2 > +probe all rgba 0 1 0 1 > diff --git > a/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-4.shader_test > b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-4.shader_test > new file mode 100644 > index 000000000..f14187948 > --- /dev/null > +++ > b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-4.shader_test > @@ -0,0 +1,24 @@ > +[require] > +GLSL >= 1.30 > + > +[vertex shader passthrough] > + > +[fragment shader] > +uniform int arg0; > +uniform int expected; > + > +void main() > +{ > + int result = (arg0 - 0x80001); > + gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, > 0.0, 0.0, 1.0); > +} > + > +[test] > +clear color 0.0 0.0 1.0 0.0 > +clear > + > +uniform int arg0 0 > +uniform int expected -0x80001 > + > +draw rect -1 -1 2 2 > +probe all rgba 0 1 0 1 > diff --git > a/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-1.shader_test > > b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-1.shader_test > new file mode 100644 > index 000000000..0f3ced422 > --- /dev/null > +++ > b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-1.shader_test > @@ -0,0 +1,21 @@ > +[require] > +GLSL >= 1.30 > + > +[vertex shader passthrough] > + > +[fragment shader] > +uniform uint arg0 = 0xffffffffu; > +uniform uint expected = 0x80000u; > + > +void main() > +{ > + uint result = (arg0 & 0x80000u); > + gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, > 0.0, 0.0, 1.0); > +} > + > +[test] > +clear color 0.0 0.0 1.0 0.0 > +clear > + > +draw rect -1 -1 2 2 > +probe all rgba 0 1 0 1 > diff --git > a/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-2.shader_test > > b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-2.shader_test > new file mode 100644 > index 000000000..1a2041237 > --- /dev/null > +++ > b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-2.shader_test > @@ -0,0 +1,21 @@ > +[require] > +GLSL >= 1.30 > + > +[vertex shader passthrough] > + > +[fragment shader] > +uniform uint arg0 = 0xffffffffu; > +uniform uint expected = 0x7ffffu; > + > +void main() > +{ > + uint result = (arg0 & 0x7ffffu); > + gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, > 0.0, 0.0, 1.0); > +} > + > +[test] > +clear color 0.0 0.0 1.0 0.0 > +clear > + > +draw rect -1 -1 2 2 > +probe all rgba 0 1 0 1 > diff --git > a/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-3.shader_test > > b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-3.shader_test > new file mode 100644 > index 000000000..883505347 > --- /dev/null > +++ > b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-3.shader_test > @@ -0,0 +1,21 @@ > +[require] > +GLSL >= 1.30 > + > +[vertex shader passthrough] > + > +[fragment shader] > +uniform uint arg0 = 0xffffffffu; > +uniform uint expected = -0x80000u; > + > +void main() > +{ > + uint result = (arg0 & -0x80000u); > + gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, > 0.0, 0.0, 1.0); > +} > + > +[test] > +clear color 0.0 0.0 1.0 0.0 > +clear > + > +draw rect -1 -1 2 2 > +probe all rgba 0 1 0 1 > diff --git > a/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-4.shader_test > > b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-4.shader_test > new file mode 100644 > index 000000000..2805991cb > --- /dev/null > +++ > b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-4.shader_test > @@ -0,0 +1,21 @@ > +[require] > +GLSL >= 1.30 > + > +[vertex shader passthrough] > + > +[fragment shader] > +uniform uint arg0 = 0xffffffffu; > +uniform uint expected = -0x80001u; > + > +void main() > +{ > + uint result = (arg0 & -0x80001u); > + gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, > 0.0, 0.0, 1.0); > +} > + > +[test] > +clear color 0.0 0.0 1.0 0.0 > +clear > + > +draw rect -1 -1 2 2 > +probe all rgba 0 1 0 1 > diff --git > a/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-1.shader_test > b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-1.shader_test > new file mode 100644 > index 000000000..28ef7d1e9 > --- /dev/null > +++ > b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-1.shader_test > @@ -0,0 +1,24 @@ > +[require] > +GLSL >= 1.30 > + > +[vertex shader passthrough] > + > +[fragment shader] > +uniform int arg0; > +uniform int expected; > + > +void main() > +{ > + int result = (arg0 * 0x80001); > + gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, > 0.0, 0.0, 1.0); > +} > + > +[test] > +clear color 0.0 0.0 1.0 0.0 > +clear > + > +uniform int arg0 1 > +uniform int expected 0x80001 > + > +draw rect -1 -1 2 2 > +probe all rgba 0 1 0 1 > diff --git > a/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-2.shader_test > b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-2.shader_test > new file mode 100644 > index 000000000..5cf5e01b3 > --- /dev/null > +++ > b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-2.shader_test > @@ -0,0 +1,24 @@ > +[require] > +GLSL >= 1.30 > + > +[vertex shader passthrough] > + > +[fragment shader] > +uniform int arg0; > +uniform int expected; > + > +void main() > +{ > + int result = (arg0 * 0x7ffff); > + gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, > 0.0, 0.0, 1.0); > +} > + > +[test] > +clear color 0.0 0.0 1.0 0.0 > +clear > + > +uniform int arg0 1 > +uniform int expected 0x7ffff > + > +draw rect -1 -1 2 2 > +probe all rgba 0 1 0 1 > diff --git > a/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-3.shader_test > b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-3.shader_test > new file mode 100644 > index 000000000..3bc00107e > --- /dev/null > +++ > b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-3.shader_test > @@ -0,0 +1,24 @@ > +[require] > +GLSL >= 1.30 > + > +[vertex shader passthrough] > + > +[fragment shader] > +uniform int arg0; > +uniform int expected; > + > +void main() > +{ > + int result = (arg0 * -0x80000); > + gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, > 0.0, 0.0, 1.0); > +} > + > +[test] > +clear color 0.0 0.0 1.0 0.0 > +clear > + > +uniform int arg0 1 > +uniform int expected -0x80000 > + > +draw rect -1 -1 2 2 > +probe all rgba 0 1 0 1 > diff --git > a/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-4.shader_test > b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-4.shader_test > new file mode 100644 > index 000000000..6a6b937d0 > --- /dev/null > +++ > b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-4.shader_test > @@ -0,0 +1,24 @@ > +[require] > +GLSL >= 1.30 > + > +[vertex shader passthrough] > + > +[fragment shader] > +uniform int arg0; > +uniform int expected; > + > +void main() > +{ > + int result = (arg0 * -0x80001); > + gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, > 0.0, 0.0, 1.0); > +} > + > +[test] > +clear color 0.0 0.0 1.0 0.0 > +clear > + > +uniform int arg0 1 > +uniform int expected -0x80001 > + > +draw rect -1 -1 2 2 > +probe all rgba 0 1 0 1 > _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit