Add a batch of GraphicsFuzz coverage tests
authorAri Suonpaa <ari.suonpaa@siru.fi>
Tue, 22 Mar 2022 13:23:08 +0000 (15:23 +0200)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Fri, 8 Apr 2022 21:48:26 +0000 (14:48 -0700)
This commit adds a batch of GraphicsFuzz coverage tests.

Components: Vulkan

New Tests:

dEQP-VK.graphicsfuzz.cov-enable-bits-pixel-location-negate-not-equal-one
dEQP-VK.graphicsfuzz.cov-fragcoord-and-one-or-same-value
dEQP-VK.graphicsfuzz.cov-fragcoord-loop-limit-negative-decrease-sum-first-iteration
dEQP-VK.graphicsfuzz.cov-function-call-twice-clamp-global-variable
dEQP-VK.graphicsfuzz.cov-function-loop-variable-multiplied-unused
dEQP-VK.graphicsfuzz.cov-loop-array-element-bitfield-insert-undefined-never-read
dEQP-VK.graphicsfuzz.cov-loop-find-lsb-eight-fragcoord-never-discard
dEQP-VK.graphicsfuzz.cov-loop-index-array-max-negative-zero
dEQP-VK.graphicsfuzz.cov-loop-max-divide-integer-by-ten
dEQP-VK.graphicsfuzz.cov-loop-sampled-texel-integer-counter
dEQP-VK.graphicsfuzz.cov-loop-variable-less-than-itself
dEQP-VK.graphicsfuzz.cov-mix-uninitialized-float-never-selected
dEQP-VK.graphicsfuzz.cov-nested-loop-decrease-vector-components
dEQP-VK.graphicsfuzz.cov-nested-loops-while-condition-integer-range-increment-variable
dEQP-VK.graphicsfuzz.cov-uadd-carry-bit-count-index-array

Change-Id: I4160d3418b1a8fa3a29695f939af6aa79ded319d

19 files changed:
android/cts/main/vk-master-2022-03-01/graphicsfuzz.txt
android/cts/main/vk-master/graphicsfuzz.txt
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-enable-bits-pixel-location-negate-not-equal-one.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-fragcoord-and-one-or-same-value.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-fragcoord-loop-limit-negative-decrease-sum-first-iteration.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-function-call-twice-clamp-global-variable.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-function-loop-variable-multiplied-unused.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-array-element-bitfield-insert-undefined-never-read.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-find-lsb-eight-fragcoord-never-discard.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-index-array-max-negative-zero.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-max-divide-integer-by-ten.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-sampled-texel-integer-counter.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-variable-less-than-itself.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-mix-uninitialized-float-never-selected.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-nested-loop-decrease-vector-components.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-nested-loops-while-condition-integer-range-increment-variable.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-uadd-carry-bit-count-index-array.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt
external/vulkancts/mustpass/main/vk-default/graphicsfuzz.txt

index d9015aa..c5ad117 100644 (file)
@@ -47,6 +47,7 @@ dEQP-VK.graphicsfuzz.cov-do-while-switch-case-bitcount-findmsb
 dEQP-VK.graphicsfuzz.cov-double-if-true-in-loop
 dEQP-VK.graphicsfuzz.cov-dummy-function-loop-array-element-increment-never-read
 dEQP-VK.graphicsfuzz.cov-empty-loop-minus-one-modulo-variable-one
+dEQP-VK.graphicsfuzz.cov-enable-bits-pixel-location-negate-not-equal-one
 dEQP-VK.graphicsfuzz.cov-exp2-two
 dEQP-VK.graphicsfuzz.cov-extend-uniform-vec2-to-vec3-matrix-multiply
 dEQP-VK.graphicsfuzz.cov-float-array-init-pow
@@ -59,14 +60,17 @@ dEQP-VK.graphicsfuzz.cov-for-switch-fallthrough
 dEQP-VK.graphicsfuzz.cov-fract-asin-undefined-never-used
 dEQP-VK.graphicsfuzz.cov-fract-trunc-always-zero
 dEQP-VK.graphicsfuzz.cov-fragcood-multiple-conditions-function-loop-global-counter
+dEQP-VK.graphicsfuzz.cov-fragcoord-and-one-or-same-value
 dEQP-VK.graphicsfuzz.cov-fragcoord-bitwise-and-loop-reduce-value-index-array
 dEQP-VK.graphicsfuzz.cov-fragcoord-bitwise-not
 dEQP-VK.graphicsfuzz.cov-fragcoord-conditions-never-return-index-array-using-uniform
 dEQP-VK.graphicsfuzz.cov-fragcoord-integer-loop-reduce-to-range
+dEQP-VK.graphicsfuzz.cov-fragcoord-loop-limit-negative-decrease-sum-first-iteration
 dEQP-VK.graphicsfuzz.cov-fragcoord-multiple-conditions-function-global-loop-counter-simplified
 dEQP-VK.graphicsfuzz.cov-fragcoord-multiply
 dEQP-VK.graphicsfuzz.cov-function-argument-uniform-float-loop-never-return
 dEQP-VK.graphicsfuzz.cov-function-clamp-min-identical-shift-right
+dEQP-VK.graphicsfuzz.cov-function-call-twice-clamp-global-variable
 dEQP-VK.graphicsfuzz.cov-function-find-lsb-ivec2-one
 dEQP-VK.graphicsfuzz.cov-function-fragcoord-condition-always-return
 dEQP-VK.graphicsfuzz.cov-function-infinite-loop-always-return
@@ -80,6 +84,7 @@ dEQP-VK.graphicsfuzz.cov-function-loop-modify-ivec-components-infinite-loop-neve
 dEQP-VK.graphicsfuzz.cov-function-loop-same-conditions-multiple-times-struct-array
 dEQP-VK.graphicsfuzz.cov-function-loop-switch-increment-array-element-return
 dEQP-VK.graphicsfuzz.cov-function-min-integer-large-shift-unused
+dEQP-VK.graphicsfuzz.cov-function-loop-variable-multiplied-unused
 dEQP-VK.graphicsfuzz.cov-function-nested-do-whiles-looped-once
 dEQP-VK.graphicsfuzz.cov-function-nested-loops-break-early-never-discard
 dEQP-VK.graphicsfuzz.cov-function-nested-loops-limit-uniform-xor-uniform
@@ -139,6 +144,7 @@ dEQP-VK.graphicsfuzz.cov-ldexp-exponent-undefined-divided-fragcoord-never-execut
 dEQP-VK.graphicsfuzz.cov-left-shift-array-access
 dEQP-VK.graphicsfuzz.cov-left-shift-right-shift-compare
 dEQP-VK.graphicsfuzz.cov-loop-abs-multiply-offset
+dEQP-VK.graphicsfuzz.cov-loop-array-element-bitfield-insert-undefined-never-read
 dEQP-VK.graphicsfuzz.cov-loop-array-element-copy-index-clamp-sign
 dEQP-VK.graphicsfuzz.cov-loop-array-index-decrement-never-negative
 dEQP-VK.graphicsfuzz.cov-loop-array-struct-field-index-array-with-uniforms
@@ -159,6 +165,7 @@ dEQP-VK.graphicsfuzz.cov-loop-decrease-vector-components-assign-multiple-times
 dEQP-VK.graphicsfuzz.cov-loop-dfdx-constant-divide
 dEQP-VK.graphicsfuzz.cov-loop-exit-conditions-sampler-struct-integer-variable
 dEQP-VK.graphicsfuzz.cov-loop-divide-uninitialized-vector-min-unused
+dEQP-VK.graphicsfuzz.cov-loop-find-lsb-eight-fragcoord-never-discard
 dEQP-VK.graphicsfuzz.cov-loop-fragcoord-identical-condition
 dEQP-VK.graphicsfuzz.cov-loop-global-counter-break-set-ivec-elements
 dEQP-VK.graphicsfuzz.cov-loop-increase-iterator-condition-uniform-copy-array-elements
@@ -168,6 +175,7 @@ dEQP-VK.graphicsfuzz.cov-loop-increment-integer-findmsb-minus-uniform
 dEQP-VK.graphicsfuzz.cov-loop-increment-integer-set-output-color-break
 dEQP-VK.graphicsfuzz.cov-loop-increment-matrix-element-break-after-first-iteration
 dEQP-VK.graphicsfuzz.cov-loop-increment-or-divide-by-loop-index
+dEQP-VK.graphicsfuzz.cov-loop-index-array-max-negative-zero
 dEQP-VK.graphicsfuzz.cov-loop-integer-half-minus-one
 dEQP-VK.graphicsfuzz.cov-loop-iterator-plus-one-variable-outside-index-array
 dEQP-VK.graphicsfuzz.cov-loop-large-array-index-clamp-negative-value
@@ -176,14 +184,17 @@ dEQP-VK.graphicsfuzz.cov-loop-limiter-uniform-bitwise-and-one-always-break
 dEQP-VK.graphicsfuzz.cov-loop-logical-xor
 dEQP-VK.graphicsfuzz.cov-loop-multiple-iterator-variables-copy-array-elements
 dEQP-VK.graphicsfuzz.cov-loop-read-array-index-from-array-data
+dEQP-VK.graphicsfuzz.cov-loop-max-divide-integer-by-ten
 dEQP-VK.graphicsfuzz.cov-loop-replace-output-color-restore-original
 dEQP-VK.graphicsfuzz.cov-loop-returns-behind-true-and-false
+dEQP-VK.graphicsfuzz.cov-loop-sampled-texel-integer-counter
 dEQP-VK.graphicsfuzz.cov-loop-set-vector-components-pow-two
 dEQP-VK.graphicsfuzz.cov-loop-start-from-one-switch-case-invalid-color-never-executed
 dEQP-VK.graphicsfuzz.cov-loop-start-from-one-switch-case-never-executed
 dEQP-VK.graphicsfuzz.cov-loop-struct-array-field-set-value-self-dependency
 dEQP-VK.graphicsfuzz.cov-loop-switch-discard-never-hit
 dEQP-VK.graphicsfuzz.cov-loop-two-iterators-increment-array-empty-do-while
+dEQP-VK.graphicsfuzz.cov-loop-variable-less-than-itself
 dEQP-VK.graphicsfuzz.cov-loop-with-two-integers
 dEQP-VK.graphicsfuzz.cov-matching-conditions-break
 dEQP-VK.graphicsfuzz.cov-matching-if-always-true-inside-loop
@@ -195,6 +206,7 @@ dEQP-VK.graphicsfuzz.cov-min-intbitstofloat-undefined-never-used
 dEQP-VK.graphicsfuzz.cov-min-negative-constant-always-below-one
 dEQP-VK.graphicsfuzz.cov-min-nested-loop-same-value-for-variables
 dEQP-VK.graphicsfuzz.cov-missing-return-value-function-never-called
+dEQP-VK.graphicsfuzz.cov-mix-uninitialized-float-never-selected
 dEQP-VK.graphicsfuzz.cov-mix-uninitialized-vector-select-only-defined-data
 dEQP-VK.graphicsfuzz.cov-mod-uint-bits-float
 dEQP-VK.graphicsfuzz.cov-modulo-zero-never-executed
@@ -208,6 +220,7 @@ dEQP-VK.graphicsfuzz.cov-nested-functions-compare-fragcood-length-zero-vector
 dEQP-VK.graphicsfuzz.cov-nested-functions-loop-assign-global-array-element
 dEQP-VK.graphicsfuzz.cov-nested-functions-struct-arrays-vector-lengths
 dEQP-VK.graphicsfuzz.cov-nested-loop-continue-inner-copy-array-element
+dEQP-VK.graphicsfuzz.cov-nested-loop-decrease-vector-components
 dEQP-VK.graphicsfuzz.cov-nested-loop-initializer-value-increased-inside
 dEQP-VK.graphicsfuzz.cov-nested-loop-large-array-index-using-vector-components
 dEQP-VK.graphicsfuzz.cov-nested-loop-not-greater-than-increment-array-element
@@ -241,6 +254,7 @@ dEQP-VK.graphicsfuzz.cov-nested-loops-switch-case-fallthrough-increment-array-el
 dEQP-VK.graphicsfuzz.cov-nested-loops-temporary-copy-output-color-index-matrix
 dEQP-VK.graphicsfuzz.cov-nested-loops-while-min-iterator-condition-always-false
 dEQP-VK.graphicsfuzz.cov-nested-loops-switch-add-zero-matrix-elements
+dEQP-VK.graphicsfuzz.cov-nested-loops-while-condition-integer-range-increment-variable
 dEQP-VK.graphicsfuzz.cov-nested-structs-function-set-inner-struct-field-return
 dEQP-VK.graphicsfuzz.cov-nir-array-access
 dEQP-VK.graphicsfuzz.cov-nir-opt-large-constants-for-clamp-vector-access
@@ -276,6 +290,7 @@ dEQP-VK.graphicsfuzz.cov-two-functions-modify-struct-array-element-return-from-l
 dEQP-VK.graphicsfuzz.cov-two-loops-global-loop-counter-shift-right-zero-increment-array-element
 dEQP-VK.graphicsfuzz.cov-two-loops-increment-integer-global-counter-break-square-threshold
 dEQP-VK.graphicsfuzz.cov-two-nested-loops-switch-case-matrix-array-increment
+dEQP-VK.graphicsfuzz.cov-uadd-carry-bit-count-index-array
 dEQP-VK.graphicsfuzz.cov-ucarryadd-one-and-one
 dEQP-VK.graphicsfuzz.cov-uniform-vector-copy
 dEQP-VK.graphicsfuzz.cov-uniform-vector-function-argument-mod-increment-integers
index 3288f0a..b4c47ad 100644 (file)
@@ -122,6 +122,7 @@ dEQP-VK.graphicsfuzz.cov-do-while-switch-case-bitcount-findmsb
 dEQP-VK.graphicsfuzz.cov-double-if-true-in-loop
 dEQP-VK.graphicsfuzz.cov-dummy-function-loop-array-element-increment-never-read
 dEQP-VK.graphicsfuzz.cov-empty-loop-minus-one-modulo-variable-one
+dEQP-VK.graphicsfuzz.cov-enable-bits-pixel-location-negate-not-equal-one
 dEQP-VK.graphicsfuzz.cov-exp2-two
 dEQP-VK.graphicsfuzz.cov-extend-uniform-vec2-to-vec3-matrix-multiply
 dEQP-VK.graphicsfuzz.cov-findlsb-division-by-zero
@@ -168,15 +169,18 @@ dEQP-VK.graphicsfuzz.cov-fract-asin-undefined-never-used
 dEQP-VK.graphicsfuzz.cov-fract-smoothstep-undefined
 dEQP-VK.graphicsfuzz.cov-fract-trunc-always-zero
 dEQP-VK.graphicsfuzz.cov-fragcood-multiple-conditions-function-loop-global-counter
+dEQP-VK.graphicsfuzz.cov-fragcoord-and-one-or-same-value
 dEQP-VK.graphicsfuzz.cov-fragcoord-bitwise-and-loop-reduce-value-index-array
 dEQP-VK.graphicsfuzz.cov-fragcoord-bitwise-not
 dEQP-VK.graphicsfuzz.cov-fragcoord-clamp-array-access
 dEQP-VK.graphicsfuzz.cov-fragcoord-conditions-never-return-index-array-using-uniform
 dEQP-VK.graphicsfuzz.cov-fragcoord-integer-loop-reduce-to-range
+dEQP-VK.graphicsfuzz.cov-fragcoord-loop-limit-negative-decrease-sum-first-iteration
 dEQP-VK.graphicsfuzz.cov-fragcoord-multiple-conditions-function-global-loop-counter-simplified
 dEQP-VK.graphicsfuzz.cov-fragcoord-multiply
 dEQP-VK.graphicsfuzz.cov-function-argument-uniform-float-loop-never-return
 dEQP-VK.graphicsfuzz.cov-function-clamp-min-identical-shift-right
+dEQP-VK.graphicsfuzz.cov-function-call-twice-clamp-global-variable
 dEQP-VK.graphicsfuzz.cov-function-find-lsb-ivec2-one
 dEQP-VK.graphicsfuzz.cov-function-fragcoord-condition-always-return
 dEQP-VK.graphicsfuzz.cov-function-infinite-loop-always-return
@@ -190,6 +194,7 @@ dEQP-VK.graphicsfuzz.cov-function-loop-modify-ivec-components-infinite-loop-neve
 dEQP-VK.graphicsfuzz.cov-function-loop-same-conditions-multiple-times-struct-array
 dEQP-VK.graphicsfuzz.cov-function-loop-switch-increment-array-element-return
 dEQP-VK.graphicsfuzz.cov-function-min-integer-large-shift-unused
+dEQP-VK.graphicsfuzz.cov-function-loop-variable-multiplied-unused
 dEQP-VK.graphicsfuzz.cov-function-nested-do-whiles-looped-once
 dEQP-VK.graphicsfuzz.cov-function-nested-loops-break-early-never-discard
 dEQP-VK.graphicsfuzz.cov-function-nested-loops-limit-uniform-xor-uniform
@@ -298,6 +303,7 @@ dEQP-VK.graphicsfuzz.cov-left-shift-array-access
 dEQP-VK.graphicsfuzz.cov-left-shift-right-shift-compare
 dEQP-VK.graphicsfuzz.cov-liveinterval-different-dest
 dEQP-VK.graphicsfuzz.cov-loop-abs-multiply-offset
+dEQP-VK.graphicsfuzz.cov-loop-array-element-bitfield-insert-undefined-never-read
 dEQP-VK.graphicsfuzz.cov-loop-array-element-copy-index-clamp-sign
 dEQP-VK.graphicsfuzz.cov-loop-array-index-decrement-never-negative
 dEQP-VK.graphicsfuzz.cov-loop-array-struct-field-index-array-with-uniforms
@@ -318,6 +324,7 @@ dEQP-VK.graphicsfuzz.cov-loop-decrease-vector-components-assign-multiple-times
 dEQP-VK.graphicsfuzz.cov-loop-dfdx-constant-divide
 dEQP-VK.graphicsfuzz.cov-loop-exit-conditions-sampler-struct-integer-variable
 dEQP-VK.graphicsfuzz.cov-loop-divide-uninitialized-vector-min-unused
+dEQP-VK.graphicsfuzz.cov-loop-find-lsb-eight-fragcoord-never-discard
 dEQP-VK.graphicsfuzz.cov-loop-findmsb-findlsb
 dEQP-VK.graphicsfuzz.cov-loop-fragcoord-identical-condition
 dEQP-VK.graphicsfuzz.cov-loop-global-counter-break-set-ivec-elements
@@ -328,6 +335,7 @@ dEQP-VK.graphicsfuzz.cov-loop-increment-integer-findmsb-minus-uniform
 dEQP-VK.graphicsfuzz.cov-loop-increment-integer-set-output-color-break
 dEQP-VK.graphicsfuzz.cov-loop-increment-matrix-element-break-after-first-iteration
 dEQP-VK.graphicsfuzz.cov-loop-increment-or-divide-by-loop-index
+dEQP-VK.graphicsfuzz.cov-loop-index-array-max-negative-zero
 dEQP-VK.graphicsfuzz.cov-loop-integer-half-minus-one
 dEQP-VK.graphicsfuzz.cov-loop-iterator-plus-one-variable-outside-index-array
 dEQP-VK.graphicsfuzz.cov-loop-large-array-index-clamp-negative-value
@@ -336,14 +344,17 @@ dEQP-VK.graphicsfuzz.cov-loop-limiter-uniform-bitwise-and-one-always-break
 dEQP-VK.graphicsfuzz.cov-loop-logical-xor
 dEQP-VK.graphicsfuzz.cov-loop-multiple-iterator-variables-copy-array-elements
 dEQP-VK.graphicsfuzz.cov-loop-read-array-index-from-array-data
+dEQP-VK.graphicsfuzz.cov-loop-max-divide-integer-by-ten
 dEQP-VK.graphicsfuzz.cov-loop-replace-output-color-restore-original
 dEQP-VK.graphicsfuzz.cov-loop-returns-behind-true-and-false
+dEQP-VK.graphicsfuzz.cov-loop-sampled-texel-integer-counter
 dEQP-VK.graphicsfuzz.cov-loop-set-vector-components-pow-two
 dEQP-VK.graphicsfuzz.cov-loop-start-from-one-switch-case-invalid-color-never-executed
 dEQP-VK.graphicsfuzz.cov-loop-start-from-one-switch-case-never-executed
 dEQP-VK.graphicsfuzz.cov-loop-struct-array-field-set-value-self-dependency
 dEQP-VK.graphicsfuzz.cov-loop-switch-discard-never-hit
 dEQP-VK.graphicsfuzz.cov-loop-two-iterators-increment-array-empty-do-while
+dEQP-VK.graphicsfuzz.cov-loop-variable-less-than-itself
 dEQP-VK.graphicsfuzz.cov-loop-with-two-integers
 dEQP-VK.graphicsfuzz.cov-machine-scheduler-for-if-pow
 dEQP-VK.graphicsfuzz.cov-machine-basic-block-for-for-for-less-than
@@ -362,6 +373,7 @@ dEQP-VK.graphicsfuzz.cov-min-intbitstofloat-undefined-never-used
 dEQP-VK.graphicsfuzz.cov-min-negative-constant-always-below-one
 dEQP-VK.graphicsfuzz.cov-min-nested-loop-same-value-for-variables
 dEQP-VK.graphicsfuzz.cov-missing-return-value-function-never-called
+dEQP-VK.graphicsfuzz.cov-mix-uninitialized-float-never-selected
 dEQP-VK.graphicsfuzz.cov-mix-uninitialized-vector-select-only-defined-data
 dEQP-VK.graphicsfuzz.cov-mod-acosh
 dEQP-VK.graphicsfuzz.cov-mod-uint-bits-float
@@ -378,6 +390,7 @@ dEQP-VK.graphicsfuzz.cov-nested-functions-compare-fragcood-length-zero-vector
 dEQP-VK.graphicsfuzz.cov-nested-functions-loop-assign-global-array-element
 dEQP-VK.graphicsfuzz.cov-nested-functions-struct-arrays-vector-lengths
 dEQP-VK.graphicsfuzz.cov-nested-loop-continue-inner-copy-array-element
+dEQP-VK.graphicsfuzz.cov-nested-loop-decrease-vector-components
 dEQP-VK.graphicsfuzz.cov-nested-loop-initializer-value-increased-inside
 dEQP-VK.graphicsfuzz.cov-nested-loop-large-array-index-using-vector-components
 dEQP-VK.graphicsfuzz.cov-nested-loop-not-greater-than-increment-array-element
@@ -411,6 +424,7 @@ dEQP-VK.graphicsfuzz.cov-nested-loops-switch-case-fallthrough-increment-array-el
 dEQP-VK.graphicsfuzz.cov-nested-loops-temporary-copy-output-color-index-matrix
 dEQP-VK.graphicsfuzz.cov-nested-loops-while-min-iterator-condition-always-false
 dEQP-VK.graphicsfuzz.cov-nested-loops-switch-add-zero-matrix-elements
+dEQP-VK.graphicsfuzz.cov-nested-loops-while-condition-integer-range-increment-variable
 dEQP-VK.graphicsfuzz.cov-nested-structs-function-set-inner-struct-field-return
 dEQP-VK.graphicsfuzz.cov-nir-array-access
 dEQP-VK.graphicsfuzz.cov-nir-opt-large-constants-for-clamp-vector-access
@@ -490,6 +504,7 @@ dEQP-VK.graphicsfuzz.cov-two-loops-global-loop-counter-shift-right-zero-incremen
 dEQP-VK.graphicsfuzz.cov-two-loops-increment-integer-global-counter-break-square-threshold
 dEQP-VK.graphicsfuzz.cov-two-nested-loops-switch-case-matrix-array-increment
 dEQP-VK.graphicsfuzz.cov-types-return-in-main-never-hit
