Looks good to me š Reviewed-by: Neil Roberts <nrobe...@igalia.com>
- Neil Alejandro PiƱeiro <apinhe...@igalia.com> writes: > Equivalent to the GLSL tests added with the series "Test cases for > large GLSL local arrays". Quoting from the cover-letter of that > series: > > "Drivers typically need special handling for local array storage > when arrays exceed a certain size, this adds a few test cases for > exercising some corner cases that were useful when implementing > support for this in the r600g driver." > > Right now only two of the tests included on this series is passing > (local-array and multiple). But all of them were working until the the > following commit: > * b3c6146925595ec3a7eece3afb9ccaad32906d4c ("nir: Copy propagation between > blocks") > > So it is fact, a regression. More info on > https://bugs.freedesktop.org/show_bug.cgi?id=108624 > > Original GLSL series: > https://lists.freedesktop.org/archives/piglit/2017-March/021867.html > --- > .../fs-large-local-array-vec2.vk_shader_test | 38 +++++++++++++++++ > .../fs-large-local-array-vec3.vk_shader_test | 38 +++++++++++++++++ > .../fs-large-local-array-vec4.vk_shader_test | 38 +++++++++++++++++ > .../shaders/fs-large-local-array.vk_shader_test | 47 > ++++++++++++++++++++++ > .../fs-multiple-large-local-array.vk_shader_test | 40 ++++++++++++++++++ > 5 files changed, 201 insertions(+) > create mode 100644 > tests/vulkan/shaders/fs-large-local-array-vec2.vk_shader_test > create mode 100644 > tests/vulkan/shaders/fs-large-local-array-vec3.vk_shader_test > create mode 100644 > tests/vulkan/shaders/fs-large-local-array-vec4.vk_shader_test > create mode 100644 tests/vulkan/shaders/fs-large-local-array.vk_shader_test > create mode 100644 > tests/vulkan/shaders/fs-multiple-large-local-array.vk_shader_test > > diff --git a/tests/vulkan/shaders/fs-large-local-array-vec2.vk_shader_test > b/tests/vulkan/shaders/fs-large-local-array-vec2.vk_shader_test > new file mode 100644 > index 000000000..6fbf71d50 > --- /dev/null > +++ b/tests/vulkan/shaders/fs-large-local-array-vec2.vk_shader_test > @@ -0,0 +1,38 @@ > +# Tests a large vec2 local array. > +# Vulkan equivalent to > tests/spec/glsl-1.30/execution/fs-large-local-array-vec2.shader_test > + > +[require] > + > +[vertex shader passthrough] > + > +[fragment shader] > +#version 450 > + > +layout (binding = 5) uniform block { > + uint i; > +}; > + > +layout (location = 0) out vec4 out_color; > + > +void main() > +{ > + vec2 A[130]; > + A[20].g = 0; > + A[i].g = 37; > + A[i].r = 1; > + out_color.rba = vec3(0.0, 0.0, 1.0); > + out_color.g = float(A[20].g == 37); > +} > + > +[test] > +clear color 1.0 0.0 0.0 1.0 > +clear > + > +uniform ubo 5 uint 0 19 > +draw rect -1 -1 2 2 > +probe all rgba 0.0 0.0 0.0 1.0 > + > +clear > +uniform ubo 5 uint 0 20 > +draw rect -1 -1 2 2 > +probe all rgba 0.0 1.0 0.0 1.0 > diff --git a/tests/vulkan/shaders/fs-large-local-array-vec3.vk_shader_test > b/tests/vulkan/shaders/fs-large-local-array-vec3.vk_shader_test > new file mode 100644 > index 000000000..8c00bc720 > --- /dev/null > +++ b/tests/vulkan/shaders/fs-large-local-array-vec3.vk_shader_test > @@ -0,0 +1,38 @@ > +# Tests a large vec3 local array. > +# Vulkan equivalent to > tests/spec/glsl-1.30/execution/fs-large-local-array-vec3.shader_test > + > +[require] > + > +[vertex shader passthrough] > + > +[fragment shader] > +#version 450 > + > +layout (binding = 5) uniform block { > + uint i; > +}; > + > +layout (location = 0) out vec4 out_color; > + > +void main() > +{ > + vec3 A[130]; > + A[20].g = 0; > + A[i].g = 37; > + A[i].r = 1; > + out_color.rba = vec3(0.0, 0.0, 1.0); > + out_color.g = float(A[20].g == 37); > +} > + > +[test] > +clear color 1.0 0.0 0.0 1.0 > +clear > + > +uniform ubo 5 uint 0 19 > +draw rect -1 -1 2 2 > +probe all rgba 0.0 0.0 0.0 1.0 > + > +clear > +uniform ubo 5 uint 0 20 > +draw rect -1 -1 2 2 > +probe all rgba 0.0 1.0 0.0 1.0 > diff --git a/tests/vulkan/shaders/fs-large-local-array-vec4.vk_shader_test > b/tests/vulkan/shaders/fs-large-local-array-vec4.vk_shader_test > new file mode 100644 > index 000000000..6239bfee6 > --- /dev/null > +++ b/tests/vulkan/shaders/fs-large-local-array-vec4.vk_shader_test > @@ -0,0 +1,38 @@ > +# Tests a large vec4 local array. > +# Vulkan equivalent to > tests/spec/glsl-1.30/execution/fs-large-local-array-vec4.shader_test > + > +[require] > + > +[vertex shader passthrough] > + > +[fragment shader] > +#version 450 > + > +layout (binding = 5) uniform block { > + uint i; > +}; > + > +layout (location = 0) out vec4 out_color; > + > +void main() > +{ > + vec4 A[130]; > + A[20].g = 0; > + A[i].g = 37; > + A[i].r = 1; > + out_color.rba = vec3(0.0, 0.0, 1.0); > + out_color.g = float(A[20].g == 37); > +} > + > +[test] > +clear color 1.0 0.0 0.0 1.0 > +clear > + > +uniform ubo 5 uint 0 19 > +draw rect -1 -1 2 2 > +probe all rgba 0.0 0.0 0.0 1.0 > + > +clear > +uniform ubo 5 uint 0 20 > +draw rect -1 -1 2 2 > +probe all rgba 0.0 1.0 0.0 1.0 > diff --git a/tests/vulkan/shaders/fs-large-local-array.vk_shader_test > b/tests/vulkan/shaders/fs-large-local-array.vk_shader_test > new file mode 100644 > index 000000000..c62109ee1 > --- /dev/null > +++ b/tests/vulkan/shaders/fs-large-local-array.vk_shader_test > @@ -0,0 +1,47 @@ > +# Tests a large uint local array. > +# Vulkan equivalent to > tests/spec/glsl-1.30/execution/fs-large-local-array.shader_test > +# And quoting from that test: > +# > +# "Test correct handling of local-scope declared arrays large enough to > +# typically not fit into first level GPU memory such as its register > file, > +# requiring storing/loading to some device-specific scratch space. > +# > +# One hardware example is R600 where arrays larger than 124*vec4 cannot > +# fit into its GPR register file and has to be spilled to scratch memory. > +# As of 2017-03-06 this is the largest known register file of any GPU, so > +# the test uses that as a size to guarantee some form of spilling on any > GPU." > + > +[require] > + > +[vertex shader passthrough] > + > +[fragment shader] > +#version 450 > + > +layout (binding = 5) uniform block { > + uint i; > +}; > + > +layout (location = 0) out vec4 out_color; > + > +void main() > +{ > + uint A[130]; > + A[20] = 0u; > + A[i] = 37u; > + out_color.rba = vec3(0.0, 0.0, 1.0); > + out_color.g = float(A[20] == 37u); > +} > + > +[test] > +clear color 1.0 0.0 0.0 1.0 > +clear > + > +uniform ubo 5 uint 0 19 > +draw rect -1 -1 2 2 > +probe all rgba 0.0 0.0 0.0 1.0 > + > +clear > +uniform ubo 5 uint 0 20 > +draw rect -1 -1 2 2 > +probe all rgba 0.0 1.0 0.0 1.0 > diff --git > a/tests/vulkan/shaders/fs-multiple-large-local-array.vk_shader_test > b/tests/vulkan/shaders/fs-multiple-large-local-array.vk_shader_test > new file mode 100644 > index 000000000..658027876 > --- /dev/null > +++ b/tests/vulkan/shaders/fs-multiple-large-local-array.vk_shader_test > @@ -0,0 +1,40 @@ > +# Tests multiple large uint local arrays. > +# Vulkan equivalent to > tests/spec/glsl-1.30/execution/fs-multiple-large-local-array.shader_test > + > +[require] > + > +[vertex shader passthrough] > + > +[fragment shader] > +#version 450 > + > +layout (binding = 5) uniform block { > + uint i; > +}; > + > +layout (location = 0) out vec4 out_color; > + > +void main() > +{ > + uint A[60]; > + uint B[70]; > + A[20] = 0u; > + A[i] = 37u; > + B[20] = 0u; > + B[i] = 39u; > + out_color.rba = vec3(0.0, 0.0, 1.0); > + out_color.g = float(A[20] == 37u && B[20] == 39u); > +} > + > +[test] > +clear color 1.0 0.0 0.0 1.0 > +clear > + > +uniform ubo 5 uint 0 19 > +draw rect -1 -1 2 2 > +probe all rgba 0.0 0.0 0.0 1.0 > + > +clear > +uniform ubo 5 uint 0 20 > +draw rect -1 -1 2 2 > +probe all rgba 0.0 1.0 0.0 1.0 > -- > 2.14.1 > > _______________________________________________ > Piglit mailing list > Piglit@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/piglit _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit