Add coverage for depth bias
authorVihanakangas <venni.ihanakangas@siru.fi>
Fri, 13 Nov 2020 10:27:24 +0000 (12:27 +0200)
committerAlexander Galazin <alexander.galazin@arm.com>
Fri, 12 Feb 2021 10:43:14 +0000 (11:43 +0100)
dEQP-VK didn't have coverage for depth bias testing.
This change verifies that the bias is calculated correctly
with floating-point depth format and integer depth formats.
The amber files copyrights under line_continuity have also been updated.
Updated amber commit id in fetch_sources.py.

New tests:

dEQP-VK.rasterization.depth_bias.*

Components: Vulkan

VK-GL-CTS issue: 2606

Change-Id: I82bdffef879f372e03602cd091e1675258c137ea

android/cts/master/vk-master-2020-03-01.txt
android/cts/master/vk-master.txt
external/fetch_sources.py
external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d16_unorm.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d24_unorm.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d32_sfloat.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/rasterization/line_continuity/line-strip.amber
external/vulkancts/data/vulkan/amber/rasterization/line_continuity/polygon-mode-lines.amber
external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp
external/vulkancts/mustpass/master/vk-default.txt

index 90219ba..20d6f72 100644 (file)
@@ -251320,6 +251320,9 @@ dEQP-VK.rasterization.provoking_vertex.line_strip
 dEQP-VK.rasterization.provoking_vertex.line_strip_with_adjacency
 dEQP-VK.rasterization.line_continuity.line-strip
 dEQP-VK.rasterization.line_continuity.polygon-mode-lines
+dEQP-VK.rasterization.depth_bias.d16_unorm
+dEQP-VK.rasterization.depth_bias.d32_sfloat
+dEQP-VK.rasterization.depth_bias.d24_unorm
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.kill
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.demote
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.terminate_invocation
index c9a2d89..42301c2 100644 (file)
@@ -615428,6 +615428,9 @@ dEQP-VK.rasterization.provoking_vertex.line_strip
 dEQP-VK.rasterization.provoking_vertex.line_strip_with_adjacency
 dEQP-VK.rasterization.line_continuity.line-strip
 dEQP-VK.rasterization.line_continuity.polygon-mode-lines
+dEQP-VK.rasterization.depth_bias.d16_unorm
+dEQP-VK.rasterization.depth_bias.d32_sfloat
+dEQP-VK.rasterization.depth_bias.d24_unorm
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.kill
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.demote
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.terminate_invocation
index c2c1dac..e836d7e 100644 (file)
@@ -333,7 +333,7 @@ PACKAGES = [
        GitRepo(
                "https://github.com/google/amber.git",
                None,
-               "e2ccba04930477fbc0dcde9b080facc033071751",
+               "0db8af9f6be1f7abb8030eaa593409d74476133b",
                "amber"),
 ]
 