+dEQP-VK.graphicsfuzz.cov-uadd-carry-bit-count-index-array
 dEQP-VK.graphicsfuzz.cov-ucarryadd-one-and-one
 dEQP-VK.graphicsfuzz.cov-undefined-inversesqrt-reflect
 dEQP-VK.graphicsfuzz.cov-uniform-vector-copy
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-enable-bits-pixel-location-negate-not-equal-one.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-enable-bits-pixel-location-negate-not-equal-one.amber
new file mode 100644 (file)
index 0000000..046747d
--- /dev/null
@@ -0,0 +1,179 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // Depending on the pixel location a has either all or none bits enabled.
+#     int a = (int(gl_FragCoord.x) & 1) != 0 ? 0 : ~0;
+#
+#     // When a = 0:
+#     // ~(a | 1) = ~1 != 1
+#     //
+#     // When a = ~0:
+#     // ~(a | 1) = ~(~0)) = 0 != 1
+#     if(~(a | _int_1) != _int_1)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %12 %43
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "gl_FragCoord"
+               OpName %29 "buf0"
+               OpMemberName %29 0 "_GLF_uniform_int_values"
+               OpName %31 ""
+               OpName %43 "_GLF_color"
+               OpDecorate %12 BuiltIn FragCoord
+               OpDecorate %28 ArrayStride 16
+               OpMemberDecorate %29 0 Offset 0
+               OpDecorate %29 Block
+               OpDecorate %31 DescriptorSet 0
+               OpDecorate %31 Binding 0
+               OpDecorate %43 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeFloat 32
+         %10 = OpTypeVector %9 4
+         %11 = OpTypePointer Input %10
+         %12 = OpVariable %11 Input
+         %13 = OpTypeInt 32 0
+         %14 = OpConstant %13 0
+         %15 = OpTypePointer Input %9
+         %19 = OpConstant %6 1
+         %21 = OpConstant %6 0
+         %22 = OpTypeBool
+         %24 = OpConstant %6 -1
+         %27 = OpConstant %13 2
+         %28 = OpTypeArray %6 %27
+         %29 = OpTypeStruct %28
+         %30 = OpTypePointer Uniform %29
+         %31 = OpVariable %30 Uniform
+         %32 = OpTypePointer Uniform %6
+         %42 = OpTypePointer Output %10
+         %43 = OpVariable %42 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %16 = OpAccessChain %15 %12 %14
+         %17 = OpLoad %9 %16
+         %18 = OpConvertFToS %6 %17
+         %20 = OpBitwiseAnd %6 %18 %19
+         %23 = OpINotEqual %22 %20 %21
+         %25 = OpSelect %6 %23 %21 %24
+               OpStore %8 %25
+         %26 = OpLoad %6 %8
+         %33 = OpAccessChain %32 %31 %21 %21
+         %34 = OpLoad %6 %33
+         %35 = OpBitwiseOr %6 %26 %34
+         %36 = OpNot %6 %35
+         %37 = OpAccessChain %32 %31 %21 %21
+         %38 = OpLoad %6 %37
+         %39 = OpINotEqual %22 %36 %38
+               OpSelectionMerge %41 None
+               OpBranchConditional %39 %40 %57
+         %40 = OpLabel
+         %44 = OpAccessChain %32 %31 %21 %21
+         %45 = OpLoad %6 %44
+         %46 = OpConvertSToF %9 %45
+         %47 = OpAccessChain %32 %31 %21 %19
+         %48 = OpLoad %6 %47
+         %49 = OpConvertSToF %9 %48
+         %50 = OpAccessChain %32 %31 %21 %19
+         %51 = OpLoad %6 %50
+         %52 = OpConvertSToF %9 %51
+         %53 = OpAccessChain %32 %31 %21 %21
+         %54 = OpLoad %6 %53
+         %55 = OpConvertSToF %9 %54
+         %56 = OpCompositeConstruct %10 %46 %49 %52 %55
+               OpStore %43 %56
+               OpBranch %41
+         %57 = OpLabel
+         %58 = OpAccessChain %32 %31 %21 %19
+         %59 = OpLoad %6 %58
+         %60 = OpConvertSToF %9 %59
+         %61 = OpCompositeConstruct %10 %60 %60 %60 %60
+               OpStore %43 %61
+               OpBranch %41
+         %41 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-fragcoord-and-one-or-same-value.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-fragcoord-and-one-or-same-value.amber
new file mode 100644 (file)
index 0000000..6b763c4
--- /dev/null
@@ -0,0 +1,189 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+#
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int x = int(gl_FragCoord.x);
+#     // a becomes 0 or 1.
+#     int a = (x & _int_1) | (x & _int_1);
+#
+#     // Always selects a color from index 0 or 1.
+#     _GLF_color = vec4[4](vec4(_int_1, _int_0, _int_0, _int_1), vec4(_int_1, _int_0, _int_0, _int_1), vec4(_int_0), vec4(_int_0))[a];
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 82
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %12 %37
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "x"
+               OpName %12 "gl_FragCoord"
+               OpName %19 "a"
+               OpName %23 "buf0"
+               OpMemberName %23 0 "_GLF_uniform_int_values"
+               OpName %25 ""
+               OpName %37 "_GLF_color"
+               OpName %78 "indexable"
+               OpDecorate %12 BuiltIn FragCoord
+               OpDecorate %22 ArrayStride 16
+               OpMemberDecorate %23 0 Offset 0
+               OpDecorate %23 Block
+               OpDecorate %25 DescriptorSet 0
+               OpDecorate %25 Binding 0
+               OpDecorate %37 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeFloat 32
+         %10 = OpTypeVector %9 4
+         %11 = OpTypePointer Input %10
+         %12 = OpVariable %11 Input
+         %13 = OpTypeInt 32 0
+         %14 = OpConstant %13 0
+         %15 = OpTypePointer Input %9
+         %21 = OpConstant %13 2
+         %22 = OpTypeArray %6 %21
+         %23 = OpTypeStruct %22
+         %24 = OpTypePointer Uniform %23
+         %25 = OpVariable %24 Uniform
+         %26 = OpConstant %6 0
+         %27 = OpTypePointer Uniform %6
+         %36 = OpTypePointer Output %10
+         %37 = OpVariable %36 Output
+         %41 = OpConstant %6 1
+         %73 = OpConstant %13 4
+         %74 = OpTypeArray %10 %73
+         %77 = OpTypePointer Function %74
+         %79 = OpTypePointer Function %10
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %19 = OpVariable %7 Function
+         %78 = OpVariable %77 Function
+         %16 = OpAccessChain %15 %12 %14
+         %17 = OpLoad %9 %16
+         %18 = OpConvertFToS %6 %17
+               OpStore %8 %18
+         %20 = OpLoad %6 %8
+         %28 = OpAccessChain %27 %25 %26 %26
+         %29 = OpLoad %6 %28
+         %30 = OpBitwiseAnd %6 %20 %29
+         %31 = OpLoad %6 %8
+         %32 = OpAccessChain %27 %25 %26 %26
+         %33 = OpLoad %6 %32
+         %34 = OpBitwiseAnd %6 %31 %33
+         %35 = OpBitwiseOr %6 %30 %34
+               OpStore %19 %35
+         %38 = OpAccessChain %27 %25 %26 %26
+         %39 = OpLoad %6 %38
+         %40 = OpConvertSToF %9 %39
+         %42 = OpAccessChain %27 %25 %26 %41
+         %43 = OpLoad %6 %42
+         %44 = OpConvertSToF %9 %43
+         %45 = OpAccessChain %27 %25 %26 %41
+         %46 = OpLoad %6 %45
+         %47 = OpConvertSToF %9 %46
+         %48 = OpAccessChain %27 %25 %26 %26
+         %49 = OpLoad %6 %48
+         %50 = OpConvertSToF %9 %49
+         %51 = OpCompositeConstruct %10 %40 %44 %47 %50
+         %52 = OpAccessChain %27 %25 %26 %26
+         %53 = OpLoad %6 %52
+         %54 = OpConvertSToF %9 %53
+         %55 = OpAccessChain %27 %25 %26 %41
+         %56 = OpLoad %6 %55
+         %57 = OpConvertSToF %9 %56
+         %58 = OpAccessChain %27 %25 %26 %41
+         %59 = OpLoad %6 %58
+         %60 = OpConvertSToF %9 %59
+         %61 = OpAccessChain %27 %25 %26 %26
+         %62 = OpLoad %6 %61
+         %63 = OpConvertSToF %9 %62
+         %64 = OpCompositeConstruct %10 %54 %57 %60 %63
+         %65 = OpAccessChain %27 %25 %26 %41
+         %66 = OpLoad %6 %65
+         %67 = OpConvertSToF %9 %66
+         %68 = OpCompositeConstruct %10 %67 %67 %67 %67
+         %69 = OpAccessChain %27 %25 %26 %41
+         %70 = OpLoad %6 %69
+         %71 = OpConvertSToF %9 %70
+         %72 = OpCompositeConstruct %10 %71 %71 %71 %71
+         %75 = OpCompositeConstruct %74 %51 %64 %68 %72
+         %76 = OpLoad %6 %19
+               OpStore %78 %75
+         %80 = OpAccessChain %79 %78 %76
+         %81 = OpLoad %10 %80
+               OpStore %37 %81
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-fragcoord-loop-limit-negative-decrease-sum-first-iteration.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-fragcoord-loop-limit-negative-decrease-sum-first-iteration.amber
new file mode 100644 (file)
index 0000000..1fe1e78
--- /dev/null
@@ -0,0 +1,250 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _int_18 _GLF_uniform_int_values[2]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp int;
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [0, 1, 18]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int sum = _int_1;
+#
+#     // The loop limit is always 20. The first iteration decreases the sum,
+#     // and all other iterations increases it.
+#     for(int i = 1; i < ((gl_FragCoord.x >= _float_0_0) ? 20 : - 1); i++)
+#     {
+#         sum += i == _int_1 ? - _int_1 : _int_1;
+#     }
+#
+#     // Always true.
+#     if(sum == _int_18)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 94
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %30 %75
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "sum"
+               OpName %12 "buf1"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %20 "i"
+               OpName %30 "gl_FragCoord"
+               OpName %37 "buf0"
+               OpMemberName %37 0 "_GLF_uniform_float_values"
+               OpName %39 ""
+               OpName %75 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 1
+               OpDecorate %30 BuiltIn FragCoord
+               OpDecorate %36 ArrayStride 16
+               OpMemberDecorate %37 0 Offset 0
+               OpDecorate %37 Block
+               OpDecorate %39 DescriptorSet 0
+               OpDecorate %39 Binding 0
+               OpDecorate %75 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 3
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 1
+         %17 = OpTypePointer Uniform %6
+         %27 = OpTypeFloat 32
+         %28 = OpTypeVector %27 4
+         %29 = OpTypePointer Input %28
+         %30 = OpVariable %29 Input
+         %31 = OpConstant %9 0
+         %32 = OpTypePointer Input %27
+         %35 = OpConstant %9 1
+         %36 = OpTypeArray %27 %35
+         %37 = OpTypeStruct %36
+         %38 = OpTypePointer Uniform %37
+         %39 = OpVariable %38 Uniform
+         %40 = OpTypePointer Uniform %27
+         %43 = OpTypeBool
+         %45 = OpConstant %6 20
+         %46 = OpConstant %6 -1
+         %68 = OpConstant %6 2
+         %74 = OpTypePointer Output %28
+         %75 = OpVariable %74 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %53 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+               OpStore %20 %16
+               OpBranch %21
+         %21 = OpLabel
+               OpLoopMerge %23 %24 None
+               OpBranch %25
+         %25 = OpLabel
+         %26 = OpLoad %6 %20
+         %33 = OpAccessChain %32 %30 %31
+         %34 = OpLoad %27 %33
+         %41 = OpAccessChain %40 %39 %15 %15
+         %42 = OpLoad %27 %41
+         %44 = OpFOrdGreaterThanEqual %43 %34 %42
+         %47 = OpSelect %6 %44 %45 %46
+         %48 = OpSLessThan %43 %26 %47
+               OpBranchConditional %48 %22 %23
+         %22 = OpLabel
+         %49 = OpLoad %6 %20
+         %50 = OpAccessChain %17 %14 %15 %16
+         %51 = OpLoad %6 %50
+         %52 = OpIEqual %43 %49 %51
+               OpSelectionMerge %55 None
+               OpBranchConditional %52 %54 %59
+         %54 = OpLabel
+         %56 = OpAccessChain %17 %14 %15 %16
+         %57 = OpLoad %6 %56
+         %58 = OpSNegate %6 %57
+               OpStore %53 %58
+               OpBranch %55
+         %59 = OpLabel
+         %60 = OpAccessChain %17 %14 %15 %16
+         %61 = OpLoad %6 %60
+               OpStore %53 %61
+               OpBranch %55
+         %55 = OpLabel
+         %62 = OpLoad %6 %53
+         %63 = OpLoad %6 %8
+         %64 = OpIAdd %6 %63 %62
+               OpStore %8 %64
+               OpBranch %24
+         %24 = OpLabel
+         %65 = OpLoad %6 %20
+         %66 = OpIAdd %6 %65 %16
+               OpStore %20 %66
+               OpBranch %21
+         %23 = OpLabel
+         %67 = OpLoad %6 %8
+         %69 = OpAccessChain %17 %14 %15 %68
+         %70 = OpLoad %6 %69
+         %71 = OpIEqual %43 %67 %70
+               OpSelectionMerge %73 None
+               OpBranchConditional %71 %72 %89
+         %72 = OpLabel
+         %76 = OpAccessChain %17 %14 %15 %16
+         %77 = OpLoad %6 %76
+         %78 = OpConvertSToF %27 %77
+         %79 = OpAccessChain %17 %14 %15 %15
+         %80 = OpLoad %6 %79
+         %81 = OpConvertSToF %27 %80
+         %82 = OpAccessChain %17 %14 %15 %15
+         %83 = OpLoad %6 %82
+         %84 = OpConvertSToF %27 %83
+         %85 = OpAccessChain %17 %14 %15 %16
+         %86 = OpLoad %6 %85
+         %87 = OpConvertSToF %27 %86
+         %88 = OpCompositeConstruct %28 %78 %81 %84 %87
+               OpStore %75 %88
+               OpBranch %73
+         %89 = OpLabel
+         %90 = OpAccessChain %17 %14 %15 %15
+         %91 = OpLoad %6 %90
+         %92 = OpConvertSToF %27 %91
+         %93 = OpCompositeConstruct %28 %92 %92 %92 %92
+               OpStore %75 %93
+               OpBranch %73
+         %73 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1 18
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-function-call-twice-clamp-global-variable.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-function-call-twice-clamp-global-variable.amber
new file mode 100644 (file)
index 0000000..6f89361
--- /dev/null
@@ -0,0 +1,291 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+# #define _float_10_0 _GLF_uniform_float_values[2]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [0.0, 1.0, 10.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[3];
+# };
+#
+# const int _GLF_global_loop_bound = 10;
+# int _GLF_global_loop_count = 0;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# float a = 1.0;
+# float b = 1.0;
+#
+# void func()
+# {
+#     // Always true.
+#     if(gl_FragCoord.y > _float_0_0)
+#     {
+#         // Always true.
+#         if(gl_FragCoord.y > _float_0_0)
+#         {
+#             while(_GLF_global_loop_count < _GLF_global_loop_bound)
+#             {
+#                 _GLF_global_loop_count++;
+#             }
+#
+#             a = 256.0;
+#         }
+#
+#         // c becomes b = 1.
+#         float c = 256.0 - a + b;
+#         // Clamps 10.0 between 0 and 1.0 resulting in 1.0.
+#         b = clamp(_float_10_0, _float_0_0, c);
+#     }
+# }
+#
+# void main()
+# {
+#     func();
+#     func();
+#
+#     // Always true.
+#     if(b == _float_1_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 103
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %19 %78
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %6 "func("
+               OpName %10 "_GLF_global_loop_count"
+               OpName %14 "a"
+               OpName %16 "b"
+               OpName %19 "gl_FragCoord"
+               OpName %27 "buf1"
+               OpMemberName %27 0 "_GLF_uniform_float_values"
+               OpName %29 ""
+               OpName %57 "c"
+               OpName %78 "_GLF_color"
+               OpName %81 "buf0"
+               OpMemberName %81 0 "_GLF_uniform_int_values"
+               OpName %83 ""
+               OpDecorate %19 BuiltIn FragCoord
+               OpDecorate %26 ArrayStride 16
+               OpMemberDecorate %27 0 Offset 0
+               OpDecorate %27 Block
+               OpDecorate %29 DescriptorSet 0
+               OpDecorate %29 Binding 1
+               OpDecorate %78 Location 0
+               OpDecorate %80 ArrayStride 16
+               OpMemberDecorate %81 0 Offset 0
+               OpDecorate %81 Block
+               OpDecorate %83 DescriptorSet 0
+               OpDecorate %83 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %8 = OpTypeInt 32 1
+          %9 = OpTypePointer Private %8
+         %10 = OpVariable %9 Private
+         %11 = OpConstant %8 0
+         %12 = OpTypeFloat 32
+         %13 = OpTypePointer Private %12
+         %14 = OpVariable %13 Private
+         %15 = OpConstant %12 1
+         %16 = OpVariable %13 Private
+         %17 = OpTypeVector %12 4
+         %18 = OpTypePointer Input %17
+         %19 = OpVariable %18 Input
+         %20 = OpTypeInt 32 0
+         %21 = OpConstant %20 1
+         %22 = OpTypePointer Input %12
+         %25 = OpConstant %20 3
+         %26 = OpTypeArray %12 %25
+         %27 = OpTypeStruct %26
+         %28 = OpTypePointer Uniform %27
+         %29 = OpVariable %28 Uniform
+         %30 = OpTypePointer Uniform %12
+         %33 = OpTypeBool
+         %50 = OpConstant %8 10
+         %53 = OpConstant %8 1
+         %55 = OpConstant %12 256
+         %56 = OpTypePointer Function %12
+         %62 = OpConstant %8 2
+         %77 = OpTypePointer Output %17
+         %78 = OpVariable %77 Output
+         %79 = OpConstant %20 2
+         %80 = OpTypeArray %8 %79
+         %81 = OpTypeStruct %80
+         %82 = OpTypePointer Uniform %81
+         %83 = OpVariable %82 Uniform
+         %84 = OpTypePointer Uniform %8
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+               OpStore %10 %11
+               OpStore %14 %15
+               OpStore %16 %15
+         %69 = OpFunctionCall %2 %6
+         %70 = OpFunctionCall %2 %6
+         %71 = OpLoad %12 %16
+         %72 = OpAccessChain %30 %29 %11 %53
+         %73 = OpLoad %12 %72
+         %74 = OpFOrdEqual %33 %71 %73
+               OpSelectionMerge %76 None
+               OpBranchConditional %74 %75 %98
+         %75 = OpLabel
+         %85 = OpAccessChain %84 %83 %11 %11
+         %86 = OpLoad %8 %85
+         %87 = OpConvertSToF %12 %86
+         %88 = OpAccessChain %84 %83 %11 %53
+         %89 = OpLoad %8 %88
+         %90 = OpConvertSToF %12 %89
+         %91 = OpAccessChain %84 %83 %11 %53
+         %92 = OpLoad %8 %91
+         %93 = OpConvertSToF %12 %92
+         %94 = OpAccessChain %84 %83 %11 %11
+         %95 = OpLoad %8 %94
+         %96 = OpConvertSToF %12 %95
+         %97 = OpCompositeConstruct %17 %87 %90 %93 %96
+               OpStore %78 %97
+               OpBranch %76
+         %98 = OpLabel
+         %99 = OpAccessChain %84 %83 %11 %53
+        %100 = OpLoad %8 %99
+        %101 = OpConvertSToF %12 %100
+        %102 = OpCompositeConstruct %17 %101 %101 %101 %101
+               OpStore %78 %102
+               OpBranch %76
+         %76 = OpLabel
+               OpReturn
+               OpFunctionEnd
+          %6 = OpFunction %2 None %3
+          %7 = OpLabel
+         %57 = OpVariable %56 Function
+         %23 = OpAccessChain %22 %19 %21
+         %24 = OpLoad %12 %23
+         %31 = OpAccessChain %30 %29 %11 %11
+         %32 = OpLoad %12 %31
+         %34 = OpFOrdGreaterThan %33 %24 %32
+               OpSelectionMerge %36 None
+               OpBranchConditional %34 %35 %36
+         %35 = OpLabel
+         %37 = OpAccessChain %22 %19 %21
+         %38 = OpLoad %12 %37
+         %39 = OpAccessChain %30 %29 %11 %11
+         %40 = OpLoad %12 %39
+         %41 = OpFOrdGreaterThan %33 %38 %40
+               OpSelectionMerge %43 None
+               OpBranchConditional %41 %42 %43
+         %42 = OpLabel
+               OpBranch %44
+         %44 = OpLabel
+               OpLoopMerge %46 %47 None
+               OpBranch %48
+         %48 = OpLabel
+         %49 = OpLoad %8 %10
+         %51 = OpSLessThan %33 %49 %50
+               OpBranchConditional %51 %45 %46
+         %45 = OpLabel
+         %52 = OpLoad %8 %10
+         %54 = OpIAdd %8 %52 %53
+               OpStore %10 %54
+               OpBranch %47
+         %47 = OpLabel
+               OpBranch %44
+         %46 = OpLabel
+               OpStore %14 %55
+               OpBranch %43
+         %43 = OpLabel
+         %58 = OpLoad %12 %14
+         %59 = OpFSub %12 %55 %58
+         %60 = OpLoad %12 %16
+         %61 = OpFAdd %12 %59 %60
+               OpStore %57 %61
+         %63 = OpAccessChain %30 %29 %11 %62
+         %64 = OpLoad %12 %63
+         %65 = OpAccessChain %30 %29 %11 %11
+         %66 = OpLoad %12 %65
+         %67 = OpLoad %12 %57
+         %68 = OpExtInst %12 %1 FClamp %64 %66 %67
+               OpStore %16 %68
+               OpBranch %36
+         %36 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 1.0 10.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-function-loop-variable-multiplied-unused.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-function-loop-variable-multiplied-unused.amber
new file mode 100644 (file)
index 0000000..724bdf3
--- /dev/null
@@ -0,0 +1,236 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+# Optimized using spirv-opt with the following arguments:
+# '--copy-propagate-arrays'
+# '--eliminate-local-multi-store'
+# '--if-conversion'
+# '--if-conversion'
+# '--combine-access-chains'
+# '--redundancy-elimination'
+# '--eliminate-dead-branches'
+# '--eliminate-dead-branches'
+# '--merge-blocks'
+# spirv-opt commit hash: a0370efd589be33d5d9a85cfde2f85841b3755af
+
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# const int _GLF_global_loop_bound = 10;
+# int _GLF_global_loop_count = 0;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# int func()
+# {
+#     int a = 1;
+#     int i = 1;
+#
+#     // Iterated once.
+#     while(_GLF_global_loop_count < _GLF_global_loop_bound)
+#     {
+#         _GLF_global_loop_count++;
+#
+#         // Iterated nine times. 2 * a has no effect.
+#         for( i = _int_1; _GLF_global_loop_count < _GLF_global_loop_bound; 2 * a)
+#         {
+#             _GLF_global_loop_count++;
+#             i++;
+#         }
+#     }
+#
+#     // Returns 10.
+#     return i;
+# }
+#
+# void main()
+# {
+#     // Always true.
+#     if(func() == 10)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 84
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %61
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "func("
+               OpName %11 "_GLF_global_loop_count"
+               OpName %14 "a"
+               OpName %16 "i"
+               OpName %31 "buf0"
+               OpMemberName %31 0 "_GLF_uniform_int_values"
+               OpName %33 ""
+               OpName %61 "_GLF_color"
+               OpDecorate %30 ArrayStride 16
+               OpMemberDecorate %31 0 Offset 0
+               OpDecorate %31 Block
+               OpDecorate %33 DescriptorSet 0
+               OpDecorate %33 Binding 0
+               OpDecorate %61 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeFunction %6
+         %10 = OpTypePointer Private %6
+         %11 = OpVariable %10 Private
+         %12 = OpConstant %6 0
+         %13 = OpTypePointer Function %6
+         %15 = OpConstant %6 1
+         %23 = OpConstant %6 10
+         %24 = OpTypeBool
+         %28 = OpTypeInt 32 0
+         %29 = OpConstant %28 2
+         %30 = OpTypeArray %6 %29
+         %31 = OpTypeStruct %30
+         %32 = OpTypePointer Uniform %31
+         %33 = OpVariable %32 Uniform
+         %34 = OpTypePointer Uniform %6
+         %48 = OpConstant %6 2
+         %58 = OpTypeFloat 32
+         %59 = OpTypeVector %58 4
+         %60 = OpTypePointer Output %59
+         %61 = OpVariable %60 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+               OpStore %11 %12
+         %54 = OpFunctionCall %6 %8
+         %55 = OpIEqual %24 %54 %23
+               OpSelectionMerge %57 None
+               OpBranchConditional %55 %56 %75
+         %56 = OpLabel
+         %62 = OpAccessChain %34 %33 %12 %12
+         %63 = OpLoad %6 %62
+         %64 = OpConvertSToF %58 %63
+         %65 = OpAccessChain %34 %33 %12 %15
+         %66 = OpLoad %6 %65
+         %67 = OpConvertSToF %58 %66
+         %74 = OpCompositeConstruct %59 %64 %67 %67 %64
+               OpStore %61 %74
+               OpBranch %57
+         %75 = OpLabel
+         %76 = OpAccessChain %34 %33 %12 %15
+         %77 = OpLoad %6 %76
+         %78 = OpConvertSToF %58 %77
+         %79 = OpCompositeConstruct %59 %78 %78 %78 %78
+               OpStore %61 %79
+               OpBranch %57
+         %57 = OpLabel
+               OpReturn
+               OpFunctionEnd
+          %8 = OpFunction %6 None %7
+          %9 = OpLabel
+         %14 = OpVariable %13 Function
+         %16 = OpVariable %13 Function
+               OpStore %14 %15
+               OpStore %16 %15
+               OpBranch %17
+         %17 = OpLabel
+         %80 = OpPhi %6 %15 %9 %81 %20
+         %83 = OpPhi %6 %15 %9 %83 %20
+         %22 = OpLoad %6 %11
+         %25 = OpSLessThan %24 %22 %23
+               OpLoopMerge %19 %20 None
+               OpBranchConditional %25 %18 %19
+         %18 = OpLabel
+         %26 = OpLoad %6 %11
+         %27 = OpIAdd %6 %26 %15
+               OpStore %11 %27
+         %35 = OpAccessChain %34 %33 %12 %12
+         %36 = OpLoad %6 %35
+               OpStore %16 %36
+               OpBranch %37
+         %37 = OpLabel
+         %81 = OpPhi %6 %36 %18 %47 %38
+         %42 = OpLoad %6 %11
+         %43 = OpSLessThan %24 %42 %23
+               OpLoopMerge %39 %38 None
+               OpBranchConditional %43 %38 %39
+         %38 = OpLabel
+         %44 = OpLoad %6 %11
+         %45 = OpIAdd %6 %44 %15
+               OpStore %11 %45
+         %47 = OpIAdd %6 %81 %15
+               OpStore %16 %47
+         %50 = OpIMul %6 %48 %83
+               OpBranch %37
+         %39 = OpLabel
+               OpBranch %20
+         %20 = OpLabel
+               OpBranch %17
+         %19 = OpLabel
+               OpReturnValue %80
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-array-element-bitfield-insert-undefined-never-read.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-array-element-bitfield-insert-undefined-never-read.amber
new file mode 100644 (file)
index 0000000..72aa4e9
--- /dev/null
@@ -0,0 +1,316 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+#
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_5 _GLF_uniform_int_values[1]
+# #define _int_4 _GLF_uniform_int_values[2]
+# #define _int_0 _GLF_uniform_int_values[3]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 5, 4, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[4];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int arr0[10] = int[10](_int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0);
+#     int a = _int_4;
+#     int idx = _int_1;
+#     // arr0[1] becomes one.
+#     arr0[idx] = _int_1;
+#
+#     for(int i = _int_0; i < _int_5; i++)
+#     {
+#         int b = _int_1;
+#
+#         // Always true.
+#         if(arr0[_int_1] == _int_1)
+#         {
+#             b++;
+#         }
+#
+#         // bitfieldInsert return value is undefined but also unused.
+#         int arr1[10] = int[10](_int_1, _int_1, _int_1, a, _int_1, _int_1, _int_1, _int_1, _int_1, bitfieldInsert(b, _int_1, 50, _int_1));
+#         int c = _int_1;
+#
+#         // Always true.
+#         if(arr1[c] >= _int_1)
+#         {
+#             a = _int_1;
+#         }
+#     }
+#
+#     // Always true.
+#     if(a == _int_1)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 150
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %131
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %11 "arr0"
+               OpName %14 "buf0"
+               OpMemberName %14 0 "_GLF_uniform_int_values"
+               OpName %16 ""
+               OpName %42 "a"
+               OpName %46 "idx"
+               OpName %53 "i"
+               OpName %67 "b"
+               OpName %81 "arr1"
+               OpName %107 "c"
+               OpName %131 "_GLF_color"
+               OpDecorate %13 ArrayStride 16
+               OpMemberDecorate %14 0 Offset 0
+               OpDecorate %14 Block
+               OpDecorate %16 DescriptorSet 0
+               OpDecorate %16 Binding 0
+               OpDecorate %131 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeInt 32 0
+          %8 = OpConstant %7 10
+          %9 = OpTypeArray %6 %8
+         %10 = OpTypePointer Function %9
+         %12 = OpConstant %7 4
+         %13 = OpTypeArray %6 %12
+         %14 = OpTypeStruct %13
+         %15 = OpTypePointer Uniform %14
+         %16 = OpVariable %15 Uniform
+         %17 = OpConstant %6 0
+         %18 = OpConstant %6 3
+         %19 = OpTypePointer Uniform %6
+         %41 = OpTypePointer Function %6
+         %43 = OpConstant %6 2
+         %62 = OpConstant %6 1
+         %65 = OpTypeBool
+        %102 = OpConstant %6 50
+        %128 = OpTypeFloat 32
+        %129 = OpTypeVector %128 4
+        %130 = OpTypePointer Output %129
+        %131 = OpVariable %130 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %11 = OpVariable %10 Function
+         %42 = OpVariable %41 Function
+         %46 = OpVariable %41 Function
+         %53 = OpVariable %41 Function
+         %67 = OpVariable %41 Function
+         %81 = OpVariable %10 Function
+        %107 = OpVariable %41 Function
+         %20 = OpAccessChain %19 %16 %17 %18
+         %21 = OpLoad %6 %20
+         %22 = OpAccessChain %19 %16 %17 %18
+         %23 = OpLoad %6 %22
+         %24 = OpAccessChain %19 %16 %17 %18
+         %25 = OpLoad %6 %24
+         %26 = OpAccessChain %19 %16 %17 %18
+         %27 = OpLoad %6 %26
+         %28 = OpAccessChain %19 %16 %17 %18
+         %29 = OpLoad %6 %28
+         %30 = OpAccessChain %19 %16 %17 %18
+         %31 = OpLoad %6 %30
+         %32 = OpAccessChain %19 %16 %17 %18
+         %33 = OpLoad %6 %32
+         %34 = OpAccessChain %19 %16 %17 %18
+         %35 = OpLoad %6 %34
+         %36 = OpAccessChain %19 %16 %17 %18
+         %37 = OpLoad %6 %36
+         %38 = OpAccessChain %19 %16 %17 %18
+         %39 = OpLoad %6 %38
+         %40 = OpCompositeConstruct %9 %21 %23 %25 %27 %29 %31 %33 %35 %37 %39
+               OpStore %11 %40
+         %44 = OpAccessChain %19 %16 %17 %43
+         %45 = OpLoad %6 %44
+               OpStore %42 %45
+         %47 = OpAccessChain %19 %16 %17 %17
+         %48 = OpLoad %6 %47
+               OpStore %46 %48
+         %49 = OpLoad %6 %46
+         %50 = OpAccessChain %19 %16 %17 %17
+         %51 = OpLoad %6 %50
+         %52 = OpAccessChain %41 %11 %49
+               OpStore %52 %51
+         %54 = OpAccessChain %19 %16 %17 %18
+         %55 = OpLoad %6 %54
+               OpStore %53 %55
+               OpBranch %56
+         %56 = OpLabel
+               OpLoopMerge %58 %59 None
+               OpBranch %60
+         %60 = OpLabel
+         %61 = OpLoad %6 %53
+         %63 = OpAccessChain %19 %16 %17 %62
+         %64 = OpLoad %6 %63
+         %66 = OpSLessThan %65 %61 %64
+               OpBranchConditional %66 %57 %58
+         %57 = OpLabel
+         %68 = OpAccessChain %19 %16 %17 %17
+         %69 = OpLoad %6 %68
+               OpStore %67 %69
+         %70 = OpAccessChain %19 %16 %17 %17
+         %71 = OpLoad %6 %70
+         %72 = OpAccessChain %41 %11 %71
+         %73 = OpLoad %6 %72
+         %74 = OpAccessChain %19 %16 %17 %17
+         %75 = OpLoad %6 %74
+         %76 = OpIEqual %65 %73 %75
+               OpSelectionMerge %78 None
+               OpBranchConditional %76 %77 %78
+         %77 = OpLabel
+         %79 = OpLoad %6 %67
+         %80 = OpIAdd %6 %79 %62
+               OpStore %67 %80
+               OpBranch %78
+         %78 = OpLabel
+         %82 = OpAccessChain %19 %16 %17 %17
+         %83 = OpLoad %6 %82
+         %84 = OpAccessChain %19 %16 %17 %17
+         %85 = OpLoad %6 %84
+         %86 = OpAccessChain %19 %16 %17 %17
+         %87 = OpLoad %6 %86
+         %88 = OpLoad %6 %42
+         %89 = OpAccessChain %19 %16 %17 %17
+         %90 = OpLoad %6 %89
+         %91 = OpAccessChain %19 %16 %17 %17
+         %92 = OpLoad %6 %91
+         %93 = OpAccessChain %19 %16 %17 %17
+         %94 = OpLoad %6 %93
+         %95 = OpAccessChain %19 %16 %17 %17
+         %96 = OpLoad %6 %95
+         %97 = OpAccessChain %19 %16 %17 %17
+         %98 = OpLoad %6 %97
+         %99 = OpLoad %6 %67
+        %100 = OpAccessChain %19 %16 %17 %17
+        %101 = OpLoad %6 %100
+        %103 = OpAccessChain %19 %16 %17 %17
+        %104 = OpLoad %6 %103
+        %105 = OpBitFieldInsert %6 %99 %101 %102 %104
+        %106 = OpCompositeConstruct %9 %83 %85 %87 %88 %90 %92 %94 %96 %98 %105
+               OpStore %81 %106
+        %108 = OpAccessChain %19 %16 %17 %17
+        %109 = OpLoad %6 %108
+               OpStore %107 %109
+        %110 = OpLoad %6 %107
+        %111 = OpAccessChain %41 %81 %110
+        %112 = OpLoad %6 %111
+        %113 = OpAccessChain %19 %16 %17 %17
+        %114 = OpLoad %6 %113
+        %115 = OpSGreaterThanEqual %65 %112 %114
+               OpSelectionMerge %117 None
+               OpBranchConditional %115 %116 %117
+        %116 = OpLabel
+        %118 = OpAccessChain %19 %16 %17 %17
+        %119 = OpLoad %6 %118
+               OpStore %42 %119
+               OpBranch %117
+        %117 = OpLabel
+               OpBranch %59
+         %59 = OpLabel
+        %120 = OpLoad %6 %53
+        %121 = OpIAdd %6 %120 %62
+               OpStore %53 %121
+               OpBranch %56
+         %58 = OpLabel
+        %122 = OpLoad %6 %42
+        %123 = OpAccessChain %19 %16 %17 %17
+        %124 = OpLoad %6 %123
+        %125 = OpIEqual %65 %122 %124
+               OpSelectionMerge %127 None
+               OpBranchConditional %125 %126 %145
+        %126 = OpLabel
+        %132 = OpAccessChain %19 %16 %17 %17
+        %133 = OpLoad %6 %132
+        %134 = OpConvertSToF %128 %133
+        %135 = OpAccessChain %19 %16 %17 %18
+        %136 = OpLoad %6 %135
+        %137 = OpConvertSToF %128 %136
+        %138 = OpAccessChain %19 %16 %17 %18
+        %139 = OpLoad %6 %138
+        %140 = OpConvertSToF %128 %139
+        %141 = OpAccessChain %19 %16 %17 %17
+        %142 = OpLoad %6 %141
+        %143 = OpConvertSToF %128 %142
+        %144 = OpCompositeConstruct %129 %134 %137 %140 %143
+               OpStore %131 %144
+               OpBranch %127
+        %145 = OpLabel
+        %146 = OpAccessChain %19 %16 %17 %18
+        %147 = OpLoad %6 %146
+        %148 = OpConvertSToF %128 %147
+        %149 = OpCompositeConstruct %129 %148 %148 %148 %148
+               OpStore %131 %149
+               OpBranch %127
+        %127 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 5 4 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-find-lsb-eight-fragcoord-never-discard.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-find-lsb-eight-fragcoord-never-discard.amber
new file mode 100644 (file)
index 0000000..404be64
--- /dev/null
@@ -0,0 +1,281 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+# Optimized using spirv-opt with the following arguments:
+# '-O'
+# spirv-opt commit hash: a0370efd589be33d5d9a85cfde2f85841b3755af
+
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _int_64 _GLF_uniform_int_values[2]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [0, 1, 64]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# // Contents of injectionSwitch: [0.0, 1.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     vec2 injectionSwitch;
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // Always false.
+#     if(injectionSwitch.x > injectionSwitch.y)
+#     {
+#         return;
+#     }
+#
+#     int a = 0;
+#
+#     do
+#     {
+#         // Iterates twice but has no effect.
+#         for(int i = 1; i < findLSB(8); i++)
+#         {
+#             if(i < a)
+#             {
+#                 continue;
+#             }
+#
+#             // Always false.
+#             if(injectionSwitch.x > injectionSwitch.y)
+#             {
+#             }
+#             else
+#             {
+#                 // Always false.
+#                 if(gl_FragCoord.y < 0.0)
+#                 {
+#                     discard;
+#                 }
+#             }
+#         }
+#
+#         a++;
+#     }
+#     while(a < 64);
+#
+#     // Always true.
+#     if(a == _int_64)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 117
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %59 %89
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "buf1"
+               OpMemberName %8 0 "injectionSwitch"
+               OpName %10 ""
+               OpName %59 "gl_FragCoord"
+               OpName %78 "buf0"
+               OpMemberName %78 0 "_GLF_uniform_int_values"
+               OpName %80 ""
+               OpName %89 "_GLF_color"
+               OpMemberDecorate %8 0 Offset 0
+               OpDecorate %8 Block
+               OpDecorate %10 DescriptorSet 0
+               OpDecorate %10 Binding 1
+               OpDecorate %41 RelaxedPrecision
+               OpDecorate %59 BuiltIn FragCoord
+               OpDecorate %77 ArrayStride 16
+               OpMemberDecorate %78 0 Offset 0
+               OpDecorate %78 Block
+               OpDecorate %80 DescriptorSet 0
+               OpDecorate %80 Binding 0
+               OpDecorate %89 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypeStruct %7
+          %9 = OpTypePointer Uniform %8
+         %10 = OpVariable %9 Uniform
+         %11 = OpTypeInt 32 1
+         %12 = OpConstant %11 0
+         %13 = OpTypeInt 32 0
+         %14 = OpConstant %13 0
+         %15 = OpTypePointer Uniform %6
+         %18 = OpConstant %13 1
+         %21 = OpTypeBool
+         %33 = OpConstant %11 1
+         %40 = OpConstant %11 8
+         %57 = OpTypeVector %6 4
+         %58 = OpTypePointer Input %57
+         %59 = OpVariable %58 Input
+         %60 = OpTypePointer Input %6
+         %63 = OpConstant %6 0
+         %73 = OpConstant %11 64
+         %76 = OpConstant %13 3
+         %77 = OpTypeArray %11 %76
+         %78 = OpTypeStruct %77
+         %79 = OpTypePointer Uniform %78
+         %80 = OpVariable %79 Uniform
+         %81 = OpConstant %11 2
+         %82 = OpTypePointer Uniform %11
+         %88 = OpTypePointer Output %57
+         %89 = OpVariable %88 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+               OpSelectionMerge %108 None
+               OpSwitch %14 %109
+        %109 = OpLabel
+         %16 = OpAccessChain %15 %10 %12 %14
+         %17 = OpLoad %6 %16
+         %19 = OpAccessChain %15 %10 %12 %18
+         %20 = OpLoad %6 %19
+         %22 = OpFOrdGreaterThan %21 %17 %20
+               OpSelectionMerge %24 None
+               OpBranchConditional %22 %23 %24
+         %23 = OpLabel
+               OpBranch %108
+         %24 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
+        %116 = OpPhi %11 %12 %24 %71 %31
+               OpLoopMerge %30 %31 None
+               OpBranch %34
+         %34 = OpLabel
+        %114 = OpPhi %11 %33 %28 %69 %37
+         %41 = OpExtInst %11 %1 FindILsb %40
+         %42 = OpSLessThan %21 %114 %41
+               OpLoopMerge %36 %37 None
+               OpBranchConditional %42 %35 %36
+         %35 = OpLabel
+         %45 = OpSLessThan %21 %114 %116
+               OpSelectionMerge %47 None
+               OpBranchConditional %45 %46 %47
+         %46 = OpLabel
+               OpBranch %37
+         %47 = OpLabel
+               OpSelectionMerge %55 None
+               OpBranchConditional %22 %54 %56
+         %54 = OpLabel
+               OpBranch %55
+         %56 = OpLabel
+         %61 = OpAccessChain %60 %59 %18
+         %62 = OpLoad %6 %61
+         %64 = OpFOrdLessThan %21 %62 %63
+               OpSelectionMerge %66 None
+               OpBranchConditional %64 %65 %66
+         %65 = OpLabel
+               OpKill
+         %66 = OpLabel
+               OpBranch %55
+         %55 = OpLabel
+               OpBranch %37
+         %37 = OpLabel
+         %69 = OpIAdd %11 %114 %33
+               OpBranch %34
+         %36 = OpLabel
+         %71 = OpIAdd %11 %116 %33
+               OpBranch %31
+         %31 = OpLabel
+         %74 = OpSLessThan %21 %71 %73
+               OpBranchConditional %74 %28 %30
+         %30 = OpLabel
+         %83 = OpAccessChain %82 %80 %12 %81
+         %84 = OpLoad %11 %83
+         %85 = OpIEqual %21 %71 %84
+               OpSelectionMerge %87 None
+               OpBranchConditional %85 %86 %103
+         %86 = OpLabel
+         %90 = OpAccessChain %82 %80 %12 %33
+         %91 = OpLoad %11 %90
+         %92 = OpConvertSToF %6 %91
+         %93 = OpAccessChain %82 %80 %12 %12
+         %94 = OpLoad %11 %93
+         %95 = OpConvertSToF %6 %94
+        %102 = OpCompositeConstruct %57 %92 %95 %95 %92
+               OpStore %89 %102
+               OpBranch %87
+        %103 = OpLabel
+        %104 = OpAccessChain %82 %80 %12 %12
+        %105 = OpLoad %11 %104
+        %106 = OpConvertSToF %6 %105
+        %107 = OpCompositeConstruct %57 %106 %106 %106 %106
+               OpStore %89 %107
+               OpBranch %87
+         %87 = OpLabel
+               OpBranch %108
+        %108 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1 64
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-index-array-max-negative-zero.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-index-array-max-negative-zero.amber
new file mode 100644 (file)
index 0000000..27425b5
--- /dev/null
@@ -0,0 +1,252 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# #define _int_2 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _int_0 _GLF_uniform_int_values[2]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [2, 1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int idx = -87256;
+#     int arr[3] = int[3](_int_0, _int_1, _int_2);
+#
+#     for(int i = 0; i < 10; i++)
+#     {
+#         // Always true.
+#         if(arr[_int_1] <= _int_1)
+#         {
+#             // The array index is always zero.
+#             arr[max(idx++, 0)] = _int_1;
+#         }
+#     }
+#
+#     // Always true.
+#     if(arr[_int_0] == _int_1 && arr[_int_1] == _int_1 && arr[_int_2] == _int_2)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 108
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %89
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "idx"
+               OpName %14 "arr"
+               OpName %16 "buf0"
+               OpMemberName %16 0 "_GLF_uniform_int_values"
+               OpName %18 ""
+               OpName %30 "i"
+               OpName %89 "_GLF_color"
+               OpDecorate %15 ArrayStride 16
+               OpMemberDecorate %16 0 Offset 0
+               OpDecorate %16 Block
+               OpDecorate %18 DescriptorSet 0
+               OpDecorate %18 Binding 0
+               OpDecorate %89 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpConstant %6 -87256
+         %10 = OpTypeInt 32 0
+         %11 = OpConstant %10 3
+         %12 = OpTypeArray %6 %11
+         %13 = OpTypePointer Function %12
+         %15 = OpTypeArray %6 %11
+         %16 = OpTypeStruct %15
+         %17 = OpTypePointer Uniform %16
+         %18 = OpVariable %17 Uniform
+         %19 = OpConstant %6 0
+         %20 = OpConstant %6 2
+         %21 = OpTypePointer Uniform %6
+         %24 = OpConstant %6 1
+         %37 = OpConstant %6 10
+         %38 = OpTypeBool
+         %86 = OpTypeFloat 32
+         %87 = OpTypeVector %86 4
+         %88 = OpTypePointer Output %87
+         %89 = OpVariable %88 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %14 = OpVariable %13 Function
+         %30 = OpVariable %7 Function
+               OpStore %8 %9
+         %22 = OpAccessChain %21 %18 %19 %20
+         %23 = OpLoad %6 %22
+         %25 = OpAccessChain %21 %18 %19 %24
+         %26 = OpLoad %6 %25
+         %27 = OpAccessChain %21 %18 %19 %19
+         %28 = OpLoad %6 %27
+         %29 = OpCompositeConstruct %12 %23 %26 %28
+               OpStore %14 %29
+               OpStore %30 %19
+               OpBranch %31
+         %31 = OpLabel
+               OpLoopMerge %33 %34 None
+               OpBranch %35
+         %35 = OpLabel
+         %36 = OpLoad %6 %30
+         %39 = OpSLessThan %38 %36 %37
+               OpBranchConditional %39 %32 %33
+         %32 = OpLabel
+         %40 = OpAccessChain %21 %18 %19 %24
+         %41 = OpLoad %6 %40
+         %42 = OpAccessChain %7 %14 %41
+         %43 = OpLoad %6 %42
+         %44 = OpAccessChain %21 %18 %19 %24
+         %45 = OpLoad %6 %44
+         %46 = OpSLessThanEqual %38 %43 %45
+               OpSelectionMerge %48 None
+               OpBranchConditional %46 %47 %48
+         %47 = OpLabel
+         %49 = OpLoad %6 %8
+         %50 = OpIAdd %6 %49 %24
+               OpStore %8 %50
+         %51 = OpExtInst %6 %1 SMax %49 %19
+         %52 = OpAccessChain %21 %18 %19 %24
+         %53 = OpLoad %6 %52
+         %54 = OpAccessChain %7 %14 %51
+               OpStore %54 %53
+               OpBranch %48
+         %48 = OpLabel
+               OpBranch %34
+         %34 = OpLabel
+         %55 = OpLoad %6 %30
+         %56 = OpIAdd %6 %55 %24
+               OpStore %30 %56
+               OpBranch %31
+         %33 = OpLabel
+         %57 = OpAccessChain %21 %18 %19 %20
+         %58 = OpLoad %6 %57
+         %59 = OpAccessChain %7 %14 %58
+         %60 = OpLoad %6 %59
+         %61 = OpAccessChain %21 %18 %19 %24
+         %62 = OpLoad %6 %61
+         %63 = OpIEqual %38 %60 %62
+               OpSelectionMerge %65 None
+               OpBranchConditional %63 %64 %65
+         %64 = OpLabel
+         %66 = OpAccessChain %21 %18 %19 %24
+         %67 = OpLoad %6 %66
+         %68 = OpAccessChain %7 %14 %67
+         %69 = OpLoad %6 %68
+         %70 = OpAccessChain %21 %18 %19 %24
+         %71 = OpLoad %6 %70
+         %72 = OpIEqual %38 %69 %71
+               OpBranch %65
+         %65 = OpLabel
+         %73 = OpPhi %38 %63 %33 %72 %64
+               OpSelectionMerge %75 None
+               OpBranchConditional %73 %74 %75
+         %74 = OpLabel
+         %76 = OpAccessChain %21 %18 %19 %19
+         %77 = OpLoad %6 %76
+         %78 = OpAccessChain %7 %14 %77
+         %79 = OpLoad %6 %78
+         %80 = OpAccessChain %21 %18 %19 %19
+         %81 = OpLoad %6 %80
+         %82 = OpIEqual %38 %79 %81
+               OpBranch %75
+         %75 = OpLabel
+         %83 = OpPhi %38 %73 %65 %82 %74
+               OpSelectionMerge %85 None
+               OpBranchConditional %83 %84 %103
+         %84 = OpLabel
+         %90 = OpAccessChain %21 %18 %19 %24
+         %91 = OpLoad %6 %90
+         %92 = OpConvertSToF %86 %91
+         %93 = OpAccessChain %21 %18 %19 %20
+         %94 = OpLoad %6 %93
+         %95 = OpConvertSToF %86 %94
+         %96 = OpAccessChain %21 %18 %19 %20
+         %97 = OpLoad %6 %96
+         %98 = OpConvertSToF %86 %97
+         %99 = OpAccessChain %21 %18 %19 %24
+        %100 = OpLoad %6 %99
+        %101 = OpConvertSToF %86 %100
+        %102 = OpCompositeConstruct %87 %92 %95 %98 %101
+               OpStore %89 %102
+               OpBranch %85
+        %103 = OpLabel
+        %104 = OpAccessChain %21 %18 %19 %20
+        %105 = OpLoad %6 %104
+        %106 = OpConvertSToF %86 %105
+        %107 = OpCompositeConstruct %87 %106 %106 %106 %106
+               OpStore %89 %107
+               OpBranch %85
+         %85 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 2 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-max-divide-integer-by-ten.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-max-divide-integer-by-ten.amber
new file mode 100644 (file)
index 0000000..c4b775f
--- /dev/null
@@ -0,0 +1,204 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# #define _int_3 _GLF_uniform_int_values[0]
+# #define _int_10 _GLF_uniform_int_values[1]
+# #define _int_10000 _GLF_uniform_int_values[2]
+# #define _int_0 _GLF_uniform_int_values[3]
+# #define _int_1 _GLF_uniform_int_values[4]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [3, 10, 10000, 0, 1]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[5];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int a = _int_10000;
+#
+#     // Divides a by 10 three times.
+#     for(int i = _int_0; i < _int_3; i++)
+#     {
+#         a = max(a / _int_10, a / _int_10);
+#     }
+#
+#     // Always true.
+#     if(a == _int_10)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 75
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %55
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %20 "i"
+               OpName %55 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %55 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 5
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 2
+         %17 = OpTypePointer Uniform %6
+         %21 = OpConstant %6 3
+         %32 = OpTypeBool
+         %35 = OpConstant %6 1
+         %52 = OpTypeFloat 32
+         %53 = OpTypeVector %52 4
+         %54 = OpTypePointer Output %53
+         %55 = OpVariable %54 Output
+         %56 = OpConstant %6 4
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+         %22 = OpAccessChain %17 %14 %15 %21
+         %23 = OpLoad %6 %22
+               OpStore %20 %23
+               OpBranch %24
+         %24 = OpLabel
+               OpLoopMerge %26 %27 None
+               OpBranch %28
+         %28 = OpLabel
+         %29 = OpLoad %6 %20
+         %30 = OpAccessChain %17 %14 %15 %15
+         %31 = OpLoad %6 %30
+         %33 = OpSLessThan %32 %29 %31
+               OpBranchConditional %33 %25 %26
+         %25 = OpLabel
+         %34 = OpLoad %6 %8
+         %36 = OpAccessChain %17 %14 %15 %35
+         %37 = OpLoad %6 %36
+         %38 = OpSDiv %6 %34 %37
+         %39 = OpLoad %6 %8
+         %40 = OpAccessChain %17 %14 %15 %35
+         %41 = OpLoad %6 %40
+         %42 = OpSDiv %6 %39 %41
+         %43 = OpExtInst %6 %1 SMax %38 %42
+               OpStore %8 %43
+               OpBranch %27
+         %27 = OpLabel
+         %44 = OpLoad %6 %20
+         %45 = OpIAdd %6 %44 %35
+               OpStore %20 %45
+               OpBranch %24
+         %26 = OpLabel
+         %46 = OpLoad %6 %8
+         %47 = OpAccessChain %17 %14 %15 %35
+         %48 = OpLoad %6 %47
+         %49 = OpIEqual %32 %46 %48
+               OpSelectionMerge %51 None
+               OpBranchConditional %49 %50 %70
+         %50 = OpLabel
+         %57 = OpAccessChain %17 %14 %15 %56
+         %58 = OpLoad %6 %57
+         %59 = OpConvertSToF %52 %58
+         %60 = OpAccessChain %17 %14 %15 %21
+         %61 = OpLoad %6 %60
+         %62 = OpConvertSToF %52 %61
+         %63 = OpAccessChain %17 %14 %15 %21
+         %64 = OpLoad %6 %63
+         %65 = OpConvertSToF %52 %64
+         %66 = OpAccessChain %17 %14 %15 %56
+         %67 = OpLoad %6 %66
+         %68 = OpConvertSToF %52 %67
+         %69 = OpCompositeConstruct %53 %59 %62 %65 %68
+               OpStore %55 %69
+               OpBranch %51
+         %70 = OpLabel
+         %71 = OpAccessChain %17 %14 %15 %21
+         %72 = OpLoad %6 %71
+         %73 = OpConvertSToF %52 %72
+         %74 = OpCompositeConstruct %53 %73 %73 %73 %73
+               OpStore %55 %74
+               OpBranch %51
+         %51 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 3 10 10000 0 1
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-sampled-texel-integer-counter.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-sampled-texel-integer-counter.amber
new file mode 100644 (file)
index 0000000..cb13f2a
--- /dev/null
@@ -0,0 +1,312 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex texgen_vert PASSTHROUGH
+
+SHADER fragment texgen_frag GLSL
+#version 430
+precision highp float;
+
+layout(location = 0) out vec4 _GLF_color;
+
+void main()
+{
+ _GLF_color = vec4(
+ floor(gl_FragCoord.x) * (1.0 / 255.0),
+ (int(gl_FragCoord.x) ^ int(gl_FragCoord.y)) * (1.0 / 255.0),
+ floor(gl_FragCoord.y) * (1.0 / 255.0),
+ 1.0);
+}
+END
+BUFFER default_texture FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics texgen_pipeline
+  ATTACH texgen_vert
+  ATTACH texgen_frag
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER default_texture AS color LOCATION 0
+END
+
+CLEAR_COLOR texgen_pipeline 0 0 0 255
+CLEAR texgen_pipeline
+RUN texgen_pipeline DRAW_RECT POS 0 0  SIZE 256 256
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_4 _GLF_uniform_int_values[2]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_0_0 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 0.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [1, 0, 4]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(set = 0, binding = 2) uniform sampler2D tex;
+#
+# // Contents of zero: 0.0
+# layout(set = 0, binding = 3) uniform buf3
+# {
+#     float zero;
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int i = 0;
+#     float f = texture(tex, vec2(_float_1_0)).y;
+#
+#     // Sampled texel components are always <= 1. The loop will run until i is four.
+#     while(f <= _float_1_0 && i < 4)
+#     {
+#         // Always false.
+#         if(zero < _float_0_0)
+#         {
+#             continue;
+#         }
+#
+#         i++;
+#     }
+#
+#     // Always true.
+#     if(i == _int_4)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 94
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %75
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "i"
+               OpName %12 "f"
+               OpName %16 "tex"
+               OpName %21 "buf0"
+               OpMemberName %21 0 "_GLF_uniform_float_values"
+               OpName %23 ""
+               OpName %47 "buf3"
+               OpMemberName %47 0 "zero"
+               OpName %49 ""
+               OpName %64 "buf1"
+               OpMemberName %64 0 "_GLF_uniform_int_values"
+               OpName %66 ""
+               OpName %75 "_GLF_color"
+               OpDecorate %16 RelaxedPrecision
+               OpDecorate %16 DescriptorSet 0
+               OpDecorate %16 Binding 2
+               OpDecorate %17 RelaxedPrecision
+               OpDecorate %20 ArrayStride 16
+               OpMemberDecorate %21 0 Offset 0
+               OpDecorate %21 Block
+               OpDecorate %23 DescriptorSet 0
+               OpDecorate %23 Binding 0
+               OpDecorate %28 RelaxedPrecision
+               OpDecorate %30 RelaxedPrecision
+               OpDecorate %32 RelaxedPrecision
+               OpMemberDecorate %47 0 Offset 0
+               OpDecorate %47 Block
+               OpDecorate %49 DescriptorSet 0
+               OpDecorate %49 Binding 3
+               OpDecorate %63 ArrayStride 16
+               OpMemberDecorate %64 0 Offset 0
+               OpDecorate %64 Block
+               OpDecorate %66 DescriptorSet 0
+               OpDecorate %66 Binding 1
+               OpDecorate %75 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpConstant %6 0
+         %10 = OpTypeFloat 32
+         %11 = OpTypePointer Function %10
+         %13 = OpTypeImage %10 2D 0 0 0 1 Unknown
+         %14 = OpTypeSampledImage %13
+         %15 = OpTypePointer UniformConstant %14
+         %16 = OpVariable %15 UniformConstant
+         %18 = OpTypeInt 32 0
+         %19 = OpConstant %18 2
+         %20 = OpTypeArray %10 %19
+         %21 = OpTypeStruct %20
+         %22 = OpTypePointer Uniform %21
+         %23 = OpVariable %22 Uniform
+         %24 = OpTypePointer Uniform %10
+         %27 = OpTypeVector %10 2
+         %29 = OpTypeVector %10 4
+         %31 = OpConstant %18 1
+         %41 = OpTypeBool
+         %44 = OpConstant %6 4
+         %47 = OpTypeStruct %10
+         %48 = OpTypePointer Uniform %47
+         %49 = OpVariable %48 Uniform
+         %52 = OpConstant %6 1
+         %62 = OpConstant %18 3
+         %63 = OpTypeArray %6 %62
+         %64 = OpTypeStruct %63
+         %65 = OpTypePointer Uniform %64
+         %66 = OpVariable %65 Uniform
+         %67 = OpConstant %6 2
+         %68 = OpTypePointer Uniform %6
+         %74 = OpTypePointer Output %29
+         %75 = OpVariable %74 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %12 = OpVariable %11 Function
+               OpStore %8 %9
+         %17 = OpLoad %14 %16
+         %25 = OpAccessChain %24 %23 %9 %9
+         %26 = OpLoad %10 %25
+         %28 = OpCompositeConstruct %27 %26 %26
+         %30 = OpImageSampleImplicitLod %29 %17 %28
+         %32 = OpCompositeExtract %10 %30 1
+               OpStore %12 %32
+               OpBranch %33
+         %33 = OpLabel
+               OpLoopMerge %35 %36 None
+               OpBranch %37
+         %37 = OpLabel
+         %38 = OpLoad %10 %12
+         %39 = OpAccessChain %24 %23 %9 %9
+         %40 = OpLoad %10 %39
+         %42 = OpFOrdLessThanEqual %41 %38 %40
+         %43 = OpLoad %6 %8
+         %45 = OpSLessThan %41 %43 %44
+         %46 = OpLogicalAnd %41 %42 %45
+               OpBranchConditional %46 %34 %35
+         %34 = OpLabel
+         %50 = OpAccessChain %24 %49 %9
+         %51 = OpLoad %10 %50
+         %53 = OpAccessChain %24 %23 %9 %52
+         %54 = OpLoad %10 %53
+         %55 = OpFOrdLessThan %41 %51 %54
+               OpSelectionMerge %57 None
+               OpBranchConditional %55 %56 %57
+         %56 = OpLabel
+               OpBranch %36
+         %57 = OpLabel
+         %59 = OpLoad %6 %8
+         %60 = OpIAdd %6 %59 %52
+               OpStore %8 %60
+               OpBranch %36
+         %36 = OpLabel
+               OpBranch %33
+         %35 = OpLabel
+         %61 = OpLoad %6 %8
+         %69 = OpAccessChain %68 %66 %9 %67
+         %70 = OpLoad %6 %69
+         %71 = OpIEqual %41 %61 %70
+               OpSelectionMerge %73 None
+               OpBranchConditional %71 %72 %89
+         %72 = OpLabel
+         %76 = OpAccessChain %68 %66 %9 %9
+         %77 = OpLoad %6 %76
+         %78 = OpConvertSToF %10 %77
+         %79 = OpAccessChain %68 %66 %9 %52
+         %80 = OpLoad %6 %79
+         %81 = OpConvertSToF %10 %80
+         %82 = OpAccessChain %68 %66 %9 %52
+         %83 = OpLoad %6 %82
+         %84 = OpConvertSToF %10 %83
+         %85 = OpAccessChain %68 %66 %9 %9
+         %86 = OpLoad %6 %85
+         %87 = OpConvertSToF %10 %86
+         %88 = OpCompositeConstruct %29 %78 %81 %84 %87
+               OpStore %75 %88
+               OpBranch %73
+         %89 = OpLabel
+         %90 = OpAccessChain %68 %66 %9 %52
+         %91 = OpLoad %6 %90
+         %92 = OpConvertSToF %10 %91
+         %93 = OpCompositeConstruct %29 %92 %92 %92 %92
+               OpStore %75 %93
+               OpBranch %73
+         %73 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# tex
+SAMPLER variant_tex
+
+# zero
+BUFFER variant_zero DATA_TYPE float STD140 DATA
+ 0.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0 4
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER default_texture AS combined_image_sampler SAMPLER variant_tex DESCRIPTOR_SET 0 BINDING 2
+  BIND BUFFER variant_zero AS uniform DESCRIPTOR_SET 0 BINDING 3
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-variable-less-than-itself.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-loop-variable-less-than-itself.amber
new file mode 100644 (file)
index 0000000..68875c4
--- /dev/null
@@ -0,0 +1,294 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of one: [1.0]
+# layout(set = 0, binding = 2) uniform buf2
+# {
+#     float one;
+# };
+#
+# const int _GLF_global_loop_bound = 10;
+# int _GLF_global_loop_count = 0;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int a = _int_1;
+#
+#     do
+#     {
+#         _GLF_global_loop_count++;
+#
+#         if(one > _float_0_0)
+#         {
+#             // a < a is always false.
+#             for(a = 0; a < a && _GLF_global_loop_count < _GLF_global_loop_bound; a++)
+#             {
+#                 _GLF_global_loop_count ++;
+#             }
+#         }
+#
+#         // Always false: a is 0.
+#         if(a + a > _int_1)
+#         {
+#             break;
+#         }
+#     }
+#     while(_GLF_global_loop_count < _GLF_global_loop_bound);
+#
+#     // Always true.
+#     if(a == _int_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 100
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %81
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "_GLF_global_loop_count"
+               OpName %11 "a"
+               OpName %15 "buf1"
+               OpMemberName %15 0 "_GLF_uniform_int_values"
+               OpName %17 ""
+               OpName %29 "buf2"
+               OpMemberName %29 0 "one"
+               OpName %31 ""
+               OpName %37 "buf0"
+               OpMemberName %37 0 "_GLF_uniform_float_values"
+               OpName %39 ""
+               OpName %81 "_GLF_color"
+               OpDecorate %14 ArrayStride 16
+               OpMemberDecorate %15 0 Offset 0
+               OpDecorate %15 Block
+               OpDecorate %17 DescriptorSet 0
+               OpDecorate %17 Binding 1
+               OpMemberDecorate %29 0 Offset 0
+               OpDecorate %29 Block
+               OpDecorate %31 DescriptorSet 0
+               OpDecorate %31 Binding 2
+               OpDecorate %36 ArrayStride 16
+               OpMemberDecorate %37 0 Offset 0
+               OpDecorate %37 Block
+               OpDecorate %39 DescriptorSet 0
+               OpDecorate %39 Binding 0
+               OpDecorate %81 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Private %6
+          %8 = OpVariable %7 Private
+          %9 = OpConstant %6 0
+         %10 = OpTypePointer Function %6
+         %12 = OpTypeInt 32 0
+         %13 = OpConstant %12 2
+         %14 = OpTypeArray %6 %13
+         %15 = OpTypeStruct %14
+         %16 = OpTypePointer Uniform %15
+         %17 = OpVariable %16 Uniform
+         %18 = OpTypePointer Uniform %6
+         %26 = OpConstant %6 1
+         %28 = OpTypeFloat 32
+         %29 = OpTypeStruct %28
+         %30 = OpTypePointer Uniform %29
+         %31 = OpVariable %30 Uniform
+         %32 = OpTypePointer Uniform %28
+         %35 = OpConstant %12 1
+         %36 = OpTypeArray %28 %35
+         %37 = OpTypeStruct %36
+         %38 = OpTypePointer Uniform %37
+         %39 = OpVariable %38 Uniform
+         %42 = OpTypeBool
+         %55 = OpConstant %6 10
+         %79 = OpTypeVector %28 4
+         %80 = OpTypePointer Output %79
+         %81 = OpVariable %80 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %11 = OpVariable %10 Function
+               OpStore %8 %9
+         %19 = OpAccessChain %18 %17 %9 %9
+         %20 = OpLoad %6 %19
+               OpStore %11 %20
+               OpBranch %21
+         %21 = OpLabel
+               OpLoopMerge %23 %24 None
+               OpBranch %22
+         %22 = OpLabel
+         %25 = OpLoad %6 %8
+         %27 = OpIAdd %6 %25 %26
+               OpStore %8 %27
+         %33 = OpAccessChain %32 %31 %9
+         %34 = OpLoad %28 %33
+         %40 = OpAccessChain %32 %39 %9 %9
+         %41 = OpLoad %28 %40
+         %43 = OpFOrdGreaterThan %42 %34 %41
+               OpSelectionMerge %45 None
+               OpBranchConditional %43 %44 %45
+         %44 = OpLabel
+               OpStore %11 %9
+               OpBranch %46
+         %46 = OpLabel
+               OpLoopMerge %48 %49 None
+               OpBranch %50
+         %50 = OpLabel
+         %51 = OpLoad %6 %11
+         %52 = OpLoad %6 %11
+         %53 = OpSLessThan %42 %51 %52
+         %54 = OpLoad %6 %8
+         %56 = OpSLessThan %42 %54 %55
+         %57 = OpLogicalAnd %42 %53 %56
+               OpBranchConditional %57 %47 %48
+         %47 = OpLabel
+         %58 = OpLoad %6 %8
+         %59 = OpIAdd %6 %58 %26
+               OpStore %8 %59
+               OpBranch %49
+         %49 = OpLabel
+         %60 = OpLoad %6 %11
+         %61 = OpIAdd %6 %60 %26
+               OpStore %11 %61
+               OpBranch %46
+         %48 = OpLabel
+               OpBranch %45
+         %45 = OpLabel
+         %62 = OpLoad %6 %11
+         %63 = OpLoad %6 %11
+         %64 = OpIAdd %6 %62 %63
+         %65 = OpAccessChain %18 %17 %9 %9
+         %66 = OpLoad %6 %65
+         %67 = OpSGreaterThan %42 %64 %66
+               OpSelectionMerge %69 None
+               OpBranchConditional %67 %68 %69
+         %68 = OpLabel
+               OpBranch %23
+         %69 = OpLabel
+               OpBranch %24
+         %24 = OpLabel
+         %71 = OpLoad %6 %8
+         %72 = OpSLessThan %42 %71 %55
+               OpBranchConditional %72 %21 %23
+         %23 = OpLabel
+         %73 = OpLoad %6 %11
+         %74 = OpAccessChain %18 %17 %9 %26
+         %75 = OpLoad %6 %74
+         %76 = OpIEqual %42 %73 %75
+               OpSelectionMerge %78 None
+               OpBranchConditional %76 %77 %95
+         %77 = OpLabel
+         %82 = OpAccessChain %18 %17 %9 %9
+         %83 = OpLoad %6 %82
+         %84 = OpConvertSToF %28 %83
+         %85 = OpAccessChain %18 %17 %9 %26
+         %86 = OpLoad %6 %85
+         %87 = OpConvertSToF %28 %86
+         %88 = OpAccessChain %18 %17 %9 %26
+         %89 = OpLoad %6 %88
+         %90 = OpConvertSToF %28 %89
+         %91 = OpAccessChain %18 %17 %9 %9
+         %92 = OpLoad %6 %91
+         %93 = OpConvertSToF %28 %92
+         %94 = OpCompositeConstruct %79 %84 %87 %90 %93
+               OpStore %81 %94
+               OpBranch %78
+         %95 = OpLabel
+         %96 = OpAccessChain %18 %17 %9 %26
+         %97 = OpLoad %6 %96
+         %98 = OpConvertSToF %28 %97
+         %99 = OpCompositeConstruct %79 %98 %98 %98 %98
+               OpStore %81 %99
+               OpBranch %78
+         %78 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# one
+BUFFER variant_one DATA_TYPE float STD140 DATA
+ 1.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_one AS uniform DESCRIPTOR_SET 0 BINDING 2
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-mix-uninitialized-float-never-selected.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-mix-uninitialized-float-never-selected.amber
new file mode 100644 (file)
index 0000000..08736ff
--- /dev/null
@@ -0,0 +1,137 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float f;
+#
+#     // f is uninitialized, but 1.0 is selected from the first vector.
+#     _GLF_color = mix(vec4(1.0), vec4(f, 0.0, 0.0, 1.0), bvec4(gl_FragCoord.y < _float_0_0, true, true, true));
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 39
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %9 %18
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %9 "_GLF_color"
+               OpName %13 "f"
+               OpName %18 "gl_FragCoord"
+               OpName %25 "buf0"
+               OpMemberName %25 0 "_GLF_uniform_float_values"
+               OpName %27 ""
+               OpDecorate %9 Location 0
+               OpDecorate %18 BuiltIn FragCoord
+               OpDecorate %24 ArrayStride 16
+               OpMemberDecorate %25 0 Offset 0
+               OpDecorate %25 Block
+               OpDecorate %27 DescriptorSet 0
+               OpDecorate %27 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Output %7
+          %9 = OpVariable %8 Output
+         %10 = OpConstant %6 1
+         %11 = OpConstantComposite %7 %10 %10 %10 %10
+         %12 = OpTypePointer Function %6
+         %15 = OpConstant %6 0
+         %17 = OpTypePointer Input %7
+         %18 = OpVariable %17 Input
+         %19 = OpTypeInt 32 0
+         %20 = OpConstant %19 1
+         %21 = OpTypePointer Input %6
+         %24 = OpTypeArray %6 %20
+         %25 = OpTypeStruct %24
+         %26 = OpTypePointer Uniform %25
+         %27 = OpVariable %26 Uniform
+         %28 = OpTypeInt 32 1
+         %29 = OpConstant %28 0
+         %30 = OpTypePointer Uniform %6
+         %33 = OpTypeBool
+         %35 = OpConstantTrue %33
+         %36 = OpTypeVector %33 4
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %13 = OpVariable %12 Function
+         %14 = OpLoad %6 %13
+         %16 = OpCompositeConstruct %7 %14 %15 %15 %10
+         %22 = OpAccessChain %21 %18 %20
+         %23 = OpLoad %6 %22
+         %31 = OpAccessChain %30 %27 %29 %29
+         %32 = OpLoad %6 %31
+         %34 = OpFOrdLessThan %33 %23 %32
+         %37 = OpCompositeConstruct %36 %34 %35 %35 %35
+         %38 = OpSelect %7 %37 %16 %11
+               OpStore %9 %38
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-nested-loop-decrease-vector-components.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-nested-loop-decrease-vector-components.amber
new file mode 100644 (file)
index 0000000..d9fefa2
--- /dev/null
@@ -0,0 +1,278 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+#
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_2 _GLF_uniform_int_values[1]
+# #define _int_3 _GLF_uniform_int_values[2]
+# #define _int_4 _GLF_uniform_int_values[3]
+# #define _int_0 _GLF_uniform_int_values[4]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 2, 3, 4, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[5];
+# };
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     ivec4 v = ivec4(_int_1, _int_2, _int_3, _int_4);
+#
+#     // Iterates i = 1, 0.
+#     for(int i = 1; i >= 0; i--)
+#     {
+#         // Iterates j = 1 when i = 1, and j = 1, 0 when i = 0.
+#         for(int j = (gl_FragCoord.y >= _float_0_0) ? 1 : i; j >= i; j--)
+#         {
+#             // v[0] gets decreased twice and v[1] once.
+#             v[i]--;
+#         }
+#     }
+#
+#     // Always true.
+#     if(v == ivec4(-_int_1, _int_1, _int_3, _int_4))
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 112
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %44 %92
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %9 "v"
+               OpName %13 "buf0"
+               OpMemberName %13 0 "_GLF_uniform_int_values"
+               OpName %15 ""
+               OpName %31 "i"
+               OpName %40 "j"
+               OpName %44 "gl_FragCoord"
+               OpName %50 "buf1"
+               OpMemberName %50 0 "_GLF_uniform_float_values"
+               OpName %52 ""
+               OpName %92 "_GLF_color"
+               OpDecorate %12 ArrayStride 16
+               OpMemberDecorate %13 0 Offset 0
+               OpDecorate %13 Block
+               OpDecorate %15 DescriptorSet 0
+               OpDecorate %15 Binding 0
+               OpDecorate %44 BuiltIn FragCoord
+               OpDecorate %49 ArrayStride 16
+               OpMemberDecorate %50 0 Offset 0
+               OpDecorate %50 Block
+               OpDecorate %52 DescriptorSet 0
+               OpDecorate %52 Binding 1
+               OpDecorate %92 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Function %7
+         %10 = OpTypeInt 32 0
+         %11 = OpConstant %10 5
+         %12 = OpTypeArray %6 %11
+         %13 = OpTypeStruct %12
+         %14 = OpTypePointer Uniform %13
+         %15 = OpVariable %14 Uniform
+         %16 = OpConstant %6 0
+         %17 = OpTypePointer Uniform %6
+         %20 = OpConstant %6 1
+         %23 = OpConstant %6 2
+         %26 = OpConstant %6 3
+         %30 = OpTypePointer Function %6
+         %38 = OpTypeBool
+         %41 = OpTypeFloat 32
+         %42 = OpTypeVector %41 4
+         %43 = OpTypePointer Input %42
+         %44 = OpVariable %43 Input
+         %45 = OpConstant %10 1
+         %46 = OpTypePointer Input %41
+         %49 = OpTypeArray %41 %45
+         %50 = OpTypeStruct %49
+         %51 = OpTypePointer Uniform %50
+         %52 = OpVariable %51 Uniform
+         %53 = OpTypePointer Uniform %41
+         %86 = OpTypeVector %38 4
+         %91 = OpTypePointer Output %42
+         %92 = OpVariable %91 Output
+         %96 = OpConstant %6 4
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %31 = OpVariable %30 Function
+         %40 = OpVariable %30 Function
+         %18 = OpAccessChain %17 %15 %16 %16
+         %19 = OpLoad %6 %18
+         %21 = OpAccessChain %17 %15 %16 %20
+         %22 = OpLoad %6 %21
+         %24 = OpAccessChain %17 %15 %16 %23
+         %25 = OpLoad %6 %24
+         %27 = OpAccessChain %17 %15 %16 %26
+         %28 = OpLoad %6 %27
+         %29 = OpCompositeConstruct %7 %19 %22 %25 %28
+               OpStore %9 %29
+               OpStore %31 %20
+               OpBranch %32
+         %32 = OpLabel
+               OpLoopMerge %34 %35 None
+               OpBranch %36
+         %36 = OpLabel
+         %37 = OpLoad %6 %31
+         %39 = OpSGreaterThanEqual %38 %37 %16
+               OpBranchConditional %39 %33 %34
+         %33 = OpLabel
+         %47 = OpAccessChain %46 %44 %45
+         %48 = OpLoad %41 %47
+         %54 = OpAccessChain %53 %52 %16 %16
+         %55 = OpLoad %41 %54
+         %56 = OpFOrdGreaterThanEqual %38 %48 %55
+         %57 = OpLoad %6 %31
+         %58 = OpSelect %6 %56 %20 %57
+               OpStore %40 %58
+               OpBranch %59
+         %59 = OpLabel
+               OpLoopMerge %61 %62 None
+               OpBranch %63
+         %63 = OpLabel
+         %64 = OpLoad %6 %40
+         %65 = OpLoad %6 %31
+         %66 = OpSGreaterThanEqual %38 %64 %65
+               OpBranchConditional %66 %60 %61
+         %60 = OpLabel
+         %67 = OpLoad %6 %31
+         %68 = OpAccessChain %30 %9 %67
+         %69 = OpLoad %6 %68
+         %70 = OpISub %6 %69 %20
+               OpStore %68 %70
+               OpBranch %62
+         %62 = OpLabel
+         %71 = OpLoad %6 %40
+         %72 = OpISub %6 %71 %20
+               OpStore %40 %72
+               OpBranch %59
+         %61 = OpLabel
+               OpBranch %35
+         %35 = OpLabel
+         %73 = OpLoad %6 %31
+         %74 = OpISub %6 %73 %20
+               OpStore %31 %74
+               OpBranch %32
+         %34 = OpLabel
+         %75 = OpLoad %7 %9
+         %76 = OpAccessChain %17 %15 %16 %16
+         %77 = OpLoad %6 %76
+         %78 = OpSNegate %6 %77
+         %79 = OpAccessChain %17 %15 %16 %16
+         %80 = OpLoad %6 %79
+         %81 = OpAccessChain %17 %15 %16 %23
+         %82 = OpLoad %6 %81
+         %83 = OpAccessChain %17 %15 %16 %26
+         %84 = OpLoad %6 %83
+         %85 = OpCompositeConstruct %7 %78 %80 %82 %84
+         %87 = OpIEqual %86 %75 %85
+         %88 = OpAll %38 %87
+               OpSelectionMerge %90 None
+               OpBranchConditional %88 %89 %107
+         %89 = OpLabel
+         %93 = OpAccessChain %17 %15 %16 %16
+         %94 = OpLoad %6 %93
+         %95 = OpConvertSToF %41 %94
+         %97 = OpAccessChain %17 %15 %16 %96
+         %98 = OpLoad %6 %97
+         %99 = OpConvertSToF %41 %98
+        %100 = OpAccessChain %17 %15 %16 %96
+        %101 = OpLoad %6 %100
+        %102 = OpConvertSToF %41 %101
+        %103 = OpAccessChain %17 %15 %16 %16
+        %104 = OpLoad %6 %103
+        %105 = OpConvertSToF %41 %104
+        %106 = OpCompositeConstruct %42 %95 %99 %102 %105
+               OpStore %92 %106
+               OpBranch %90
+        %107 = OpLabel
+        %108 = OpAccessChain %17 %15 %16 %96
+        %109 = OpLoad %6 %108
+        %110 = OpConvertSToF %41 %109
+        %111 = OpCompositeConstruct %42 %110 %110 %110 %110
+               OpStore %92 %111
+               OpBranch %90
+         %90 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 2 3 4 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-nested-loops-while-condition-integer-range-increment-variable.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-nested-loops-while-condition-integer-range-increment-variable.amber
new file mode 100644 (file)
index 0000000..f778a14
--- /dev/null
@@ -0,0 +1,310 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_8 _GLF_uniform_int_values[2]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0, 8]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int a = _int_0;
+#
+#     // Iterates i = 1, 2, 4, 8.
+#     for(int i = 1; i <= 10; i *= 2)
+#     {
+#         for(int j = 0; j < 10; j += i)
+#         {
+#             int b = j + i - 1;
+#             // For the last iteration of the outer loop i = 8 and j iterates values 0 and 8.
+#             // The last assignment to a is 8.
+#             a = j;
+#
+#
+#             // The condition of the while loop below can be opened as follows:
+#             // a <= b <= 1
+#             // j <= j + i - 1 <= 1
+#             //
+#             // Because j <= 1 the values for j can be 0 and 1.
+#             // Therefore j + i - 1 <= 1 gives us:
+#             // 0 + i - 1 <= 1
+#             // i <= 2
+#             // and
+#             // 1 + i - 1 <= 1
+#             // i <= 1
+#             //
+#             // i starts at one so the condition is true when i = 1 or 2 and j = 0 or 1.
+#
+#             // This condition is false during the last iteration of i = 8 and j = 8.
+#             while(a <= b && b <= 1)
+#             {
+#                 // Always false.
+#                 if(gl_FragCoord.x < _float_0_0)
+#                 {
+#                     discard;
+#                 }
+#                 a++;
+#             }
+#         }
+#     }
+#
+#     // Always true. The last iteration assigned i = 8 but didn't increment it in a while loop.
+#     if(a == _int_8)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 109
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %58 %90
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %20 "i"
+               OpName %30 "j"
+               OpName %38 "b"
+               OpName %58 "gl_FragCoord"
+               OpName %65 "buf1"
+               OpMemberName %65 0 "_GLF_uniform_float_values"
+               OpName %67 ""
+               OpName %90 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %58 BuiltIn FragCoord
+               OpDecorate %64 ArrayStride 16
+               OpMemberDecorate %65 0 Offset 0
+               OpDecorate %65 Block
+               OpDecorate %67 DescriptorSet 0
+               OpDecorate %67 Binding 1
+               OpDecorate %90 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 3
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 1
+         %17 = OpTypePointer Uniform %6
+         %27 = OpConstant %6 10
+         %28 = OpTypeBool
+         %55 = OpTypeFloat 32
+         %56 = OpTypeVector %55 4
+         %57 = OpTypePointer Input %56
+         %58 = OpVariable %57 Input
+         %59 = OpConstant %9 0
+         %60 = OpTypePointer Input %55
+         %63 = OpConstant %9 1
+         %64 = OpTypeArray %55 %63
+         %65 = OpTypeStruct %64
+         %66 = OpTypePointer Uniform %65
+         %67 = OpVariable %66 Uniform
+         %68 = OpTypePointer Uniform %55
+         %80 = OpConstant %6 2
+         %89 = OpTypePointer Output %56
+         %90 = OpVariable %89 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %30 = OpVariable %7 Function
+         %38 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+               OpStore %20 %16
+               OpBranch %21
+         %21 = OpLabel
+               OpLoopMerge %23 %24 None
+               OpBranch %25
+         %25 = OpLabel
+         %26 = OpLoad %6 %20
+         %29 = OpSLessThanEqual %28 %26 %27
+               OpBranchConditional %29 %22 %23
+         %22 = OpLabel
+               OpStore %30 %15
+               OpBranch %31
+         %31 = OpLabel
+               OpLoopMerge %33 %34 None
+               OpBranch %35
+         %35 = OpLabel
+         %36 = OpLoad %6 %30
+         %37 = OpSLessThan %28 %36 %27
+               OpBranchConditional %37 %32 %33
+         %32 = OpLabel
+         %39 = OpLoad %6 %30
+         %40 = OpLoad %6 %20
+         %41 = OpIAdd %6 %39 %40
+         %42 = OpISub %6 %41 %16
+               OpStore %38 %42
+         %43 = OpLoad %6 %30
+               OpStore %8 %43
+               OpBranch %44
+         %44 = OpLabel
+               OpLoopMerge %46 %47 None
+               OpBranch %48
+         %48 = OpLabel
+         %49 = OpLoad %6 %8
+         %50 = OpLoad %6 %38
+         %51 = OpSLessThanEqual %28 %49 %50
+         %52 = OpLoad %6 %38
+         %53 = OpSLessThanEqual %28 %52 %16
+         %54 = OpLogicalAnd %28 %51 %53
+               OpBranchConditional %54 %45 %46
+         %45 = OpLabel
+         %61 = OpAccessChain %60 %58 %59
+         %62 = OpLoad %55 %61
+         %69 = OpAccessChain %68 %67 %15 %15
+         %70 = OpLoad %55 %69
+         %71 = OpFOrdLessThan %28 %62 %70
+               OpSelectionMerge %73 None
+               OpBranchConditional %71 %72 %73
+         %72 = OpLabel
+               OpKill
+         %73 = OpLabel
+         %75 = OpLoad %6 %8
+         %76 = OpIAdd %6 %75 %16
+               OpStore %8 %76
+               OpBranch %47
+         %47 = OpLabel
+               OpBranch %44
+         %46 = OpLabel
+               OpBranch %34
+         %34 = OpLabel
+         %77 = OpLoad %6 %20
+         %78 = OpLoad %6 %30
+         %79 = OpIAdd %6 %78 %77
+               OpStore %30 %79
+               OpBranch %31
+         %33 = OpLabel
+               OpBranch %24
+         %24 = OpLabel
+         %81 = OpLoad %6 %20
+         %82 = OpIMul %6 %81 %80
+               OpStore %20 %82
+               OpBranch %21
+         %23 = OpLabel
+         %83 = OpLoad %6 %8
+         %84 = OpAccessChain %17 %14 %15 %80
+         %85 = OpLoad %6 %84
+         %86 = OpIEqual %28 %83 %85
+               OpSelectionMerge %88 None
+               OpBranchConditional %86 %87 %104
+         %87 = OpLabel
+         %91 = OpAccessChain %17 %14 %15 %15
+         %92 = OpLoad %6 %91
+         %93 = OpConvertSToF %55 %92
+         %94 = OpAccessChain %17 %14 %15 %16
+         %95 = OpLoad %6 %94
+         %96 = OpConvertSToF %55 %95
+         %97 = OpAccessChain %17 %14 %15 %16
+         %98 = OpLoad %6 %97
+         %99 = OpConvertSToF %55 %98
+        %100 = OpAccessChain %17 %14 %15 %15
+        %101 = OpLoad %6 %100
+        %102 = OpConvertSToF %55 %101
+        %103 = OpCompositeConstruct %56 %93 %96 %99 %102
+               OpStore %90 %103
+               OpBranch %88
+        %104 = OpLabel
+        %105 = OpAccessChain %17 %14 %15 %16
+        %106 = OpLoad %6 %105
+        %107 = OpConvertSToF %55 %106
+        %108 = OpCompositeConstruct %56 %107 %107 %107 %107
+               OpStore %90 %108
+               OpBranch %88
+         %88 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0 8
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-uadd-carry-bit-count-index-array.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-uadd-carry-bit-count-index-array.amber
new file mode 100644 (file)
index 0000000..d82782d
--- /dev/null
@@ -0,0 +1,295 @@
+#!amber
+
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     http://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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific LLVM code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+#
+# #define _GLF_MAKE_IN_BOUNDS_INT(IDX, SZ)  clamp(IDX, 0, SZ - 1)
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _uint_1 _GLF_uniform_uint_values[0]
+# #define _uint_0 _GLF_uniform_uint_values[1]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_0_0 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [0, 1]
+# layout(set = 0, binding = 0) uniform buf0 {
+#     int _GLF_uniform_int_values[2];
+# };
+# // Contents of _GLF_uniform_uint_values: [1, 0]
+# layout(set = 0, binding = 1) uniform buf1 {
+#     uint _GLF_uniform_uint_values[2];
+# };
+# // Contents of _GLF_uniform_float_values: [1.0, 0.0]
+# layout(set = 0, binding = 2) uniform buf2 {
+#     float _GLF_uniform_float_values[2];
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# // Contents of zero: 0
+# layout(set = 0, binding = 3) uniform buf3 {
+#     uint zero;
+# };
+# void main()
+# {
+#     uint a = _uint_1;
+#     // b becomes one and a becomes zero.
+#     uint b = uaddCarry(zero, _uint_1, a);
+#     vec4 v = vec4(_float_0_0);
+#
+#     // bitCount(a) = 0.
+#     v[_GLF_MAKE_IN_BOUNDS_INT(bitCount(a), 4)] = _float_1_0;
+#
+#     // Always true.
+#     if(a == _uint_0 && b == _uint_1 && v == vec4(_int_1, _int_0, _int_0, _int_0))
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 111
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %92
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %11 "buf1"
+               OpMemberName %11 0 "_GLF_uniform_uint_values"
+               OpName %13 ""
+               OpName %19 "b"
+               OpName %20 "buf3"
+               OpMemberName %20 0 "zero"
+               OpName %22 ""
+               OpName %27 "ResType"
+               OpName %34 "v"
+               OpName %36 "buf2"
+               OpMemberName %36 0 "_GLF_uniform_float_values"
+               OpName %38 ""
+               OpName %68 "buf0"
+               OpMemberName %68 0 "_GLF_uniform_int_values"
+               OpName %70 ""
+               OpName %92 "_GLF_color"
+               OpDecorate %10 ArrayStride 16
+               OpMemberDecorate %11 0 Offset 0
+               OpDecorate %11 Block
+               OpDecorate %13 DescriptorSet 0
+               OpDecorate %13 Binding 1
+               OpMemberDecorate %20 0 Offset 0
+               OpDecorate %20 Block
+               OpDecorate %22 DescriptorSet 0
+               OpDecorate %22 Binding 3
+               OpDecorate %35 ArrayStride 16
+               OpMemberDecorate %36 0 Offset 0
+               OpDecorate %36 Block
+               OpDecorate %38 DescriptorSet 0
+               OpDecorate %38 Binding 2
+               OpDecorate %47 RelaxedPrecision
+               OpDecorate %67 ArrayStride 16
+               OpMemberDecorate %68 0 Offset 0
+               OpDecorate %68 Block
+               OpDecorate %70 DescriptorSet 0
+               OpDecorate %70 Binding 0
+               OpDecorate %92 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 0
+          %7 = OpTypePointer Function %6
+          %9 = OpConstant %6 2
+         %10 = OpTypeArray %6 %9
+         %11 = OpTypeStruct %10
+         %12 = OpTypePointer Uniform %11
+         %13 = OpVariable %12 Uniform
+         %14 = OpTypeInt 32 1
+         %15 = OpConstant %14 0
+         %16 = OpTypePointer Uniform %6
+         %20 = OpTypeStruct %6
+         %21 = OpTypePointer Uniform %20
+         %22 = OpVariable %21 Uniform
+         %27 = OpTypeStruct %6 %6
+         %31 = OpTypeFloat 32
+         %32 = OpTypeVector %31 4
+         %33 = OpTypePointer Function %32
+         %35 = OpTypeArray %31 %9
+         %36 = OpTypeStruct %35
+         %37 = OpTypePointer Uniform %36
+         %38 = OpVariable %37 Uniform
+         %39 = OpConstant %14 1
+         %40 = OpTypePointer Uniform %31
+         %46 = OpConstant %14 3
+         %50 = OpTypePointer Function %31
+         %52 = OpTypeBool
+         %67 = OpTypeArray %14 %9
+         %68 = OpTypeStruct %67
+         %69 = OpTypePointer Uniform %68
+         %70 = OpVariable %69 Uniform
+         %71 = OpTypePointer Uniform %14
+         %85 = OpTypeVector %52 4
+         %91 = OpTypePointer Output %32
+         %92 = OpVariable %91 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %19 = OpVariable %7 Function
+         %34 = OpVariable %33 Function
+         %17 = OpAccessChain %16 %13 %15 %15
+         %18 = OpLoad %6 %17
+               OpStore %8 %18
+         %23 = OpAccessChain %16 %22 %15
+         %24 = OpLoad %6 %23
+         %25 = OpAccessChain %16 %13 %15 %15
+         %26 = OpLoad %6 %25
+         %28 = OpIAddCarry %27 %24 %26
+         %29 = OpCompositeExtract %6 %28 1
+               OpStore %8 %29
+         %30 = OpCompositeExtract %6 %28 0
+               OpStore %19 %30
+         %41 = OpAccessChain %40 %38 %15 %39
+         %42 = OpLoad %31 %41
+         %43 = OpCompositeConstruct %32 %42 %42 %42 %42
+               OpStore %34 %43
+         %44 = OpLoad %6 %8
+         %45 = OpBitCount %14 %44
+         %47 = OpExtInst %14 %1 SClamp %45 %15 %46
+         %48 = OpAccessChain %40 %38 %15 %15
+         %49 = OpLoad %31 %48
+         %51 = OpAccessChain %50 %34 %47
+               OpStore %51 %49
+         %53 = OpLoad %6 %8
+         %54 = OpAccessChain %16 %13 %15 %39
+         %55 = OpLoad %6 %54
+         %56 = OpIEqual %52 %53 %55
+               OpSelectionMerge %58 None
+               OpBranchConditional %56 %57 %58
+         %57 = OpLabel
+         %59 = OpLoad %6 %19
+         %60 = OpAccessChain %16 %13 %15 %15
+         %61 = OpLoad %6 %60
+         %62 = OpIEqual %52 %59 %61
+               OpBranch %58
+         %58 = OpLabel
+         %63 = OpPhi %52 %56 %5 %62 %57
+               OpSelectionMerge %65 None
+               OpBranchConditional %63 %64 %65
+         %64 = OpLabel
+         %66 = OpLoad %32 %34
+         %72 = OpAccessChain %71 %70 %15 %39
+         %73 = OpLoad %14 %72
+         %74 = OpConvertSToF %31 %73
+         %75 = OpAccessChain %71 %70 %15 %15
+         %76 = OpLoad %14 %75
+         %77 = OpConvertSToF %31 %76
+         %78 = OpAccessChain %71 %70 %15 %15
+         %79 = OpLoad %14 %78
+         %80 = OpConvertSToF %31 %79
+         %81 = OpAccessChain %71 %70 %15 %15
+         %82 = OpLoad %14 %81
+         %83 = OpConvertSToF %31 %82
+         %84 = OpCompositeConstruct %32 %74 %77 %80 %83
+         %86 = OpFOrdEqual %85 %66 %84
+         %87 = OpAll %52 %86
+               OpBranch %65
+         %65 = OpLabel
+         %88 = OpPhi %52 %63 %58 %87 %64
+               OpSelectionMerge %90 None
+               OpBranchConditional %88 %89 %106
+         %89 = OpLabel
+         %93 = OpAccessChain %71 %70 %15 %39
+         %94 = OpLoad %14 %93
+         %95 = OpConvertSToF %31 %94
+         %96 = OpAccessChain %71 %70 %15 %15
+         %97 = OpLoad %14 %96
+         %98 = OpConvertSToF %31 %97
+         %99 = OpAccessChain %71 %70 %15 %15
+        %100 = OpLoad %14 %99
+        %101 = OpConvertSToF %31 %100
+        %102 = OpAccessChain %71 %70 %15 %39
+        %103 = OpLoad %14 %102
+        %104 = OpConvertSToF %31 %103
+        %105 = OpCompositeConstruct %32 %95 %98 %101 %104
+               OpStore %92 %105
+               OpBranch %90
+        %106 = OpLabel
+        %107 = OpAccessChain %71 %70 %15 %15
+        %108 = OpLoad %14 %107
+        %109 = OpConvertSToF %31 %108
+        %110 = OpCompositeConstruct %32 %109 %109 %109 %109
+               OpStore %92 %110
+               OpBranch %90
+         %90 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# zero
+BUFFER variant_zero DATA_TYPE uint32 STD140 DATA
+ 0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 0.0
+END
+# _GLF_uniform_uint_values
+BUFFER variant__GLF_uniform_uint_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_zero AS uniform DESCRIPTOR_SET 0 BINDING 3
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 2
+  BIND BUFFER variant__GLF_uniform_uint_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
index 170105a..384cc51 100644 (file)
 {      "cov-double-if-true-in-loop.amber",                                                                                                                     "cov-double-if-true-in-loop",                                                                                                           "A fragment shader that covers specific NIR code paths"                                                         },
 {      "cov-dummy-function-loop-array-element-increment-never-read.amber",                                                     "cov-dummy-function-loop-array-element-increment-never-read",                                           "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-empty-loop-minus-one-modulo-variable-one.amber",                                                                           "cov-empty-loop-minus-one-modulo-variable-one",                                                                         "A fragment shader that covers specific LLVM code paths"                                                        },
