Re: [Piglit] [PATCH] vulkan: test cases for large local arrays
Looks good to me Reviewed-by: Neil Roberts - Neil Alejandro Piñeiro 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 0..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 0..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 0..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
[Piglit] [PATCH] vulkan: test cases for large local arrays
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 0..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 0..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 0..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 0..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