Bug 1952126 - chore(webgpu): update WGPU to dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c r=webgpu-reviewers,supply-chain-reviewers,teoxoy

Differential Revision: https://phabricator.services.mozilla.com/D240571
This commit is contained in:
Erich Gubler
2025-03-12 18:12:03 +00:00
parent 932983a9e0
commit bd3d5b924a
192 changed files with 3378 additions and 1245 deletions

View File

@@ -40,9 +40,9 @@ git = "https://github.com/franziskuskiefer/cose-rust"
rev = "43c22248d136c8b38fe42ea709d08da6355cf04b" rev = "43c22248d136c8b38fe42ea709d08da6355cf04b"
replace-with = "vendored-sources" replace-with = "vendored-sources"
[source."git+https://github.com/gfx-rs/wgpu?rev=93f64dc847a0e6788b17b292ae4d7d59361e3be0"] [source."git+https://github.com/gfx-rs/wgpu?rev=dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"]
git = "https://github.com/gfx-rs/wgpu" git = "https://github.com/gfx-rs/wgpu"
rev = "93f64dc847a0e6788b17b292ae4d7d59361e3be0" rev = "dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
replace-with = "vendored-sources" replace-with = "vendored-sources"
[source."git+https://github.com/glandium/rust-objc?rev=4de89f5aa9851ceca4d40e7ac1e2759410c04324"] [source."git+https://github.com/glandium/rust-objc?rev=4de89f5aa9851ceca4d40e7ac1e2759410c04324"]

12
Cargo.lock generated
View File