+{      "cov-enable-bits-pixel-location-negate-not-equal-one.amber",                                                            "cov-enable-bits-pixel-location-negate-not-equal-one",                                                          "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-exp2-two.amber",                                                                                                                                           "cov-exp2-two",                                                                                                                                         "A fragment shader that covers specific NIR code paths"                                                         },
 {      "cov-extend-uniform-vec2-to-vec3-matrix-multiply.amber",                                                                        "cov-extend-uniform-vec2-to-vec3-matrix-multiply",                                                                      "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-findlsb-division-by-zero.amber",                                                                                                           "cov-findlsb-division-by-zero",                                                                                                         "A fragment shader that covers a specific instruction simplify code path"                       },
 {      "cov-fract-smoothstep-undefined.amber",                                                                                                         "cov-fract-smoothstep-undefined",                                                                                                       "A fragment shader that covers a specific APFloat code path"                                            },
 {      "cov-fract-trunc-always-zero.amber",                                                                                                            "cov-fract-trunc-always-zero",                                                                                                          "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-fragcood-multiple-conditions-function-loop-global-counter.amber",                                          "cov-fragcood-multiple-conditions-function-loop-global-counter",                                        "A fragment shader that covers specific LLVM code paths"                                                        },
+{      "cov-fragcoord-and-one-or-same-value.amber",                                                                                            "cov-fragcoord-and-one-or-same-value",                                                                                          "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-fragcoord-bitwise-and-loop-reduce-value-index-array.amber",                                                        "cov-fragcoord-bitwise-and-loop-reduce-value-index-array",                                                      "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-fragcoord-bitwise-not.amber",                                                                                                                      "cov-fragcoord-bitwise-not",                                                                                                            "A fragment shader that covers specific BRW code paths"                                                         },
 {      "cov-fragcoord-clamp-array-access.amber",                                                                                                       "cov-fragcoord-clamp-array-access",                                                                                                     "A fragment shader that covers a specific instruction simplify path"                            },
 {      "cov-fragcoord-conditions-never-return-index-array-using-uniform.amber",                                        "cov-fragcoord-conditions-never-return-index-array-using-uniform",                                      "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-fragcoord-integer-loop-reduce-to-range.amber",                                                                                     "cov-fragcoord-integer-loop-reduce-to-range",                                                                           "A fragment shader that covers specific LLVM code paths"                                                        },