diff --git a/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d16_unorm.amber b/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d16_unorm.amber
new file mode 100644 (file)
index 0000000..36ac2d5
--- /dev/null
@@ -0,0 +1,186 @@
+#!amber
+# Copyright 2020 Google LLC.
+# Copyright 2020 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This test draws two quads with depth values 0.3 and 0.5. Based on the equation in
+# Vulkan spec 26.12.3 the effective constant bias o is calculated as follows:
+
+# Both quads have a constant depth value, thus the maximum depth slope m is zero.
+# For minimun resolveble difference r there are two values accepted: r0 = 2^-16
+# and r1 = 2^-15. It is constant throughout the range of the entire depth buffer.
+
+# Using r0 the constant bias o value is:
+# 16384 * r0 = 16384 * 2^-16 = 0.25.
+
+# Adding this to the existing quad depth values should result as:
+# 0.3 + 0.25 = 0.55 and 0.5 + 0.25 = 0.75.
+
+# For r1 the same calculation for o is:
+# 16384 * r1 = 16384 * 2^-15 = 0.5.
+
+# Adding this to the existing quad depth values should result as:
+# 0.3 + 0.5 = 0.8 and 0.5 + 0.5 = 1.0
+
+SHADER vertex vert_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 position;
+layout(location = 0) out vec4 frag_color;
+
+layout(set = 0, binding = 0) readonly buffer block1 {
+  vec4 in_color;
+  float depth;
+};
+
+void main() {
+  gl_Position = vec4(position.xy, depth, 1.0);
+  frag_color = in_color;
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 frag_color;
+layout(location = 0) out vec4 final_color;
+
+void main() {
+  final_color = frag_color;
+}
+END
+
+SHADER vertex vert_shader_tex GLSL
+#version 430
+layout(location = 0) in vec4 position;
+layout(location = 1) in vec2 texcoords_in;
+layout(location = 0) out vec2 texcoords_out;
+void main() {
+  gl_Position = position;
+  texcoords_out = texcoords_in;
+}
+END
+
+SHADER fragment frag_shader_tex GLSL
+#version 430
+layout(location = 0) in vec2 texcoords_in;
+layout(location = 0) out vec4 color_out;
+uniform layout(set=0, binding=0) sampler2D tex_sampler;
+void main() {
+  float f = texture(tex_sampler, texcoords_in).r;
+  color_out = vec4(f, f, f, 1);
+}
+END
+
+BUFFER data_buf1 DATA_TYPE float DATA  1.0 0.0  0.0 1.0 0.3 END
+BUFFER data_buf2 DATA_TYPE float DATA  0.0 1.0  0.0 1.0 0.5 END
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+BUFFER texcoords DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
+BUFFER depthstencil FORMAT D16_UNORM
+BUFFER ddump FORMAT R32_SFLOAT
+BUFFER results DATA_TYPE float SIZE 2 FILL 0
+BUFFER framebuffer FORMAT B8G8R8A8_UNORM
+
+SAMPLER sampler
+
+PIPELINE graphics pipeline1
+  ATTACH vert_shader
+  ATTACH frag_shader
+
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER framebuffer AS color LOCATION 0
+  BIND BUFFER depthstencil AS depth_stencil
+  BIND BUFFER data_buf1 AS storage DESCRIPTOR_SET 0 BINDING 0
+
+  DEPTH
+    TEST on
+    WRITE on
+    COMPARE_OP less
+    CLAMP off
+    BOUNDS min 0.0 max 1.0
+    BIAS constant 16384.0 clamp 0.0 slope 2.0
+  END
+END
+
+DERIVE_PIPELINE pipeline2 FROM pipeline1
+  BIND BUFFER data_buf2 AS storage DESCRIPTOR_SET 0 BINDING 0
+END
+
+PIPELINE graphics depthdump
+  ATTACH vert_shader_tex
+  ATTACH frag_shader_tex
+  BIND BUFFER depthstencil AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA texcoords LOCATION 1
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER ddump AS color LOCATION 0
+END
+
+SHADER compute verification_shader GLSL
+#version 430
+layout(local_size_x=1,local_size_y=1) in;
+uniform layout (set=0, binding=0, r32f) image2D texture;
+layout(set = 0, binding = 1) buffer Result {
+  float result0;
+  float result1;
+};
+
+void main () {
+  float ref0_0 = 0.55;
+  float ref0_1 = 0.8;
+  float depth0 = imageLoad(texture, ivec2(0, 0)).r;
+  if (distance(ref0_0, depth0) < 0.003 || distance(ref0_1, depth0) < 0.003)
+      result0 = 1.0;
+  else
+      result0 = 0.0;
+
+  float ref1_0 = 0.75;
+  float ref1_1 = 1.0;
+  float depth1 = imageLoad(texture, ivec2(255, 255)).r;
+  if (distance(ref1_0, depth1) < 0.003 || distance(ref1_1, depth1) < 0.003)
+      result1 = 1.0;
+  else
+      result1 = 0.0;
+}
+END
+
+PIPELINE compute verification_pipeline
+  ATTACH verification_shader
+  BIND BUFFER ddump AS storage_image DESCRIPTOR_SET 0 BINDING 0
+  BIND BUFFER results AS storage DESCRIPTOR_SET 0 BINDING 1
+  FRAMEBUFFER_SIZE 256 256
+END
+
+CLEAR_DEPTH pipeline1 1.0
+CLEAR_COLOR pipeline1 255 255 255 255
+CLEAR pipeline1
+RUN pipeline1 DRAW_RECT POS   0   0 SIZE 200 200
+RUN pipeline2 DRAW_RECT POS   56 56 SIZE 200 200
+RUN depthdump DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+RUN verification_pipeline 1 1 1
+
+EXPECT results IDX 0 EQ 1.0
+EXPECT results IDX 4 EQ 1.0
diff --git a/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d24_unorm.amber b/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d24_unorm.amber
new file mode 100644 (file)
index 0000000..b3230da
--- /dev/null
@@ -0,0 +1,186 @@
+#!amber
+# Copyright 2020 Google LLC.
+# Copyright 2020 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This test draws two quads with depth values 0.3 and 0.5. Based on the equation in
+# Vulkan spec 26.12.3 the effective constant bias o is calculated as follows:
+
+# Both quads have a constant depth value, thus the maximum depth slope m is zero.
+# For minimun resolveble difference r there are two values accepted: r0 = 2^-24
+# and r1 = 2^-23. It is constant throughout the range of the entire depth buffer.
+
+# Using r0 the constant bias o value is:
+# 4194304 * r0 = 4194304 * 2^-24 = 0.25.
+
+# Adding this to the existing quad depth values should result as:
+# 0.3 + 0.25 = 0.55 and 0.5 + 0.25 = 0.75.
+
+# For r1 the same calculation for o is:
+# 4194304 * r1 = 4194304 * 2^-23 = 0.5.
+
+# Adding this to the existing quad depth values should result as:
+# 0.3 + 0.5 = 0.8 and 0.5 + 0.5 = 1.0
+
+SHADER vertex vert_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 position;
+layout(location = 0) out vec4 frag_color;
+
+layout(set = 0, binding = 0) readonly buffer block1 {
+  vec4 in_color;
+  float depth;
+};
+
+void main() {
+  gl_Position = vec4(position.xy, depth, 1.0);
+  frag_color = in_color;
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 frag_color;
+layout(location = 0) out vec4 final_color;
+
+void main() {
+  final_color = frag_color;
+}
+END
+
+SHADER vertex vert_shader_tex GLSL
+#version 430
+layout(location = 0) in vec4 position;
+layout(location = 1) in vec2 texcoords_in;
+layout(location = 0) out vec2 texcoords_out;
+void main() {
+  gl_Position = position;
+  texcoords_out = texcoords_in;
+}
+END
+
+SHADER fragment frag_shader_tex GLSL
+#version 430
+layout(location = 0) in vec2 texcoords_in;
+layout(location = 0) out vec4 color_out;
+uniform layout(set=0, binding=0) sampler2D tex_sampler;
+void main() {
+  float f = texture(tex_sampler, texcoords_in).r;
+  color_out = vec4(f, f, f, 1);
+}
+END
+
+BUFFER data_buf1 DATA_TYPE float DATA  1.0 0.0  0.0 1.0 0.3 END
+BUFFER data_buf2 DATA_TYPE float DATA  0.0 1.0  0.0 1.0 0.5 END
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+BUFFER texcoords DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
+BUFFER depthstencil FORMAT D24_UNORM_S8_UINT
+BUFFER ddump FORMAT R32_SFLOAT
+BUFFER results DATA_TYPE float SIZE 2 FILL 0
+BUFFER framebuffer FORMAT B8G8R8A8_UNORM
+
+SAMPLER sampler
+
+PIPELINE graphics pipeline1
+  ATTACH vert_shader
+  ATTACH frag_shader
+
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER framebuffer AS color LOCATION 0
+  BIND BUFFER depthstencil AS depth_stencil
+  BIND BUFFER data_buf1 AS storage DESCRIPTOR_SET 0 BINDING 0
+
+  DEPTH
+    TEST on
+    WRITE on
+    COMPARE_OP less
+    CLAMP off
+    BOUNDS min 0.0 max 1.0
+    BIAS constant 4194304.0 clamp 0.0 slope 2.0
+  END
+END
+
+DERIVE_PIPELINE pipeline2 FROM pipeline1
+  BIND BUFFER data_buf2 AS storage DESCRIPTOR_SET 0 BINDING 0
+END
+
+PIPELINE graphics depthdump
+  ATTACH vert_shader_tex
+  ATTACH frag_shader_tex
+  BIND BUFFER depthstencil AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA texcoords LOCATION 1
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER ddump AS color LOCATION 0
+END
+
+SHADER compute verification_shader GLSL
+#version 430
+layout(local_size_x=1,local_size_y=1) in;
+uniform layout (set=0, binding=0, r32f) image2D texture;
+layout(set = 0, binding = 1) buffer Result {
+  float result0;
+  float result1;
+};
+
+void main () {
+  float ref0_0 = 0.55;
+  float ref0_1 = 0.8;
+  float depth0 = imageLoad(texture, ivec2(0, 0)).r;
+  if (distance(ref0_0, depth0) < 0.003 || distance(ref0_1, depth0) < 0.003)
+      result0 = 1.0;
+  else
+      result0 = 0.0;
+
+  float ref1_0 = 0.75;
+  float ref1_1 = 1.0;
+  float depth1 = imageLoad(texture, ivec2(255, 255)).r;
+  if (distance(ref1_0, depth1) < 0.003 || distance(ref1_1, depth1) < 0.003)
+      result1 = 1.0;
+  else
+      result1 = 0.0;
+}
+END
+
+PIPELINE compute verification_pipeline
+  ATTACH verification_shader
+  BIND BUFFER ddump AS storage_image DESCRIPTOR_SET 0 BINDING 0
+  BIND BUFFER results AS storage DESCRIPTOR_SET 0 BINDING 1
+  FRAMEBUFFER_SIZE 256 256
+END
+
+CLEAR_DEPTH pipeline1 1.0
+CLEAR_COLOR pipeline1 255 255 255 255
+CLEAR pipeline1
+RUN pipeline1 DRAW_RECT POS   0   0 SIZE 200 200
+RUN pipeline2 DRAW_RECT POS   56 56 SIZE 200 200
+RUN depthdump DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+RUN verification_pipeline 1 1 1
+
+EXPECT results IDX 0 EQ 1.0
+EXPECT results IDX 4 EQ 1.0
diff --git a/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d32_sfloat.amber b/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d32_sfloat.amber
new file mode 100644 (file)
index 0000000..3649889
--- /dev/null
@@ -0,0 +1,153 @@
+#!amber
+# Copyright 2020 Google LLC.
+# Copyright 2020 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This test draws two quads with depth values 0.3 and 0.5. Based on the equation in
+# Vulkan spec 26.12.3 the effective constant bias o is calculated as follows:
+
+# Both quads have a constant depth value, thus the maximum depth slope m is zero.
+# The maximum exponent e is taken from the constant depth value.
+# For depth value 0.3 e is -2, and for value 0.5 it's -1.
+
+# 32bit float format has a mantissa size of 23 making n = 23.
+# The minimum resolvable difference r is calculated as r = 2^(e-n).
+
+# Thus the constant bias o values are:
+# 4194304 * r = 4194304 * 2^(-2-23) = 4194304 * 2^-25 = 0.125
+# and
+# 4194304 * r = 4194304 * 2^(-1-23) = 4194304 * 2^-24 = 0.25
+
+# Adding this to the existing quad depth values should result as
+# 0.3 + 0.125 = 0.425 and 0.5 + 0.25 = 0.75.
+
+# The depth buffer is dumped as a RGBA8 image making the expected results
+# roughly 0.425 * 255 = 108 and 0.75 * 255 = 191.
+
+SHADER vertex vert_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 position;
+layout(location = 0) out vec4 frag_color;
+
+layout(set = 0, binding = 0) readonly buffer block1 {
+  vec4 in_color;
+  float depth;
+};
+
+void main() {
+  gl_Position = vec4(position.xy, depth, 1.0);
+  frag_color = in_color;
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 frag_color;
+layout(location = 0) out vec4 final_color;
+
+void main() {
+  final_color = frag_color;
+}
+END
+
+SHADER vertex vert_shader_tex GLSL
+#version 430
+layout(location = 0) in vec4 position;
+layout(location = 1) in vec2 texcoords_in;
+layout(location = 0) out vec2 texcoords_out;
+void main() {
+  gl_Position = position;
+  texcoords_out = texcoords_in;
+}
+END
+
+SHADER fragment frag_shader_tex GLSL
+#version 430
+layout(location = 0) in vec2 texcoords_in;
+layout(location = 0) out vec4 color_out;
+uniform layout(set=0, binding=0) sampler2D tex_sampler;
+void main() {
+  float f = texture(tex_sampler, texcoords_in).r;
+  color_out = vec4(f, f, f, 1);
+}
+END
+
+BUFFER data_buf1 DATA_TYPE float DATA  1.0 0.0  0.0 1.0 0.3 END
+BUFFER data_buf2 DATA_TYPE float DATA  0.0 1.0  0.0 1.0 0.5 END
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+BUFFER texcoords DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
+BUFFER framebuffer FORMAT B8G8R8A8_UNORM
+BUFFER ddump FORMAT B8G8R8A8_UNORM
+BUFFER depthstencil FORMAT D32_SFLOAT
+
+SAMPLER sampler
+
+PIPELINE graphics pipeline1
+  ATTACH vert_shader
+  ATTACH frag_shader
+
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER framebuffer AS color LOCATION 0
+  BIND BUFFER depthstencil AS depth_stencil
+  BIND BUFFER data_buf1 AS storage DESCRIPTOR_SET 0 BINDING 0
+
+  DEPTH
+    TEST on
+    WRITE on
+    COMPARE_OP less
+    CLAMP off
+    BOUNDS min 0.0 max 1.0
+    BIAS constant 4194304.0 clamp 0.0 slope 2.0
+  END
+END
+
+DERIVE_PIPELINE pipeline2 FROM pipeline1
+  BIND BUFFER data_buf2 AS storage DESCRIPTOR_SET 0 BINDING 0
+END
+
+PIPELINE graphics depthdump
+  ATTACH vert_shader_tex
+  ATTACH frag_shader_tex
+  BIND BUFFER depthstencil AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA texcoords LOCATION 1
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER ddump AS color LOCATION 0
+END
+
+CLEAR_DEPTH pipeline1 1.0
+CLEAR_COLOR pipeline1 255 255 255 255
+CLEAR pipeline1
+RUN pipeline1 DRAW_RECT POS   0   0 SIZE 200 200
+RUN pipeline2 DRAW_RECT POS   56 56 SIZE 200 200
+RUN depthdump DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT ddump IDX 0 0 SIZE 1 1 EQ_RGBA 108 108 108 255 TOLERANCE 5% 5% 5% 0
+EXPECT ddump IDX 255 0 SIZE 1 1 EQ_RGBA 255 255 255 255 TOLERANCE 5% 5% 5% 0
+EXPECT ddump IDX 0 255 SIZE 1 1 EQ_RGBA 255 255 255 255 TOLERANCE 5% 5% 5% 0
+EXPECT ddump IDX 255 255 SIZE 1 1 EQ_RGBA 191 191 191 255 TOLERANCE 5% 5% 5% 0
\ No newline at end of file
index dc88e12..4544a4b 100644 (file)
@@ -1,5 +1,6 @@
 #!amber
-# Copyright 2020 The Amber Authors.
+# Copyright 2020 Google LLC.
+# Copyright 2020 The Khronos Group Inc.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
index 4bae586..5ab2b66 100644 (file)
@@ -1,5 +1,6 @@
 #!amber
-# Copyright 2020 The Amber Authors.
+# Copyright 2020 Google LLC.
+# Copyright 2020 The Khronos Group Inc.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
index 7685766..7a593cf 100644 (file)
@@ -7289,6 +7289,55 @@ void createRasterizationTests (tcu::TestCaseGroup* rasterizationTests)
                }
        }
 
+       // .depth bias
+       {
+               tcu::TestCaseGroup* const       depthBias       = new tcu::TestCaseGroup(testCtx, "depth_bias", "Test depth bias");
+               static const char                       dataDir[]       = "rasterization/depth_bias";
+
+               static const struct
+               {
+                       std::string name;
+                       vk::VkFormat format;
+                       std::string description;
+               } cases [] =
+               {
+                       {"d16_unorm",   vk::VK_FORMAT_D16_UNORM,                        "Test depth bias with format D16_UNORM"},
+                       {"d32_sfloat",  vk::VK_FORMAT_D32_SFLOAT,                       "Test depth bias with format D32_SFLOAT"},
+                       {"d24_unorm",   vk::VK_FORMAT_D24_UNORM_S8_UINT,        "Test depth bias with format D24_UNORM_S8_UINT"}
+               };
+
+               for (int i = 0; i < DE_LENGTH_OF_ARRAY(cases); ++i)
+               {
+                       const VkImageCreateInfo vkImageCreateInfo = {
+                               VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,                    // sType
+                               nullptr,                                                                                // pNext
+                               0,                                                                                              // flags
+                               VK_IMAGE_TYPE_2D,                                                               // imageType
+                               cases[i].format,                                                                // format
+                               {250, 250, 1},                                                                  // extent
+                               1,                                                                                              // mipLevels
+                               1,                                                                                              // arrayLayers
+                               VK_SAMPLE_COUNT_1_BIT,                                                  // samples
+                               VK_IMAGE_TILING_OPTIMAL,                                                // tiling
+                               VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,    // usage
+                               VK_SHARING_MODE_EXCLUSIVE,                                              // sharingMode
+                               0,                                                                                              // queueFamilyIndexCount
+                               nullptr,                                                                                // pQueueFamilyIndices
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // initialLayout
+                       };
+
+                       std::vector<std::string>                requirements = std::vector<std::string>(0);
+                       std::vector<VkImageCreateInfo>  imageRequirements;
+                       imageRequirements.push_back(vkImageCreateInfo);
+                       const std::string                       fileName        = cases[i].name + ".amber";
+                       cts_amber::AmberTestCase*       testCase        = cts_amber::createAmberTestCase(testCtx, cases[i].name.c_str(), cases[i].description.c_str(), dataDir, fileName, requirements, imageRequirements);
+
+                       depthBias->addChild(testCase);
+               }
+
+               rasterizationTests->addChild(depthBias);
+       }
+
        // Fragment shader side effects.
        {
                rasterizationTests->addChild(createFragSideEffectsTests(testCtx));
index 4feb566..00dafcb 100644 (file)
@@ -617569,6 +617569,9 @@ dEQP-VK.rasterization.provoking_vertex.line_strip
 dEQP-VK.rasterization.provoking_vertex.line_strip_with_adjacency
 dEQP-VK.rasterization.line_continuity.line-strip
 dEQP-VK.rasterization.line_continuity.polygon-mode-lines
+dEQP-VK.rasterization.depth_bias.d16_unorm
+dEQP-VK.rasterization.depth_bias.d32_sfloat
+dEQP-VK.rasterization.depth_bias.d24_unorm
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.kill
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.demote
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.terminate_invocation