@@ -4480,7 +4480,7 @@ checksum = "a2983372caf4480544083767bf2d27defafe32af49ab4df3a0b7fc90793a3664"
[[package]] [[package]]
name = "naga" name = "naga"
version = "24.0.0" version = "24.0.0"
source = "git+https://github.com/gfx-rs/wgpu?rev=93f64dc847a0e6788b17b292ae4d7d59361e3be0#93f64dc847a0e6788b17b292ae4d7d59361e3be0" source = "git+https://github.com/gfx-rs/wgpu?rev=dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c#dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
dependencies = [ dependencies = [
"arrayvec", "arrayvec",
"bit-set", "bit-set",
@@ -7350,7 +7350,7 @@ dependencies = [
[[package]] [[package]]
name = "wgpu-core" name = "wgpu-core"
version = "24.0.0" version = "24.0.0"
source = "git+https://github.com/gfx-rs/wgpu?rev=93f64dc847a0e6788b17b292ae4d7d59361e3be0#93f64dc847a0e6788b17b292ae4d7d59361e3be0" source = "git+https://github.com/gfx-rs/wgpu?rev=dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c#dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
dependencies = [ dependencies = [
"arrayvec", "arrayvec",
"bit-vec", "bit-vec",
@@ -7378,7 +7378,7 @@ dependencies = [
[[package]] [[package]]
name = "wgpu-core-deps-apple" name = "wgpu-core-deps-apple"
version = "24.0.0" version = "24.0.0"
source = "git+https://github.com/gfx-rs/wgpu?rev=93f64dc847a0e6788b17b292ae4d7d59361e3be0#93f64dc847a0e6788b17b292ae4d7d59361e3be0" source = "git+https://github.com/gfx-rs/wgpu?rev=dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c#dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
dependencies = [ dependencies = [
"wgpu-hal", "wgpu-hal",
] ]
@@ -7386,7 +7386,7 @@ dependencies = [
[[package]] [[package]]
name = "wgpu-core-deps-windows-linux-android" name = "wgpu-core-deps-windows-linux-android"
version = "24.0.0" version = "24.0.0"
source = "git+https://github.com/gfx-rs/wgpu?rev=93f64dc847a0e6788b17b292ae4d7d59361e3be0#93f64dc847a0e6788b17b292ae4d7d59361e3be0" source = "git+https://github.com/gfx-rs/wgpu?rev=dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c#dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
dependencies = [ dependencies = [
"wgpu-hal", "wgpu-hal",
] ]
@@ -7394,7 +7394,7 @@ dependencies = [
[[package]] [[package]]
name = "wgpu-hal" name = "wgpu-hal"
version = "24.0.0" version = "24.0.0"
source = "git+https://github.com/gfx-rs/wgpu?rev=93f64dc847a0e6788b17b292ae4d7d59361e3be0#93f64dc847a0e6788b17b292ae4d7d59361e3be0" source = "git+https://github.com/gfx-rs/wgpu?rev=dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c#dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
dependencies = [ dependencies = [
"android_system_properties", "android_system_properties",
"arrayvec", "arrayvec",
@@ -7429,7 +7429,7 @@ dependencies = [
[[package]] [[package]]
name = "wgpu-types" name = "wgpu-types"
version = "24.0.0" version = "24.0.0"
source = "git+https://github.com/gfx-rs/wgpu?rev=93f64dc847a0e6788b17b292ae4d7d59361e3be0#93f64dc847a0e6788b17b292ae4d7d59361e3be0" source = "git+https://github.com/gfx-rs/wgpu?rev=dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c#dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
dependencies = [ dependencies = [
"bitflags 2.9.0", "bitflags 2.9.0",
"js-sys", "js-sys",

View File

@@ -17,7 +17,7 @@ default = []
[dependencies.wgc] [dependencies.wgc]
package = "wgpu-core" package = "wgpu-core"
git = "https://github.com/gfx-rs/wgpu" git = "https://github.com/gfx-rs/wgpu"
rev = "93f64dc847a0e6788b17b292ae4d7d59361e3be0" rev = "dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
# TODO: remove the replay feature on the next update containing https://github.com/gfx-rs/wgpu/pull/5182 # TODO: remove the replay feature on the next update containing https://github.com/gfx-rs/wgpu/pull/5182
features = ["serde", "replay", "trace", "strict_asserts", "wgsl", "api_log_info", "indirect-validation"] features = ["serde", "replay", "trace", "strict_asserts", "wgsl", "api_log_info", "indirect-validation"]
@@ -26,32 +26,32 @@ features = ["serde", "replay", "trace", "strict_asserts", "wgsl", "api_log_info"
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.wgc] [target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.wgc]
package = "wgpu-core" package = "wgpu-core"
git = "https://github.com/gfx-rs/wgpu" git = "https://github.com/gfx-rs/wgpu"
rev = "93f64dc847a0e6788b17b292ae4d7d59361e3be0" rev = "dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
features = ["metal"] features = ["metal"]
# We want the wgpu-core Direct3D backends on Windows. # We want the wgpu-core Direct3D backends on Windows.
[target.'cfg(windows)'.dependencies.wgc] [target.'cfg(windows)'.dependencies.wgc]
package = "wgpu-core" package = "wgpu-core"
git = "https://github.com/gfx-rs/wgpu" git = "https://github.com/gfx-rs/wgpu"
rev = "93f64dc847a0e6788b17b292ae4d7d59361e3be0" rev = "dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
features = ["dx12"] features = ["dx12"]
# We want the wgpu-core Vulkan backend on Linux and Windows. # We want the wgpu-core Vulkan backend on Linux and Windows.
[target.'cfg(any(windows, all(unix, not(any(target_os = "macos", target_os = "ios")))))'.dependencies.wgc] [target.'cfg(any(windows, all(unix, not(any(target_os = "macos", target_os = "ios")))))'.dependencies.wgc]
package = "wgpu-core" package = "wgpu-core"
git = "https://github.com/gfx-rs/wgpu" git = "https://github.com/gfx-rs/wgpu"
rev = "93f64dc847a0e6788b17b292ae4d7d59361e3be0" rev = "dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
features = ["vulkan"] features = ["vulkan"]
[dependencies.wgt] [dependencies.wgt]
package = "wgpu-types" package = "wgpu-types"
git = "https://github.com/gfx-rs/wgpu" git = "https://github.com/gfx-rs/wgpu"
rev = "93f64dc847a0e6788b17b292ae4d7d59361e3be0" rev = "dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
[dependencies.wgh] [dependencies.wgh]
package = "wgpu-hal" package = "wgpu-hal"
git = "https://github.com/gfx-rs/wgpu" git = "https://github.com/gfx-rs/wgpu"
rev = "93f64dc847a0e6788b17b292ae4d7d59361e3be0" rev = "dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
features = ["oom_panic", "device_lost_panic", "internal_error_panic"] features = ["oom_panic", "device_lost_panic", "internal_error_panic"]
[target.'cfg(windows)'.dependencies] [target.'cfg(windows)'.dependencies]

View File

@@ -20,11 +20,11 @@ origin:
# Human-readable identifier for this version/release # Human-readable identifier for this version/release
# Generally "version NNN", "tag SSS", "bookmark SSS" # Generally "version NNN", "tag SSS", "bookmark SSS"
release: commit 93f64dc847a0e6788b17b292ae4d7d59361e3be0 release: dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c (2025-03-07T03:44:36Z).
# Revision to pull in # Revision to pull in
# Must be a long or short commit SHA (long preferred) # Must be a long or short commit SHA (long preferred)
revision: 93f64dc847a0e6788b17b292ae4d7d59361e3be0 revision: dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c
license: ['MIT', 'Apache-2.0'] license: ['MIT', 'Apache-2.0']

View File

@@ -3647,9 +3647,12 @@ criteria = "safe-to-deploy"
delta = "23.1.0 -> 24.0.0" delta = "23.1.0 -> 24.0.0"
[[audits.naga]] [[audits.naga]]
who = "Teodor Tanasoaia <ttanasoaia@mozilla.com>" who = [
"Teodor Tanasoaia <ttanasoaia@mozilla.com>",
"Erich Gubler <erichdongubler@gmail.com>",
]
criteria = "safe-to-deploy" criteria = "safe-to-deploy"
delta = "24.0.0 -> 24.0.0@git:93f64dc847a0e6788b17b292ae4d7d59361e3be0" delta = "24.0.0 -> 24.0.0@git:dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
importable = false importable = false
[[audits.net2]] [[audits.net2]]
@@ -5868,9 +5871,12 @@ criteria = "safe-to-deploy"
delta = "23.0.1 -> 24.0.0" delta = "23.0.1 -> 24.0.0"
[[audits.wgpu-core]] [[audits.wgpu-core]]
who = "Teodor Tanasoaia <ttanasoaia@mozilla.com>" who = [
"Teodor Tanasoaia <ttanasoaia@mozilla.com>",
"Erich Gubler <erichdongubler@gmail.com>",
]
criteria = "safe-to-deploy" criteria = "safe-to-deploy"
delta = "24.0.0 -> 24.0.0@git:93f64dc847a0e6788b17b292ae4d7d59361e3be0" delta = "24.0.0 -> 24.0.0@git:dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
importable = false importable = false
[[audits.wgpu-hal]] [[audits.wgpu-hal]]
@@ -5952,9 +5958,12 @@ criteria = "safe-to-deploy"
delta = "23.0.1 -> 24.0.0" delta = "23.0.1 -> 24.0.0"
[[audits.wgpu-hal]] [[audits.wgpu-hal]]
who = "Teodor Tanasoaia <ttanasoaia@mozilla.com>" who = [
"Teodor Tanasoaia <ttanasoaia@mozilla.com>",
"Erich Gubler <erichdongubler@gmail.com>",
]
criteria = "safe-to-deploy" criteria = "safe-to-deploy"
delta = "24.0.0 -> 24.0.0@git:93f64dc847a0e6788b17b292ae4d7d59361e3be0" delta = "24.0.0 -> 24.0.0@git:dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
importable = false importable = false
[[audits.wgpu-types]] [[audits.wgpu-types]]
@@ -6031,9 +6040,12 @@ criteria = "safe-to-deploy"
delta = "23.0.0 -> 24.0.0" delta = "23.0.0 -> 24.0.0"
[[audits.wgpu-types]] [[audits.wgpu-types]]
who = "Teodor Tanasoaia <ttanasoaia@mozilla.com>" who = [
"Teodor Tanasoaia <ttanasoaia@mozilla.com>",
"Erich Gubler <erichdongubler@gmail.com>",
]
criteria = "safe-to-deploy" criteria = "safe-to-deploy"
delta = "24.0.0 -> 24.0.0@git:93f64dc847a0e6788b17b292ae4d7d59361e3be0" delta = "24.0.0 -> 24.0.0@git:dc02f91ffe1feab8c35d3fdf41f61a62a5004d2c"
importable = false importable = false
[[audits.whatsys]] [[audits.whatsys]]

View File

@@ -102,10 +102,10 @@
expected: expected:
if os == "win": [OK, ERROR] if os == "win": [OK, ERROR]
[:interpolated=false;sampleCount=1;rasterizationMask=0] [:interpolated=false;sampleCount=1;rasterizationMask=0]
expected: FAIL
[:interpolated=false;sampleCount=1;rasterizationMask=1] [:interpolated=false;sampleCount=1;rasterizationMask=1]
expected: FAIL expected:
if os == "mac": FAIL
[:interpolated=false;sampleCount=4;rasterizationMask=0] [:interpolated=false;sampleCount=4;rasterizationMask=0]
expected: FAIL expected: FAIL
@@ -156,10 +156,10 @@
expected: FAIL expected: FAIL
[:interpolated=true;sampleCount=1;rasterizationMask=0] [:interpolated=true;sampleCount=1;rasterizationMask=0]
expected: FAIL
[:interpolated=true;sampleCount=1;rasterizationMask=1] [:interpolated=true;sampleCount=1;rasterizationMask=1]
expected: FAIL expected:
if os == "mac": FAIL
[:interpolated=true;sampleCount=4;rasterizationMask=0] [:interpolated=true;sampleCount=4;rasterizationMask=0]
expected: FAIL expected: FAIL

View File

@@ -7,6 +7,8 @@
[:limitTest="atDefault";testValueName="overLimit"] [:limitTest="atDefault";testValueName="overLimit"]
[:limitTest="atMaximum";testValueName="atLimit"] [:limitTest="atMaximum";testValueName="atLimit"]
expected:
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit"] [:limitTest="atMaximum";testValueName="overLimit"]
expected: expected:

View File

@@ -72,7 +72,11 @@
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: FAIL expected:
if os == "win": FAIL
if os == "linux" and debug: FAIL
if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL
[:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"]
expected: expected:
@@ -83,7 +87,11 @@
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: FAIL expected:
if os == "win": FAIL
if os == "linux" and debug: FAIL
if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL
[:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
expected: expected:
@@ -100,7 +108,7 @@
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"]
@@ -111,7 +119,7 @@
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
@@ -128,7 +136,7 @@
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"]
@@ -139,7 +147,7 @@
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
@@ -158,8 +166,7 @@
[:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16uint"] [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16uint"]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": [FAIL, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"]
@@ -172,8 +179,7 @@
[:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16uint"] [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16uint"]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": [FAIL, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
@@ -193,8 +199,7 @@
[:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": [FAIL, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"]
@@ -207,8 +212,7 @@
[:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": [FAIL, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
@@ -226,7 +230,7 @@
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"]
@@ -237,6 +241,7 @@
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
@@ -253,7 +258,7 @@
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"]
@@ -264,7 +269,7 @@
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
@@ -283,8 +288,7 @@
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16uint"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16uint"]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": [FAIL, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"]
@@ -297,8 +301,7 @@
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16uint"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16uint"]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": [FAIL, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
@@ -318,8 +321,7 @@
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": [FAIL, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"]
@@ -332,8 +334,7 @@
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": [FAIL, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
@@ -351,7 +352,7 @@
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"]
@@ -362,7 +363,7 @@
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
@@ -379,7 +380,7 @@
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"]
@@ -390,7 +391,7 @@
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
@@ -407,7 +408,7 @@
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16uint"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"]
@@ -418,7 +419,7 @@
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16uint"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
@@ -435,7 +436,7 @@
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"]
@@ -446,7 +447,7 @@
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
@@ -463,6 +464,7 @@
[:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"] [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"]
@@ -472,6 +474,7 @@
[:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"] [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
@@ -487,6 +490,7 @@
[:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"]
@@ -497,6 +501,7 @@
[:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
@@ -515,7 +520,8 @@
[:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16uint"] [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16uint"]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": FAIL if os == "linux" and debug: FAIL
if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac": [FAIL, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"]
@@ -528,7 +534,8 @@
[:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16uint"] [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16uint"]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": FAIL if os == "linux" and debug: FAIL
if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac": [FAIL, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
@@ -548,7 +555,8 @@
[:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": FAIL if os == "linux" and debug: FAIL
if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac": [FAIL, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"]
@@ -561,7 +569,8 @@
[:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": FAIL if os == "linux" and debug: FAIL
if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac": [FAIL, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
@@ -671,6 +680,7 @@
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -678,6 +688,7 @@
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -688,6 +699,7 @@
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -695,6 +707,7 @@
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -706,7 +719,8 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"]
expected: [FAIL, TIMEOUT, NOTRUN] expected: [FAIL, TIMEOUT, NOTRUN]
@@ -715,7 +729,8 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
expected: [FAIL, TIMEOUT, NOTRUN] expected: [FAIL, TIMEOUT, NOTRUN]
@@ -727,7 +742,8 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"]
expected: [FAIL, TIMEOUT, NOTRUN] expected: [FAIL, TIMEOUT, NOTRUN]
@@ -736,7 +752,8 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
expected: [FAIL, TIMEOUT, NOTRUN] expected: [FAIL, TIMEOUT, NOTRUN]
@@ -750,6 +767,7 @@
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"]
expected: expected:
@@ -760,6 +778,7 @@
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
expected: expected:
@@ -773,6 +792,7 @@
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -780,6 +800,7 @@
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -791,7 +812,8 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"]
expected: [FAIL, TIMEOUT, NOTRUN] expected: [FAIL, TIMEOUT, NOTRUN]
@@ -800,7 +822,8 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
expected: [FAIL, TIMEOUT, NOTRUN] expected: [FAIL, TIMEOUT, NOTRUN]
@@ -812,7 +835,8 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"]
expected: [FAIL, TIMEOUT, NOTRUN] expected: [FAIL, TIMEOUT, NOTRUN]
@@ -821,7 +845,8 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
expected: [FAIL, TIMEOUT, NOTRUN] expected: [FAIL, TIMEOUT, NOTRUN]
@@ -832,6 +857,7 @@
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -839,6 +865,7 @@
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -849,6 +876,7 @@
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -856,6 +884,7 @@
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -866,6 +895,7 @@
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16uint"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -873,6 +903,7 @@
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16uint"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -883,6 +914,7 @@
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -890,6 +922,7 @@
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
expected: [PASS, TIMEOUT, NOTRUN] expected: [PASS, TIMEOUT, NOTRUN]
@@ -925,6 +958,7 @@
[:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"] [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"]
expected: expected:
@@ -934,6 +968,7 @@
[:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"] [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16uint"]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
expected: expected:
@@ -951,7 +986,8 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"]
expected: expected:
@@ -964,7 +1000,8 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"]
expected: expected:
@@ -984,7 +1021,8 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"]
expected: expected:
@@ -997,7 +1035,8 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"]
expected: expected:

View File

@@ -316,13 +316,15 @@
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";pipelineType="createComputePipeline";axis=2] [:limitTest="underDefault";testValueName="overLimit";pipelineType="createComputePipeline";axis=2]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac" and debug: FAIL
if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=0] [:limitTest="underDefault";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=0]
expected: expected:

View File

@@ -942,14 +942,17 @@
[:limitTest="atDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"]
expected: expected:
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="atDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"]
expected: expected:
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="atDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="atDefault";testValueName="atLimit";visibility=6;type="storage";order="backward"] [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="storage";order="backward"]
@@ -962,14 +965,17 @@
[:limitTest="atDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"]
expected: expected:
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="atDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"]
expected: expected:
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="atDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="atDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"]
expected: expected:
@@ -1706,151 +1712,181 @@
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="storage";order="backward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="storage";order="forward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="storage";order="backward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="storage";order="forward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="storage";order="backward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="storage";order="forward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"]
expected: expected:
@@ -2126,451 +2162,541 @@
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="storage";order="backward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="storage";order="forward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="storage";order="backward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="storage";order="forward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="storage";order="backward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="storage";order="forward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="storage";order="backward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="storage";order="forward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="storage";order="backward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="storage";order="forward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="storage";order="backward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="storage";order="forward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="backward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="forward"] [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="backward"] [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=2;type="storage";order="backward"] [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=2;type="storage";order="forward"] [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=4;type="storage";order="backward"] [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=4;type="storage";order="forward"] [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=6;type="storage";order="backward"] [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=6;type="storage";order="forward"] [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"]
expected: expected:

View File

@@ -785,10 +785,7 @@
[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageTexturesPerShaderStage:createPipeline,at_over:*] [cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageTexturesPerShaderStage:createPipeline,at_over:*]
implementation-status: backlog implementation-status: backlog
expected: expected: [OK, TIMEOUT]
if os == "win" and debug: [OK, TIMEOUT]
if os == "linux": [OK, TIMEOUT]
if os == "mac": [OK, TIMEOUT]
[:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";access="read-only"] [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";access="read-only"]
[:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";access="read-write"] [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";access="read-write"]
@@ -867,450 +864,558 @@
[:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="read-only"] [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="read-write"] [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="write-only"] [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="read-only"] [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="read-write"] [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="write-only"] [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";access="read-only"] [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="read-only"] [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="read-write"] [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="write-only"] [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-only"] [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-write"] [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="write-only"] [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";access="read-only"] [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="read-only"] [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="read-write"] [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="write-only"] [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win": FAIL if os == "win" and debug: FAIL
if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac": FAIL
[:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-only"] [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-write"] [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="write-only"] [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win": FAIL if os == "win" and debug: FAIL
if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac": FAIL
[:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";access="read-only"] [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="read-only"] [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="read-write"] [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="write-only"] [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win": FAIL if os == "win" and debug: FAIL
if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac": FAIL
[:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-only"] [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-write"] [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="write-only"] [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win": FAIL if os == "win" and debug: FAIL
if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac": FAIL
[:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";access="read-only"] [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="read-write"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="write-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="read-write"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="write-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="read-write"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="write-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-write"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="write-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="read-write"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="write-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win": FAIL if os == "win" and debug: FAIL
if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac": FAIL
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-write"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="write-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win": FAIL if os == "win" and debug: FAIL
if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac": FAIL
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="read-write"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="write-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win": FAIL if os == "win" and debug: FAIL
if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac": FAIL
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-write"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="write-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win": FAIL if os == "win" and debug: FAIL
if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux": [FAIL, TIMEOUT, NOTRUN] if os == "linux": [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac": FAIL
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="read-only"] [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="read-write"] [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="write-only"] [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="read-only"] [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="read-write"] [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="write-only"] [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";access="read-only"] [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="read-only"] [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="read-write"] [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="write-only"] [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-only"] [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-write"] [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="write-only"] [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";access="read-only"] [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="read-only"] [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="read-write"] [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="write-only"] [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-only"] [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-write"] [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="write-only"] [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";access="read-only"] [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="read-only"] [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="read-write"] [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="write-only"] [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-only"] [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-write"] [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="write-only"] [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";access="read-only"] [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";access="read-only"] [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";access="read-only"]
@@ -1336,6 +1441,8 @@
[:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";access="read-write"] [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";access="read-write"]
[:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";access="write-only"] [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";access="write-only"]
expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-only"] [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";access="read-only"]
@@ -1351,80 +1458,101 @@
[:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";access="read-only"] [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";access="read-write"] [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";access="write-only"] [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win": FAIL if os == "win" and debug: FAIL
if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and debug: FAIL if os == "linux" and debug: FAIL
if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac": FAIL
[:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-only"] [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-only"]
expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-write"] [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";access="read-write"]
expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";access="write-only"] [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win": FAIL if os == "win" and debug: FAIL
if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and debug: FAIL if os == "linux" and debug: FAIL
if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac": FAIL
[:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";access="read-only"] [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";access="read-only"]
expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";access="read-only"] [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";access="read-write"] [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";access="write-only"] [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";access="write-only"]
expected: expected:
if os == "win": FAIL if os == "win" and debug: FAIL
if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and debug: FAIL if os == "linux" and debug: FAIL
if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac": FAIL
[:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-only"] [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-write"] [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";access="read-write"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";access="write-only"] [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";access="write-only"]
expected: expected:
if os == "win": FAIL if os == "win" and debug: FAIL
if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and debug: FAIL if os == "linux" and debug: FAIL
if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac": FAIL if os == "mac": FAIL
[:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";access="read-only"] [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"] [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
[:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"] [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";access="read-only"]
expected: expected:
if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]

View File

@@ -10438,30 +10438,18 @@
[:format="bc2-rgba-unorm";filt="linear";mode="c"] [:format="bc2-rgba-unorm";filt="linear";mode="c"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc2-rgba-unorm";filt="linear";mode="m"] [:format="bc2-rgba-unorm";filt="linear";mode="m"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc2-rgba-unorm";filt="linear";mode="r"] [:format="bc2-rgba-unorm";filt="linear";mode="r"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc2-rgba-unorm";filt="nearest";mode="c"] [:format="bc2-rgba-unorm";filt="nearest";mode="c"]
expected: expected:
@@ -10470,138 +10458,78 @@
[:format="bc2-rgba-unorm";filt="nearest";mode="m"] [:format="bc2-rgba-unorm";filt="nearest";mode="m"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc2-rgba-unorm";filt="nearest";mode="r"] [:format="bc2-rgba-unorm";filt="nearest";mode="r"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc2-rgba-unorm-srgb";filt="linear";mode="c"] [:format="bc2-rgba-unorm-srgb";filt="linear";mode="c"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc2-rgba-unorm-srgb";filt="linear";mode="m"] [:format="bc2-rgba-unorm-srgb";filt="linear";mode="m"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc2-rgba-unorm-srgb";filt="linear";mode="r"] [:format="bc2-rgba-unorm-srgb";filt="linear";mode="r"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc2-rgba-unorm-srgb";filt="nearest";mode="c"] [:format="bc2-rgba-unorm-srgb";filt="nearest";mode="c"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc2-rgba-unorm-srgb";filt="nearest";mode="m"] [:format="bc2-rgba-unorm-srgb";filt="nearest";mode="m"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc2-rgba-unorm-srgb";filt="nearest";mode="r"] [:format="bc2-rgba-unorm-srgb";filt="nearest";mode="r"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc3-rgba-unorm";filt="linear";mode="c"] [:format="bc3-rgba-unorm";filt="linear";mode="c"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc3-rgba-unorm";filt="linear";mode="m"] [:format="bc3-rgba-unorm";filt="linear";mode="m"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc3-rgba-unorm";filt="linear";mode="r"] [:format="bc3-rgba-unorm";filt="linear";mode="r"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc3-rgba-unorm";filt="nearest";mode="c"] [:format="bc3-rgba-unorm";filt="nearest";mode="c"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc3-rgba-unorm";filt="nearest";mode="m"] [:format="bc3-rgba-unorm";filt="nearest";mode="m"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc3-rgba-unorm";filt="nearest";mode="r"] [:format="bc3-rgba-unorm";filt="nearest";mode="r"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc3-rgba-unorm-srgb";filt="linear";mode="c"] [:format="bc3-rgba-unorm-srgb";filt="linear";mode="c"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc3-rgba-unorm-srgb";filt="linear";mode="m"] [:format="bc3-rgba-unorm-srgb";filt="linear";mode="m"]
expected: expected:
@@ -10610,39 +10538,23 @@
[:format="bc3-rgba-unorm-srgb";filt="linear";mode="r"] [:format="bc3-rgba-unorm-srgb";filt="linear";mode="r"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc3-rgba-unorm-srgb";filt="nearest";mode="c"] [:format="bc3-rgba-unorm-srgb";filt="nearest";mode="c"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc3-rgba-unorm-srgb";filt="nearest";mode="m"] [:format="bc3-rgba-unorm-srgb";filt="nearest";mode="m"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc3-rgba-unorm-srgb";filt="nearest";mode="r"] [:format="bc3-rgba-unorm-srgb";filt="nearest";mode="r"]
expected: expected:
if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL if not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="bc4-r-snorm";filt="linear";mode="c"] [:format="bc4-r-snorm";filt="linear";mode="c"]
expected: expected:

View File

@@ -852,31 +852,33 @@
[:format="depth24plus";filt="nearest";modeU="c";modeV="m";offset=false] [:format="depth24plus";filt="nearest";modeU="c";modeV="m";offset=false]
expected: expected:
if os == "win": FAIL if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if not debug: FAIL
if os == "linux" and not debug: FAIL
if os == "mac": FAIL
[:format="depth24plus";filt="nearest";modeU="c";modeV="m";offset=true] [:format="depth24plus";filt="nearest";modeU="c";modeV="m";offset=true]
expected: expected:
if os == "win": FAIL if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "win" and not debug: FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL if os == "linux" and not debug: FAIL
if os == "mac": FAIL if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="depth24plus";filt="nearest";modeU="c";modeV="r";offset=false] [:format="depth24plus";filt="nearest";modeU="c";modeV="r";offset=false]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL if os == "linux" and not debug: FAIL
if os == "mac": FAIL if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="depth24plus";filt="nearest";modeU="c";modeV="r";offset=true] [:format="depth24plus";filt="nearest";modeU="c";modeV="r";offset=true]
expected: expected:
if os == "win": FAIL if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL if os == "linux" and not debug: FAIL
if os == "mac": FAIL if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="depth24plus";filt="nearest";modeU="m";modeV="c";offset=false] [:format="depth24plus";filt="nearest";modeU="m";modeV="c";offset=false]
expected: expected:
@@ -910,11 +912,8 @@
[:format="depth24plus";filt="nearest";modeU="r";modeV="c";offset=false] [:format="depth24plus";filt="nearest";modeU="r";modeV="c";offset=false]
expected: expected:
if os == "win": FAIL if debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] if not debug: FAIL
if os == "linux" and not debug: FAIL
if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "mac" and not debug: FAIL
[:format="depth24plus";filt="nearest";modeU="r";modeV="c";offset=true] [:format="depth24plus";filt="nearest";modeU="r";modeV="c";offset=true]
expected: expected:
@@ -1230,13 +1229,25 @@
if os == "mac" and not debug: FAIL if os == "mac" and not debug: FAIL
[:format="depth32float";filt="linear";modeU="c";modeV="c";offset=false] [:format="depth32float";filt="linear";modeU="c";modeV="c";offset=false]
expected: FAIL expected:
if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": FAIL
[:format="depth32float";filt="linear";modeU="c";modeV="c";offset=true] [:format="depth32float";filt="linear";modeU="c";modeV="c";offset=true]
expected: FAIL expected:
if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": FAIL
[:format="depth32float";filt="linear";modeU="c";modeV="m";offset=false] [:format="depth32float";filt="linear";modeU="c";modeV="m";offset=false]
expected: FAIL expected:
if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": FAIL
[:format="depth32float";filt="linear";modeU="c";modeV="m";offset=true] [:format="depth32float";filt="linear";modeU="c";modeV="m";offset=true]
expected: expected:
@@ -1246,10 +1257,18 @@
if os == "mac": FAIL if os == "mac": FAIL
[:format="depth32float";filt="linear";modeU="c";modeV="r";offset=false] [:format="depth32float";filt="linear";modeU="c";modeV="r";offset=false]
expected: FAIL expected:
if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": FAIL
[:format="depth32float";filt="linear";modeU="c";modeV="r";offset=true] [:format="depth32float";filt="linear";modeU="c";modeV="r";offset=true]
expected: FAIL expected:
if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": FAIL
[:format="depth32float";filt="linear";modeU="m";modeV="c";offset=false] [:format="depth32float";filt="linear";modeU="m";modeV="c";offset=false]
expected: expected:
@@ -1360,10 +1379,18 @@
expected: FAIL expected: FAIL
[:format="depth32float";filt="nearest";modeU="m";modeV="m";offset=false] [:format="depth32float";filt="nearest";modeU="m";modeV="m";offset=false]
expected: FAIL expected:
if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": FAIL
[:format="depth32float";filt="nearest";modeU="m";modeV="m";offset=true] [:format="depth32float";filt="nearest";modeU="m";modeV="m";offset=true]
expected: FAIL expected:
if os == "win": FAIL
if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN]
if os == "linux" and not debug: FAIL
if os == "mac": FAIL
[:format="depth32float";filt="nearest";modeU="m";modeV="r";offset=false] [:format="depth32float";filt="nearest";modeU="m";modeV="r";offset=false]
expected: FAIL expected: FAIL

View File

@@ -25774,7 +25774,7 @@
tags: [webgpu, webgpu-long] tags: [webgpu, webgpu-long]
implementation-status: backlog implementation-status: backlog
expected: expected:
if os == "win" and debug: CRASH if os == "win": CRASH
if os == "linux" and debug: CRASH if os == "linux" and debug: CRASH
if os == "mac": CRASH if os == "mac": CRASH
[:stage="c";format="astc-10x10-unorm";filt="linear";modeU="c";modeV="c";offset=false] [:stage="c";format="astc-10x10-unorm";filt="linear";modeU="c";modeV="c";offset=false]

View File

@@ -1,7 +1,5 @@
[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureStore:bgra8unorm_swizzle:*] [cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureStore:bgra8unorm_swizzle:*]
implementation-status: backlog
[:] [:]
expected: FAIL
[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureStore:out_of_bounds:*] [cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureStore:out_of_bounds:*]

View File

@@ -1,16 +1,26 @@
[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,workgroupUniformLoad:types:*] [cts.https.html?q=webgpu:shader,execution,expression,call,builtin,workgroupUniformLoad:types:*]
implementation-status: backlog implementation-status:
if os == "win": backlog
if os == "mac": backlog
[:type="ComplexStruct";wgsize=[1,128\]] [:type="ComplexStruct";wgsize=[1,128\]]
expected: FAIL expected:
if os == "win": FAIL
if os == "mac": FAIL
[:type="ComplexStruct";wgsize=[1,1\]] [:type="ComplexStruct";wgsize=[1,1\]]
expected: FAIL expected:
if os == "win": FAIL
if os == "mac": FAIL
[:type="ComplexStruct";wgsize=[16,16\]] [:type="ComplexStruct";wgsize=[16,16\]]
expected: FAIL expected:
if os == "win": FAIL
if os == "mac": FAIL
[:type="ComplexStruct";wgsize=[3,7\]] [:type="ComplexStruct";wgsize=[3,7\]]
expected: FAIL expected:
if os == "win": FAIL
if os == "mac": FAIL
[:type="SimpleStruct";wgsize=[1,128\]] [:type="SimpleStruct";wgsize=[1,128\]]

View File

@@ -4,6 +4,7 @@
expected: expected:
if os == "win" and not debug: CRASH if os == "win" and not debug: CRASH
if os == "linux" and debug: [OK, CRASH] if os == "linux" and debug: [OK, CRASH]
if os == "linux" and not debug: CRASH
[:addressSpace="function";workgroupSize=[1,1,1\];batch__=0] [:addressSpace="function";workgroupSize=[1,1,1\];batch__=0]
expected: expected:
if os == "win" and debug: FAIL if os == "win" and debug: FAIL

View File

@@ -20,17 +20,14 @@
expected: FAIL expected: FAIL
[:case="override_oob_neg"] [:case="override_oob_neg"]
expected: FAIL
[:case="override_oob_pos"] [:case="override_oob_pos"]
expected: FAIL
[:case="runtime_array_const_oob_neg"] [:case="runtime_array_const_oob_neg"]
[:case="runtime_array_override_oob_neg"] [:case="runtime_array_override_oob_neg"]
[:case="runtime_in_bounds"] [:case="runtime_in_bounds"]
expected: FAIL
[:case="runtime_oob_neg"] [:case="runtime_oob_neg"]
expected: FAIL expected: FAIL

View File

@@ -20,17 +20,14 @@
expected: FAIL expected: FAIL
[:case="override_oob_neg"] [:case="override_oob_neg"]
expected: FAIL
[:case="override_oob_pos"] [:case="override_oob_pos"]
expected: FAIL
[:case="runtime_array_const_oob_neg"] [:case="runtime_array_const_oob_neg"]
[:case="runtime_array_override_oob_neg"] [:case="runtime_array_override_oob_neg"]
[:case="runtime_in_bounds"] [:case="runtime_in_bounds"]
expected: FAIL
[:case="runtime_oob_neg"] [:case="runtime_oob_neg"]
expected: FAIL expected: FAIL

View File

@@ -111,7 +111,6 @@
expected: FAIL expected: FAIL
[:op="%26%26";rhs="overflow";short_circuit=false] [:op="%26%26";rhs="overflow";short_circuit=false]
expected: FAIL
[:op="%26%26";rhs="overflow";short_circuit=true] [:op="%26%26";rhs="overflow";short_circuit=true]
expected: FAIL expected: FAIL
@@ -132,7 +131,6 @@
expected: FAIL expected: FAIL
[:op="%7C%7C";rhs="overflow";short_circuit=false] [:op="%7C%7C";rhs="overflow";short_circuit=false]
expected: FAIL
[:op="%7C%7C";rhs="overflow";short_circuit=true] [:op="%7C%7C";rhs="overflow";short_circuit=true]
expected: FAIL expected: FAIL
@@ -156,7 +154,6 @@
expected: FAIL expected: FAIL
[:op="%26%26";rhs="overflow";short_circuit=false] [:op="%26%26";rhs="overflow";short_circuit=false]
expected: FAIL
[:op="%26%26";rhs="overflow";short_circuit=true] [:op="%26%26";rhs="overflow";short_circuit=true]
expected: FAIL expected: FAIL
@@ -177,7 +174,6 @@
expected: FAIL expected: FAIL
[:op="%7C%7C";rhs="overflow";short_circuit=false] [:op="%7C%7C";rhs="overflow";short_circuit=false]
expected: FAIL
[:op="%7C%7C";rhs="overflow";short_circuit=true] [:op="%7C%7C";rhs="overflow";short_circuit=true]
expected: FAIL expected: FAIL

View File

@@ -1,5 +1,7 @@
[cts.https.html?q=webgpu:shader,validation,extension,readonly_and_readwrite_storage_textures:textureBarrier:*] [cts.https.html?q=webgpu:shader,validation,extension,readonly_and_readwrite_storage_textures:textureBarrier:*]
implementation-status: backlog
[:] [:]
expected: FAIL
[cts.https.html?q=webgpu:shader,validation,extension,readonly_and_readwrite_storage_textures:var_decl:*] [cts.https.html?q=webgpu:shader,validation,extension,readonly_and_readwrite_storage_textures:var_decl:*]

View File

@@ -58,10 +58,8 @@
[:inject="module"] [:inject="module"]
[:inject="none"] [:inject="none"]
expected: FAIL
[:inject="sibling"] [:inject="sibling"]
expected: FAIL
[cts.https.html?q=webgpu:shader,validation,parse,shadow_builtins:shadow_hides_builtin_f16:*] [cts.https.html?q=webgpu:shader,validation,parse,shadow_builtins:shadow_hides_builtin_f16:*]

View File

@@ -11,7 +11,8 @@
expected: expected:
if os == "win" and debug: [OK, ERROR] if os == "win" and debug: [OK, ERROR]
if os == "win" and not debug: ERROR if os == "win" and not debug: ERROR
if os == "linux": ERROR if os == "linux" and debug: [OK, ERROR]
if os == "linux" and not debug: ERROR
if os == "mac": ERROR if os == "mac": ERROR
[:canvasType="offscreen";prevFrameCallsite="requestAnimationFrame";getCurrentTextureAgain=false] [:canvasType="offscreen";prevFrameCallsite="requestAnimationFrame";getCurrentTextureAgain=false]

View File

@@ -352,9 +352,7 @@
[dedicated.https.html?worker=dedicated&q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_huge_size:*] [dedicated.https.html?worker=dedicated&q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_huge_size:*]
implementation-status: backlog
[:] [:]
expected: FAIL
[dedicated.https.html?worker=dedicated&q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_unconfigured_nonzero_size:*] [dedicated.https.html?worker=dedicated&q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_unconfigured_nonzero_size:*]
@@ -369,7 +367,6 @@
[dedicated.https.html?worker=dedicated&q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_zero_size:*] [dedicated.https.html?worker=dedicated&q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_zero_size:*]
implementation-status: backlog implementation-status: backlog
[:configure=false] [:configure=false]
expected: FAIL
[:configure=true] [:configure=true]
expected: FAIL expected: FAIL

View File

@@ -352,9 +352,7 @@
[shared.https.html?worker=shared&q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_huge_size:*] [shared.https.html?worker=shared&q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_huge_size:*]
implementation-status: backlog
[:] [:]
expected: FAIL
[shared.https.html?worker=shared&q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_unconfigured_nonzero_size:*] [shared.https.html?worker=shared&q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_unconfigured_nonzero_size:*]
@@ -369,7 +367,6 @@
[shared.https.html?worker=shared&q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_zero_size:*] [shared.https.html?worker=shared&q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_zero_size:*]
implementation-status: backlog implementation-status: backlog
[:configure=false] [:configure=false]
expected: FAIL
[:configure=true] [:configure=true]
expected: FAIL expected: FAIL

View File

@@ -796,6 +796,7 @@
[:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and debug: [TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN]
@@ -962,6 +963,7 @@
[:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN]
[:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false]
@@ -2815,6 +2817,7 @@
[:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false]
expected: expected:
if os == "win" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and debug: [TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN]
@@ -2985,6 +2988,7 @@
[:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN]
[:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false]

View File

@@ -964,6 +964,7 @@
[:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true]
expected: expected:
if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN]
[:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false]
@@ -1379,7 +1380,8 @@
if os == "win": [TIMEOUT, NOTRUN] if os == "win": [TIMEOUT, NOTRUN]
if os == "linux" and debug: [TIMEOUT, NOTRUN] if os == "linux" and debug: [TIMEOUT, NOTRUN]
if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN]
if os == "mac": [TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN]
if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN]
[:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false]
expected: expected:

File diff suppressed because one or more lines are too long

View File

@@ -11,7 +11,7 @@
[package] [package]
edition = "2021" edition = "2021"
rust-version = "1.76" rust-version = "1.82.0"
name = "naga" name = "naga"
version = "24.0.0" version = "24.0.0"
authors = ["gfx-rs developers"] authors = ["gfx-rs developers"]
@@ -104,7 +104,7 @@ version = "0.8"
default-features = false default-features = false
[dependencies.bitflags] [dependencies.bitflags]
version = "2.7" version = "2.9"
[dependencies.codespan-reporting] [dependencies.codespan-reporting]
version = "0.11.0" version = "0.11.0"
@@ -211,3 +211,8 @@ version = "2"
[build-dependencies.cfg_aliases] [build-dependencies.cfg_aliases]
version = "0.2.1" version = "0.2.1"
[lints.clippy]
alloc_instead_of_core = "warn"
std_instead_of_alloc = "warn"
std_instead_of_core = "warn"

View File

@@ -4,7 +4,7 @@
[![Crates.io](https://img.shields.io/crates/v/naga.svg?label=naga)](https://crates.io/crates/naga) [![Crates.io](https://img.shields.io/crates/v/naga.svg?label=naga)](https://crates.io/crates/naga)
[![Docs.rs](https://docs.rs/naga/badge.svg)](https://docs.rs/naga) [![Docs.rs](https://docs.rs/naga/badge.svg)](https://docs.rs/naga)
[![Build Status](https://github.com/gfx-rs/naga/workflows/pipeline/badge.svg)](https://github.com/gfx-rs/naga/actions) [![Build Status](https://github.com/gfx-rs/naga/workflows/pipeline/badge.svg)](https://github.com/gfx-rs/naga/actions)
![MSRV](https://img.shields.io/badge/rustc-1.76+-blue.svg) ![MSRV](https://img.shields.io/badge/rustc-1.82-blue.svg)
[![codecov.io](https://codecov.io/gh/gfx-rs/naga/branch/master/graph/badge.svg?token=9VOKYO8BM2)](https://codecov.io/gh/gfx-rs/naga) [![codecov.io](https://codecov.io/gh/gfx-rs/naga/branch/master/graph/badge.svg?token=9VOKYO8BM2)](https://codecov.io/gh/gfx-rs/naga)
The shader translation library for the needs of [wgpu](https://github.com/gfx-rs/wgpu). The shader translation library for the needs of [wgpu](https://github.com/gfx-rs/wgpu).

View File

@@ -5,7 +5,7 @@
//! [`Arena`]: super::Arena //! [`Arena`]: super::Arena
//! [`UniqueArena`]: super::UniqueArena //! [`UniqueArena`]: super::UniqueArena
use std::{cmp::Ordering, fmt, hash, marker::PhantomData}; use core::{cmp::Ordering, fmt, hash, marker::PhantomData};
/// An unique index in the arena array that a handle points to. /// An unique index in the arena array that a handle points to.
/// The "non-max" part ensures that an `Option<Handle<T>>` has /// The "non-max" part ensures that an `Option<Handle<T>>` has
@@ -22,7 +22,7 @@ pub struct BadHandle {
impl BadHandle { impl BadHandle {
pub fn new<T>(handle: Handle<T>) -> Self { pub fn new<T>(handle: Handle<T>) -> Self {
Self { Self {
kind: std::any::type_name::<T>(), kind: core::any::type_name::<T>(),
index: handle.index(), index: handle.index(),
} }
} }

View File

@@ -12,7 +12,7 @@ pub struct HandleSet<T> {
members: bit_set::BitSet, members: bit_set::BitSet,
/// This type is indexed by values of type `T`. /// This type is indexed by values of type `T`.
as_keys: std::marker::PhantomData<T>, as_keys: core::marker::PhantomData<T>,
} }
impl<T> HandleSet<T> { impl<T> HandleSet<T> {
@@ -21,7 +21,7 @@ impl<T> HandleSet<T> {
Self { Self {
len: 0, len: 0,
members: bit_set::BitSet::new(), members: bit_set::BitSet::new(),
as_keys: std::marker::PhantomData, as_keys: core::marker::PhantomData,
} }
} }
@@ -35,7 +35,7 @@ impl<T> HandleSet<T> {
Self { Self {
len, len,
members: bit_set::BitSet::with_capacity(len), members: bit_set::BitSet::with_capacity(len),
as_keys: std::marker::PhantomData, as_keys: core::marker::PhantomData,
} }
} }
@@ -103,7 +103,7 @@ impl<T> ArenaType<T> for Arena<T> {
} }
} }
impl<T: std::hash::Hash + Eq> ArenaType<T> for UniqueArena<T> { impl<T: core::hash::Hash + Eq> ArenaType<T> for UniqueArena<T> {
fn len(&self) -> usize { fn len(&self) -> usize {
self.len() self.len()
} }

View File

@@ -1,9 +1,10 @@
//! The [`HandleVec`] type and associated definitions. //! The [`HandleVec`] type and associated definitions.
use super::handle::Handle; use super::handle::Handle;
use alloc::{vec, vec::Vec};
use std::marker::PhantomData; use core::marker::PhantomData;
use std::ops; use core::ops;
/// A [`Vec`] indexed by [`Handle`]s. /// A [`Vec`] indexed by [`Handle`]s.
/// ///
@@ -17,7 +18,7 @@ use std::ops;
/// current length; otherwise, the insertion will panic. /// current length; otherwise, the insertion will panic.
/// ///
/// [`insert`]: HandleVec::insert /// [`insert`]: HandleVec::insert
/// [`HashMap::insert`]: std::collections::HashMap::insert /// [`HashMap::insert`]: hashbrown::HashMap::insert
#[derive(Debug)] #[derive(Debug)]
pub(crate) struct HandleVec<T, U> { pub(crate) struct HandleVec<T, U> {
inner: Vec<U>, inner: Vec<U>,
@@ -59,7 +60,7 @@ impl<T, U> HandleVec<T, U> {
/// the end, like [`Vec::push`]. So the index of `handle` must equal /// the end, like [`Vec::push`]. So the index of `handle` must equal
/// [`self.len()`]. /// [`self.len()`].
/// ///
/// [`HashMap`]: std::collections::HashMap /// [`HashMap`]: hashbrown::HashMap
/// [`self.len()`]: HandleVec::len /// [`self.len()`]: HandleVec::len
pub(crate) fn insert(&mut self, handle: Handle<T>, value: U) { pub(crate) fn insert(&mut self, handle: Handle<T>, value: U) {
assert_eq!(handle.index(), self.inner.len()); assert_eq!(handle.index(), self.inner.len());

View File

@@ -31,12 +31,13 @@ pub(crate) use handlevec::HandleVec;
pub use range::{BadRangeError, Range}; pub use range::{BadRangeError, Range};
pub use unique_arena::UniqueArena; pub use unique_arena::UniqueArena;
use alloc::vec::Vec;
use core::{fmt, ops};
use crate::Span; use crate::Span;
use handle::Index; use handle::Index;
use std::{fmt, ops};
/// An arena holding some kind of component (e.g., type, constant, /// An arena holding some kind of component (e.g., type, constant,
/// instruction, etc.) that can be referenced. /// instruction, etc.) that can be referenced.
/// ///
@@ -103,7 +104,7 @@ impl<T> Arena<T> {
/// Drains the arena, returning an iterator over the items stored. /// Drains the arena, returning an iterator over the items stored.
pub fn drain(&mut self) -> impl DoubleEndedIterator<Item = (Handle<T>, T, Span)> { pub fn drain(&mut self) -> impl DoubleEndedIterator<Item = (Handle<T>, T, Span)> {
let arena = std::mem::take(self); let arena = core::mem::take(self);
arena arena
.data .data
.into_iter() .into_iter()
@@ -258,7 +259,7 @@ where
D: serde::Deserializer<'de>, D: serde::Deserializer<'de>,
{ {
let data = Vec::deserialize(deserializer)?; let data = Vec::deserialize(deserializer)?;
let span_info = std::iter::repeat(Span::default()) let span_info = core::iter::repeat(Span::default())
.take(data.len()) .take(data.len())
.collect(); .collect();

View File

@@ -5,13 +5,13 @@
//! //!
//! [`Arena`]: super::Arena //! [`Arena`]: super::Arena
use core::{fmt, marker::PhantomData, ops};
use super::{ use super::{
handle::{Handle, Index}, handle::{Handle, Index},
Arena, Arena,
}; };
use std::{fmt, marker::PhantomData, ops};
/// A strongly typed range of handles. /// A strongly typed range of handles.
#[cfg_attr(feature = "serialize", derive(serde::Serialize))] #[cfg_attr(feature = "serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))] #[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
@@ -51,7 +51,7 @@ pub struct BadRangeError {
impl BadRangeError { impl BadRangeError {
pub fn new<T>(range: Range<T>) -> Self { pub fn new<T>(range: Range<T>) -> Self {
Self { Self {
kind: std::any::type_name::<T>(), kind: core::any::type_name::<T>(),
range: range.erase_type(), range: range.erase_type(),
} }
} }

View File

@@ -1,10 +1,10 @@
//! The [`UniqueArena`] type and supporting definitions. //! The [`UniqueArena`] type and supporting definitions.
use crate::{FastIndexSet, Span}; use alloc::vec::Vec;
use core::{fmt, hash, ops};
use super::handle::{BadHandle, Handle, Index}; use super::handle::{BadHandle, Handle, Index};
use crate::{FastIndexSet, Span};
use std::{fmt, hash, ops};
/// An arena whose elements are guaranteed to be unique. /// An arena whose elements are guaranteed to be unique.
/// ///
@@ -84,7 +84,7 @@ impl<T> UniqueArena<T> {
#[cfg(feature = "compact")] #[cfg(feature = "compact")]
pub struct UniqueArenaDrain<'a, T> { pub struct UniqueArenaDrain<'a, T> {
inner_elts: indexmap::set::Drain<'a, T>, inner_elts: indexmap::set::Drain<'a, T>,
inner_spans: std::vec::Drain<'a, Span>, inner_spans: alloc::vec::Drain<'a, Span>,
index: Index, index: Index,
} }
@@ -224,7 +224,9 @@ where
D: serde::Deserializer<'de>, D: serde::Deserializer<'de>,
{ {
let set = FastIndexSet::deserialize(deserializer)?; let set = FastIndexSet::deserialize(deserializer)?;
let span_info = std::iter::repeat(Span::default()).take(set.len()).collect(); let span_info = core::iter::repeat(Span::default())
.take(set.len())
.collect();
Ok(Self { set, span_info }) Ok(Self { set, span_info })
} }

View File

@@ -59,8 +59,9 @@
//! [`Switch`]: crate::Statement::Switch //! [`Switch`]: crate::Statement::Switch
//! [`SwitchCase`]: crate::SwitchCase //! [`SwitchCase`]: crate::SwitchCase
use alloc::{rc::Rc, string::String, vec::Vec};
use crate::proc::Namer; use crate::proc::Namer;
use std::rc::Rc;
/// A summary of the code surrounding a statement. /// A summary of the code surrounding a statement.
enum Nesting { enum Nesting {

View File

@@ -7,16 +7,19 @@ of IR inspection and debugging.
[dot]: https://graphviz.org/doc/info/lang.html [dot]: https://graphviz.org/doc/info/lang.html
*/ */
use alloc::{
borrow::Cow,
format,
string::{String, ToString},
vec::Vec,
};
use core::fmt::{Error as FmtError, Write as _};
use crate::{ use crate::{
arena::Handle, arena::Handle,
valid::{FunctionInfo, ModuleInfo}, valid::{FunctionInfo, ModuleInfo},
}; };
use std::{
borrow::Cow,
fmt::{Error as FmtError, Write as _},
};
/// Configuration options for the dot backend /// Configuration options for the dot backend
#[derive(Clone, Default)] #[derive(Clone, Default)]
pub struct Options { pub struct Options {
@@ -412,26 +415,26 @@ const COLORS: &[&str] = &[
struct Prefixed<T>(Handle<T>); struct Prefixed<T>(Handle<T>);
impl std::fmt::Display for Prefixed<crate::Expression> { impl core::fmt::Display for Prefixed<crate::Expression> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
self.0.write_prefixed(f, "e") self.0.write_prefixed(f, "e")
} }
} }
impl std::fmt::Display for Prefixed<crate::LocalVariable> { impl core::fmt::Display for Prefixed<crate::LocalVariable> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
self.0.write_prefixed(f, "l") self.0.write_prefixed(f, "l")
} }
} }
impl std::fmt::Display for Prefixed<crate::GlobalVariable> { impl core::fmt::Display for Prefixed<crate::GlobalVariable> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
self.0.write_prefixed(f, "g") self.0.write_prefixed(f, "g")
} }
} }
impl std::fmt::Display for Prefixed<crate::Function> { impl core::fmt::Display for Prefixed<crate::Function> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
self.0.write_prefixed(f, "f") self.0.write_prefixed(f, "f")
} }
} }
@@ -724,6 +727,11 @@ fn write_function_expressions(
} }
E::SubgroupBallotResult => ("SubgroupBallotResult".into(), 4), E::SubgroupBallotResult => ("SubgroupBallotResult".into(), 4),
E::SubgroupOperationResult { .. } => ("SubgroupOperationResult".into(), 4), E::SubgroupOperationResult { .. } => ("SubgroupOperationResult".into(), 4),
E::RayQueryVertexPositions { query, committed } => {
edges.insert("", query);
let ty = if committed { "Committed" } else { "Candidate" };
(format!("get{}HitVertexPositions", ty).into(), 4)
}
}; };
// give uniform expressions an outline // give uniform expressions an outline
@@ -793,7 +801,7 @@ pub fn write(
mod_info: Option<&ModuleInfo>, mod_info: Option<&ModuleInfo>,
options: Options, options: Options,
) -> Result<String, FmtError> { ) -> Result<String, FmtError> {
use std::fmt::Write as _; use core::fmt::Write as _;
let mut output = String::new(); let mut output = String::new();
output += "digraph Module {\n"; output += "digraph Module {\n";

View File

@@ -1,10 +1,11 @@
use core::fmt::Write;
use super::{BackendResult, Error, Version, Writer}; use super::{BackendResult, Error, Version, Writer};
use crate::{ use crate::{
back::glsl::{Options, WriterFlags}, back::glsl::{Options, WriterFlags},
AddressSpace, Binding, Expression, Handle, ImageClass, ImageDimension, Interpolation, AddressSpace, Binding, Expression, Handle, ImageClass, ImageDimension, Interpolation,
SampleLevel, Sampling, Scalar, ScalarKind, ShaderStage, StorageFormat, Type, TypeInner, SampleLevel, Sampling, Scalar, ScalarKind, ShaderStage, StorageFormat, Type, TypeInner,
}; };
use std::fmt::Write;
bitflags::bitflags! { bitflags::bitflags! {
/// Structure used to encode additions to GLSL that aren't supported by all versions. /// Structure used to encode additions to GLSL that aren't supported by all versions.
@@ -462,7 +463,7 @@ impl<W> Writer<'_, W> {
.functions .functions
.iter() .iter()
.map(|(h, f)| (&f.expressions, &info[h])) .map(|(h, f)| (&f.expressions, &info[h]))
.chain(std::iter::once(( .chain(core::iter::once((
&entry_point.function.expressions, &entry_point.function.expressions,
info.get_entry_point(entry_point_idx as usize), info.get_entry_point(entry_point_idx as usize),
))) )))
@@ -559,7 +560,7 @@ impl<W> Writer<'_, W> {
.functions .functions
.iter() .iter()
.map(|(_, f)| &f.body) .map(|(_, f)| &f.body)
.chain(std::iter::once(&entry_point.function.body)) .chain(core::iter::once(&entry_point.function.body))
{ {
for (stmt, _) in blocks.span_iter() { for (stmt, _) in blocks.span_iter() {
match *stmt { match *stmt {

View File

@@ -45,20 +45,30 @@ to output a [`Module`](crate::Module) into glsl
pub use features::Features; pub use features::Features;
use crate::{ use alloc::{
back::{self, Baked}, borrow::ToOwned,
proc::{self, ExpressionKindTracker, NameKey}, format,
valid, Handle, ShaderStage, TypeInner, string::{String, ToString},
vec,
vec::Vec,
}; };
use features::FeaturesManager; use core::{
use hashbrown::hash_map;
use std::{
cmp::Ordering, cmp::Ordering,
fmt::{self, Error as FmtError, Write}, fmt::{self, Error as FmtError, Write},
mem, mem,
}; };
use hashbrown::hash_map;
use thiserror::Error; use thiserror::Error;
use crate::{
back::{self, Baked},
common,
proc::{self, ExpressionKindTracker, NameKey},
valid, Handle, ShaderStage, TypeInner,
};
use features::FeaturesManager;
/// Contains the features related code and the features querying method /// Contains the features related code and the features querying method
mod features; mod features;
/// Contains a constant with a slice of all the reserved keywords RESERVED_KEYWORDS /// Contains a constant with a slice of all the reserved keywords RESERVED_KEYWORDS
@@ -102,7 +112,7 @@ where
} }
/// Mapping between resources and bindings. /// Mapping between resources and bindings.
pub type BindingMap = std::collections::BTreeMap<crate::ResourceBinding, u8>; pub type BindingMap = alloc::collections::BTreeMap<crate::ResourceBinding, u8>;
impl crate::AtomicFunction { impl crate::AtomicFunction {
const fn to_glsl(self) -> &'static str { const fn to_glsl(self) -> &'static str {
@@ -320,7 +330,7 @@ pub struct PipelineOptions {
/// If no entry point that matches is found while creating a [`Writer`], a error will be thrown. /// If no entry point that matches is found while creating a [`Writer`], a error will be thrown.
pub entry_point: String, pub entry_point: String,
/// How many views to render to, if doing multiview rendering. /// How many views to render to, if doing multiview rendering.
pub multiview: Option<std::num::NonZeroU32>, pub multiview: Option<core::num::NonZeroU32>,
} }
#[derive(Debug)] #[derive(Debug)]
@@ -582,7 +592,7 @@ pub struct Writer<'a, W> {
/// transformed to `do {} while(false);` loops. /// transformed to `do {} while(false);` loops.
continue_ctx: back::continue_forward::ContinueCtx, continue_ctx: back::continue_forward::ContinueCtx,
/// How many views to render to, if doing multiview rendering. /// How many views to render to, if doing multiview rendering.
multiview: Option<std::num::NonZeroU32>, multiview: Option<core::num::NonZeroU32>,
/// Mapping of varying variables to their location. Needed for reflections. /// Mapping of varying variables to their location. Needed for reflections.
varying: crate::FastHashMap<String, VaryingLocation>, varying: crate::FastHashMap<String, VaryingLocation>,
} }
@@ -1073,8 +1083,8 @@ impl<'a, W: Write> Writer<'a, W> {
| TypeInner::Struct { .. } | TypeInner::Struct { .. }
| TypeInner::Image { .. } | TypeInner::Image { .. }
| TypeInner::Sampler { .. } | TypeInner::Sampler { .. }
| TypeInner::AccelerationStructure | TypeInner::AccelerationStructure { .. }
| TypeInner::RayQuery | TypeInner::RayQuery { .. }
| TypeInner::BindingArray { .. } => { | TypeInner::BindingArray { .. } => {
return Err(Error::Custom(format!("Unable to write type {inner:?}"))) return Err(Error::Custom(format!("Unable to write type {inner:?}")))
} }
@@ -2203,8 +2213,7 @@ impl<'a, W: Write> Writer<'a, W> {
self.write_stmt(sta, ctx, l2.next())?; self.write_stmt(sta, ctx, l2.next())?;
} }
if !case.fall_through if !case.fall_through && case.body.last().is_none_or(|s| !s.is_terminator())
&& case.body.last().map_or(true, |s| !s.is_terminator())
{ {
writeln!(self.out, "{}break;", l2.next())?; writeln!(self.out, "{}break;", l2.next())?;
} }
@@ -3438,7 +3447,7 @@ impl<'a, W: Write> Writer<'a, W> {
TypeInner::Vector { size, .. } => write!( TypeInner::Vector { size, .. } => write!(
self.out, self.out,
", vec{}(0.0), vec{0}(1.0)", ", vec{}(0.0), vec{0}(1.0)",
back::vector_size_str(size) common::vector_size_str(size)
)?, )?,
_ => write!(self.out, ", 0.0, 1.0")?, _ => write!(self.out, ", 0.0, 1.0")?,
} }
@@ -3585,7 +3594,7 @@ impl<'a, W: Write> Writer<'a, W> {
Mf::CountTrailingZeros => { Mf::CountTrailingZeros => {
match *ctx.resolve_type(arg, &self.module.types) { match *ctx.resolve_type(arg, &self.module.types) {
TypeInner::Vector { size, scalar, .. } => { TypeInner::Vector { size, scalar, .. } => {
let s = back::vector_size_str(size); let s = common::vector_size_str(size);
if let crate::ScalarKind::Uint = scalar.kind { if let crate::ScalarKind::Uint = scalar.kind {
write!(self.out, "min(uvec{s}(findLSB(")?; write!(self.out, "min(uvec{s}(findLSB(")?;
self.write_expr(arg, ctx)?; self.write_expr(arg, ctx)?;
@@ -3615,7 +3624,7 @@ impl<'a, W: Write> Writer<'a, W> {
if self.options.version.supports_integer_functions() { if self.options.version.supports_integer_functions() {
match *ctx.resolve_type(arg, &self.module.types) { match *ctx.resolve_type(arg, &self.module.types) {
TypeInner::Vector { size, scalar } => { TypeInner::Vector { size, scalar } => {
let s = back::vector_size_str(size); let s = common::vector_size_str(size);
if let crate::ScalarKind::Uint = scalar.kind { if let crate::ScalarKind::Uint = scalar.kind {
write!(self.out, "uvec{s}(ivec{s}(31) - findMSB(")?; write!(self.out, "uvec{s}(ivec{s}(31) - findMSB(")?;
@@ -3646,7 +3655,7 @@ impl<'a, W: Write> Writer<'a, W> {
} else { } else {
match *ctx.resolve_type(arg, &self.module.types) { match *ctx.resolve_type(arg, &self.module.types) {
TypeInner::Vector { size, scalar } => { TypeInner::Vector { size, scalar } => {
let s = back::vector_size_str(size); let s = common::vector_size_str(size);
if let crate::ScalarKind::Uint = scalar.kind { if let crate::ScalarKind::Uint = scalar.kind {
write!(self.out, "uvec{s}(")?; write!(self.out, "uvec{s}(")?;
@@ -4009,7 +4018,8 @@ impl<'a, W: Write> Writer<'a, W> {
write!(self.out, ".length())")? write!(self.out, ".length())")?
} }
// not supported yet // not supported yet
Expression::RayQueryGetIntersection { .. } => unreachable!(), Expression::RayQueryGetIntersection { .. }
| Expression::RayQueryVertexPositions { .. } => unreachable!(),
} }
Ok(()) Ok(())
@@ -4629,6 +4639,9 @@ impl<'a, W: Write> Writer<'a, W> {
if flags.contains(crate::Barrier::SUB_GROUP) { if flags.contains(crate::Barrier::SUB_GROUP) {
writeln!(self.out, "{level}subgroupMemoryBarrier();")?; writeln!(self.out, "{level}subgroupMemoryBarrier();")?;
} }
if flags.contains(crate::Barrier::TEXTURE) {
writeln!(self.out, "{level}memoryBarrierImage();")?;
}
writeln!(self.out, "{level}barrier();")?; writeln!(self.out, "{level}barrier();")?;
Ok(()) Ok(())
} }

View File

@@ -1,8 +1,9 @@
use std::borrow::Cow; use crate::common;
use crate::proc::Alignment; use alloc::{borrow::Cow, format, string::String};
use super::Error; use super::Error;
use crate::proc::Alignment;
impl crate::ScalarKind { impl crate::ScalarKind {
pub(super) fn to_hlsl_cast(self) -> &'static str { pub(super) fn to_hlsl_cast(self) -> &'static str {
@@ -89,7 +90,7 @@ impl crate::TypeInner {
crate::TypeInner::Vector { size, scalar } => Cow::Owned(format!( crate::TypeInner::Vector { size, scalar } => Cow::Owned(format!(
"{}{}", "{}{}",
scalar.to_hlsl_str()?, scalar.to_hlsl_str()?,
crate::back::vector_size_str(size) common::vector_size_str(size)
)), )),
crate::TypeInner::Matrix { crate::TypeInner::Matrix {
columns, columns,
@@ -98,8 +99,8 @@ impl crate::TypeInner {
} => Cow::Owned(format!( } => Cow::Owned(format!(
"{}{}x{}", "{}{}x{}",
scalar.to_hlsl_str()?, scalar.to_hlsl_str()?,
crate::back::vector_size_str(columns), common::vector_size_str(columns),
crate::back::vector_size_str(rows), common::vector_size_str(rows),
)), )),
crate::TypeInner::Array { crate::TypeInner::Array {
base, base,

View File

@@ -26,16 +26,18 @@ int dim_1d = NagaDimensions1D(image_1d);
``` ```
*/ */
use alloc::format;
use core::fmt::Write;
use super::{ use super::{
super::FunctionCtx, super::FunctionCtx,
writer::{ writer::{
ABS_FUNCTION, DIV_FUNCTION, EXTRACT_BITS_FUNCTION, INSERT_BITS_FUNCTION, MOD_FUNCTION, ABS_FUNCTION, DIV_FUNCTION, EXTRACT_BITS_FUNCTION, INSERT_BITS_FUNCTION, MOD_FUNCTION,
NEG_FUNCTION, NEG_FUNCTION,
}, },
BackendResult, BackendResult, WrappedType,
}; };
use crate::{arena::Handle, proc::NameKey, ScalarKind}; use crate::{arena::Handle, proc::NameKey, ScalarKind};
use std::fmt::Write;
#[derive(Clone, Copy, Debug, Hash, Eq, Ord, PartialEq, PartialOrd)] #[derive(Clone, Copy, Debug, Hash, Eq, Ord, PartialEq, PartialOrd)]
pub(super) struct WrappedArrayLength { pub(super) struct WrappedArrayLength {
@@ -937,7 +939,7 @@ impl<W: Write> super::Writer<'_, W> {
match module.types[ty].inner { match module.types[ty].inner {
crate::TypeInner::Struct { .. } | crate::TypeInner::Array { .. } => { crate::TypeInner::Struct { .. } | crate::TypeInner::Array { .. } => {
let constructor = WrappedConstructor { ty }; let constructor = WrappedConstructor { ty };
if self.wrapped.constructors.insert(constructor) { if self.wrapped.insert(WrappedType::Constructor(constructor)) {
self.write_wrapped_constructor_function(module, constructor)?; self.write_wrapped_constructor_function(module, constructor)?;
} }
} }
@@ -953,7 +955,7 @@ impl<W: Write> super::Writer<'_, W> {
} => { } => {
if format.single_component() { if format.single_component() {
let scalar: crate::Scalar = format.into(); let scalar: crate::Scalar = format.into();
if self.wrapped.image_load_scalars.insert(scalar) { if self.wrapped.insert(WrappedType::ImageLoadScalar(scalar)) {
self.write_loaded_scalar_to_storage_loaded_value(scalar)?; self.write_loaded_scalar_to_storage_loaded_value(scalar)?;
} }
} }
@@ -989,7 +991,7 @@ impl<W: Write> super::Writer<'_, W> {
for (handle, _) in expressions.iter() { for (handle, _) in expressions.iter() {
if let crate::Expression::ZeroValue(ty) = expressions[handle] { if let crate::Expression::ZeroValue(ty) = expressions[handle] {
let zero_value = WrappedZeroValue { ty }; let zero_value = WrappedZeroValue { ty };
if self.wrapped.zero_values.insert(zero_value) { if self.wrapped.insert(WrappedType::ZeroValue(zero_value)) {
self.write_wrapped_zero_value_function(module, zero_value)?; self.write_wrapped_zero_value_function(module, zero_value)?;
} }
} }
@@ -1036,7 +1038,7 @@ impl<W: Write> super::Writer<'_, W> {
components, components,
}; };
if !self.wrapped.math.insert(wrapped) { if !self.wrapped.insert(WrappedType::Math(wrapped)) {
continue; continue;
} }
@@ -1078,7 +1080,7 @@ impl<W: Write> super::Writer<'_, W> {
components, components,
}; };
if !self.wrapped.math.insert(wrapped) { if !self.wrapped.insert(WrappedType::Math(wrapped)) {
continue; continue;
} }
@@ -1147,7 +1149,7 @@ impl<W: Write> super::Writer<'_, W> {
components, components,
}; };
if !self.wrapped.math.insert(wrapped) { if !self.wrapped.insert(WrappedType::Math(wrapped)) {
continue; continue;
} }
@@ -1198,7 +1200,7 @@ impl<W: Write> super::Writer<'_, W> {
// find another solution for different bit-widths. // find another solution for different bit-widths.
match (op, scalar) { match (op, scalar) {
(crate::UnaryOperator::Negate, crate::Scalar::I32) => { (crate::UnaryOperator::Negate, crate::Scalar::I32) => {
if !self.wrapped.unary_op.insert(wrapped) { if !self.wrapped.insert(WrappedType::UnaryOp(wrapped)) {
continue; continue;
} }
@@ -1259,7 +1261,7 @@ impl<W: Write> super::Writer<'_, W> {
left_ty: left_wrapped_ty, left_ty: left_wrapped_ty,
right_ty: right_wrapped_ty, right_ty: right_wrapped_ty,
}; };
if !self.wrapped.binary_op.insert(wrapped) { if !self.wrapped.insert(WrappedType::BinaryOp(wrapped)) {
continue; continue;
} }
@@ -1315,7 +1317,7 @@ impl<W: Write> super::Writer<'_, W> {
left_ty: left_wrapped_ty, left_ty: left_wrapped_ty,
right_ty: right_wrapped_ty, right_ty: right_wrapped_ty,
}; };
if !self.wrapped.binary_op.insert(wrapped) { if !self.wrapped.insert(WrappedType::BinaryOp(wrapped)) {
continue; continue;
} }
@@ -1391,7 +1393,7 @@ impl<W: Write> super::Writer<'_, W> {
writable: storage_access.contains(crate::StorageAccess::STORE), writable: storage_access.contains(crate::StorageAccess::STORE),
}; };
if self.wrapped.array_lengths.insert(wal) { if self.wrapped.insert(WrappedType::ArrayLength(wal)) {
self.write_wrapped_array_length_function(wal)?; self.write_wrapped_array_length_function(wal)?;
} }
} }
@@ -1410,7 +1412,7 @@ impl<W: Write> super::Writer<'_, W> {
_ => unreachable!("we only query images"), _ => unreachable!("we only query images"),
}; };
if self.wrapped.image_queries.insert(wiq) { if self.wrapped.insert(WrappedType::ImageQuery(wiq)) {
self.write_wrapped_image_query_function(module, wiq, handle, func_ctx)?; self.write_wrapped_image_query_function(module, wiq, handle, func_ctx)?;
} }
} }
@@ -1439,7 +1441,7 @@ impl<W: Write> super::Writer<'_, W> {
} }
let constructor = WrappedConstructor { ty }; let constructor = WrappedConstructor { ty };
if writer.wrapped.constructors.insert(constructor) { if writer.wrapped.insert(WrappedType::Constructor(constructor)) {
writer writer
.write_wrapped_constructor_function(module, constructor)?; .write_wrapped_constructor_function(module, constructor)?;
} }
@@ -1448,7 +1450,7 @@ impl<W: Write> super::Writer<'_, W> {
write_wrapped_constructor(writer, base, module)?; write_wrapped_constructor(writer, base, module)?;
let constructor = WrappedConstructor { ty }; let constructor = WrappedConstructor { ty };
if writer.wrapped.constructors.insert(constructor) { if writer.wrapped.insert(WrappedType::Constructor(constructor)) {
writer writer
.write_wrapped_constructor_function(module, constructor)?; .write_wrapped_constructor_function(module, constructor)?;
} }
@@ -1484,7 +1486,7 @@ impl<W: Write> super::Writer<'_, W> {
let ty = base_ty_handle.unwrap(); let ty = base_ty_handle.unwrap();
let access = WrappedStructMatrixAccess { ty, index }; let access = WrappedStructMatrixAccess { ty, index };
if self.wrapped.struct_matrix_access.insert(access) { if self.wrapped.insert(WrappedType::StructMatrixAccess(access)) {
self.write_wrapped_struct_matrix_get_function(module, access)?; self.write_wrapped_struct_matrix_get_function(module, access)?;
self.write_wrapped_struct_matrix_set_function(module, access)?; self.write_wrapped_struct_matrix_set_function(module, access)?;
self.write_wrapped_struct_matrix_set_vec_function( self.write_wrapped_struct_matrix_set_vec_function(
@@ -1713,7 +1715,7 @@ impl<W: Write> super::Writer<'_, W> {
}) = super::writer::get_inner_matrix_data(module, global.ty) }) = super::writer::get_inner_matrix_data(module, global.ty)
{ {
let entry = WrappedMatCx2 { columns }; let entry = WrappedMatCx2 { columns };
if self.wrapped.mat_cx2s.insert(entry) { if self.wrapped.insert(WrappedType::MatCx2(entry)) {
self.write_mat_cx2_typedef_and_functions(entry)?; self.write_mat_cx2_typedef_and_functions(entry)?;
} }
} }
@@ -1731,7 +1733,7 @@ impl<W: Write> super::Writer<'_, W> {
}) = super::writer::get_inner_matrix_data(module, member.ty) }) = super::writer::get_inner_matrix_data(module, member.ty)
{ {
let entry = WrappedMatCx2 { columns }; let entry = WrappedMatCx2 { columns };
if self.wrapped.mat_cx2s.insert(entry) { if self.wrapped.insert(WrappedType::MatCx2(entry)) {
self.write_mat_cx2_typedef_and_functions(entry)?; self.write_mat_cx2_typedef_and_functions(entry)?;
} }
} }

View File

@@ -114,7 +114,9 @@ mod ray;
mod storage; mod storage;
mod writer; mod writer;
use std::fmt::Error as FmtError; use alloc::{string::String, vec::Vec};
use core::fmt::Error as FmtError;
use thiserror::Error; use thiserror::Error;
use crate::{back, proc}; use crate::{back, proc};
@@ -172,7 +174,7 @@ where
} }
// Using `BTreeMap` instead of `HashMap` so that we can hash itself. // Using `BTreeMap` instead of `HashMap` so that we can hash itself.
pub type BindingMap = std::collections::BTreeMap<crate::ResourceBinding, BindTarget>; pub type BindingMap = alloc::collections::BTreeMap<crate::ResourceBinding, BindTarget>;
/// A HLSL shader model version. /// A HLSL shader model version.
#[allow(non_snake_case, non_camel_case_types)] #[allow(non_snake_case, non_camel_case_types)]
@@ -296,7 +298,7 @@ where
// We use a BTreeMap here so that we can hash it. // We use a BTreeMap here so that we can hash it.
pub type SamplerIndexBufferBindingMap = pub type SamplerIndexBufferBindingMap =
std::collections::BTreeMap<SamplerIndexBufferKey, BindTarget>; alloc::collections::BTreeMap<SamplerIndexBufferKey, BindTarget>;
#[cfg_attr(feature = "serialize", derive(serde::Serialize))] #[cfg_attr(feature = "serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))] #[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
@@ -322,7 +324,7 @@ where
Ok(map) Ok(map)
} }
pub type DynamicStorageBufferOffsetsTargets = std::collections::BTreeMap<u32, OffsetsBindTarget>; pub type DynamicStorageBufferOffsetsTargets = alloc::collections::BTreeMap<u32, OffsetsBindTarget>;
/// Shorthand result used internally by the backend /// Shorthand result used internally by the backend
type BackendResult = Result<(), Error>; type BackendResult = Result<(), Error>;
@@ -387,9 +389,9 @@ impl Default for Options {
fake_missing_bindings: true, fake_missing_bindings: true,
special_constants_binding: None, special_constants_binding: None,
sampler_heap_target: SamplerHeapBindTargets::default(), sampler_heap_target: SamplerHeapBindTargets::default(),
sampler_buffer_binding_map: std::collections::BTreeMap::default(), sampler_buffer_binding_map: alloc::collections::BTreeMap::default(),
push_constants_target: None, push_constants_target: None,
dynamic_storage_buffer_offsets_targets: std::collections::BTreeMap::new(), dynamic_storage_buffer_offsets_targets: alloc::collections::BTreeMap::new(),
zero_initialize_workgroup_memory: true, zero_initialize_workgroup_memory: true,
restrict_indexing: true, restrict_indexing: true,
force_loop_bounding: true, force_loop_bounding: true,
@@ -442,18 +444,23 @@ pub enum Error {
Override, Override,
} }
#[derive(PartialEq, Eq, Hash)]
enum WrappedType {
ZeroValue(help::WrappedZeroValue),
ArrayLength(help::WrappedArrayLength),
ImageQuery(help::WrappedImageQuery),
ImageLoadScalar(crate::Scalar),
Constructor(help::WrappedConstructor),
StructMatrixAccess(help::WrappedStructMatrixAccess),
MatCx2(help::WrappedMatCx2),
Math(help::WrappedMath),
UnaryOp(help::WrappedUnaryOp),
BinaryOp(help::WrappedBinaryOp),
}
#[derive(Default)] #[derive(Default)]
struct Wrapped { struct Wrapped {
zero_values: crate::FastHashSet<help::WrappedZeroValue>, types: crate::FastHashSet<WrappedType>,
array_lengths: crate::FastHashSet<help::WrappedArrayLength>,
image_queries: crate::FastHashSet<help::WrappedImageQuery>,
image_load_scalars: crate::FastHashSet<crate::Scalar>,
constructors: crate::FastHashSet<help::WrappedConstructor>,
struct_matrix_access: crate::FastHashSet<help::WrappedStructMatrixAccess>,
mat_cx2s: crate::FastHashSet<help::WrappedMatCx2>,
math: crate::FastHashSet<help::WrappedMath>,
unary_op: crate::FastHashSet<help::WrappedUnaryOp>,
binary_op: crate::FastHashSet<help::WrappedBinaryOp>,
/// If true, the sampler heaps have been written out. /// If true, the sampler heaps have been written out.
sampler_heaps: bool, sampler_heaps: bool,
// Mapping from SamplerIndexBufferKey to the name the namer returned. // Mapping from SamplerIndexBufferKey to the name the namer returned.
@@ -461,15 +468,12 @@ struct Wrapped {
} }
impl Wrapped { impl Wrapped {
fn insert(&mut self, r#type: WrappedType) -> bool {
self.types.insert(r#type)
}
fn clear(&mut self) { fn clear(&mut self) {
self.array_lengths.clear(); self.types.clear();
self.image_queries.clear();
self.constructors.clear();
self.struct_matrix_access.clear();
self.mat_cx2s.clear();
self.math.clear();
self.unary_op.clear();
self.binary_op.clear();
} }
} }

View File

@@ -1,6 +1,7 @@
use core::fmt::Write;
use crate::back::hlsl::BackendResult; use crate::back::hlsl::BackendResult;
use crate::{RayQueryIntersection, TypeInner}; use crate::{RayQueryIntersection, TypeInner};
use std::fmt::Write;
impl<W: Write> super::Writer<'_, W> { impl<W: Write> super::Writer<'_, W> {
// constructs hlsl RayDesc from wgsl RayDesc // constructs hlsl RayDesc from wgsl RayDesc
@@ -27,7 +28,12 @@ impl<W: Write> super::Writer<'_, W> {
) -> BackendResult { ) -> BackendResult {
self.write_type(module, module.special_types.ray_intersection.unwrap())?; self.write_type(module, module.special_types.ray_intersection.unwrap())?;
write!(self.out, " GetCommittedIntersection(")?; write!(self.out, " GetCommittedIntersection(")?;
self.write_value_type(module, &TypeInner::RayQuery)?; self.write_value_type(
module,
&TypeInner::RayQuery {
vertex_return: false,
},
)?;
writeln!(self.out, " rq) {{")?; writeln!(self.out, " rq) {{")?;
write!(self.out, " ")?; write!(self.out, " ")?;
self.write_type(module, module.special_types.ray_intersection.unwrap())?; self.write_type(module, module.special_types.ray_intersection.unwrap())?;
@@ -93,7 +99,12 @@ impl<W: Write> super::Writer<'_, W> {
) -> BackendResult { ) -> BackendResult {
self.write_type(module, module.special_types.ray_intersection.unwrap())?; self.write_type(module, module.special_types.ray_intersection.unwrap())?;
write!(self.out, " GetCandidateIntersection(")?; write!(self.out, " GetCandidateIntersection(")?;
self.write_value_type(module, &TypeInner::RayQuery)?; self.write_value_type(
module,
&TypeInner::RayQuery {
vertex_return: false,
},
)?;
writeln!(self.out, " rq) {{")?; writeln!(self.out, " rq) {{")?;
write!(self.out, " ")?; write!(self.out, " ")?;
self.write_type(module, module.special_types.ray_intersection.unwrap())?; self.write_type(module, module.special_types.ray_intersection.unwrap())?;

View File

@@ -55,14 +55,15 @@ correct type if necessary.
[`Load` and `Store`]: https://github.com/microsoft/DirectXShaderCompiler/wiki/ByteAddressBuffer-Load-Store-Additions [`Load` and `Store`]: https://github.com/microsoft/DirectXShaderCompiler/wiki/ByteAddressBuffer-Load-Store-Additions
*/ */
use alloc::format;
use core::{fmt, mem};
use super::{super::FunctionCtx, BackendResult, Error}; use super::{super::FunctionCtx, BackendResult, Error};
use crate::{ use crate::{
proc::{Alignment, NameKey, TypeResolution}, proc::{Alignment, NameKey, TypeResolution},
Handle, Handle,
}; };
use std::{fmt, mem};
const STORE_TEMP_NAME: &str = "_value"; const STORE_TEMP_NAME: &str = "_value";
/// One step in accessing a [`Storage`] global's component or element. /// One step in accessing a [`Storage`] global's component or element.

View File

@@ -1,3 +1,10 @@
use alloc::{
format,
string::{String, ToString},
vec::Vec,
};
use core::{fmt, mem};
use super::{ use super::{
help, help,
help::{ help::{
@@ -9,10 +16,10 @@ use super::{
}; };
use crate::{ use crate::{
back::{self, Baked}, back::{self, Baked},
common,
proc::{self, index, ExpressionKindTracker, NameKey}, proc::{self, index, ExpressionKindTracker, NameKey},
valid, Handle, Module, RayQueryFunction, Scalar, ScalarKind, ShaderStage, TypeInner, valid, Handle, Module, RayQueryFunction, Scalar, ScalarKind, ShaderStage, TypeInner,
}; };
use std::{fmt, mem};
const LOCATION_SEMANTIC: &str = "LOC"; const LOCATION_SEMANTIC: &str = "LOC";
const SPECIAL_CBUF_TYPE: &str = "NagaConstants"; const SPECIAL_CBUF_TYPE: &str = "NagaConstants";
@@ -1315,7 +1322,7 @@ impl<'a, W: fmt::Write> super::Writer<'a, W> {
self.out, self.out,
"{}{}", "{}{}",
scalar.to_hlsl_str()?, scalar.to_hlsl_str()?,
back::vector_size_str(size) common::vector_size_str(size)
)?; )?;
} }
TypeInner::Matrix { TypeInner::Matrix {
@@ -1331,8 +1338,8 @@ impl<'a, W: fmt::Write> super::Writer<'a, W> {
self.out, self.out,
"{}{}x{}", "{}{}x{}",
scalar.to_hlsl_str()?, scalar.to_hlsl_str()?,
back::vector_size_str(columns), common::vector_size_str(columns),
back::vector_size_str(rows), common::vector_size_str(rows),
)?; )?;
} }
TypeInner::Image { TypeInner::Image {
@@ -1356,10 +1363,10 @@ impl<'a, W: fmt::Write> super::Writer<'a, W> {
TypeInner::Array { base, size, .. } | TypeInner::BindingArray { base, size } => { TypeInner::Array { base, size, .. } | TypeInner::BindingArray { base, size } => {
self.write_array_size(module, base, size)?; self.write_array_size(module, base, size)?;
} }
TypeInner::AccelerationStructure => { TypeInner::AccelerationStructure { .. } => {
write!(self.out, "RaytracingAccelerationStructure")?; write!(self.out, "RaytracingAccelerationStructure")?;
} }
TypeInner::RayQuery => { TypeInner::RayQuery { .. } => {
// these are constant flags, there are dynamic flags also but constant flags are not supported by naga // these are constant flags, there are dynamic flags also but constant flags are not supported by naga
write!(self.out, "RayQuery<RAY_FLAG_NONE>")?; write!(self.out, "RayQuery<RAY_FLAG_NONE>")?;
} }
@@ -1534,7 +1541,7 @@ impl<'a, W: fmt::Write> super::Writer<'a, W> {
match module.types[local.ty].inner { match module.types[local.ty].inner {
// from https://microsoft.github.io/DirectX-Specs/d3d/Raytracing.html#tracerayinline-example-1 it seems that ray queries shouldn't be zeroed // from https://microsoft.github.io/DirectX-Specs/d3d/Raytracing.html#tracerayinline-example-1 it seems that ray queries shouldn't be zeroed
TypeInner::RayQuery => {} TypeInner::RayQuery { .. } => {}
_ => { _ => {
write!(self.out, " = ")?; write!(self.out, " = ")?;
// Write the local initializer if needed // Write the local initializer if needed
@@ -1715,14 +1722,14 @@ impl<'a, W: fmt::Write> super::Writer<'a, W> {
} }
let last_case = &cases[end_case_idx]; let last_case = &cases[end_case_idx];
if last_case.body.last().map_or(true, |s| !s.is_terminator()) { if last_case.body.last().is_none_or(|s| !s.is_terminator()) {
writeln!(self.out, "{indent_level_2}break;")?; writeln!(self.out, "{indent_level_2}break;")?;
} }
} else { } else {
for sta in case.body.iter() { for sta in case.body.iter() {
self.write_stmt(module, sta, func_ctx, indent_level_2)?; self.write_stmt(module, sta, func_ctx, indent_level_2)?;
} }
if !case.fall_through && case.body.last().map_or(true, |s| !s.is_terminator()) { if !case.fall_through && case.body.last().is_none_or(|s| !s.is_terminator()) {
writeln!(self.out, "{indent_level_2}break;")?; writeln!(self.out, "{indent_level_2}break;")?;
} }
} }
@@ -3334,7 +3341,7 @@ impl<'a, W: fmt::Write> super::Writer<'a, W> {
self.out, self.out,
"{}{}(", "{}{}(",
scalar.to_hlsl_str()?, scalar.to_hlsl_str()?,
back::vector_size_str(size) common::vector_size_str(size)
)?; )?;
} }
TypeInner::Scalar(_) => { TypeInner::Scalar(_) => {
@@ -3345,8 +3352,8 @@ impl<'a, W: fmt::Write> super::Writer<'a, W> {
self.out, self.out,
"{}{}x{}(", "{}{}x{}(",
scalar.to_hlsl_str()?, scalar.to_hlsl_str()?,
back::vector_size_str(columns), common::vector_size_str(columns),
back::vector_size_str(rows) common::vector_size_str(rows)
)?; )?;
} }
_ => { _ => {
@@ -3947,6 +3954,8 @@ impl<'a, W: fmt::Write> super::Writer<'a, W> {
write!(self.out, ")")?; write!(self.out, ")")?;
} }
} }
// Not supported yet
Expression::RayQueryVertexPositions { .. } => unreachable!(),
// Nothing to do here, since call expression already cached // Nothing to do here, since call expression already cached
Expression::CallResult(_) Expression::CallResult(_)
| Expression::AtomicResult { .. } | Expression::AtomicResult { .. }
@@ -4130,6 +4139,9 @@ impl<'a, W: fmt::Write> super::Writer<'a, W> {
if barrier.contains(crate::Barrier::SUB_GROUP) { if barrier.contains(crate::Barrier::SUB_GROUP) {
// Does not exist in DirectX // Does not exist in DirectX
} }
if barrier.contains(crate::Barrier::TEXTURE) {
writeln!(self.out, "{level}DeviceMemoryBarrierWithGroupSync();")?;
}
Ok(()) Ok(())
} }
} }

View File

@@ -3,6 +3,8 @@ Backend functions that export shader [`Module`](super::Module)s into binary and
*/ */
#![allow(dead_code)] // can be dead if none of the enabled backends need it #![allow(dead_code)] // can be dead if none of the enabled backends need it
use alloc::string::String;
use crate::proc::ExpressionKindTracker; use crate::proc::ExpressionKindTracker;
#[cfg(dot_out)] #[cfg(dot_out)]
@@ -35,15 +37,15 @@ pub type NeedBakeExpressions = crate::FastHashSet<crate::Handle<crate::Expressio
/// A type for displaying expression handles as baking identifiers. /// A type for displaying expression handles as baking identifiers.
/// ///
/// Given an [`Expression`] [`Handle`] `h`, `Baked(h)` implements /// Given an [`Expression`] [`Handle`] `h`, `Baked(h)` implements
/// [`std::fmt::Display`], showing the handle's index prefixed by /// [`core::fmt::Display`], showing the handle's index prefixed by
/// `_e`. /// `_e`.
/// ///
/// [`Expression`]: crate::Expression /// [`Expression`]: crate::Expression
/// [`Handle`]: crate::Handle /// [`Handle`]: crate::Handle
struct Baked(crate::Handle<crate::Expression>); struct Baked(crate::Handle<crate::Expression>);
impl std::fmt::Display for Baked { impl core::fmt::Display for Baked {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
self.0.write_prefixed(f, "_e") self.0.write_prefixed(f, "_e")
} }
} }
@@ -67,8 +69,8 @@ impl Level {
} }
} }
impl std::fmt::Display for Level { impl core::fmt::Display for Level {
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { fn fmt(&self, formatter: &mut core::fmt::Formatter<'_>) -> Result<(), core::fmt::Error> {
(0..self.0).try_for_each(|_| formatter.write_str(INDENT)) (0..self.0).try_for_each(|_| formatter.write_str(INDENT))
} }
} }
@@ -248,22 +250,13 @@ pub const fn binary_operation_str(op: crate::BinaryOperator) -> &'static str {
} }
} }
/// Helper function that returns the string corresponding to the [`VectorSize`](crate::VectorSize)
const fn vector_size_str(size: crate::VectorSize) -> &'static str {
match size {
crate::VectorSize::Bi => "2",
crate::VectorSize::Tri => "3",
crate::VectorSize::Quad => "4",
}
}
impl crate::TypeInner { impl crate::TypeInner {
/// Returns true if this is a handle to a type rather than the type directly. /// Returns true if this is a handle to a type rather than the type directly.
pub const fn is_handle(&self) -> bool { pub const fn is_handle(&self) -> bool {
match *self { match *self {
crate::TypeInner::Image { .. } crate::TypeInner::Image { .. }
| crate::TypeInner::Sampler { .. } | crate::TypeInner::Sampler { .. }
| crate::TypeInner::AccelerationStructure => true, | crate::TypeInner::AccelerationStructure { .. } => true,
_ => false, _ => false,
} }
} }

View File

@@ -31,8 +31,14 @@ holding the result.
*/ */
use alloc::{
format,
string::{String, ToString},
vec::Vec,
};
use core::fmt::{Error as FmtError, Write};
use crate::{arena::Handle, proc::index, valid::ModuleInfo}; use crate::{arena::Handle, proc::index, valid::ModuleInfo};
use std::fmt::{Error as FmtError, Write};
mod keywords; mod keywords;
pub mod sampler; pub mod sampler;
@@ -85,7 +91,7 @@ where
} }
// Using `BTreeMap` instead of `HashMap` so that we can hash itself. // Using `BTreeMap` instead of `HashMap` so that we can hash itself.
pub type BindingMap = std::collections::BTreeMap<crate::ResourceBinding, BindTarget>; pub type BindingMap = alloc::collections::BTreeMap<crate::ResourceBinding, BindTarget>;
#[derive(Clone, Debug, Default, Hash, Eq, PartialEq)] #[derive(Clone, Debug, Default, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serialize", derive(serde::Serialize))] #[cfg_attr(feature = "serialize", derive(serde::Serialize))]
@@ -106,7 +112,7 @@ pub struct EntryPointResources {
pub sizes_buffer: Option<Slot>, pub sizes_buffer: Option<Slot>,
} }
pub type EntryPointResourceMap = std::collections::BTreeMap<String, EntryPointResources>; pub type EntryPointResourceMap = alloc::collections::BTreeMap<String, EntryPointResources>;
enum ResolvedBinding { enum ResolvedBinding {
BuiltIn(crate::BuiltIn), BuiltIn(crate::BuiltIn),
@@ -723,6 +729,5 @@ pub fn write_string(
#[test] #[test]
fn test_error_size() { fn test_error_size() {
use std::mem::size_of;
assert_eq!(size_of::<Error>(), 32); assert_eq!(size_of::<Error>(), 32);
} }

View File

@@ -1,8 +1,9 @@
use core::{num::NonZeroU32, ops::Range};
#[cfg(feature = "deserialize")] #[cfg(feature = "deserialize")]
use serde::Deserialize; use serde::Deserialize;
#[cfg(feature = "serialize")] #[cfg(feature = "serialize")]
use serde::Serialize; use serde::Serialize;
use std::{num::NonZeroU32, ops::Range};
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serialize", derive(Serialize))] #[cfg_attr(feature = "serialize", derive(Serialize))]
@@ -158,8 +159,8 @@ impl Eq for InlineSampler {}
#[allow(renamed_and_removed_lints)] #[allow(renamed_and_removed_lints)]
#[allow(clippy::derive_hash_xor_eq)] #[allow(clippy::derive_hash_xor_eq)]
impl std::hash::Hash for InlineSampler { impl core::hash::Hash for InlineSampler {
fn hash<H: std::hash::Hasher>(&self, hasher: &mut H) { fn hash<H: core::hash::Hasher>(&self, hasher: &mut H) {
self.coord.hash(hasher); self.coord.hash(hasher);
self.address.hash(hasher); self.address.hash(hasher);
self.border_color.hash(hasher); self.border_color.hash(hasher);

View File

@@ -1,16 +1,25 @@
use alloc::{
format,
string::{String, ToString},
vec,
vec::Vec,
};
use core::{
fmt::{Display, Error as FmtError, Formatter, Write},
iter,
};
use super::{sampler as sm, Error, LocationMode, Options, PipelineOptions, TranslationInfo}; use super::{sampler as sm, Error, LocationMode, Options, PipelineOptions, TranslationInfo};
use crate::{ use crate::{
arena::{Handle, HandleSet}, arena::{Handle, HandleSet},
back::{self, Baked}, back::{self, Baked},
common,
proc::{self, index, ExpressionKindTracker, NameKey, TypeResolution}, proc::{self, index, ExpressionKindTracker, NameKey, TypeResolution},
valid, FastHashMap, FastHashSet, valid, FastHashMap, FastHashSet,
}; };
#[cfg(test)] #[cfg(test)]
use std::ptr; use core::ptr;
use std::{
fmt::{Display, Error as FmtError, Formatter, Write},
iter,
};
/// Shorthand result used internally by the backend /// Shorthand result used internally by the backend
type BackendResult = Result<(), Error>; type BackendResult = Result<(), Error>;
@@ -72,7 +81,7 @@ fn put_numeric_type(
"{}::{}{}", "{}::{}{}",
NAMESPACE, NAMESPACE,
scalar.to_msl_name(), scalar.to_msl_name(),
back::vector_size_str(rows) common::vector_size_str(rows)
) )
} }
(scalar, &[rows, columns]) => { (scalar, &[rows, columns]) => {
@@ -81,8 +90,8 @@ fn put_numeric_type(
"{}::{}{}x{}", "{}::{}{}x{}",
NAMESPACE, NAMESPACE,
scalar.to_msl_name(), scalar.to_msl_name(),
back::vector_size_str(columns), common::vector_size_str(columns),
back::vector_size_str(rows) common::vector_size_str(rows)
) )
} }
(_, _) => Ok(()), // not meaningful (_, _) => Ok(()), // not meaningful
@@ -102,13 +111,13 @@ const CLAMPED_LOD_LOAD_PREFIX: &str = "clamped_lod_e";
/// Wrapper for identifier names for clamped level-of-detail values /// Wrapper for identifier names for clamped level-of-detail values
/// ///
/// Values of this type implement [`std::fmt::Display`], formatting as /// Values of this type implement [`core::fmt::Display`], formatting as
/// the name of the variable used to hold the cached clamped /// the name of the variable used to hold the cached clamped
/// level-of-detail value for an `ImageLoad` expression. /// level-of-detail value for an `ImageLoad` expression.
struct ClampedLod(Handle<crate::Expression>); struct ClampedLod(Handle<crate::Expression>);
impl Display for ClampedLod { impl Display for ClampedLod {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
self.0.write_prefixed(f, CLAMPED_LOD_LOAD_PREFIX) self.0.write_prefixed(f, CLAMPED_LOD_LOAD_PREFIX)
} }
} }
@@ -123,14 +132,14 @@ impl Display for ClampedLod {
/// ///
/// If `global` is a [`Handle`] for a [`GlobalVariable`] that contains a /// If `global` is a [`Handle`] for a [`GlobalVariable`] that contains a
/// runtime-sized array, then the value `ArraySize(global)` implements /// runtime-sized array, then the value `ArraySize(global)` implements
/// [`std::fmt::Display`], formatting as the name of the struct member carrying /// [`core::fmt::Display`], formatting as the name of the struct member carrying
/// the number of elements in that runtime-sized array. /// the number of elements in that runtime-sized array.
/// ///
/// [`GlobalVariable`]: crate::GlobalVariable /// [`GlobalVariable`]: crate::GlobalVariable
struct ArraySizeMember(Handle<crate::GlobalVariable>); struct ArraySizeMember(Handle<crate::GlobalVariable>);
impl Display for ArraySizeMember { impl Display for ArraySizeMember {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
self.0.write_prefixed(f, "size") self.0.write_prefixed(f, "size")
} }
} }
@@ -281,10 +290,16 @@ impl Display for TypeContext<'_> {
crate::TypeInner::Sampler { comparison: _ } => { crate::TypeInner::Sampler { comparison: _ } => {
write!(out, "{NAMESPACE}::sampler") write!(out, "{NAMESPACE}::sampler")
} }
crate::TypeInner::AccelerationStructure => { crate::TypeInner::AccelerationStructure { vertex_return } => {
if vertex_return {
unimplemented!("metal does not support vertex ray hit return")
}
write!(out, "{RT_NAMESPACE}::instance_acceleration_structure") write!(out, "{RT_NAMESPACE}::instance_acceleration_structure")
} }
crate::TypeInner::RayQuery => { crate::TypeInner::RayQuery { vertex_return } => {
if vertex_return {
unimplemented!("metal does not support vertex ray hit return")
}
write!(out, "{RAY_QUERY_TYPE}") write!(out, "{RAY_QUERY_TYPE}")
} }
crate::TypeInner::BindingArray { base, .. } => { crate::TypeInner::BindingArray { base, .. } => {
@@ -561,8 +576,8 @@ impl crate::Type {
// handle types may be different, depending on the global var access, so we always inline them // handle types may be different, depending on the global var access, so we always inline them
Ti::Image { .. } Ti::Image { .. }
| Ti::Sampler { .. } | Ti::Sampler { .. }
| Ti::AccelerationStructure | Ti::AccelerationStructure { .. }
| Ti::RayQuery | Ti::RayQuery { .. }
| Ti::BindingArray { .. } => false, | Ti::BindingArray { .. } => false,
} }
} }
@@ -1394,7 +1409,7 @@ impl<W: Write> Writer<W> {
.to_msl_name(); .to_msl_name();
match context.resolve_type(arg) { match context.resolve_type(arg) {
&crate::TypeInner::Vector { size, .. } => { &crate::TypeInner::Vector { size, .. } => {
let size = back::vector_size_str(size); let size = common::vector_size_str(size);
write!(self.out, "{scalar}{size}(-1), {scalar}{size}(1)")?; write!(self.out, "{scalar}{size}(-1), {scalar}{size}(1)")?;
} }
_ => { _ => {
@@ -2119,7 +2134,7 @@ impl<W: Write> Writer<W> {
// or metal will complain that select is ambiguous // or metal will complain that select is ambiguous
match *inner { match *inner {
crate::TypeInner::Vector { size, scalar } => { crate::TypeInner::Vector { size, scalar } => {
let size = back::vector_size_str(size); let size = common::vector_size_str(size);
let name = scalar.to_msl_name(); let name = scalar.to_msl_name();
write!(self.out, "{name}{size}")?; write!(self.out, "{name}{size}")?;
} }
@@ -2247,7 +2262,7 @@ impl<W: Write> Writer<W> {
crate::TypeInner::Vector { size, .. } => write!( crate::TypeInner::Vector { size, .. } => write!(
self.out, self.out,
"{NAMESPACE}::float{size}({NAMESPACE}::half{size}(", "{NAMESPACE}::float{size}({NAMESPACE}::half{size}(",
size = back::vector_size_str(size), size = common::vector_size_str(size),
)?, )?,
_ => unreachable!( _ => unreachable!(
"Correct TypeInner for QuantizeToF16 should be already validated" "Correct TypeInner for QuantizeToF16 should be already validated"
@@ -2350,6 +2365,9 @@ impl<W: Write> Writer<W> {
write!(self.out, ")")?; write!(self.out, ")")?;
} }
} }
crate::Expression::RayQueryVertexPositions { .. } => {
unimplemented!()
}
crate::Expression::RayQueryGetIntersection { crate::Expression::RayQueryGetIntersection {
query, query,
committed: _, committed: _,
@@ -3223,8 +3241,7 @@ impl<W: Write> Writer<W> {
} }
self.put_block(lcase.next(), &case.body, context)?; self.put_block(lcase.next(), &case.body, context)?;
if !case.fall_through if !case.fall_through && case.body.last().is_none_or(|s| !s.is_terminator())
&& case.body.last().map_or(true, |s| !s.is_terminator())
{ {
writeln!(self.out, "{}break;", lcase.next())?; writeln!(self.out, "{}break;", lcase.next())?;
} }
@@ -3808,12 +3825,12 @@ impl<W: Write> Writer<W> {
let mut uses_ray_query = false; let mut uses_ray_query = false;
for (_, ty) in module.types.iter() { for (_, ty) in module.types.iter() {
match ty.inner { match ty.inner {
crate::TypeInner::AccelerationStructure => { crate::TypeInner::AccelerationStructure { .. } => {
if options.lang_version < (2, 4) { if options.lang_version < (2, 4) {
return Err(Error::UnsupportedRayTracing); return Err(Error::UnsupportedRayTracing);
} }
} }
crate::TypeInner::RayQuery => { crate::TypeInner::RayQuery { .. } => {
if options.lang_version < (2, 4) { if options.lang_version < (2, 4) {
return Err(Error::UnsupportedRayTracing); return Err(Error::UnsupportedRayTracing);
} }
@@ -6514,6 +6531,12 @@ template <typename A>
"{level}{NAMESPACE}::simdgroup_barrier({NAMESPACE}::mem_flags::mem_threadgroup);", "{level}{NAMESPACE}::simdgroup_barrier({NAMESPACE}::mem_flags::mem_threadgroup);",
)?; )?;
} }
if flags.contains(crate::Barrier::TEXTURE) {
writeln!(
self.out,
"{level}{NAMESPACE}::threadgroup_barrier({NAMESPACE}::mem_flags::mem_texture);",
)?;
}
Ok(()) Ok(())
} }
} }

View File

@@ -1,3 +1,12 @@
use alloc::{
borrow::Cow,
string::{String, ToString},
};
use core::mem;
use hashbrown::HashSet;
use thiserror::Error;
use super::PipelineConstants; use super::PipelineConstants;
use crate::{ use crate::{
arena::HandleVec, arena::HandleVec,
@@ -6,9 +15,6 @@ use crate::{
Arena, Block, Constant, Expression, Function, Handle, Literal, Module, Override, Range, Scalar, Arena, Block, Constant, Expression, Function, Handle, Literal, Module, Override, Range, Scalar,
Span, Statement, TypeInner, WithSpan, Span, Statement, TypeInner, WithSpan,
}; };
use hashbrown::HashSet;
use std::{borrow::Cow, mem};
use thiserror::Error;
#[derive(Error, Debug, Clone)] #[derive(Error, Debug, Clone)]
#[cfg_attr(test, derive(PartialEq))] #[cfg_attr(test, derive(PartialEq))]
@@ -243,7 +249,7 @@ fn process_pending(
), ),
)) ))
} else { } else {
Ok(std::num::NonZeroU32::new(n).unwrap()) Ok(core::num::NonZeroU32::new(n).unwrap())
} }
}) })
.map_err(|_| { .map_err(|_| {
@@ -632,6 +638,12 @@ fn adjust_expr(new_pos: &HandleVec<Expression, Handle<Expression>>, expr: &mut E
| Expression::WorkGroupUniformLoadResult { ty: _ } | Expression::WorkGroupUniformLoadResult { ty: _ }
| Expression::SubgroupBallotResult | Expression::SubgroupBallotResult
| Expression::SubgroupOperationResult { .. } => {} | Expression::SubgroupOperationResult { .. } => {}
Expression::RayQueryVertexPositions {
ref mut query,
committed: _,
} => {
adjust(query);
}
} }
} }

View File

@@ -2,13 +2,16 @@
Implementations for `BlockContext` methods. Implementations for `BlockContext` methods.
*/ */
use alloc::vec::Vec;
use spirv::Word;
use super::{ use super::{
index::BoundsCheckResult, selection::Selection, Block, BlockContext, Dimension, Error, index::BoundsCheckResult, selection::Selection, Block, BlockContext, Dimension, Error,
Instruction, LocalType, LookupType, NumericType, ResultMember, WrappedFunction, Writer, Instruction, LocalType, LookupType, NumericType, ResultMember, WrappedFunction, Writer,
WriterFlags, WriterFlags,
}; };
use crate::{arena::Handle, proc::index::GuardedIndex, Statement}; use crate::{arena::Handle, proc::index::GuardedIndex, Statement};
use spirv::Word;
fn get_dimension(type_inner: &crate::TypeInner) -> Dimension { fn get_dimension(type_inner: &crate::TypeInner) -> Dimension {
match *type_inner { match *type_inner {
@@ -1579,7 +1582,7 @@ impl BlockContext<'_> {
const VEC_LENGTH: u8 = 4; const VEC_LENGTH: u8 = 4;
let parts: [_; VEC_LENGTH as usize] = let parts: [_; VEC_LENGTH as usize] =
std::array::from_fn(|_| self.gen_id()); core::array::from_fn(|_| self.gen_id());
for (i, part_id) in parts.into_iter().enumerate() { for (i, part_id) in parts.into_iter().enumerate() {
let index = self let index = self
.writer .writer
@@ -1927,6 +1930,13 @@ impl BlockContext<'_> {
)); ));
id id
} }
crate::Expression::RayQueryVertexPositions { query, committed } => {
self.writer.require_any(
"RayQueryVertexPositions",
&[spirv::Capability::RayQueryPositionFetchKHR],
)?;
self.write_ray_query_return_vertex_position(query, block, committed)
}
}; };
self.cached[expr_handle] = id; self.cached[expr_handle] = id;
@@ -2230,26 +2240,60 @@ impl BlockContext<'_> {
} }
fn spill_to_internal_variable(&mut self, base: Handle<crate::Expression>, block: &mut Block) { fn spill_to_internal_variable(&mut self, base: Handle<crate::Expression>, block: &mut Block) {
// Generate an internal variable of the appropriate type for `base`. use indexmap::map::Entry;
let variable_id = self.writer.id_gen.next();
let pointer_type_id = self // Make sure we have an internal variable to spill `base` to.
.writer let spill_variable_id = match self.function.spilled_composites.entry(base) {
.get_resolution_pointer_id(&self.fun_info[base].ty, spirv::StorageClass::Function); Entry::Occupied(preexisting) => preexisting.get().id,
let variable = super::LocalVariable { Entry::Vacant(vacant) => {
id: variable_id, // Generate a new internal variable of the appropriate
instruction: Instruction::variable( // type for `base`.
pointer_type_id, let pointer_type_id = self.writer.get_resolution_pointer_id(
variable_id, &self.fun_info[base].ty,
spirv::StorageClass::Function, spirv::StorageClass::Function,
None, );
), let id = self.writer.id_gen.next();
vacant.insert(super::LocalVariable {
id,
instruction: Instruction::variable(
pointer_type_id,
id,
spirv::StorageClass::Function,
None,
),
});
id
}
}; };
// Perform the store even if we already had a spill variable for `base`.
// Consider this code:
//
// var x = ...;
// var y = ...;
// var z = ...;
// for (i = 0; i<2; i++) {
// let a = array(i, i, i);
// if (i == 0) {
// x += a[y];
// } else [
// x += a[z];
// }
// }
//
// The value of `a` needs to be spilled so we can subscript it with `y` and `z`.
//
// When we generate SPIR-V for `a[y]`, we will create the spill
// variable, and store `a`'s value in it.
//
// When we generate SPIR-V for `a[z]`, we will notice that the spill
// variable for `a` has already been declared, but it is still essential
// that we store `a` into it, so that `a[z]` sees this iteration's value
// of `a`.
let base_id = self.cached[base]; let base_id = self.cached[base];
block block
.body .body
.push(Instruction::store(variable.id, base_id, None)); .push(Instruction::store(spill_variable_id, base_id, None));
self.function.spilled_composites.insert(base, variable);
} }
/// Generate an access to a spilled temporary, if necessary. /// Generate an access to a spilled temporary, if necessary.

View File

@@ -1,6 +1,9 @@
use crate::{Handle, UniqueArena}; use alloc::{vec, vec::Vec};
use spirv::Word; use spirv::Word;
use crate::{Handle, UniqueArena};
pub(super) fn bytes_to_words(bytes: &[u8]) -> Vec<Word> { pub(super) fn bytes_to_words(bytes: &[u8]) -> Vec<Word> {
bytes bytes
.chunks(4) .chunks(4)

View File

@@ -2,12 +2,13 @@
Generating SPIR-V for image operations. Generating SPIR-V for image operations.
*/ */
use spirv::Word;
use super::{ use super::{
selection::{MergeTuple, Selection}, selection::{MergeTuple, Selection},
Block, BlockContext, Error, IdGenerator, Instruction, LocalType, LookupType, NumericType, Block, BlockContext, Error, IdGenerator, Instruction, LocalType, LookupType, NumericType,
}; };
use crate::arena::Handle; use crate::arena::Handle;
use spirv::Word;
/// Information about a vector of coordinates. /// Information about a vector of coordinates.
/// ///

View File

@@ -351,7 +351,7 @@ impl BlockContext<'_> {
// If both are known, we can compute the index to be used // If both are known, we can compute the index to be used
// right now. // right now.
if let (GuardedIndex::Known(index), MaybeKnown::Known(max_index)) = (index, max_index) { if let (GuardedIndex::Known(index), MaybeKnown::Known(max_index)) = (index, max_index) {
let restricted = std::cmp::min(index, max_index); let restricted = core::cmp::min(index, max_index);
return Ok(BoundsCheckResult::KnownInBounds(restricted)); return Ok(BoundsCheckResult::KnownInBounds(restricted));
} }

View File

@@ -1,6 +1,9 @@
use super::{block::DebugInfoInner, helpers}; use alloc::{vec, vec::Vec};
use spirv::{Op, Word}; use spirv::{Op, Word};
use super::{block::DebugInfoInner, helpers};
pub(super) enum Signedness { pub(super) enum Signedness {
Unsigned = 0, Unsigned = 0,
Signed = 1, Signed = 1,
@@ -792,6 +795,20 @@ impl super::Instruction {
instruction instruction
} }
pub(super) fn ray_query_return_vertex_position(
result_type_id: Word,
id: Word,
query: Word,
intersection: Word,
) -> Self {
let mut instruction = Self::new(Op::RayQueryGetIntersectionTriangleVertexPositionsKHR);
instruction.set_type(result_type_id);
instruction.set_result(id);
instruction.add_operand(query);
instruction.add_operand(intersection);
instruction
}
pub(super) fn ray_query_get_intersection( pub(super) fn ray_query_get_intersection(
op: Op, op: Op,
result_type_id: Word, result_type_id: Word,

View File

@@ -1,6 +1,12 @@
use super::{Instruction, LogicalLayout, PhysicalLayout}; use alloc::{vec, vec::Vec};
use core::iter;
use spirv::{Op, Word, MAGIC_NUMBER}; use spirv::{Op, Word, MAGIC_NUMBER};
use std::iter;
use super::{Instruction, LogicalLayout, PhysicalLayout};
#[cfg(test)]
use alloc::format;
// https://github.com/KhronosGroup/SPIRV-Headers/pull/195 // https://github.com/KhronosGroup/SPIRV-Headers/pull/195
const GENERATOR: Word = 28; const GENERATOR: Word = 28;

View File

@@ -18,13 +18,15 @@ mod writer;
pub use spirv::{Capability, SourceLanguage}; pub use spirv::{Capability, SourceLanguage};
use crate::arena::{Handle, HandleVec}; use alloc::{string::String, vec::Vec};
use crate::proc::{BoundsCheckPolicies, TypeResolution}; use core::ops;
use spirv::Word; use spirv::Word;
use std::ops;
use thiserror::Error; use thiserror::Error;
use crate::arena::{Handle, HandleVec};
use crate::proc::{BoundsCheckPolicies, TypeResolution};
#[derive(Clone)] #[derive(Clone)]
struct PhysicalLayout { struct PhysicalLayout {
magic_number: Word, magic_number: Word,
@@ -147,12 +149,17 @@ struct Function {
/// List of local variables used as a counters to ensure that all loops are bounded. /// List of local variables used as a counters to ensure that all loops are bounded.
force_loop_bounding_vars: Vec<LocalVariable>, force_loop_bounding_vars: Vec<LocalVariable>,
/// A map taking an expression that yields a composite value (array, matrix) /// A map from a Naga expression to the temporary SPIR-V variable we have
/// to the temporary variables we have spilled it to, if any. Spilling /// spilled its value to, if any.
/// allows us to render an arbitrary chain of [`Access`] and [`AccessIndex`] ///
/// expressions as an `OpAccessChain` and an `OpLoad` (plus bounds checks). /// Naga IR lets us apply [`Access`] expressions to expressions whose value
/// This supports dynamic indexing of by-value arrays and matrices, which /// is an array or matrix---not a pointer to such---but SPIR-V doesn't have
/// SPIR-V does not. /// instructions that can do the same. So when we encounter such code, we
/// spill the expression's value to a generated temporary variable. That, we
/// can obtain a pointer to, and then use an `OpAccessChain` instruction to
/// do whatever series of [`Access`] and [`AccessIndex`] operations we need
/// (with bounds checks). Finally, we generate an `OpLoad` to get the final
/// value.
/// ///
/// [`Access`]: crate::Expression::Access /// [`Access`]: crate::Expression::Access
/// [`AccessIndex`]: crate::Expression::AccessIndex /// [`AccessIndex`]: crate::Expression::AccessIndex
@@ -481,8 +488,8 @@ impl LocalType {
class, class,
} => LocalType::Image(LocalImageType::from_inner(dim, arrayed, class)), } => LocalType::Image(LocalImageType::from_inner(dim, arrayed, class)),
crate::TypeInner::Sampler { comparison: _ } => LocalType::Sampler, crate::TypeInner::Sampler { comparison: _ } => LocalType::Sampler,
crate::TypeInner::AccelerationStructure => LocalType::AccelerationStructure, crate::TypeInner::AccelerationStructure { .. } => LocalType::AccelerationStructure,
crate::TypeInner::RayQuery => LocalType::RayQuery, crate::TypeInner::RayQuery { .. } => LocalType::RayQuery,
crate::TypeInner::Array { .. } crate::TypeInner::Array { .. }
| crate::TypeInner::Struct { .. } | crate::TypeInner::Struct { .. }
| crate::TypeInner::BindingArray { .. } => return None, | crate::TypeInner::BindingArray { .. } => return None,
@@ -852,7 +859,7 @@ pub struct BindingInfo {
} }
// Using `BTreeMap` instead of `HashMap` so that we can hash itself. // Using `BTreeMap` instead of `HashMap` so that we can hash itself.
pub type BindingMap = std::collections::BTreeMap<crate::ResourceBinding, BindingInfo>; pub type BindingMap = alloc::collections::BTreeMap<crate::ResourceBinding, BindingInfo>;
#[derive(Clone, Copy, Debug, PartialEq, Eq)] #[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum ZeroInitializeWorkgroupMemoryMode { pub enum ZeroInitializeWorkgroupMemoryMode {

View File

@@ -2,6 +2,8 @@
Generating SPIR-V for ray query operations. Generating SPIR-V for ray query operations.
*/ */
use alloc::vec;
use super::{ use super::{
Block, BlockContext, Function, FunctionArgument, Instruction, LocalType, LookupFunctionType, Block, BlockContext, Function, FunctionArgument, Instruction, LocalType, LookupFunctionType,
LookupType, NumericType, Writer, LookupType, NumericType, Writer,
@@ -114,17 +116,8 @@ impl Writer {
class: spirv::StorageClass::Function, class: spirv::StorageClass::Function,
})); }));
let rq_ty = ir_module let argument_type_id = self.get_ray_query_pointer_id(ir_module);
.types
.get(&Type {
name: None,
inner: TypeInner::RayQuery,
})
.expect("ray_query type should have been populated by the variable passed into this!");
let argument_type_id = self.get_type_id(LookupType::Local(LocalType::Pointer {
base: rq_ty,
class: spirv::StorageClass::Function,
}));
let func_ty = self.get_function_type(LookupFunctionType { let func_ty = self.get_function_type(LookupFunctionType {
parameter_type_ids: vec![argument_type_id], parameter_type_ids: vec![argument_type_id],
return_type_id: intersection_type_id, return_type_id: intersection_type_id,
@@ -624,4 +617,39 @@ impl BlockContext<'_> {
crate::RayQueryFunction::Terminate => {} crate::RayQueryFunction::Terminate => {}
} }
} }
pub(super) fn write_ray_query_return_vertex_position(
&mut self,
query: Handle<crate::Expression>,
block: &mut Block,
is_committed: bool,
) -> spirv::Word {
let query_id = self.cached[query];
let id = self.gen_id();
let result = self
.ir_module
.special_types
.ray_vertex_return
.expect("type should have been populated");
let intersection_id =
self.writer
.get_constant_scalar(crate::Literal::U32(if is_committed {
spirv::RayQueryIntersection::RayQueryCommittedIntersectionKHR
} else {
spirv::RayQueryIntersection::RayQueryCandidateIntersectionKHR
} as _));
block
.body
.push(Instruction::ray_query_return_vertex_position(
*self
.writer
.lookup_type
.get(&LookupType::Handle(result))
.expect("type should have been populated"),
id,
query_id,
intersection_id,
));
id
}
} }

View File

@@ -2,6 +2,8 @@
Reusing collections' previous allocations. Reusing collections' previous allocations.
*/ */
use alloc::vec::Vec;
/// A value that can be reset to its initial state, retaining its current allocations. /// A value that can be reset to its initial state, retaining its current allocations.
/// ///
/// Naga attempts to lower the cost of SPIR-V generation by allowing clients to /// Naga attempts to lower the cost of SPIR-V generation by allowing clients to
@@ -59,7 +61,7 @@ impl<K, S: Clone> Recyclable for indexmap::IndexSet<K, S> {
} }
} }
impl<K: Ord, V> Recyclable for std::collections::BTreeMap<K, V> { impl<K: Ord, V> Recyclable for alloc::collections::BTreeMap<K, V> {
fn recycle(mut self) -> Self { fn recycle(mut self) -> Self {
self.clear(); self.clear();
self self

View File

@@ -57,9 +57,12 @@ pointer for the duration of its lifetime. To obtain the block for generating
code in the selection's body, call the `Selection::block` method. code in the selection's body, call the `Selection::block` method.
*/ */
use super::{Block, BlockContext, Instruction}; use alloc::{vec, vec::Vec};
use spirv::Word; use spirv::Word;
use super::{Block, BlockContext, Instruction};
/// A private struct recording what we know about the selection construct so far. /// A private struct recording what we know about the selection construct so far.
pub(super) struct Selection<'b, M: MergeTuple> { pub(super) struct Selection<'b, M: MergeTuple> {
/// The block pointer we're emitting code into. /// The block pointer we're emitting code into.
@@ -125,7 +128,7 @@ impl<'b, M: MergeTuple> Selection<'b, M> {
let merge_label = self.make_merge_label(ctx); let merge_label = self.make_merge_label(ctx);
let next_label = ctx.gen_id(); let next_label = ctx.gen_id();
ctx.function.consume( ctx.function.consume(
std::mem::replace(self.block, Block::new(next_label)), core::mem::replace(self.block, Block::new(next_label)),
Instruction::branch_conditional(cond, next_label, merge_label), Instruction::branch_conditional(cond, next_label, merge_label),
); );
} }
@@ -160,7 +163,7 @@ impl<'b, M: MergeTuple> Selection<'b, M> {
// Emit the final branch and transition to the merge block. // Emit the final branch and transition to the merge block.
values.push((final_values, block.label_id)); values.push((final_values, block.label_id));
ctx.function.consume( ctx.function.consume(
std::mem::replace(block, Block::new(merge_label)), core::mem::replace(block, Block::new(merge_label)),
Instruction::branch(merge_label), Instruction::branch(merge_label),
); );

View File

@@ -1,3 +1,12 @@
use alloc::{
string::{String, ToString},
vec,
vec::Vec,
};
use hashbrown::hash_map::Entry;
use spirv::Word;
use super::{ use super::{
block::DebugInfoInner, block::DebugInfoInner,
helpers::{contains_builtin, global_needs_wrapper, map_storage_class}, helpers::{contains_builtin, global_needs_wrapper, map_storage_class},
@@ -12,8 +21,6 @@ use crate::{
proc::{Alignment, TypeResolution}, proc::{Alignment, TypeResolution},
valid::{FunctionInfo, ModuleInfo}, valid::{FunctionInfo, ModuleInfo},
}; };
use hashbrown::hash_map::Entry;
use spirv::Word;
struct FunctionInterface<'a> { struct FunctionInterface<'a> {
varying_ids: &'a mut Vec<Word>, varying_ids: &'a mut Vec<Word>,
@@ -97,12 +104,12 @@ impl Writer {
/// `Recyclable::recycle` requires ownership of the value, not just /// `Recyclable::recycle` requires ownership of the value, not just
/// `&mut`; see the trait documentation. But we need to use this method /// `&mut`; see the trait documentation. But we need to use this method
/// from functions like `Writer::write`, which only have `&mut Writer`. /// from functions like `Writer::write`, which only have `&mut Writer`.
/// Workarounds include unsafe code (`std::ptr::read`, then `write`, ugh) /// Workarounds include unsafe code (`core::ptr::read`, then `write`, ugh)
/// or something like a `Default` impl that returns an oddly-initialized /// or something like a `Default` impl that returns an oddly-initialized
/// `Writer`, which is worse. /// `Writer`, which is worse.
fn reset(&mut self) { fn reset(&mut self) {
use super::recyclable::Recyclable; use super::recyclable::Recyclable;
use std::mem::take; use core::mem::take;
let mut id_gen = IdGenerator::default(); let mut id_gen = IdGenerator::default();
let gl450_ext_inst_id = id_gen.next(); let gl450_ext_inst_id = id_gen.next();
@@ -244,6 +251,30 @@ impl Writer {
})) }))
} }
pub(super) fn get_ray_query_pointer_id(&mut self, module: &crate::Module) -> Word {
let rq_ty = module
.types
.get(&crate::Type {
name: None,
inner: crate::TypeInner::RayQuery {
vertex_return: false,
},
})
.or_else(|| {
module.types.get(&crate::Type {
name: None,
inner: crate::TypeInner::RayQuery {
vertex_return: true,
},
})
})
.expect("ray_query type should have been populated by the variable passed into this!");
self.get_type_id(LookupType::Local(LocalType::Pointer {
base: rq_ty,
class: spirv::StorageClass::Function,
}))
}
/// Return a SPIR-V type for a pointer to `resolution`. /// Return a SPIR-V type for a pointer to `resolution`.
/// ///
/// The given `resolution` must be one that we can represent /// The given `resolution` must be one that we can represent
@@ -867,10 +898,10 @@ impl Writer {
fun_info: info, fun_info: info,
function: &mut function, function: &mut function,
// Re-use the cached expression table from prior functions. // Re-use the cached expression table from prior functions.
cached: std::mem::take(&mut self.saved_cached), cached: core::mem::take(&mut self.saved_cached),
// Steal the Writer's temp list for a bit. // Steal the Writer's temp list for a bit.
temp_list: std::mem::take(&mut self.temp_list), temp_list: core::mem::take(&mut self.temp_list),
force_loop_bounding: self.force_loop_bounding, force_loop_bounding: self.force_loop_bounding,
writer: self, writer: self,
expression_constness: super::ExpressionConstnessTracker::from_arena( expression_constness: super::ExpressionConstnessTracker::from_arena(
@@ -906,7 +937,7 @@ impl Writer {
id, id,
spirv::StorageClass::Function, spirv::StorageClass::Function,
init_word.or_else(|| match ir_module.types[variable.ty].inner { init_word.or_else(|| match ir_module.types[variable.ty].inner {
crate::TypeInner::RayQuery => None, crate::TypeInner::RayQuery { .. } => None,
_ => { _ => {
let type_id = context.get_type_id(LookupType::Handle(variable.ty)); let type_id = context.get_type_id(LookupType::Handle(variable.ty));
Some(context.writer.write_constant_null(type_id)) Some(context.writer.write_constant_null(type_id))
@@ -1131,10 +1162,10 @@ impl Writer {
_ => {} _ => {}
} }
} }
crate::TypeInner::AccelerationStructure => { crate::TypeInner::AccelerationStructure { .. } => {
self.require_any("Acceleration Structure", &[spirv::Capability::RayQueryKHR])?; self.require_any("Acceleration Structure", &[spirv::Capability::RayQueryKHR])?;
} }
crate::TypeInner::RayQuery => { crate::TypeInner::RayQuery { .. } => {
self.require_any("Ray Query", &[spirv::Capability::RayQueryKHR])?; self.require_any("Ray Query", &[spirv::Capability::RayQueryKHR])?;
} }
crate::TypeInner::Atomic(crate::Scalar { width: 8, kind: _ }) => { crate::TypeInner::Atomic(crate::Scalar { width: 8, kind: _ }) => {
@@ -1317,8 +1348,8 @@ impl Writer {
| crate::TypeInner::ValuePointer { .. } | crate::TypeInner::ValuePointer { .. }
| crate::TypeInner::Image { .. } | crate::TypeInner::Image { .. }
| crate::TypeInner::Sampler { .. } | crate::TypeInner::Sampler { .. }
| crate::TypeInner::AccelerationStructure | crate::TypeInner::AccelerationStructure { .. }
| crate::TypeInner::RayQuery => unreachable!(), | crate::TypeInner::RayQuery { .. } => unreachable!(),
}; };
instruction.to_words(&mut self.logical_layout.declarations); instruction.to_words(&mut self.logical_layout.declarations);
@@ -1571,6 +1602,10 @@ impl Writer {
spirv::MemorySemantics::WORKGROUP_MEMORY, spirv::MemorySemantics::WORKGROUP_MEMORY,
flags.contains(crate::Barrier::WORK_GROUP), flags.contains(crate::Barrier::WORK_GROUP),
); );
semantics.set(
spirv::MemorySemantics::IMAGE_MEMORY,
flags.contains(crate::Barrier::TEXTURE),
);
let exec_scope_id = if flags.contains(crate::Barrier::SUB_GROUP) { let exec_scope_id = if flags.contains(crate::Barrier::SUB_GROUP) {
self.get_index_constant(spirv::Scope::Subgroup as u32) self.get_index_constant(spirv::Scope::Subgroup as u32)
} else { } else {
@@ -2188,9 +2223,13 @@ impl Writer {
.any(|arg| has_view_index_check(ir_module, arg.binding.as_ref(), arg.ty)); .any(|arg| has_view_index_check(ir_module, arg.binding.as_ref(), arg.ty));
let mut has_ray_query = ir_module.special_types.ray_desc.is_some() let mut has_ray_query = ir_module.special_types.ray_desc.is_some()
| ir_module.special_types.ray_intersection.is_some(); | ir_module.special_types.ray_intersection.is_some();
let has_vertex_return = ir_module.special_types.ray_vertex_return.is_some();
for (_, &crate::Type { ref inner, .. }) in ir_module.types.iter() { for (_, &crate::Type { ref inner, .. }) in ir_module.types.iter() {
if let &crate::TypeInner::AccelerationStructure | &crate::TypeInner::RayQuery = inner { // spirv does not know whether these have vertex return - that is done by us
if let &crate::TypeInner::AccelerationStructure { .. }
| &crate::TypeInner::RayQuery { .. } = inner
{
has_ray_query = true has_ray_query = true
} }
} }
@@ -2208,6 +2247,10 @@ impl Writer {
Instruction::extension("SPV_KHR_ray_query") Instruction::extension("SPV_KHR_ray_query")
.to_words(&mut self.logical_layout.extensions) .to_words(&mut self.logical_layout.extensions)
} }
if has_vertex_return {
Instruction::extension("SPV_KHR_ray_tracing_position_fetch")
.to_words(&mut self.logical_layout.extensions);
}
Instruction::type_void(self.void_type).to_words(&mut self.logical_layout.declarations); Instruction::type_void(self.void_type).to_words(&mut self.logical_layout.declarations);
Instruction::ext_inst_import(self.gl450_ext_inst_id, "GLSL.std.450") Instruction::ext_inst_import(self.gl450_ext_inst_id, "GLSL.std.450")
.to_words(&mut self.logical_layout.ext_inst_imports); .to_words(&mut self.logical_layout.ext_inst_imports);

View File

@@ -7,22 +7,59 @@ Backend for [WGSL][wgsl] (WebGPU Shading Language).
mod polyfill; mod polyfill;
mod writer; mod writer;
use alloc::format;
use alloc::string::String;
use thiserror::Error; use thiserror::Error;
pub use writer::{Writer, WriterFlags}; pub use writer::{Writer, WriterFlags};
use crate::common::wgsl;
#[derive(Error, Debug)] #[derive(Error, Debug)]
pub enum Error { pub enum Error {
#[error(transparent)] #[error(transparent)]
FmtError(#[from] std::fmt::Error), FmtError(#[from] core::fmt::Error),
#[error("{0}")] #[error("{0}")]
Custom(String), Custom(String),
#[error("{0}")] #[error("{0}")]
Unimplemented(String), // TODO: Error used only during development Unimplemented(String), // TODO: Error used only during development
#[error("Unsupported math function: {0:?}")]
UnsupportedMathFunction(crate::MathFunction),
#[error("Unsupported relational function: {0:?}")] #[error("Unsupported relational function: {0:?}")]
UnsupportedRelationalFunction(crate::RelationalFunction), UnsupportedRelationalFunction(crate::RelationalFunction),
#[error("Unsupported {kind}: {value}")]
Unsupported {
/// What kind of unsupported thing this is: interpolation, builtin, etc.
kind: &'static str,
/// The debug form of the Naga IR value that this backend can't express.
value: String,
},
}
impl Error {
/// Produce an [`Unsupported`] error for `value`.
///
/// [`Unsupported`]: Error::Unsupported
fn unsupported<T: core::fmt::Debug>(kind: &'static str, value: T) -> Error {
Error::Unsupported {
kind,
value: format!("{value:?}"),
}
}
}
trait ToWgslIfImplemented {
fn to_wgsl_if_implemented(self) -> Result<&'static str, Error>;
}
impl<T> ToWgslIfImplemented for T
where
T: wgsl::TryToWgsl + core::fmt::Debug + Copy,
{
fn to_wgsl_if_implemented(self) -> Result<&'static str, Error> {
self.try_to_wgsl()
.ok_or_else(|| Error::unsupported(T::DESCRIPTION, self))
}
} }
pub fn write_string( pub fn write_string(

View File

@@ -1,11 +1,23 @@
use alloc::{
format,
string::{String, ToString},
vec,
vec::Vec,
};
use core::fmt::Write;
use super::Error; use super::Error;
use super::ToWgslIfImplemented as _;
use crate::back::wgsl::polyfill::InversePolyfill; use crate::back::wgsl::polyfill::InversePolyfill;
use crate::{ use crate::{
back::{self, Baked}, back::{self, Baked},
common::{
self,
wgsl::{address_space_str, ToWgsl, TryToWgsl},
},
proc::{self, ExpressionKindTracker, NameKey}, proc::{self, ExpressionKindTracker, NameKey},
valid, Handle, Module, ShaderStage, TypeInner, valid, Handle, Module, ShaderStage, TypeInner,
}; };
use std::fmt::Write;
/// Shorthand result used internally by the backend /// Shorthand result used internally by the backend
type BackendResult = Result<(), Error>; type BackendResult = Result<(), Error>;
@@ -68,7 +80,6 @@ pub struct Writer<W> {
names: crate::FastHashMap<NameKey, String>, names: crate::FastHashMap<NameKey, String>,
namer: proc::Namer, namer: proc::Namer,
named_expressions: crate::NamedExpressions, named_expressions: crate::NamedExpressions,
ep_results: Vec<(ShaderStage, Handle<crate::Type>)>,
required_polyfills: crate::FastIndexSet<InversePolyfill>, required_polyfills: crate::FastIndexSet<InversePolyfill>,
} }
@@ -80,7 +91,6 @@ impl<W: Write> Writer<W> {
names: crate::FastHashMap::default(), names: crate::FastHashMap::default(),
namer: proc::Namer::default(), namer: proc::Namer::default(),
named_expressions: crate::NamedExpressions::default(), named_expressions: crate::NamedExpressions::default(),
ep_results: vec![],
required_polyfills: crate::FastIndexSet::default(), required_polyfills: crate::FastIndexSet::default(),
} }
} }
@@ -97,7 +107,6 @@ impl<W: Write> Writer<W> {
&mut self.names, &mut self.names,
); );
self.named_expressions.clear(); self.named_expressions.clear();
self.ep_results.clear();
self.required_polyfills.clear(); self.required_polyfills.clear();
} }
@@ -118,13 +127,6 @@ impl<W: Write> Writer<W> {
self.reset(module); self.reset(module);
// Save all ep result types
for ep in &module.entry_points {
if let Some(ref result) = ep.function.result {
self.ep_results.push((ep.stage, result.ty));
}
}
// Write all structs // Write all structs
for (handle, ty) in module.types.iter() { for (handle, ty) in module.types.iter() {
if let TypeInner::Struct { ref members, .. } = ty.inner { if let TypeInner::Struct { ref members, .. } = ty.inner {
@@ -217,29 +219,6 @@ impl<W: Write> Writer<W> {
Ok(()) Ok(())
} }
/// Helper method used to write struct name
///
/// # Notes
/// Adds no trailing or leading whitespace
fn write_struct_name(&mut self, module: &Module, handle: Handle<crate::Type>) -> BackendResult {
if module.types[handle].name.is_none() {
if let Some(&(stage, _)) = self.ep_results.iter().find(|&&(_, ty)| ty == handle) {
let name = match stage {
ShaderStage::Compute => "ComputeOutput",
ShaderStage::Fragment => "FragmentOutput",
ShaderStage::Vertex => "VertexOutput",
};
write!(self.out, "{name}")?;
return Ok(());
}
}
write!(self.out, "{}", self.names[&NameKey::Type(handle)])?;
Ok(())
}
/// Helper method used to write /// Helper method used to write
/// [functions](https://gpuweb.github.io/gpuweb/wgsl/#functions) /// [functions](https://gpuweb.github.io/gpuweb/wgsl/#functions)
/// ///
@@ -342,7 +321,7 @@ impl<W: Write> Writer<W> {
Attribute::Location(id) => write!(self.out, "@location({id}) ")?, Attribute::Location(id) => write!(self.out, "@location({id}) ")?,
Attribute::SecondBlendSource => write!(self.out, "@second_blend_source ")?, Attribute::SecondBlendSource => write!(self.out, "@second_blend_source ")?,
Attribute::BuiltIn(builtin_attrib) => { Attribute::BuiltIn(builtin_attrib) => {
let builtin = builtin_str(builtin_attrib)?; let builtin = builtin_attrib.to_wgsl_if_implemented()?;
write!(self.out, "@builtin({builtin}) ")?; write!(self.out, "@builtin({builtin}) ")?;
} }
Attribute::Stage(shader_stage) => { Attribute::Stage(shader_stage) => {
@@ -365,24 +344,18 @@ impl<W: Write> Writer<W> {
Attribute::Invariant => write!(self.out, "@invariant ")?, Attribute::Invariant => write!(self.out, "@invariant ")?,
Attribute::Interpolate(interpolation, sampling) => { Attribute::Interpolate(interpolation, sampling) => {
if sampling.is_some() && sampling != Some(crate::Sampling::Center) { if sampling.is_some() && sampling != Some(crate::Sampling::Center) {
write!( let interpolation = interpolation
self.out, .unwrap_or(crate::Interpolation::Perspective)
"@interpolate({}, {}) ", .to_wgsl();
interpolation_str( let sampling = sampling.unwrap_or(crate::Sampling::Center).to_wgsl();
interpolation.unwrap_or(crate::Interpolation::Perspective) write!(self.out, "@interpolate({interpolation}, {sampling}) ")?;
),
sampling_str(sampling.unwrap_or(crate::Sampling::Center))
)?;
} else if interpolation.is_some() } else if interpolation.is_some()
&& interpolation != Some(crate::Interpolation::Perspective) && interpolation != Some(crate::Interpolation::Perspective)
{ {
write!( let interpolation = interpolation
self.out, .unwrap_or(crate::Interpolation::Perspective)
"@interpolate({}) ", .to_wgsl();
interpolation_str( write!(self.out, "@interpolate({interpolation}) ")?;
interpolation.unwrap_or(crate::Interpolation::Perspective)
)
)?;
} }
} }
}; };
@@ -400,8 +373,7 @@ impl<W: Write> Writer<W> {
handle: Handle<crate::Type>, handle: Handle<crate::Type>,
members: &[crate::StructMember], members: &[crate::StructMember],
) -> BackendResult { ) -> BackendResult {
write!(self.out, "struct ")?; write!(self.out, "struct {}", self.names[&NameKey::Type(handle)])?;
self.write_struct_name(module, handle)?;
write!(self.out, " {{")?; write!(self.out, " {{")?;
writeln!(self.out)?; writeln!(self.out)?;
for (index, member) in members.iter().enumerate() { for (index, member) in members.iter().enumerate() {
@@ -432,7 +404,9 @@ impl<W: Write> Writer<W> {
fn write_type(&mut self, module: &Module, ty: Handle<crate::Type>) -> BackendResult { fn write_type(&mut self, module: &Module, ty: Handle<crate::Type>) -> BackendResult {
let inner = &module.types[ty].inner; let inner = &module.types[ty].inner;
match *inner { match *inner {
TypeInner::Struct { .. } => self.write_struct_name(module, ty)?, TypeInner::Struct { .. } => {
write!(self.out, "{}", self.names[&NameKey::Type(ty)])?;
}
ref other => self.write_value_type(module, other)?, ref other => self.write_value_type(module, other)?,
} }
@@ -448,8 +422,8 @@ impl<W: Write> Writer<W> {
TypeInner::Vector { size, scalar } => write!( TypeInner::Vector { size, scalar } => write!(
self.out, self.out,
"vec{}<{}>", "vec{}<{}>",
back::vector_size_str(size), common::vector_size_str(size),
scalar_kind_str(scalar), scalar.to_wgsl_if_implemented()?,
)?, )?,
TypeInner::Sampler { comparison: false } => { TypeInner::Sampler { comparison: false } => {
write!(self.out, "sampler")?; write!(self.out, "sampler")?;
@@ -465,13 +439,13 @@ impl<W: Write> Writer<W> {
// More about texture types: https://gpuweb.github.io/gpuweb/wgsl/#sampled-texture-type // More about texture types: https://gpuweb.github.io/gpuweb/wgsl/#sampled-texture-type
use crate::ImageClass as Ic; use crate::ImageClass as Ic;
let dim_str = image_dimension_str(dim); let dim_str = dim.to_wgsl();
let arrayed_str = if arrayed { "_array" } else { "" }; let arrayed_str = if arrayed { "_array" } else { "" };
let (class_str, multisampled_str, format_str, storage_str) = match class { let (class_str, multisampled_str, format_str, storage_str) = match class {
Ic::Sampled { kind, multi } => ( Ic::Sampled { kind, multi } => (
"", "",
if multi { "multisampled_" } else { "" }, if multi { "multisampled_" } else { "" },
scalar_kind_str(crate::Scalar { kind, width: 4 }), crate::Scalar { kind, width: 4 }.to_wgsl_if_implemented()?,
"", "",
), ),
Ic::Depth { multi } => { Ic::Depth { multi } => {
@@ -480,7 +454,7 @@ impl<W: Write> Writer<W> {
Ic::Storage { format, access } => ( Ic::Storage { format, access } => (
"storage_", "storage_",
"", "",
storage_format_str(format), format.to_wgsl(),
if access.contains(crate::StorageAccess::ATOMIC) { if access.contains(crate::StorageAccess::ATOMIC) {
",atomic" ",atomic"
} else if access } else if access
@@ -504,10 +478,10 @@ impl<W: Write> Writer<W> {
} }
} }
TypeInner::Scalar(scalar) => { TypeInner::Scalar(scalar) => {
write!(self.out, "{}", scalar_kind_str(scalar))?; write!(self.out, "{}", scalar.to_wgsl_if_implemented()?)?;
} }
TypeInner::Atomic(scalar) => { TypeInner::Atomic(scalar) => {
write!(self.out, "atomic<{}>", scalar_kind_str(scalar))?; write!(self.out, "atomic<{}>", scalar.to_wgsl_if_implemented()?)?;
} }
TypeInner::Array { TypeInner::Array {
base, base,
@@ -557,9 +531,9 @@ impl<W: Write> Writer<W> {
write!( write!(
self.out, self.out,
"mat{}x{}<{}>", "mat{}x{}<{}>",
back::vector_size_str(columns), common::vector_size_str(columns),
back::vector_size_str(rows), common::vector_size_str(rows),
scalar_kind_str(scalar) scalar.to_wgsl_if_implemented()?
)?; )?;
} }
TypeInner::Pointer { base, space } => { TypeInner::Pointer { base, space } => {
@@ -585,7 +559,12 @@ impl<W: Write> Writer<W> {
} => { } => {
let (address, maybe_access) = address_space_str(space); let (address, maybe_access) = address_space_str(space);
if let Some(space) = address { if let Some(space) = address {
write!(self.out, "ptr<{}, {}", space, scalar_kind_str(scalar))?; write!(
self.out,
"ptr<{}, {}",
space,
scalar.to_wgsl_if_implemented()?
)?;
if let Some(access) = maybe_access { if let Some(access) = maybe_access {
write!(self.out, ", {access}")?; write!(self.out, ", {access}")?;
} }
@@ -607,8 +586,8 @@ impl<W: Write> Writer<W> {
self.out, self.out,
"ptr<{}, vec{}<{}>", "ptr<{}, vec{}<{}>",
space, space,
back::vector_size_str(size), common::vector_size_str(size),
scalar_kind_str(scalar) scalar.to_wgsl_if_implemented()?
)?; )?;
if let Some(access) = maybe_access { if let Some(access) = maybe_access {
write!(self.out, ", {access}")?; write!(self.out, ", {access}")?;
@@ -621,7 +600,10 @@ impl<W: Write> Writer<W> {
} }
write!(self.out, ">")?; write!(self.out, ">")?;
} }
TypeInner::AccelerationStructure => write!(self.out, "acceleration_structure")?, TypeInner::AccelerationStructure { vertex_return } => {
let caps = if vertex_return { "<vertex_return>" } else { "" };
write!(self.out, "acceleration_structure{}", caps)?
}
_ => { _ => {
return Err(Error::Unimplemented(format!("write_value_type {inner:?}"))); return Err(Error::Unimplemented(format!("write_value_type {inner:?}")));
} }
@@ -973,6 +955,10 @@ impl<W: Write> Writer<W> {
if barrier.contains(crate::Barrier::SUB_GROUP) { if barrier.contains(crate::Barrier::SUB_GROUP) {
writeln!(self.out, "{level}subgroupBarrier();")?; writeln!(self.out, "{level}subgroupBarrier();")?;
} }
if barrier.contains(crate::Barrier::TEXTURE) {
writeln!(self.out, "{level}textureBarrier();")?;
}
} }
Statement::RayQuery { .. } => unreachable!(), Statement::RayQuery { .. } => unreachable!(),
Statement::SubgroupBallot { result, predicate } => { Statement::SubgroupBallot { result, predicate } => {
@@ -1317,7 +1303,7 @@ impl<W: Write> Writer<W> {
write!(self.out, ")")? write!(self.out, ")")?
} }
Expression::Splat { size, value } => { Expression::Splat { size, value } => {
let size = back::vector_size_str(size); let size = common::vector_size_str(size);
write!(self.out, "vec{size}(")?; write!(self.out, "vec{size}(")?;
write_expression(self, value)?; write_expression(self, value)?;
write!(self.out, ")")?; write!(self.out, ")")?;
@@ -1609,12 +1595,12 @@ impl<W: Write> Writer<W> {
kind, kind,
width: convert.unwrap_or(scalar.width), width: convert.unwrap_or(scalar.width),
}; };
let scalar_kind_str = scalar_kind_str(scalar); let scalar_kind_str = scalar.to_wgsl_if_implemented()?;
write!( write!(
self.out, self.out,
"mat{}x{}<{}>", "mat{}x{}<{}>",
back::vector_size_str(columns), common::vector_size_str(columns),
back::vector_size_str(rows), common::vector_size_str(rows),
scalar_kind_str scalar_kind_str
)?; )?;
} }
@@ -1626,8 +1612,8 @@ impl<W: Write> Writer<W> {
kind, kind,
width: convert.unwrap_or(width), width: convert.unwrap_or(width),
}; };
let vector_size_str = back::vector_size_str(size); let vector_size_str = common::vector_size_str(size);
let scalar_kind_str = scalar_kind_str(scalar); let scalar_kind_str = scalar.to_wgsl_if_implemented()?;
if convert.is_some() { if convert.is_some() {
write!(self.out, "vec{vector_size_str}<{scalar_kind_str}>")?; write!(self.out, "vec{vector_size_str}<{scalar_kind_str}>")?;
} else { } else {
@@ -1639,7 +1625,7 @@ impl<W: Write> Writer<W> {
kind, kind,
width: convert.unwrap_or(width), width: convert.unwrap_or(width),
}; };
let scalar_kind_str = scalar_kind_str(scalar); let scalar_kind_str = scalar.to_wgsl_if_implemented()?;
if convert.is_some() { if convert.is_some() {
write!(self.out, "{scalar_kind_str}")? write!(self.out, "{scalar_kind_str}")?
} else { } else {
@@ -1697,98 +1683,19 @@ impl<W: Write> Writer<W> {
InversePolyfill(InversePolyfill), InversePolyfill(InversePolyfill),
} }
let function = match fun { let function = match fun.try_to_wgsl() {
Mf::Abs => Function::Regular("abs"), Some(name) => Function::Regular(name),
Mf::Min => Function::Regular("min"), None => match fun {
Mf::Max => Function::Regular("max"), Mf::Inverse => {
Mf::Clamp => Function::Regular("clamp"), let ty = func_ctx.resolve_type(arg, &module.types);
Mf::Saturate => Function::Regular("saturate"), let Some(overload) = InversePolyfill::find_overload(ty) else {
// trigonometry return Err(Error::unsupported("math function", fun));
Mf::Cos => Function::Regular("cos"), };
Mf::Cosh => Function::Regular("cosh"),
Mf::Sin => Function::Regular("sin"),
Mf::Sinh => Function::Regular("sinh"),
Mf::Tan => Function::Regular("tan"),
Mf::Tanh => Function::Regular("tanh"),
Mf::Acos => Function::Regular("acos"),
Mf::Asin => Function::Regular("asin"),
Mf::Atan => Function::Regular("atan"),
Mf::Atan2 => Function::Regular("atan2"),
Mf::Asinh => Function::Regular("asinh"),
Mf::Acosh => Function::Regular("acosh"),
Mf::Atanh => Function::Regular("atanh"),
Mf::Radians => Function::Regular("radians"),
Mf::Degrees => Function::Regular("degrees"),
// decomposition
Mf::Ceil => Function::Regular("ceil"),
Mf::Floor => Function::Regular("floor"),
Mf::Round => Function::Regular("round"),
Mf::Fract => Function::Regular("fract"),
Mf::Trunc => Function::Regular("trunc"),
Mf::Modf => Function::Regular("modf"),
Mf::Frexp => Function::Regular("frexp"),
Mf::Ldexp => Function::Regular("ldexp"),
// exponent
Mf::Exp => Function::Regular("exp"),
Mf::Exp2 => Function::Regular("exp2"),
Mf::Log => Function::Regular("log"),
Mf::Log2 => Function::Regular("log2"),
Mf::Pow => Function::Regular("pow"),
// geometry
Mf::Dot => Function::Regular("dot"),
Mf::Cross => Function::Regular("cross"),
Mf::Distance => Function::Regular("distance"),
Mf::Length => Function::Regular("length"),
Mf::Normalize => Function::Regular("normalize"),
Mf::FaceForward => Function::Regular("faceForward"),
Mf::Reflect => Function::Regular("reflect"),
Mf::Refract => Function::Regular("refract"),
// computational
Mf::Sign => Function::Regular("sign"),
Mf::Fma => Function::Regular("fma"),
Mf::Mix => Function::Regular("mix"),
Mf::Step => Function::Regular("step"),
Mf::SmoothStep => Function::Regular("smoothstep"),
Mf::Sqrt => Function::Regular("sqrt"),
Mf::InverseSqrt => Function::Regular("inverseSqrt"),
Mf::Transpose => Function::Regular("transpose"),
Mf::Determinant => Function::Regular("determinant"),
Mf::QuantizeToF16 => Function::Regular("quantizeToF16"),
// bits
Mf::CountTrailingZeros => Function::Regular("countTrailingZeros"),
Mf::CountLeadingZeros => Function::Regular("countLeadingZeros"),
Mf::CountOneBits => Function::Regular("countOneBits"),
Mf::ReverseBits => Function::Regular("reverseBits"),
Mf::ExtractBits => Function::Regular("extractBits"),
Mf::InsertBits => Function::Regular("insertBits"),
Mf::FirstTrailingBit => Function::Regular("firstTrailingBit"),
Mf::FirstLeadingBit => Function::Regular("firstLeadingBit"),
// data packing
Mf::Pack4x8snorm => Function::Regular("pack4x8snorm"),
Mf::Pack4x8unorm => Function::Regular("pack4x8unorm"),
Mf::Pack2x16snorm => Function::Regular("pack2x16snorm"),
Mf::Pack2x16unorm => Function::Regular("pack2x16unorm"),
Mf::Pack2x16float => Function::Regular("pack2x16float"),
Mf::Pack4xI8 => Function::Regular("pack4xI8"),
Mf::Pack4xU8 => Function::Regular("pack4xU8"),
// data unpacking
Mf::Unpack4x8snorm => Function::Regular("unpack4x8snorm"),
Mf::Unpack4x8unorm => Function::Regular("unpack4x8unorm"),
Mf::Unpack2x16snorm => Function::Regular("unpack2x16snorm"),
Mf::Unpack2x16unorm => Function::Regular("unpack2x16unorm"),
Mf::Unpack2x16float => Function::Regular("unpack2x16float"),
Mf::Unpack4xI8 => Function::Regular("unpack4xI8"),
Mf::Unpack4xU8 => Function::Regular("unpack4xU8"),
Mf::Inverse => {
let typ = func_ctx.resolve_type(arg, &module.types);
let Some(overload) = InversePolyfill::find_overload(typ) else { Function::InversePolyfill(overload)
return Err(Error::UnsupportedMathFunction(fun)); }
}; _ => return Err(Error::unsupported("math function", fun)),
},
Function::InversePolyfill(overload)
}
Mf::Outer => return Err(Error::UnsupportedMathFunction(fun)),
}; };
match function { match function {
@@ -1879,7 +1786,8 @@ impl<W: Write> Writer<W> {
write!(self.out, ")")? write!(self.out, ")")?
} }
// Not supported yet // Not supported yet
Expression::RayQueryGetIntersection { .. } => unreachable!(), Expression::RayQueryGetIntersection { .. }
| Expression::RayQueryVertexPositions { .. } => unreachable!(),
// Nothing to do here, since call expression already cached // Nothing to do here, since call expression already cached
Expression::CallResult(_) Expression::CallResult(_)
| Expression::AtomicResult { .. } | Expression::AtomicResult { .. }
@@ -1969,186 +1877,6 @@ impl<W: Write> Writer<W> {
} }
} }
fn builtin_str(built_in: crate::BuiltIn) -> Result<&'static str, Error> {
use crate::BuiltIn as Bi;
Ok(match built_in {
Bi::VertexIndex => "vertex_index",
Bi::InstanceIndex => "instance_index",
Bi::Position { .. } => "position",
Bi::FrontFacing => "front_facing",
Bi::FragDepth => "frag_depth",
Bi::LocalInvocationId => "local_invocation_id",
Bi::LocalInvocationIndex => "local_invocation_index",
Bi::GlobalInvocationId => "global_invocation_id",
Bi::WorkGroupId => "workgroup_id",
Bi::NumWorkGroups => "num_workgroups",
Bi::SampleIndex => "sample_index",
Bi::SampleMask => "sample_mask",
Bi::PrimitiveIndex => "primitive_index",
Bi::ViewIndex => "view_index",
Bi::NumSubgroups => "num_subgroups",
Bi::SubgroupId => "subgroup_id",
Bi::SubgroupSize => "subgroup_size",
Bi::SubgroupInvocationId => "subgroup_invocation_id",
Bi::BaseInstance
| Bi::BaseVertex
| Bi::ClipDistance
| Bi::CullDistance
| Bi::PointSize
| Bi::PointCoord
| Bi::WorkGroupSize
| Bi::DrawID => return Err(Error::Custom(format!("Unsupported builtin {built_in:?}"))),
})
}
const fn image_dimension_str(dim: crate::ImageDimension) -> &'static str {
use crate::ImageDimension as IDim;
match dim {
IDim::D1 => "1d",
IDim::D2 => "2d",
IDim::D3 => "3d",
IDim::Cube => "cube",
}
}
const fn scalar_kind_str(scalar: crate::Scalar) -> &'static str {
use crate::Scalar;
use crate::ScalarKind as Sk;
match scalar {
Scalar {
kind: Sk::Float,
width: 8,
} => "f64",
Scalar {
kind: Sk::Float,
width: 4,
} => "f32",
Scalar {
kind: Sk::Sint,
width: 4,
} => "i32",
Scalar {
kind: Sk::Uint,
width: 4,
} => "u32",
Scalar {
kind: Sk::Sint,
width: 8,
} => "i64",
Scalar {
kind: Sk::Uint,
width: 8,
} => "u64",
Scalar {
kind: Sk::Bool,
width: 1,
} => "bool",
_ => unreachable!(),
}
}
const fn storage_format_str(format: crate::StorageFormat) -> &'static str {
use crate::StorageFormat as Sf;
match format {
Sf::R8Unorm => "r8unorm",
Sf::R8Snorm => "r8snorm",
Sf::R8Uint => "r8uint",
Sf::R8Sint => "r8sint",
Sf::R16Uint => "r16uint",
Sf::R16Sint => "r16sint",
Sf::R16Float => "r16float",
Sf::Rg8Unorm => "rg8unorm",
Sf::Rg8Snorm => "rg8snorm",
Sf::Rg8Uint => "rg8uint",
Sf::Rg8Sint => "rg8sint",
Sf::R32Uint => "r32uint",
Sf::R32Sint => "r32sint",
Sf::R32Float => "r32float",
Sf::Rg16Uint => "rg16uint",
Sf::Rg16Sint => "rg16sint",
Sf::Rg16Float => "rg16float",
Sf::Rgba8Unorm => "rgba8unorm",
Sf::Rgba8Snorm => "rgba8snorm",
Sf::Rgba8Uint => "rgba8uint",
Sf::Rgba8Sint => "rgba8sint",
Sf::Bgra8Unorm => "bgra8unorm",
Sf::Rgb10a2Uint => "rgb10a2uint",
Sf::Rgb10a2Unorm => "rgb10a2unorm",
Sf::Rg11b10Ufloat => "rg11b10float",
Sf::R64Uint => "r64uint",
Sf::Rg32Uint => "rg32uint",
Sf::Rg32Sint => "rg32sint",
Sf::Rg32Float => "rg32float",
Sf::Rgba16Uint => "rgba16uint",
Sf::Rgba16Sint => "rgba16sint",
Sf::Rgba16Float => "rgba16float",
Sf::Rgba32Uint => "rgba32uint",
Sf::Rgba32Sint => "rgba32sint",
Sf::Rgba32Float => "rgba32float",
Sf::R16Unorm => "r16unorm",
Sf::R16Snorm => "r16snorm",
Sf::Rg16Unorm => "rg16unorm",
Sf::Rg16Snorm => "rg16snorm",
Sf::Rgba16Unorm => "rgba16unorm",
Sf::Rgba16Snorm => "rgba16snorm",
}
}
/// Helper function that returns the string corresponding to the WGSL interpolation qualifier
const fn interpolation_str(interpolation: crate::Interpolation) -> &'static str {
use crate::Interpolation as I;
match interpolation {
I::Perspective => "perspective",
I::Linear => "linear",
I::Flat => "flat",
}
}
/// Return the WGSL auxiliary qualifier for the given sampling value.
const fn sampling_str(sampling: crate::Sampling) -> &'static str {
use crate::Sampling as S;
match sampling {
S::Center => "",
S::Centroid => "centroid",
S::Sample => "sample",
S::First => "first",
S::Either => "either",
}
}
const fn address_space_str(
space: crate::AddressSpace,
) -> (Option<&'static str>, Option<&'static str>) {
use crate::AddressSpace as As;
(
Some(match space {
As::Private => "private",
As::Uniform => "uniform",
As::Storage { access } => {
if access.contains(crate::StorageAccess::ATOMIC) {
return (Some("storage"), Some("atomic"));
} else if access.contains(crate::StorageAccess::STORE) {
return (Some("storage"), Some("read_write"));
} else {
"storage"
}
}
As::PushConstant => "push_constant",
As::WorkGroup => "workgroup",
As::Handle => return (None, None),
As::Function => "function",
}),
None,
)
}
fn map_binding_to_attribute(binding: &crate::Binding) -> Vec<Attribute> { fn map_binding_to_attribute(binding: &crate::Binding) -> Vec<Attribute> {
match *binding { match *binding {
crate::Binding::BuiltIn(built_in) => { crate::Binding::BuiltIn(built_in) => {

View File

@@ -1,5 +1,7 @@
use alloc::vec::Vec;
use core::ops::{Deref, DerefMut, RangeBounds};
use crate::{Span, Statement}; use crate::{Span, Statement};
use std::ops::{Deref, DerefMut, RangeBounds};
/// A code block is a vector of statements, with maybe a vector of spans. /// A code block is a vector of statements, with maybe a vector of spans.
#[derive(Debug, Clone, Default)] #[derive(Debug, Clone, Default)]
@@ -21,7 +23,7 @@ impl Block {
} }
pub fn from_vec(body: Vec<Statement>) -> Self { pub fn from_vec(body: Vec<Statement>) -> Self {
let span_info = std::iter::repeat(Span::default()) let span_info = core::iter::repeat(Span::default())
.take(body.len()) .take(body.len())
.collect(); .collect();
Self { body, span_info } Self { body, span_info }
@@ -105,9 +107,9 @@ impl DerefMut for Block {
impl<'a> IntoIterator for &'a Block { impl<'a> IntoIterator for &'a Block {
type Item = &'a Statement; type Item = &'a Statement;
type IntoIter = std::slice::Iter<'a, Statement>; type IntoIter = core::slice::Iter<'a, Statement>;
fn into_iter(self) -> std::slice::Iter<'a, Statement> { fn into_iter(self) -> core::slice::Iter<'a, Statement> {
self.iter() self.iter()
} }
} }

View File

@@ -1,3 +1,12 @@
//! Code common to the front and backends for specific languages. //! Code common to the front and backends for specific languages.
pub mod wgsl; pub mod wgsl;
/// Helper function that returns the string corresponding to the [`VectorSize`](crate::VectorSize)
pub const fn vector_size_str(size: crate::VectorSize) -> &'static str {
match size {
crate::VectorSize::Bi => "2",
crate::VectorSize::Tri => "3",
crate::VectorSize::Quad => "4",
}
}

View File

@@ -1,6 +1,6 @@
//! Code shared between the WGSL front and back ends. //! Code shared between the WGSL front and back ends.
use std::fmt::{self, Display, Formatter}; use core::fmt::{self, Display, Formatter};
use crate::diagnostic_filter::{ use crate::diagnostic_filter::{
FilterableTriggeringRule, Severity, StandardFilterableTriggeringRule, FilterableTriggeringRule, Severity, StandardFilterableTriggeringRule,
@@ -67,3 +67,318 @@ impl StandardFilterableTriggeringRule {
} }
} }
} }
/// Types that can return the WGSL source representation of their
/// values as a `'static` string.
///
/// This trait is specifically for types whose WGSL forms are simple
/// enough that they can always be returned as a static string.
///
/// - If only some values have a WGSL representation, consider
/// implementing [`TryToWgsl`] instead.
///
/// - If a type's WGSL form requires dynamic formatting, so that
/// returning a `&'static str` isn't feasible, consider implementing
/// [`std::fmt::Display`] on some wrapper type instead.
pub trait ToWgsl: Sized {
/// Return WGSL source code representation of `self`.
fn to_wgsl(self) -> &'static str;
}
/// Types that may be able to return the WGSL source representation
/// for their values as a `'static' string.
///
/// This trait is specifically for types whose values are either
/// simple enough that their WGSL form can be represented a static
/// string, or aren't representable in WGSL at all.
///
/// - If all values in the type have `&'static str` representations in
/// WGSL, consider implementing [`ToWgsl`] instead.
///
/// - If a type's WGSL form requires dynamic formatting, so that
/// returning a `&'static str` isn't feasible, consider implementing
/// [`std::fmt::Display`] on some wrapper type instead.
pub trait TryToWgsl: Sized {
/// Return the WGSL form of `self` as a `'static` string.
///
/// If `self` doesn't have a representation in WGSL (standard or
/// as extended by Naga), then return `None`.
fn try_to_wgsl(self) -> Option<&'static str>;
/// What kind of WGSL thing `Self` represents.
const DESCRIPTION: &'static str;
}
impl TryToWgsl for crate::MathFunction {
const DESCRIPTION: &'static str = "math function";
fn try_to_wgsl(self) -> Option<&'static str> {
use crate::MathFunction as Mf;
Some(match self {
Mf::Abs => "abs",
Mf::Min => "min",
Mf::Max => "max",
Mf::Clamp => "clamp",
Mf::Saturate => "saturate",
Mf::Cos => "cos",
Mf::Cosh => "cosh",
Mf::Sin => "sin",
Mf::Sinh => "sinh",
Mf::Tan => "tan",
Mf::Tanh => "tanh",
Mf::Acos => "acos",
Mf::Asin => "asin",
Mf::Atan => "atan",
Mf::Atan2 => "atan2",
Mf::Asinh => "asinh",
Mf::Acosh => "acosh",
Mf::Atanh => "atanh",
Mf::Radians => "radians",
Mf::Degrees => "degrees",
Mf::Ceil => "ceil",
Mf::Floor => "floor",
Mf::Round => "round",
Mf::Fract => "fract",
Mf::Trunc => "trunc",
Mf::Modf => "modf",
Mf::Frexp => "frexp",
Mf::Ldexp => "ldexp",
Mf::Exp => "exp",
Mf::Exp2 => "exp2",
Mf::Log => "log",
Mf::Log2 => "log2",
Mf::Pow => "pow",
Mf::Dot => "dot",
Mf::Cross => "cross",
Mf::Distance => "distance",
Mf::Length => "length",
Mf::Normalize => "normalize",
Mf::FaceForward => "faceForward",
Mf::Reflect => "reflect",
Mf::Refract => "refract",
Mf::Sign => "sign",
Mf::Fma => "fma",
Mf::Mix => "mix",
Mf::Step => "step",
Mf::SmoothStep => "smoothstep",
Mf::Sqrt => "sqrt",
Mf::InverseSqrt => "inverseSqrt",
Mf::Transpose => "transpose",
Mf::Determinant => "determinant",
Mf::QuantizeToF16 => "quantizeToF16",
Mf::CountTrailingZeros => "countTrailingZeros",
Mf::CountLeadingZeros => "countLeadingZeros",
Mf::CountOneBits => "countOneBits",
Mf::ReverseBits => "reverseBits",
Mf::ExtractBits => "extractBits",
Mf::InsertBits => "insertBits",
Mf::FirstTrailingBit => "firstTrailingBit",
Mf::FirstLeadingBit => "firstLeadingBit",
Mf::Pack4x8snorm => "pack4x8snorm",
Mf::Pack4x8unorm => "pack4x8unorm",
Mf::Pack2x16snorm => "pack2x16snorm",
Mf::Pack2x16unorm => "pack2x16unorm",
Mf::Pack2x16float => "pack2x16float",
Mf::Pack4xI8 => "pack4xI8",
Mf::Pack4xU8 => "pack4xU8",
Mf::Unpack4x8snorm => "unpack4x8snorm",
Mf::Unpack4x8unorm => "unpack4x8unorm",
Mf::Unpack2x16snorm => "unpack2x16snorm",
Mf::Unpack2x16unorm => "unpack2x16unorm",
Mf::Unpack2x16float => "unpack2x16float",
Mf::Unpack4xI8 => "unpack4xI8",
Mf::Unpack4xU8 => "unpack4xU8",
// Non-standard math functions.
Mf::Inverse | Mf::Outer => return None,
})
}
}
impl TryToWgsl for crate::BuiltIn {
const DESCRIPTION: &'static str = "builtin value";
fn try_to_wgsl(self) -> Option<&'static str> {
use crate::BuiltIn as Bi;
Some(match self {
Bi::Position { .. } => "position",
Bi::ViewIndex => "view_index",
Bi::InstanceIndex => "instance_index",
Bi::VertexIndex => "vertex_index",
Bi::FragDepth => "frag_depth",
Bi::FrontFacing => "front_facing",
Bi::PrimitiveIndex => "primitive_index",
Bi::SampleIndex => "sample_index",
Bi::SampleMask => "sample_mask",
Bi::GlobalInvocationId => "global_invocation_id",
Bi::LocalInvocationId => "local_invocation_id",
Bi::LocalInvocationIndex => "local_invocation_index",
Bi::WorkGroupId => "workgroup_id",
Bi::NumWorkGroups => "num_workgroups",
Bi::NumSubgroups => "num_subgroups",
Bi::SubgroupId => "subgroup_id",
Bi::SubgroupSize => "subgroup_size",
Bi::SubgroupInvocationId => "subgroup_invocation_id",
// Non-standard built-ins.
Bi::BaseInstance
| Bi::BaseVertex
| Bi::ClipDistance
| Bi::CullDistance
| Bi::PointSize
| Bi::DrawID
| Bi::PointCoord
| Bi::WorkGroupSize => return None,
})
}
}
impl ToWgsl for crate::Interpolation {
fn to_wgsl(self) -> &'static str {
match self {
crate::Interpolation::Perspective => "perspective",
crate::Interpolation::Linear => "linear",
crate::Interpolation::Flat => "flat",
}
}
}
impl ToWgsl for crate::Sampling {
fn to_wgsl(self) -> &'static str {
match self {
crate::Sampling::Center => "center",
crate::Sampling::Centroid => "centroid",
crate::Sampling::Sample => "sample",
crate::Sampling::First => "first",
crate::Sampling::Either => "either",
}
}
}
impl ToWgsl for crate::StorageFormat {
fn to_wgsl(self) -> &'static str {
use crate::StorageFormat as Sf;
match self {
Sf::R8Unorm => "r8unorm",
Sf::R8Snorm => "r8snorm",
Sf::R8Uint => "r8uint",
Sf::R8Sint => "r8sint",
Sf::R16Uint => "r16uint",
Sf::R16Sint => "r16sint",
Sf::R16Float => "r16float",
Sf::Rg8Unorm => "rg8unorm",
Sf::Rg8Snorm => "rg8snorm",
Sf::Rg8Uint => "rg8uint",
Sf::Rg8Sint => "rg8sint",
Sf::R32Uint => "r32uint",
Sf::R32Sint => "r32sint",
Sf::R32Float => "r32float",
Sf::Rg16Uint => "rg16uint",
Sf::Rg16Sint => "rg16sint",
Sf::Rg16Float => "rg16float",
Sf::Rgba8Unorm => "rgba8unorm",
Sf::Rgba8Snorm => "rgba8snorm",
Sf::Rgba8Uint => "rgba8uint",
Sf::Rgba8Sint => "rgba8sint",
Sf::Bgra8Unorm => "bgra8unorm",
Sf::Rgb10a2Uint => "rgb10a2uint",
Sf::Rgb10a2Unorm => "rgb10a2unorm",
Sf::Rg11b10Ufloat => "rg11b10float",
Sf::R64Uint => "r64uint",
Sf::Rg32Uint => "rg32uint",
Sf::Rg32Sint => "rg32sint",
Sf::Rg32Float => "rg32float",
Sf::Rgba16Uint => "rgba16uint",
Sf::Rgba16Sint => "rgba16sint",
Sf::Rgba16Float => "rgba16float",
Sf::Rgba32Uint => "rgba32uint",
Sf::Rgba32Sint => "rgba32sint",
Sf::Rgba32Float => "rgba32float",
Sf::R16Unorm => "r16unorm",
Sf::R16Snorm => "r16snorm",
Sf::Rg16Unorm => "rg16unorm",
Sf::Rg16Snorm => "rg16snorm",
Sf::Rgba16Unorm => "rgba16unorm",
Sf::Rgba16Snorm => "rgba16snorm",
}
}
}
impl TryToWgsl for crate::Scalar {
const DESCRIPTION: &'static str = "scalar type";
fn try_to_wgsl(self) -> Option<&'static str> {
use crate::Scalar;
Some(match self {
Scalar::F64 => "f64",
Scalar::F32 => "f32",
Scalar::I32 => "i32",
Scalar::U32 => "u32",
Scalar::I64 => "i64",
Scalar::U64 => "u64",
Scalar::BOOL => "bool",
_ => return None,
})
}
}
impl ToWgsl for crate::ImageDimension {
fn to_wgsl(self) -> &'static str {
use crate::ImageDimension as IDim;
match self {
IDim::D1 => "1d",
IDim::D2 => "2d",
IDim::D3 => "3d",
IDim::Cube => "cube",
}
}
}
/// Return the WGSL address space and access mode strings for `space`.
///
/// Why don't we implement [`ToWgsl`] for [`AddressSpace`]?
///
/// In WGSL, the full form of a pointer type is `ptr<AS, T, AM>`, where:
/// - `AS` is the address space,
/// - `T` is the store type, and
/// - `AM` is the access mode.
///
/// Since the type `T` intervenes between the address space and the
/// access mode, there isn't really any individual WGSL grammar
/// production that corresponds to an [`AddressSpace`], so [`ToWgsl`]
/// is too simple-minded for this case.
///
/// Furthermore, we want to write `var<AS[, AM]>` for most address
/// spaces, but we want to just write `var foo: T` for handle types.
///
/// [`AddressSpace`]: crate::AddressSpace
pub const fn address_space_str(
space: crate::AddressSpace,
) -> (Option<&'static str>, Option<&'static str>) {
use crate::AddressSpace as As;
(
Some(match space {
As::Private => "private",
As::Uniform => "uniform",
As::Storage { access } => {
if access.contains(crate::StorageAccess::ATOMIC) {
return (Some("storage"), Some("atomic"));
} else if access.contains(crate::StorageAccess::STORE) {
return (Some("storage"), Some("read_write"));
} else {
"storage"
}
}
As::PushConstant => "push_constant",
As::WorkGroup => "workgroup",
As::Handle => return (None, None),
As::Function => "function",
}),
None,
)
}

View File

@@ -185,6 +185,12 @@ impl ExpressionTracer<'_> {
Iq::NumLevels | Iq::NumLayers | Iq::NumSamples => {} Iq::NumLevels | Iq::NumLayers | Iq::NumSamples => {}
} }
} }
Ex::RayQueryVertexPositions {
query,
committed: _,
} => {
self.expressions_used.insert(query);
}
Ex::Unary { op: _, expr } => { Ex::Unary { op: _, expr } => {
self.expressions_used.insert(expr); self.expressions_used.insert(expr);
} }
@@ -402,6 +408,10 @@ impl ModuleMap {
ref mut query, ref mut query,
committed: _, committed: _,
} => adjust(query), } => adjust(query),
Ex::RayQueryVertexPositions {
ref mut query,
committed: _,
} => adjust(query),
} }
} }

View File

@@ -101,7 +101,7 @@ impl FunctionMap {
self.expressions.adjust(&mut handle); self.expressions.adjust(&mut handle);
reuse.insert(handle, name); reuse.insert(handle, name);
} }
std::mem::swap(&mut function.named_expressions, reuse); core::mem::swap(&mut function.named_expressions, reuse);
assert!(reuse.is_empty()); assert!(reuse.is_empty());
// Adjust statements. // Adjust statements.

View File

@@ -1,3 +1,5 @@
use alloc::vec::Vec;
use crate::arena::{Arena, Handle, HandleSet, Range}; use crate::arena::{Arena, Handle, HandleSet, Range};
type Index = crate::non_max_u32::NonMaxU32; type Index = crate::non_max_u32::NonMaxU32;
@@ -12,7 +14,7 @@ pub struct HandleMap<T> {
new_index: Vec<Option<Index>>, new_index: Vec<Option<Index>>,
/// This type is indexed by values of type `T`. /// This type is indexed by values of type `T`.
as_keys: std::marker::PhantomData<T>, as_keys: core::marker::PhantomData<T>,
} }
impl<T: 'static> HandleMap<T> { impl<T: 'static> HandleMap<T> {
@@ -34,7 +36,7 @@ impl<T: 'static> HandleMap<T> {
} }
}) })
.collect(), .collect(),
as_keys: std::marker::PhantomData, as_keys: core::marker::PhantomData,
} }
} }
@@ -50,7 +52,7 @@ impl<T: 'static> HandleMap<T> {
pub fn try_adjust(&self, old: Handle<T>) -> Option<Handle<T>> { pub fn try_adjust(&self, old: Handle<T>) -> Option<Handle<T>> {
log::trace!( log::trace!(
"adjusting {} handle [{}] -> [{:?}]", "adjusting {} handle [{}] -> [{:?}]",
std::any::type_name::<T>(), core::any::type_name::<T>(),
old.index(), old.index(),
self.new_index[old.index()] self.new_index[old.index()]
); );

View File

@@ -4,10 +4,15 @@ mod handle_set_map;
mod statements; mod statements;
mod types; mod types;
use alloc::vec::Vec;
use crate::arena::HandleSet; use crate::arena::HandleSet;
use crate::{arena, compact::functions::FunctionTracer}; use crate::{arena, compact::functions::FunctionTracer};
use handle_set_map::HandleMap; use handle_set_map::HandleMap;
#[cfg(test)]
use alloc::{format, string::ToString};
/// Remove unused types, expressions, and constants from `module`. /// Remove unused types, expressions, and constants from `module`.
/// ///
/// Assume that the following are used by definition: /// Assume that the following are used by definition:
@@ -312,6 +317,7 @@ impl<'module> ModuleTracer<'module> {
let crate::SpecialTypes { let crate::SpecialTypes {
ref ray_desc, ref ray_desc,
ref ray_intersection, ref ray_intersection,
ref ray_vertex_return,
ref predeclared_types, ref predeclared_types,
} = *special_types; } = *special_types;
@@ -321,6 +327,9 @@ impl<'module> ModuleTracer<'module> {
if let Some(ray_intersection) = *ray_intersection { if let Some(ray_intersection) = *ray_intersection {
self.types_used.insert(ray_intersection); self.types_used.insert(ray_intersection);
} }
if let Some(ray_vertex_return) = *ray_vertex_return {
self.types_used.insert(ray_vertex_return);
}
for (_, &handle) in predeclared_types { for (_, &handle) in predeclared_types {
self.types_used.insert(handle); self.types_used.insert(handle);
} }
@@ -344,7 +353,7 @@ impl<'module> ModuleTracer<'module> {
let mut max_dep = Vec::with_capacity(self.module.types.len()); let mut max_dep = Vec::with_capacity(self.module.types.len());
let mut previous = None; let mut previous = None;
for (_handle, ty) in self.module.types.iter() { for (_handle, ty) in self.module.types.iter() {
previous = std::cmp::max( previous = core::cmp::max(
previous, previous,
match ty.inner { match ty.inner {
crate::TypeInner::Array { size, .. } crate::TypeInner::Array { size, .. }
@@ -457,6 +466,7 @@ impl ModuleMap {
let crate::SpecialTypes { let crate::SpecialTypes {
ref mut ray_desc, ref mut ray_desc,
ref mut ray_intersection, ref mut ray_intersection,
ref mut ray_vertex_return,
ref mut predeclared_types, ref mut predeclared_types,
} = *special; } = *special;
@@ -467,6 +477,10 @@ impl ModuleMap {
self.types.adjust(ray_intersection); self.types.adjust(ray_intersection);
} }
if let Some(ref mut ray_vertex_return) = *ray_vertex_return {
self.types.adjust(ray_vertex_return);
}
for handle in predeclared_types.values_mut() { for handle in predeclared_types.values_mut() {
self.types.adjust(handle); self.types.adjust(handle);
} }

View File

@@ -1,3 +1,5 @@
use alloc::{vec, vec::Vec};
use super::functions::FunctionTracer; use super::functions::FunctionTracer;
use super::FunctionMap; use super::FunctionMap;
use crate::arena::Handle; use crate::arena::Handle;

View File

@@ -20,8 +20,8 @@ impl TypeTracer<'_> {
| Ti::ValuePointer { .. } | Ti::ValuePointer { .. }
| Ti::Image { .. } | Ti::Image { .. }
| Ti::Sampler { .. } | Ti::Sampler { .. }
| Ti::AccelerationStructure | Ti::AccelerationStructure { .. }
| Ti::RayQuery => {} | Ti::RayQuery { .. } => {}
// Types that do contain handles. // Types that do contain handles.
Ti::Array { Ti::Array {
@@ -75,8 +75,8 @@ impl ModuleMap {
| Ti::ValuePointer { .. } | Ti::ValuePointer { .. }
| Ti::Image { .. } | Ti::Image { .. }
| Ti::Sampler { .. } | Ti::Sampler { .. }
| Ti::AccelerationStructure | Ti::AccelerationStructure { .. }
| Ti::RayQuery => {} | Ti::RayQuery { .. } => {}
// Types that do contain handles. // Types that do contain handles.
Ti::Pointer { Ti::Pointer {

View File

@@ -1,8 +1,11 @@
//! [`DiagnosticFilter`]s and supporting functionality. //! [`DiagnosticFilter`]s and supporting functionality.
use alloc::boxed::Box;
use crate::{Arena, Handle};
#[cfg(feature = "wgsl-in")] #[cfg(feature = "wgsl-in")]
use crate::Span; use crate::Span;
use crate::{Arena, Handle};
#[cfg(feature = "arbitrary")] #[cfg(feature = "arbitrary")]
use arbitrary::Arbitrary; use arbitrary::Arbitrary;
#[cfg(feature = "wgsl-in")] #[cfg(feature = "wgsl-in")]

View File

@@ -1,4 +1,5 @@
use std::{error::Error, fmt}; use alloc::{boxed::Box, string::String, vec::Vec};
use core::{error::Error, fmt};
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct ShaderError<E> { pub struct ShaderError<E> {

View File

@@ -30,7 +30,9 @@
//! [`Struct`]: TypeInner::Struct //! [`Struct`]: TypeInner::Struct
//! [`Load`]: crate::Expression::Load //! [`Load`]: crate::Expression::Load
//! [`Store`]: crate::Statement::Store //! [`Store`]: crate::Statement::Store
use std::sync::{atomic::AtomicUsize, Arc};
use alloc::{format, sync::Arc};
use core::sync::atomic::AtomicUsize;
use crate::{GlobalVariable, Handle, Module, Type, TypeInner}; use crate::{GlobalVariable, Handle, Module, Type, TypeInner};
@@ -51,9 +53,9 @@ pub enum Error {
#[derive(Clone, Default)] #[derive(Clone, Default)]
struct Padding(Arc<AtomicUsize>); struct Padding(Arc<AtomicUsize>);
impl std::fmt::Display for Padding { impl core::fmt::Display for Padding {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
for _ in 0..self.0.load(std::sync::atomic::Ordering::Relaxed) { for _ in 0..self.0.load(core::sync::atomic::Ordering::Relaxed) {
f.write_str(" ")?; f.write_str(" ")?;
} }
Ok(()) Ok(())
@@ -62,25 +64,25 @@ impl std::fmt::Display for Padding {
impl Drop for Padding { impl Drop for Padding {
fn drop(&mut self) { fn drop(&mut self) {
let _ = self.0.fetch_sub(1, std::sync::atomic::Ordering::Relaxed); let _ = self.0.fetch_sub(1, core::sync::atomic::Ordering::Relaxed);
} }
} }
impl Padding { impl Padding {
fn trace(&self, msg: impl std::fmt::Display, t: impl std::fmt::Debug) { fn trace(&self, msg: impl core::fmt::Display, t: impl core::fmt::Debug) {
format!("{msg} {t:#?}") format!("{msg} {t:#?}")
.split('\n') .split('\n')
.for_each(|ln| log::trace!("{self}{ln}")); .for_each(|ln| log::trace!("{self}{ln}"));
} }
fn debug(&self, msg: impl std::fmt::Display, t: impl std::fmt::Debug) { fn debug(&self, msg: impl core::fmt::Display, t: impl core::fmt::Debug) {
format!("{msg} {t:#?}") format!("{msg} {t:#?}")
.split('\n') .split('\n')
.for_each(|ln| log::debug!("{self}{ln}")); .for_each(|ln| log::debug!("{self}{ln}"));
} }
fn inc_padding(&self) -> Padding { fn inc_padding(&self) -> Padding {
let _ = self.0.fetch_add(1, std::sync::atomic::Ordering::Relaxed); let _ = self.0.fetch_add(1, core::sync::atomic::Ordering::Relaxed);
self.clone() self.clone()
} }
} }

View File

@@ -1,4 +1,5 @@
use std::{borrow::Cow, fmt}; use alloc::{borrow::Cow, string::String, vec::Vec};
use core::fmt;
use super::{builtins::MacroCall, Span}; use super::{builtins::MacroCall, Span};
use crate::{ use crate::{

View File

@@ -1,3 +1,5 @@
use alloc::{vec, vec::Vec};
use super::{ use super::{
ast::{ ast::{
BuiltinVariations, FunctionDeclaration, FunctionKind, Overload, ParameterInfo, BuiltinVariations, FunctionDeclaration, FunctionKind, Overload, ParameterInfo,

View File

@@ -1,3 +1,6 @@
use alloc::{format, string::String, vec::Vec};
use core::ops::Index;
use super::{ use super::{
ast::{ ast::{
GlobalLookup, GlobalLookupKind, HirExpr, HirExprKind, ParameterInfo, ParameterQualifier, GlobalLookup, GlobalLookupKind, HirExpr, HirExprKind, ParameterInfo, ParameterQualifier,
@@ -12,7 +15,6 @@ use crate::{
Expression, FastHashMap, FunctionArgument, Handle, Literal, LocalVariable, RelationalFunction, Expression, FastHashMap, FunctionArgument, Handle, Literal, LocalVariable, RelationalFunction,
Scalar, Span, Statement, Type, TypeInner, VectorSize, Scalar, Span, Statement, Type, TypeInner, VectorSize,
}; };
use std::ops::Index;
/// The position at which an expression is, used while lowering /// The position at which an expression is, used while lowering
#[derive(Clone, Copy, PartialEq, Eq, Debug)] #[derive(Clone, Copy, PartialEq, Eq, Debug)]
@@ -136,10 +138,10 @@ impl<'a> Context<'a> {
F: FnOnce(&mut Self) -> Result<R>, F: FnOnce(&mut Self) -> Result<R>,
{ {
self.emit_restart(); self.emit_restart();
let old_body = std::mem::replace(&mut self.body, Block::new()); let old_body = core::mem::replace(&mut self.body, Block::new());
let res = cb(self); let res = cb(self);
self.emit_restart(); self.emit_restart();
let new_body = std::mem::replace(&mut self.body, old_body); let new_body = core::mem::replace(&mut self.body, old_body);
res.map(|r| (new_body, r)) res.map(|r| (new_body, r))
} }
@@ -148,10 +150,10 @@ impl<'a> Context<'a> {
F: FnOnce(&mut Self) -> Result<()>, F: FnOnce(&mut Self) -> Result<()>,
{ {
self.emit_restart(); self.emit_restart();
let old_body = std::mem::replace(&mut self.body, body); let old_body = core::mem::replace(&mut self.body, body);
let res = cb(self); let res = cb(self);
self.emit_restart(); self.emit_restart();
let body = std::mem::replace(&mut self.body, old_body); let body = core::mem::replace(&mut self.body, old_body);
res.map(|_| body) res.map(|_| body)
} }
@@ -1103,14 +1105,14 @@ impl<'a> Context<'a> {
.and_then(|scalar| Some((type_power(scalar)?, scalar))), .and_then(|scalar| Some((type_power(scalar)?, scalar))),
) { ) {
match accept_power.cmp(&reject_power) { match accept_power.cmp(&reject_power) {
std::cmp::Ordering::Less => { core::cmp::Ordering::Less => {
accept_body = self.with_body(accept_body, |ctx| { accept_body = self.with_body(accept_body, |ctx| {
ctx.conversion(&mut accept, accept_meta, reject_scalar)?; ctx.conversion(&mut accept, accept_meta, reject_scalar)?;
Ok(()) Ok(())
})?; })?;
} }
std::cmp::Ordering::Equal => {} core::cmp::Ordering::Equal => {}
std::cmp::Ordering::Greater => { core::cmp::Ordering::Greater => {
reject_body = self.with_body(reject_body, |ctx| { reject_body = self.with_body(reject_body, |ctx| {
ctx.conversion(&mut reject, reject_meta, accept_scalar)?; ctx.conversion(&mut reject, reject_meta, accept_scalar)?;
Ok(()) Ok(())
@@ -1256,7 +1258,7 @@ impl<'a> Context<'a> {
right = self.add_expression( right = self.add_expression(
Expression::Compose { Expression::Compose {
ty, ty,
components: std::iter::repeat(right).take(cols as usize).collect(), components: core::iter::repeat(right).take(cols as usize).collect(),
}, },
meta, meta,
)?; )?;
@@ -1428,11 +1430,11 @@ impl<'a> Context<'a> {
right_components.and_then(|scalar| Some((type_power(scalar)?, scalar))), right_components.and_then(|scalar| Some((type_power(scalar)?, scalar))),
) { ) {
match left_power.cmp(&right_power) { match left_power.cmp(&right_power) {
std::cmp::Ordering::Less => { core::cmp::Ordering::Less => {
self.conversion(left, left_meta, right_scalar)?; self.conversion(left, left_meta, right_scalar)?;
} }
std::cmp::Ordering::Equal => {} core::cmp::Ordering::Equal => {}
std::cmp::Ordering::Greater => { core::cmp::Ordering::Greater => {
self.conversion(right, right_meta, left_scalar)?; self.conversion(right, right_meta, left_scalar)?;
} }
} }

View File

@@ -1,14 +1,21 @@
use super::token::TokenValue; use alloc::{
use crate::SourceLocation; borrow::Cow,
use crate::{proc::ConstantEvaluatorError, Span}; string::{String, ToString},
vec,
vec::Vec,
};
use codespan_reporting::diagnostic::{Diagnostic, Label}; use codespan_reporting::diagnostic::{Diagnostic, Label};
use codespan_reporting::files::SimpleFile; use codespan_reporting::files::SimpleFile;
use codespan_reporting::term; use codespan_reporting::term;
use pp_rs::token::PreprocessorError; use pp_rs::token::PreprocessorError;
use std::borrow::Cow;
use termcolor::{NoColor, WriteColor}; use termcolor::{NoColor, WriteColor};
use thiserror::Error; use thiserror::Error;
use super::token::TokenValue;
use crate::SourceLocation;
use crate::{proc::ConstantEvaluatorError, Span};
fn join_with_comma(list: &[ExpectedToken]) -> String { fn join_with_comma(list: &[ExpectedToken]) -> String {
let mut string = "".to_string(); let mut string = "".to_string();
for (i, val) in list.iter().enumerate() { for (i, val) in list.iter().enumerate() {
@@ -45,8 +52,8 @@ impl From<TokenValue> for ExpectedToken {
ExpectedToken::Token(token) ExpectedToken::Token(token)
} }
} }
impl std::fmt::Display for ExpectedToken { impl core::fmt::Display for ExpectedToken {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match *self { match *self {
ExpectedToken::Token(ref token) => write!(f, "{token:?}"), ExpectedToken::Token(ref token) => write!(f, "{token:?}"),
ExpectedToken::TypeName => write!(f, "a type"), ExpectedToken::TypeName => write!(f, "a type"),
@@ -180,14 +187,14 @@ impl ParseErrors {
} }
} }
impl std::fmt::Display for ParseErrors { impl core::fmt::Display for ParseErrors {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
self.errors.iter().try_for_each(|e| write!(f, "{e:?}")) self.errors.iter().try_for_each(|e| write!(f, "{e:?}"))
} }
} }
impl std::error::Error for ParseErrors { impl core::error::Error for ParseErrors {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { fn source(&self) -> Option<&(dyn core::error::Error + 'static)> {
None None
} }
} }

View File

@@ -1,3 +1,11 @@
use alloc::{
format,
string::{String, ToString},
vec,
vec::Vec,
};
use core::iter;
use super::{ use super::{
ast::*, ast::*,
builtins::{inject_builtin, sampled_to_depth}, builtins::{inject_builtin, sampled_to_depth},
@@ -11,7 +19,6 @@ use crate::{
Expression, Function, FunctionArgument, FunctionResult, Handle, Literal, LocalVariable, Scalar, Expression, Function, FunctionArgument, FunctionResult, Handle, Literal, LocalVariable, Scalar,
ScalarKind, Span, Statement, StructMember, Type, TypeInner, ScalarKind, Span, Statement, StructMember, Type, TypeInner,
}; };
use std::iter;
/// Struct detailing a store operation that must happen after a function call /// Struct detailing a store operation that must happen after a function call
struct ProxyWrite { struct ProxyWrite {
@@ -282,7 +289,7 @@ impl Frontend {
for i in 0..columns as u32 { for i in 0..columns as u32 {
if i < ori_cols as u32 { if i < ori_cols as u32 {
use std::cmp::Ordering; use core::cmp::Ordering;
let vector = ctx.add_expression( let vector = ctx.add_expression(
Expression::AccessIndex { Expression::AccessIndex {
@@ -1230,7 +1237,7 @@ impl Frontend {
+ 3, + 3,
); );
let global_init_body = std::mem::replace(&mut ctx.body, body); let global_init_body = core::mem::replace(&mut ctx.body, body);
for arg in self.entry_args.iter() { for arg in self.entry_args.iter() {
if arg.storage != StorageQualifier::Input { if arg.storage != StorageQualifier::Input {

View File

@@ -1,13 +1,16 @@
use alloc::string::String;
use pp_rs::{
pp::Preprocessor,
token::{PreprocessorError, Punct, TokenValue as PPTokenValue},
};
use super::{ use super::{
ast::Precision, ast::Precision,
token::{Directive, DirectiveKind, Token, TokenValue}, token::{Directive, DirectiveKind, Token, TokenValue},
types::parse_type, types::parse_type,
}; };
use crate::{FastHashMap, Span, StorageAccess}; use crate::{FastHashMap, Span, StorageAccess};
use pp_rs::{
pp::Preprocessor,
token::{PreprocessorError, Punct, TokenValue as PPTokenValue},
};
#[derive(Debug)] #[derive(Debug)]
#[cfg_attr(test, derive(PartialEq))] #[cfg_attr(test, derive(PartialEq))]
@@ -200,6 +203,8 @@ impl Iterator for Lexer<'_> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use alloc::vec;
use pp_rs::token::{Integer, Location, Token as PPToken, TokenValue as PPTokenValue}; use pp_rs::token::{Integer, Location, Token as PPToken, TokenValue as PPTokenValue};
use super::{ use super::{

View File

@@ -16,6 +16,8 @@ pub use ast::{Precision, Profile};
pub use error::{Error, ErrorKind, ExpectedToken, ParseErrors}; pub use error::{Error, ErrorKind, ExpectedToken, ParseErrors};
pub use token::TokenValue; pub use token::TokenValue;
use alloc::{string::String, vec::Vec};
use crate::{proc::Layouter, FastHashMap, FastHashSet, Handle, Module, ShaderStage, Span, Type}; use crate::{proc::Layouter, FastHashMap, FastHashSet, Handle, Module, ShaderStage, Span, Type};
use ast::{EntryArg, FunctionDeclaration, GlobalLookup}; use ast::{EntryArg, FunctionDeclaration, GlobalLookup};
use parser::ParsingContext; use parser::ParsingContext;
@@ -34,7 +36,7 @@ mod token;
mod types; mod types;
mod variables; mod variables;
type Result<T> = std::result::Result<T, Error>; type Result<T> = core::result::Result<T, Error>;
/// Per-shader options passed to [`parse`](Frontend::parse). /// Per-shader options passed to [`parse`](Frontend::parse).
/// ///
@@ -196,7 +198,7 @@ impl Frontend {
&mut self, &mut self,
options: &Options, options: &Options,
source: &str, source: &str,
) -> std::result::Result<Module, ParseErrors> { ) -> core::result::Result<Module, ParseErrors> {
self.reset(options.stage); self.reset(options.stage);
let lexer = lex::Lexer::new(source, &options.defines); let lexer = lex::Lexer::new(source, &options.defines);
@@ -207,12 +209,12 @@ impl Frontend {
if self.errors.is_empty() { if self.errors.is_empty() {
Ok(module) Ok(module)
} else { } else {
Err(std::mem::take(&mut self.errors).into()) Err(core::mem::take(&mut self.errors).into())
} }
} }
Err(e) => { Err(e) => {
self.errors.push(e); self.errors.push(e);
Err(std::mem::take(&mut self.errors).into()) Err(core::mem::take(&mut self.errors).into())
} }
} }
} }

View File

@@ -11,6 +11,8 @@ The OpenGl spec (the layout rules are defined by the OpenGl spec in section
equivalent to bytes. equivalent to bytes.
*/ */
use alloc::vec::Vec;
use super::{ use super::{
ast::StructLayout, ast::StructLayout,
error::{Error, ErrorKind}, error::{Error, ErrorKind},

View File

@@ -1,3 +1,8 @@
use alloc::{string::String, vec};
use core::iter::Peekable;
use pp_rs::token::{PreprocessorError, Token as PPToken, TokenValue as PPTokenValue};
use super::{ use super::{
ast::{FunctionKind, Profile, TypeQualifiers}, ast::{FunctionKind, Profile, TypeQualifiers},
context::{Context, ExprPos}, context::{Context, ExprPos},
@@ -10,8 +15,6 @@ use super::{
Frontend, Result, Frontend, Result,
}; };
use crate::{arena::Handle, proc::U32EvalError, Expression, Module, Span, Type}; use crate::{arena::Handle, proc::U32EvalError, Expression, Module, Span, Type};
use pp_rs::token::{PreprocessorError, Token as PPToken, TokenValue as PPTokenValue};
use std::iter::Peekable;
mod declarations; mod declarations;
mod expressions; mod expressions;

View File

@@ -1,3 +1,6 @@
use alloc::{string::String, vec, vec::Vec};
use super::{DeclarationContext, ParsingContext, Result};
use crate::{ use crate::{
front::glsl::{ front::glsl::{
ast::{ ast::{
@@ -17,8 +20,6 @@ use crate::{
Type, TypeInner, Type, TypeInner,
}; };
use super::{DeclarationContext, ParsingContext, Result};
/// Helper method used to retrieve the child type of `ty` at /// Helper method used to retrieve the child type of `ty` at
/// index `i`. /// index `i`.
/// ///

View File

@@ -1,4 +1,5 @@
use std::num::NonZeroU32; use alloc::{vec, vec::Vec};
use core::num::NonZeroU32;
use crate::{ use crate::{
front::glsl::{ front::glsl::{

View File

@@ -1,3 +1,5 @@
use alloc::{vec, vec::Vec};
use crate::front::glsl::context::ExprPos; use crate::front::glsl::context::ExprPos;
use crate::front::glsl::Span; use crate::front::glsl::Span;
use crate::Literal; use crate::Literal;

View File

@@ -1,4 +1,5 @@
use std::num::NonZeroU32; use alloc::{vec, vec::Vec};
use core::num::NonZeroU32;
use crate::{ use crate::{
front::glsl::{ front::glsl::{

View File

@@ -1,3 +1,7 @@
use alloc::{borrow::ToOwned, vec};
use pp_rs::token::PreprocessorError;
use super::{ use super::{
ast::Profile, ast::Profile,
error::ExpectedToken, error::ExpectedToken,
@@ -6,7 +10,9 @@ use super::{
Frontend, Options, Span, Frontend, Options, Span,
}; };
use crate::ShaderStage; use crate::ShaderStage;
use pp_rs::token::PreprocessorError;
#[cfg(test)]
use std::println;
#[test] #[test]
fn version() { fn version() {

View File

@@ -1,5 +1,7 @@
pub use pp_rs::token::{Float, Integer, Location, Token as PPToken}; pub use pp_rs::token::{Float, Integer, Location, Token as PPToken};
use alloc::{string::String, vec::Vec};
use super::ast::Precision; use super::ast::Precision;
use crate::{Interpolation, Sampling, Span, Type}; use crate::{Interpolation, Sampling, Span, Type};

View File

@@ -1,3 +1,5 @@
use alloc::format;
use super::{context::Context, Error, ErrorKind, Result, Span}; use super::{context::Context, Error, ErrorKind, Result, Span};
use crate::{ use crate::{
proc::ResolveContext, Expression, Handle, ImageClass, ImageDimension, Scalar, ScalarKind, Type, proc::ResolveContext, Expression, Handle, ImageClass, ImageDimension, Scalar, ScalarKind, Type,

View File

@@ -1,3 +1,5 @@
use alloc::{format, string::String, vec::Vec};
use super::{ use super::{
ast::*, ast::*,
context::{Context, ExprPos}, context::{Context, ExprPos},

View File

@@ -14,12 +14,14 @@ pub mod spv;
#[cfg(feature = "wgsl-in")] #[cfg(feature = "wgsl-in")]
pub mod wgsl; pub mod wgsl;
use alloc::{vec, vec::Vec};
use core::ops;
use crate::{ use crate::{
arena::{Arena, Handle, HandleVec, UniqueArena}, arena::{Arena, Handle, HandleVec, UniqueArena},
proc::{ResolveContext, ResolveError, TypeResolution}, proc::{ResolveContext, ResolveError, TypeResolution},
FastHashMap, FastHashMap,
}; };
use std::ops;
/// A table of types for an `Arena<Expression>`. /// A table of types for an `Arena<Expression>`.
/// ///
@@ -262,7 +264,7 @@ impl<Name, Var> SymbolTable<Name, Var> {
impl<Name, Var> SymbolTable<Name, Var> impl<Name, Var> SymbolTable<Name, Var>
where where
Name: std::hash::Hash + Eq, Name: core::hash::Hash + Eq,
{ {
/// Perform a lookup for a variable named `name`. /// Perform a lookup for a variable named `name`.
/// ///
@@ -272,8 +274,8 @@ where
/// scope. /// scope.
pub fn lookup<Q>(&self, name: &Q) -> Option<&Var> pub fn lookup<Q>(&self, name: &Q) -> Option<&Var>
where where
Name: std::borrow::Borrow<Q>, Name: core::borrow::Borrow<Q>,
Q: std::hash::Hash + Eq + ?Sized, Q: core::hash::Hash + Eq + ?Sized,
{ {
// Iterate backwards through the scopes and try to find the variable // Iterate backwards through the scopes and try to find the variable
for scope in self.scopes[..self.cursor].iter().rev() { for scope in self.scopes[..self.cursor].iter().rev() {
@@ -318,7 +320,7 @@ impl<Name, Var> Default for SymbolTable<Name, Var> {
} }
} }
use std::fmt; use core::fmt;
impl<Name: fmt::Debug, Var: fmt::Debug> fmt::Debug for SymbolTable<Name, Var> { impl<Name: fmt::Debug, Var: fmt::Debug> fmt::Debug for SymbolTable<Name, Var> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {

View File

@@ -1,5 +1,6 @@
use core::convert::TryInto;
use super::error::Error; use super::error::Error;
use std::convert::TryInto;
pub(super) const fn map_binary_operator(word: spirv::Op) -> Result<crate::BinaryOperator, Error> { pub(super) const fn map_binary_operator(word: spirv::Op) -> Result<crate::BinaryOperator, Error> {
use crate::BinaryOperator; use crate::BinaryOperator;

View File

@@ -1,10 +1,17 @@
use super::ModuleState; use alloc::{
use crate::{arena::Handle, front::atomic_upgrade}; format,
string::{String, ToString},
vec::Vec,
};
use codespan_reporting::diagnostic::Diagnostic; use codespan_reporting::diagnostic::Diagnostic;
use codespan_reporting::files::SimpleFile; use codespan_reporting::files::SimpleFile;
use codespan_reporting::term; use codespan_reporting::term;
use termcolor::{NoColor, WriteColor}; use termcolor::{NoColor, WriteColor};
use super::ModuleState;
use crate::{arena::Handle, front::atomic_upgrade};
#[derive(Clone, Debug, thiserror::Error)] #[derive(Clone, Debug, thiserror::Error)]
pub enum Error { pub enum Error {
#[error("invalid header")] #[error("invalid header")]

View File

@@ -1,11 +1,12 @@
use alloc::{format, vec, vec::Vec};
use super::{Error, Instruction, LookupExpression, LookupHelper as _};
use crate::proc::Emitter;
use crate::{ use crate::{
arena::{Arena, Handle}, arena::{Arena, Handle},
front::spv::{BlockContext, BodyIndex}, front::spv::{BlockContext, BodyIndex},
}; };
use super::{Error, Instruction, LookupExpression, LookupHelper as _};
use crate::proc::Emitter;
pub type BlockId = u32; pub type BlockId = u32;
impl<I: Iterator<Item = u32>> super::Frontend<I> { impl<I: Iterator<Item = u32>> super::Frontend<I> {
@@ -643,7 +644,7 @@ impl BlockContext<'_> {
let body = lower_impl(blocks, bodies, body_idx); let body = lower_impl(blocks, bodies, body_idx);
// Handle simple cases that would make a fallthrough statement unreachable code // Handle simple cases that would make a fallthrough statement unreachable code
let fall_through = body.last().map_or(true, |s| !s.is_terminator()); let fall_through = body.last().is_none_or(|s| !s.is_terminator());
crate::SwitchCase { crate::SwitchCase {
value: crate::SwitchValue::I32(value), value: crate::SwitchValue::I32(value),

View File

@@ -1,3 +1,5 @@
use alloc::vec::Vec;
use crate::{ use crate::{
arena::{Handle, UniqueArena}, arena::{Handle, UniqueArena},
Scalar, Scalar,

View File

@@ -33,20 +33,22 @@ mod function;
mod image; mod image;
mod null; mod null;
use convert::*;
pub use error::Error; pub use error::Error;
use function::*;
use alloc::{borrow::ToOwned, format, string::String, vec, vec::Vec};
use core::{convert::TryInto, mem, num::NonZeroU32};
use std::path::PathBuf;
use petgraph::graphmap::GraphMap;
use super::atomic_upgrade::Upgrades;
use crate::{ use crate::{
arena::{Arena, Handle, UniqueArena}, arena::{Arena, Handle, UniqueArena},
proc::{Alignment, Layouter}, proc::{Alignment, Layouter},
FastHashMap, FastHashSet, FastIndexMap, FastHashMap, FastHashSet, FastIndexMap,
}; };
use convert::*;
use petgraph::graphmap::GraphMap; use function::*;
use std::{convert::TryInto, mem, num::NonZeroU32, path::PathBuf};
use super::atomic_upgrade::Upgrades;
pub const SUPPORTED_CAPABILITIES: &[spirv::Capability] = &[ pub const SUPPORTED_CAPABILITIES: &[spirv::Capability] = &[
spirv::Capability::Shader, spirv::Capability::Shader,
@@ -702,7 +704,7 @@ impl<I: Iterator<Item = u32>> Frontend<I> {
break; break;
} }
} }
std::str::from_utf8(&self.temp_bytes) core::str::from_utf8(&self.temp_bytes)
.map(|s| (s.to_owned(), count)) .map(|s| (s.to_owned(), count))
.map_err(|_| Error::BadString) .map_err(|_| Error::BadString)
} }
@@ -3846,6 +3848,10 @@ impl<I: Iterator<Item = u32>> Frontend<I> {
.bits() .bits()
!= 0, != 0,
); );
flags.set(
crate::Barrier::TEXTURE,
semantics & spirv::MemorySemantics::IMAGE_MEMORY.bits() != 0,
);
block.push(crate::Statement::Barrier(flags), span); block.push(crate::Statement::Barrier(flags), span);
} else { } else {
log::warn!("Unsupported barrier execution scope: {}", exec_scope); log::warn!("Unsupported barrier execution scope: {}", exec_scope);
@@ -6062,6 +6068,8 @@ fn is_parent(mut child: usize, parent: usize, block_ctx: &BlockContext) -> bool
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use alloc::vec;
#[test] #[test]
fn parse() { fn parse() {
let bin = vec![ let bin = vec![

View File

@@ -1,3 +1,5 @@
use alloc::vec;
use super::Error; use super::Error;
use crate::arena::{Arena, Handle}; use crate::arena::{Arena, Handle};

Some files were not shown because too many files have changed in this diff Show More