+{      "cov-fragcoord-loop-limit-negative-decrease-sum-first-iteration.amber",                                         "cov-fragcoord-loop-limit-negative-decrease-sum-first-iteration",                                       "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-fragcoord-multiple-conditions-function-global-loop-counter-simplified.amber",                      "cov-fragcoord-multiple-conditions-function-global-loop-counter-simplified",            "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-fragcoord-multiply.amber",                                                                                                                         "cov-fragcoord-multiply",                                                                                                                       "A fragment shader that covers specific NIR code paths"                                                         },
 {      "cov-function-argument-uniform-float-loop-never-return.amber",                                                          "cov-function-argument-uniform-float-loop-never-return",                                                        "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-function-clamp-min-identical-shift-right.amber",                                                                           "cov-function-clamp-min-identical-shift-right",                                                                         "A fragment shader that covers specific LLVM code paths"                                                        },
+{      "cov-function-call-twice-clamp-global-variable.amber",                                                                          "cov-function-call-twice-clamp-global-variable",                                                                        "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-function-find-lsb-ivec2-one.amber",                                                                                                        "cov-function-find-lsb-ivec2-one",                                                                                                      "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-function-fragcoord-condition-always-return.amber",                                                                         "cov-function-fragcoord-condition-always-return",                                                                       "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-function-infinite-loop-always-return.amber",                                                                                       "cov-function-infinite-loop-always-return",                                                                                     "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-function-loop-same-conditions-multiple-times-struct-array.amber",                                          "cov-function-loop-same-conditions-multiple-times-struct-array",                                        "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-function-loop-switch-increment-array-element-return.amber",                                                        "cov-function-loop-switch-increment-array-element-return",                                                      "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-function-min-integer-large-shift-unused.amber",                                                                            "cov-function-min-integer-large-shift-unused",                                                                          "A fragment shader that covers specific LLVM code paths"                                                        },
+{      "cov-function-loop-variable-multiplied-unused.amber",                                                                           "cov-function-loop-variable-multiplied-unused",                                                                         "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-function-nested-do-whiles-looped-once.amber",                                                                                      "cov-function-nested-do-whiles-looped-once",                                                                            "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-function-nested-loops-break-early-never-discard.amber",                                                            "cov-function-nested-loops-break-early-never-discard",                                                          "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-function-nested-loops-limit-uniform-xor-uniform.amber",                                                            "cov-function-nested-loops-limit-uniform-xor-uniform",                                                          "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-left-shift-right-shift-compare.amber",                                                                                                     "cov-left-shift-right-shift-compare",                                                                                           "A fragment shader that covers a specific inst combine compares code path"                      },
 {      "cov-liveinterval-different-dest.amber",                                                                                                        "cov-liveinterval-different-dest",                                                                                                      "A fragment shader that covers a specific live interval code path."                                     },
 {      "cov-loop-abs-multiply-offset.amber",                                                                                                           "cov-loop-abs-multiply-offset",                                                                                                         "A fragment shader that covers specific NIR code paths"                                                         },
+{      "cov-loop-array-element-bitfield-insert-undefined-never-read.amber",                                            "cov-loop-array-element-bitfield-insert-undefined-never-read",                                          "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-array-element-copy-index-clamp-sign.amber",                                                                           "cov-loop-array-element-copy-index-clamp-sign",                                                                         "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-array-index-decrement-never-negative.amber",                                                                          "cov-loop-array-index-decrement-never-negative",                                                                        "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-array-struct-field-index-array-with-uniforms.amber",                                                          "cov-loop-array-struct-field-index-array-with-uniforms",                                                        "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-dfdx-constant-divide.amber",                                                                                                          "cov-loop-dfdx-constant-divide",                                                                                                        "A fragment shader that covers specific patch optimization code paths"                          },
 {      "cov-loop-exit-conditions-sampler-struct-integer-variable.amber",                                                       "cov-loop-exit-conditions-sampler-struct-integer-variable",                                                     "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-divide-uninitialized-vector-min-unused.amber",                                                                        "cov-loop-divide-uninitialized-vector-min-unused",                                                                      "A fragment shader that covers specific LLVM code paths"                                                        },
+{      "cov-loop-find-lsb-eight-fragcoord-never-discard.amber",                                                                        "cov-loop-find-lsb-eight-fragcoord-never-discard",                                                                      "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-findmsb-findlsb.amber",                                                                                                                       "cov-loop-findmsb-findlsb",                                                                                                                     "A fragment shader that covers specific simplification and value tracking paths"        },
 {      "cov-loop-fragcoord-identical-condition.amber",                                                                                         "cov-loop-fragcoord-identical-condition",                                                                                       "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-global-counter-break-set-ivec-elements.amber",                                                                        "cov-loop-global-counter-break-set-ivec-elements",                                                                      "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-increment-integer-set-output-color-break.amber",                                                                      "cov-loop-increment-integer-set-output-color-break",                                                            "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-increment-matrix-element-break-after-first-iteration.amber",                                          "cov-loop-increment-matrix-element-break-after-first-iteration",                                        "A fragment shader that covers specific NIR code paths"                                                         },
 {      "cov-loop-increment-or-divide-by-loop-index.amber",                                                                                     "cov-loop-increment-or-divide-by-loop-index",                                                                           "A fragment shader that covers specific NIR code paths"                                                         },
+{      "cov-loop-index-array-max-negative-zero.amber",                                                                                         "cov-loop-index-array-max-negative-zero",                                                                                       "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-integer-half-minus-one.amber",                                                                                                        "cov-loop-integer-half-minus-one",                                                                                                      "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-iterator-plus-one-variable-outside-index-array.amber",                                                        "cov-loop-iterator-plus-one-variable-outside-index-array",                                                      "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-large-array-index-clamp-negative-value.amber",                                                                        "cov-loop-large-array-index-clamp-negative-value",                                                                      "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-logical-xor.amber",                                                                                                                           "cov-loop-logical-xor",                                                                                                                         "A fragment shader that covers specific NIR code paths"                                                         },
 {      "cov-loop-multiple-iterator-variables-copy-array-elements.amber",                                                       "cov-loop-multiple-iterator-variables-copy-array-elements",                                                     "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-read-array-index-from-array-data.amber",                                                                                      "cov-loop-read-array-index-from-array-data",                                                                            "A fragment shader that covers specific LLVM code paths"                                                        },
+{      "cov-loop-max-divide-integer-by-ten.amber",                                                                                                     "cov-loop-max-divide-integer-by-ten",                                                                                           "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-replace-output-color-restore-original.amber",                                                                         "cov-loop-replace-output-color-restore-original",                                                                       "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-returns-behind-true-and-false.amber",                                                                                         "cov-loop-returns-behind-true-and-false",                                                                                       "A fragment shader that covers specific NIR code paths"                                                         },
+{      "cov-loop-sampled-texel-integer-counter.amber",                                                                                         "cov-loop-sampled-texel-integer-counter",                                                                                       "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-set-vector-components-pow-two.amber",                                                                                         "cov-loop-set-vector-components-pow-two",                                                                                       "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-start-from-one-switch-case-invalid-color-never-executed.amber",                                       "cov-loop-start-from-one-switch-case-invalid-color-never-executed",                                     "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-start-from-one-switch-case-never-executed.amber",                                                                     "cov-loop-start-from-one-switch-case-never-executed",                                                           "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-struct-array-field-set-value-self-dependency.amber",                                                          "cov-loop-struct-array-field-set-value-self-dependency",                                                        "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-switch-discard-never-hit.amber",                                                                                                      "cov-loop-switch-discard-never-hit",                                                                                            "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-two-iterators-increment-array-empty-do-while.amber",                                                          "cov-loop-two-iterators-increment-array-empty-do-while",                                                        "A fragment shader that covers specific LLVM code paths"                                                        },
+{      "cov-loop-variable-less-than-itself.amber",                                                                                                     "cov-loop-variable-less-than-itself",                                                                                           "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-loop-with-two-integers.amber",                                                                                                                     "cov-loop-with-two-integers",                                                                                                           "A fragment shader that covers specific NIR code paths"                                                         },
 {      "cov-machine-scheduler-for-if-pow.amber",                                                                                                       "cov-machine-scheduler-for-if-pow",                                                                                                     "A fragment shader that covers a specific machine scheduler path"                                       },
 {      "cov-machine-basic-block-for-for-for-less-than.amber",                                                                          "cov-machine-basic-block-for-for-for-less-than",                                                                        "A fragment shader that covers a specific machine basic block code paths"                       },
 {      "cov-min-negative-constant-always-below-one.amber",                                                                                     "cov-min-negative-constant-always-below-one",                                                                           "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-min-nested-loop-same-value-for-variables.amber",                                                                           "cov-min-nested-loop-same-value-for-variables",                                                                         "A fragment shader that covers specific NIR code paths"                                                         },
 {      "cov-missing-return-value-function-never-called.amber",                                                                         "cov-missing-return-value-function-never-called",                                                                       "A fragment shader that covers specific BRW code paths"                                                         },
+{      "cov-mix-uninitialized-float-never-selected.amber",                                                                                     "cov-mix-uninitialized-float-never-selected",                                                                           "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-mix-uninitialized-vector-select-only-defined-data.amber",                                                          "cov-mix-uninitialized-vector-select-only-defined-data",                                                        "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-mod-acosh.amber",                                                                                                                                          "cov-mod-acosh",                                                                                                                                        "A fragment shader that calculates modulo of an acosh result"                                           },
 {      "cov-mod-uint-bits-float.amber",                                                                                                                        "cov-mod-uint-bits-float",                                                                                                                      "A fragment shader that covers a specific APFloat path"                                                         },
 {      "cov-nested-functions-loop-assign-global-array-element.amber",                                                          "cov-nested-functions-loop-assign-global-array-element",                                                        "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-nested-functions-struct-arrays-vector-lengths.amber",                                                                      "cov-nested-functions-struct-arrays-vector-lengths",                                                            "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-nested-loop-continue-inner-copy-array-element.amber",                                                                      "cov-nested-loop-continue-inner-copy-array-element",                                                            "A fragment shader that covers specific LLVM code paths"                                                        },
+{      "cov-nested-loop-decrease-vector-components.amber",                                                                                     "cov-nested-loop-decrease-vector-components",                                                                           "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-nested-loop-initializer-value-increased-inside.amber",                                                                     "cov-nested-loop-initializer-value-increased-inside",                                                           "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-nested-loop-large-array-index-using-vector-components.amber",                                                      "cov-nested-loop-large-array-index-using-vector-components",                                            "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-nested-loop-not-greater-than-increment-array-element.amber",                                                       "cov-nested-loop-not-greater-than-increment-array-element",                                                     "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-nested-loops-temporary-copy-output-color-index-matrix.amber",                                                      "cov-nested-loops-temporary-copy-output-color-index-matrix",                                            "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-nested-loops-while-min-iterator-condition-always-false.amber",                                                     "cov-nested-loops-while-min-iterator-condition-always-false",                                           "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-nested-loops-switch-add-zero-matrix-elements.amber",                                                                       "cov-nested-loops-switch-add-zero-matrix-elements",                                                                     "A fragment shader that covers specific LLVM code paths"                                                        },
+{      "cov-nested-loops-while-condition-integer-range-increment-variable.amber",                                      "cov-nested-loops-while-condition-integer-range-increment-variable",                            "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-nested-structs-function-set-inner-struct-field-return.amber",                                                      "cov-nested-structs-function-set-inner-struct-field-return",                                            "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-nir-array-access.amber",                                                                                                                           "cov-nir-array-access",                                                                                                                         "A fragment shader that covers a specific nir path"                                                                     },
 {      "cov-nir-opt-large-constants-for-clamp-vector-access.amber",                                                            "cov-nir-opt-large-constants-for-clamp-vector-access",                                                          "A fragment shader that covers a specific nir opt large constants path"                         },
 {      "cov-two-loops-increment-integer-global-counter-break-square-threshold.amber",                          "cov-two-loops-increment-integer-global-counter-break-square-threshold",                        "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-two-nested-loops-switch-case-matrix-array-increment.amber",                                                        "cov-two-nested-loops-switch-case-matrix-array-increment",                                                      "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-types-return-in-main-never-hit.amber",                                                                                                     "cov-types-return-in-main-never-hit",                                                                                           "A fragment shader that covers a specific types optimization path."                                     },
+{      "cov-uadd-carry-bit-count-index-array.amber",                                                                                           "cov-uadd-carry-bit-count-index-array",                                                                                         "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-ucarryadd-one-and-one.amber",                                                                                                                      "cov-ucarryadd-one-and-one",                                                                                                            "A fragment shader that covers specific LLVM code paths"                                                        },
 {      "cov-undefined-inversesqrt-reflect.amber",                                                                                                      "cov-undefined-inversesqrt-reflect",                                                                                            "A fragment shader that covers a specific APFloat code path"                                            },
 {      "cov-uniform-vector-copy.amber",                                                                                                                        "cov-uniform-vector-copy",                                                                                                                      "A fragment shader that covers specific NIR code paths"                                                         },
index 3288f0a..b4c47ad 100644 (file)
@@ -122,6 +122,7 @@ dEQP-VK.graphicsfuzz.cov-do-while-switch-case-bitcount-findmsb
 dEQP-VK.graphicsfuzz.cov-double-if-true-in-loop
 dEQP-VK.graphicsfuzz.cov-dummy-function-loop-array-element-increment-never-read
 dEQP-VK.graphicsfuzz.cov-empty-loop-minus-one-modulo-variable-one
+dEQP-VK.graphicsfuzz.cov-enable-bits-pixel-location-negate-not-equal-one
 dEQP-VK.graphicsfuzz.cov-exp2-two
 dEQP-VK.graphicsfuzz.cov-extend-uniform-vec2-to-vec3-matrix-multiply
 dEQP-VK.graphicsfuzz.cov-findlsb-division-by-zero
@@ -168,15 +169,18 @@ dEQP-VK.graphicsfuzz.cov-fract-asin-undefined-never-used
 dEQP-VK.graphicsfuzz.cov-fract-smoothstep-undefined
 dEQP-VK.graphicsfuzz.cov-fract-trunc-always-zero
 dEQP-VK.graphicsfuzz.cov-fragcood-multiple-conditions-function-loop-global-counter
+dEQP-VK.graphicsfuzz.cov-fragcoord-and-one-or-same-value
 dEQP-VK.graphicsfuzz.cov-fragcoord-bitwise-and-loop-reduce-value-index-array
 dEQP-VK.graphicsfuzz.cov-fragcoord-bitwise-not
 dEQP-VK.graphicsfuzz.cov-fragcoord-clamp-array-access
 dEQP-VK.graphicsfuzz.cov-fragcoord-conditions-never-return-index-array-using-uniform
 dEQP-VK.graphicsfuzz.cov-fragcoord-integer-loop-reduce-to-range
+dEQP-VK.graphicsfuzz.cov-fragcoord-loop-limit-negative-decrease-sum-first-iteration
 dEQP-VK.graphicsfuzz.cov-fragcoord-multiple-conditions-function-global-loop-counter-simplified
 dEQP-VK.graphicsfuzz.cov-fragcoord-multiply
 dEQP-VK.graphicsfuzz.cov-function-argument-uniform-float-loop-never-return
 dEQP-VK.graphicsfuzz.cov-function-clamp-min-identical-shift-right
+dEQP-VK.graphicsfuzz.cov-function-call-twice-clamp-global-variable
 dEQP-VK.graphicsfuzz.cov-function-find-lsb-ivec2-one
 dEQP-VK.graphicsfuzz.cov-function-fragcoord-condition-always-return
 dEQP-VK.graphicsfuzz.cov-function-infinite-loop-always-return
@@ -190,6 +194,7 @@ dEQP-VK.graphicsfuzz.cov-function-loop-modify-ivec-components-infinite-loop-neve
 dEQP-VK.graphicsfuzz.cov-function-loop-same-conditions-multiple-times-struct-array
 dEQP-VK.graphicsfuzz.cov-function-loop-switch-increment-array-element-return
 dEQP-VK.graphicsfuzz.cov-function-min-integer-large-shift-unused
+dEQP-VK.graphicsfuzz.cov-function-loop-variable-multiplied-unused
 dEQP-VK.graphicsfuzz.cov-function-nested-do-whiles-looped-once
 dEQP-VK.graphicsfuzz.cov-function-nested-loops-break-early-never-discard
 dEQP-VK.graphicsfuzz.cov-function-nested-loops-limit-uniform-xor-uniform
@@ -298,6 +303,7 @@ dEQP-VK.graphicsfuzz.cov-left-shift-array-access
 dEQP-VK.graphicsfuzz.cov-left-shift-right-shift-compare
 dEQP-VK.graphicsfuzz.cov-liveinterval-different-dest
 dEQP-VK.graphicsfuzz.cov-loop-abs-multiply-offset
+dEQP-VK.graphicsfuzz.cov-loop-array-element-bitfield-insert-undefined-never-read
 dEQP-VK.graphicsfuzz.cov-loop-array-element-copy-index-clamp-sign
 dEQP-VK.graphicsfuzz.cov-loop-array-index-decrement-never-negative
 dEQP-VK.graphicsfuzz.cov-loop-array-struct-field-index-array-with-uniforms
@@ -318,6 +324,7 @@ dEQP-VK.graphicsfuzz.cov-loop-decrease-vector-components-assign-multiple-times
 dEQP-VK.graphicsfuzz.cov-loop-dfdx-constant-divide
 dEQP-VK.graphicsfuzz.cov-loop-exit-conditions-sampler-struct-integer-variable
 dEQP-VK.graphicsfuzz.cov-loop-divide-uninitialized-vector-min-unused
+dEQP-VK.graphicsfuzz.cov-loop-find-lsb-eight-fragcoord-never-discard
 dEQP-VK.graphicsfuzz.cov-loop-findmsb-findlsb
 dEQP-VK.graphicsfuzz.cov-loop-fragcoord-identical-condition
 dEQP-VK.graphicsfuzz.cov-loop-global-counter-break-set-ivec-elements
@@ -328,6 +335,7 @@ dEQP-VK.graphicsfuzz.cov-loop-increment-integer-findmsb-minus-uniform
 dEQP-VK.graphicsfuzz.cov-loop-increment-integer-set-output-color-break
 dEQP-VK.graphicsfuzz.cov-loop-increment-matrix-element-break-after-first-iteration
 dEQP-VK.graphicsfuzz.cov-loop-increment-or-divide-by-loop-index
+dEQP-VK.graphicsfuzz.cov-loop-index-array-max-negative-zero
 dEQP-VK.graphicsfuzz.cov-loop-integer-half-minus-one
 dEQP-VK.graphicsfuzz.cov-loop-iterator-plus-one-variable-outside-index-array
 dEQP-VK.graphicsfuzz.cov-loop-large-array-index-clamp-negative-value
@@ -336,14 +344,17 @@ dEQP-VK.graphicsfuzz.cov-loop-limiter-uniform-bitwise-and-one-always-break
 dEQP-VK.graphicsfuzz.cov-loop-logical-xor
 dEQP-VK.graphicsfuzz.cov-loop-multiple-iterator-variables-copy-array-elements
 dEQP-VK.graphicsfuzz.cov-loop-read-array-index-from-array-data
+dEQP-VK.graphicsfuzz.cov-loop-max-divide-integer-by-ten
 dEQP-VK.graphicsfuzz.cov-loop-replace-output-color-restore-original
 dEQP-VK.graphicsfuzz.cov-loop-returns-behind-true-and-false
+dEQP-VK.graphicsfuzz.cov-loop-sampled-texel-integer-counter
 dEQP-VK.graphicsfuzz.cov-loop-set-vector-components-pow-two
 dEQP-VK.graphicsfuzz.cov-loop-start-from-one-switch-case-invalid-color-never-executed
 dEQP-VK.graphicsfuzz.cov-loop-start-from-one-switch-case-never-executed
 dEQP-VK.graphicsfuzz.cov-loop-struct-array-field-set-value-self-dependency
 dEQP-VK.graphicsfuzz.cov-loop-switch-discard-never-hit
 dEQP-VK.graphicsfuzz.cov-loop-two-iterators-increment-array-empty-do-while
+dEQP-VK.graphicsfuzz.cov-loop-variable-less-than-itself
 dEQP-VK.graphicsfuzz.cov-loop-with-two-integers
 dEQP-VK.graphicsfuzz.cov-machine-scheduler-for-if-pow
 dEQP-VK.graphicsfuzz.cov-machine-basic-block-for-for-for-less-than
@@ -362,6 +373,7 @@ dEQP-VK.graphicsfuzz.cov-min-intbitstofloat-undefined-never-used
 dEQP-VK.graphicsfuzz.cov-min-negative-constant-always-below-one
 dEQP-VK.graphicsfuzz.cov-min-nested-loop-same-value-for-variables
 dEQP-VK.graphicsfuzz.cov-missing-return-value-function-never-called
+dEQP-VK.graphicsfuzz.cov-mix-uninitialized-float-never-selected
 dEQP-VK.graphicsfuzz.cov-mix-uninitialized-vector-select-only-defined-data
 dEQP-VK.graphicsfuzz.cov-mod-acosh
 dEQP-VK.graphicsfuzz.cov-mod-uint-bits-float
@@ -378,6 +390,7 @@ dEQP-VK.graphicsfuzz.cov-nested-functions-compare-fragcood-length-zero-vector
 dEQP-VK.graphicsfuzz.cov-nested-functions-loop-assign-global-array-element
 dEQP-VK.graphicsfuzz.cov-nested-functions-struct-arrays-vector-lengths
 dEQP-VK.graphicsfuzz.cov-nested-loop-continue-inner-copy-array-element
+dEQP-VK.graphicsfuzz.cov-nested-loop-decrease-vector-components
 dEQP-VK.graphicsfuzz.cov-nested-loop-initializer-value-increased-inside
 dEQP-VK.graphicsfuzz.cov-nested-loop-large-array-index-using-vector-components
 dEQP-VK.graphicsfuzz.cov-nested-loop-not-greater-than-increment-array-element
@@ -411,6 +424,7 @@ dEQP-VK.graphicsfuzz.cov-nested-loops-switch-case-fallthrough-increment-array-el
 dEQP-VK.graphicsfuzz.cov-nested-loops-temporary-copy-output-color-index-matrix
 dEQP-VK.graphicsfuzz.cov-nested-loops-while-min-iterator-condition-always-false
 dEQP-VK.graphicsfuzz.cov-nested-loops-switch-add-zero-matrix-elements
+dEQP-VK.graphicsfuzz.cov-nested-loops-while-condition-integer-range-increment-variable
 dEQP-VK.graphicsfuzz.cov-nested-structs-function-set-inner-struct-field-return
 dEQP-VK.graphicsfuzz.cov-nir-array-access
 dEQP-VK.graphicsfuzz.cov-nir-opt-large-constants-for-clamp-vector-access
@@ -490,6 +504,7 @@ dEQP-VK.graphicsfuzz.cov-two-loops-global-loop-counter-shift-right-zero-incremen
 dEQP-VK.graphicsfuzz.cov-two-loops-increment-integer-global-counter-break-square-threshold
 dEQP-VK.graphicsfuzz.cov-two-nested-loops-switch-case-matrix-array-increment
 dEQP-VK.graphicsfuzz.cov-types-return-in-main-never-hit
+dEQP-VK.graphicsfuzz.cov-uadd-carry-bit-count-index-array
 dEQP-VK.graphicsfuzz.cov-ucarryadd-one-and-one
 dEQP-VK.graphicsfuzz.cov-undefined-inversesqrt-reflect
 dEQP-VK.graphicsfuzz.cov-uniform-vector-copy