test: use spirv-as instead of pre-assembled SPIR-V (#7157)

This commit is contained in:
Connor Fitzgerald 2025-02-17 14:48:09 -05:00 committed by GitHub
parent 7240c18554
commit e590555a8c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
46 changed files with 528 additions and 444 deletions

View File

@ -18,9 +18,8 @@ env:
#
# Sourced from https://vulkan.lunarg.com/sdk/home#linux
#
# We don't include the 4th version number, as it's not used in any URL.
VULKAN_SDK_VERSION: "1.4.304"
VULKAN_FULL_SDK_VERSION: "1.4.304.1"
# Sourced from https://www.nuget.org/packages/Microsoft.Direct3D.WARP
WARP_VERSION: "1.0.13"
@ -56,7 +55,7 @@ env:
RUSTDOCFLAGS: -D warnings
WASM_BINDGEN_TEST_TIMEOUT: 300 # 5 minutes
CACHE_SUFFIX: d # cache busting
WGPU_TESTING: true
WGPU_CI: true
# We distinguish the following kinds of builds:
# - native: build for the same target as we compile on
@ -567,6 +566,32 @@ jobs:
echo "VK_DRIVER_FILES=`cygpath --windows $PWD/mesa/lvp_icd.x86_64.json`" >> "$GITHUB_ENV"
echo "GALLIUM_DRIVER=llvmpipe" >> "$GITHUB_ENV"
- name: (windows) install vulkan sdk
if: matrix.os == 'windows-2022'
shell: bash
run: |
set -e
curl.exe -L --retry 5 https://sdk.lunarg.com/sdk/download/${{ env.VULKAN_FULL_SDK_VERSION }}/windows/VulkanSDK-${{ env.VULKAN_FULL_SDK_VERSION }}-Installer.exe -o vulkan-sdk-installer.exe
./vulkan-sdk-installer.exe --accept-licenses --default-answer --confirm-command install
echo "C:/VulkanSDK/${{ env.VULKAN_FULL_SDK_VERSION }}/Bin" >> "$GITHUB_PATH"
- name: (mac) install vulkan sdk
if: matrix.os == 'macos-14'
shell: bash
run: |
set -e
curl -L --retry 5 https://sdk.lunarg.com/sdk/download/${{ env.VULKAN_FULL_SDK_VERSION }}/mac/vulkansdk-macos-${{ env.VULKAN_FULL_SDK_VERSION }}.zip -o vulkan-sdk.zip
unzip vulkan-sdk.zip -d vulkan-sdk
ls -l vulkan-sdk
sudo ./vulkan-sdk/InstallVulkan-${{ env.VULKAN_FULL_SDK_VERSION }}.app/Contents/MacOS/InstallVulkan-${{ env.VULKAN_FULL_SDK_VERSION }} --root "$HOME/VulkanSDK" --accept-licenses --default-answer --confirm-command install
echo "$HOME/VulkanSDK/macOS/bin" >> "$GITHUB_PATH"
- name: (linux) install vulkan sdk
if: matrix.os == 'ubuntu-24.04'
shell: bash
@ -577,7 +602,7 @@ jobs:
# vulkan sdk
wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add -
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-$VULKAN_SDK_VERSION-noble.list https://packages.lunarg.com/vulkan/$VULKAN_SDK_VERSION/lunarg-vulkan-$VULKAN_SDK_VERSION-noble.list
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-${{ env.VULKAN_SDK_VERSION }}-noble.list https://packages.lunarg.com/vulkan/${{ env.VULKAN_SDK_VERSION }}/lunarg-vulkan-$VULKAN_SDK_VERSION-noble.list
sudo apt-get update
sudo apt install -y vulkan-sdk

View File

@ -1,3 +1,6 @@
; SPIR-V
; Version: 1.0
;; Make sure that we promote `OpTypeRuntimeArray` of textures and samplers into
;; `TypeInner::BindingArray` and support indexing it through `OpAccessChain`
;; and `OpInBoundsAccessChain`.

View File

@ -1,3 +1,6 @@
; SPIR-V
; Version: 1.0
;; Make sure that we promote `OpTypeArray` of textures and samplers into
;; `TypeInner::BindingArray` and support indexing it through `OpAccessChain`
;; and `OpInBoundsAccessChain`.

View File

@ -1,3 +1,6 @@
; SPIR-V
; Version: 1.0
;; Ensure builtin binding isn't removed by unused gl_PerVertex builtin culling when
;; the builtin is used in a function defined after (in the SPIRV) the entry point.
;;

Binary file not shown.

Binary file not shown.

View File

@ -1,3 +1,6 @@
; SPIR-V
; Version: 1.0
;; Ensure that `do`-`while`-style loops, with conditional backedges, are properly
;; supported, via `break if` (as `continuing { ... if c { break; } }` is illegal).
;;

View File

@ -1,3 +1,6 @@
; SPIR-V
; Version: 1.0
;; Make sure we handle globals whose assigned name is "".
;;
;; In MSL, the anonymous global sometimes ends up looking like

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,3 +1,9 @@
; SPIR-V
; Version: 1.0
; Generator: Google Shaderc over Glslang; 11
; Bound: 34
; Schema: 0
;; Make sure that we don't have a validation error due to lacking capabilities
;; for bulltins such as ClipDistance when those builtin are not actually used.
;;
@ -22,11 +28,6 @@
;; }
;; ```
;;
; SPIR-V
; Version: 1.0
; Generator: Google Shaderc over Glslang; 11
; Bound: 34
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450

View File

@ -20,7 +20,7 @@
flags: ("EXPRESSIONS | BLOCKS | CONTROL_FLOW_UNIFORMITY | STRUCT_LAYOUTS | CONSTANTS | BINDINGS"),
available_stages: ("VERTEX | FRAGMENT | COMPUTE"),
uniformity: (
non_uniform_result: Some(0),
non_uniform_result: Some(1),
requirements: (""),
),
may_kill: false,
@ -46,8 +46,8 @@
requirements: (""),
),
ref_count: 1,
assignable_global: Some(0),
ty: Handle(5),
assignable_global: Some(1),
ty: Handle(13),
),
(
uniformity: (
@ -55,8 +55,17 @@
requirements: (""),
),
ref_count: 1,
assignable_global: Some(1),
ty: Handle(13),
assignable_global: Some(0),
ty: Handle(5),
),
(
uniformity: (
non_uniform_result: None,
requirements: (""),
),
ref_count: 3,
assignable_global: None,
ty: Handle(0),
),
(
uniformity: (
@ -76,15 +85,6 @@
assignable_global: None,
ty: Handle(0),
),
(
uniformity: (
non_uniform_result: None,
requirements: (""),
),
ref_count: 3,
assignable_global: None,
ty: Handle(0),
),
(
uniformity: (
non_uniform_result: None,
@ -399,7 +399,7 @@
),
(
uniformity: (
non_uniform_result: Some(0),
non_uniform_result: Some(1),
requirements: (""),
),
ref_count: 1,
@ -418,7 +418,7 @@
flags: ("EXPRESSIONS | BLOCKS | CONTROL_FLOW_UNIFORMITY | STRUCT_LAYOUTS | CONSTANTS | BINDINGS"),
available_stages: ("VERTEX | FRAGMENT | COMPUTE"),
uniformity: (
non_uniform_result: Some(0),
non_uniform_result: Some(1),
requirements: (""),
),
may_kill: false,
@ -443,11 +443,13 @@
non_uniform_result: None,
requirements: (""),
),
ref_count: 1,
assignable_global: Some(2),
ref_count: 7,
assignable_global: Some(3),
ty: Value(Pointer(
base: 8,
space: Uniform,
base: 12,
space: Storage(
access: ("LOAD"),
),
)),
),
(
@ -467,6 +469,18 @@
non_uniform_result: Some(2),
requirements: (""),
),
ref_count: 1,
assignable_global: Some(6),
ty: Value(Pointer(
base: 3,
space: Private,
)),
),
(
uniformity: (
non_uniform_result: Some(3),
requirements: (""),
),
ref_count: 4,
assignable_global: Some(4),
ty: Value(Pointer(
@ -479,25 +493,11 @@
non_uniform_result: None,
requirements: (""),
),
ref_count: 7,
assignable_global: Some(3),
ty: Value(Pointer(
base: 12,
space: Storage(
access: ("LOAD"),
),
)),
),
(
uniformity: (
non_uniform_result: Some(4),
requirements: (""),
),
ref_count: 1,
assignable_global: Some(6),
assignable_global: Some(2),
ty: Value(Pointer(
base: 3,
space: Private,
base: 8,
space: Uniform,
)),
),
(
@ -518,51 +518,6 @@
assignable_global: None,
ty: Handle(6),
),
(
uniformity: (
non_uniform_result: None,
requirements: (""),
),
ref_count: 1,
assignable_global: None,
ty: Handle(6),
),
(
uniformity: (
non_uniform_result: None,
requirements: (""),
),
ref_count: 1,
assignable_global: None,
ty: Handle(6),
),
(
uniformity: (
non_uniform_result: None,
requirements: (""),
),
ref_count: 1,
assignable_global: None,
ty: Handle(6),
),
(
uniformity: (
non_uniform_result: None,
requirements: (""),
),
ref_count: 1,
assignable_global: None,
ty: Handle(6),
),
(
uniformity: (
non_uniform_result: None,
requirements: (""),
),
ref_count: 1,
assignable_global: None,
ty: Handle(2),
),
(
uniformity: (
non_uniform_result: None,
@ -608,6 +563,33 @@
assignable_global: None,
ty: Handle(6),
),
(
uniformity: (
non_uniform_result: None,
requirements: (""),
),
ref_count: 1,
assignable_global: None,
ty: Handle(2),
),
(
uniformity: (
non_uniform_result: None,
requirements: (""),
),
ref_count: 1,
assignable_global: None,
ty: Handle(6),
),
(
uniformity: (
non_uniform_result: None,
requirements: (""),
),
ref_count: 1,
assignable_global: None,
ty: Handle(6),
),
(
uniformity: (
non_uniform_result: None,
@ -626,6 +608,24 @@
assignable_global: None,
ty: Handle(0),
),
(
uniformity: (
non_uniform_result: None,
requirements: (""),
),
ref_count: 1,
assignable_global: None,
ty: Handle(6),
),
(
uniformity: (
non_uniform_result: None,
requirements: (""),
),
ref_count: 1,
assignable_global: None,
ty: Handle(6),
),
(
uniformity: (
non_uniform_result: None,
@ -821,7 +821,7 @@
),
(
uniformity: (
non_uniform_result: Some(2),
non_uniform_result: Some(3),
requirements: (""),
),
ref_count: 1,
@ -845,7 +845,7 @@
),
(
uniformity: (
non_uniform_result: Some(0),
non_uniform_result: Some(1),
requirements: (""),
),
ref_count: 1,
@ -1124,7 +1124,7 @@
),
(
uniformity: (
non_uniform_result: Some(2),
non_uniform_result: Some(3),
requirements: (""),
),
ref_count: 1,
@ -1140,7 +1140,7 @@
),
(
uniformity: (
non_uniform_result: Some(2),
non_uniform_result: Some(3),
requirements: (""),
),
ref_count: 1,
@ -1152,7 +1152,7 @@
),
(
uniformity: (
non_uniform_result: Some(2),
non_uniform_result: Some(3),
requirements: (""),
),
ref_count: 1,
@ -1168,7 +1168,7 @@
),
(
uniformity: (
non_uniform_result: Some(2),
non_uniform_result: Some(3),
requirements: (""),
),
ref_count: 1,
@ -1180,7 +1180,7 @@
),
(
uniformity: (
non_uniform_result: Some(2),
non_uniform_result: Some(3),
requirements: (""),
),
ref_count: 1,
@ -1196,7 +1196,7 @@
),
(
uniformity: (
non_uniform_result: Some(2),
non_uniform_result: Some(3),
requirements: (""),
),
ref_count: 1,
@ -1208,7 +1208,7 @@
),
(
uniformity: (
non_uniform_result: Some(2),
non_uniform_result: Some(3),
requirements: (""),
),
ref_count: 1,
@ -1256,7 +1256,7 @@
),
(
uniformity: (
non_uniform_result: Some(0),
non_uniform_result: Some(1),
requirements: (""),
),
ref_count: 1,
@ -1580,7 +1580,7 @@
flags: ("EXPRESSIONS | BLOCKS | CONTROL_FLOW_UNIFORMITY | STRUCT_LAYOUTS | CONSTANTS | BINDINGS"),
available_stages: ("VERTEX | FRAGMENT | COMPUTE"),
uniformity: (
non_uniform_result: Some(0),
non_uniform_result: Some(1),
requirements: (""),
),
may_kill: false,

View File

@ -10,14 +10,14 @@ vec4 global_1 = vec4(0.0);
layout(location = 0) out vec4 _fs2p_location0;
void function() {
vec2 phi_52_ = vec2(0.0);
vec2 phi_49_ = vec2(0.0);
vec4 _e7 = global;
if (false) {
phi_52_ = vec2((_e7.x * 0.5), (_e7.y * 0.5));
phi_49_ = vec2((_e7.x * 0.5), (_e7.y * 0.5));
} else {
phi_52_ = vec2((_e7.x * 0.25), (_e7.y * 0.25));
phi_49_ = vec2((_e7.x * 0.25), (_e7.y * 0.25));
}
vec2 _e20 = phi_52_;
vec2 _e20 = phi_49_;
global_1[0u] = _e20.x;
global_1[1u] = _e20.y;
return;

View File

@ -8,18 +8,18 @@
#extension GL_KHR_shader_subgroup_shuffle_relative : require
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
uint num_subgroups_1 = 0u;
uint global = 0u;
uint subgroup_id_1 = 0u;
uint global_1 = 0u;
uint subgroup_size_1 = 0u;
uint global_2 = 0u;
uint subgroup_invocation_id_1 = 0u;
uint global_3 = 0u;
void main_1() {
uint _e5 = subgroup_size_1;
uint _e6 = subgroup_invocation_id_1;
void function() {
uint _e5 = global_2;
uint _e6 = global_3;
uvec4 _e9 = subgroupBallot(((_e6 & 1u) == 1u));
uvec4 _e10 = subgroupBallot(true);
bool _e12 = subgroupAll((_e6 != 0u));
@ -45,14 +45,14 @@ void main_1() {
}
void main() {
uint num_subgroups = gl_NumSubgroups;
uint subgroup_id = gl_SubgroupID;
uint subgroup_size = gl_SubgroupSize;
uint subgroup_invocation_id = gl_SubgroupInvocationID;
num_subgroups_1 = num_subgroups;
subgroup_id_1 = subgroup_id;
subgroup_size_1 = subgroup_size;
subgroup_invocation_id_1 = subgroup_invocation_id;
main_1();
uint param = gl_NumSubgroups;
uint param_1 = gl_SubgroupID;
uint param_2 = gl_SubgroupSize;
uint param_3 = gl_SubgroupInvocationID;
global = param;
global_1 = param_1;
global_2 = param_2;
global_3 = param_3;
function();
}

View File

@ -1,16 +1,16 @@
static uint num_subgroups_1 = (uint)0;
static uint subgroup_id_1 = (uint)0;
static uint subgroup_size_1 = (uint)0;
static uint subgroup_invocation_id_1 = (uint)0;
static uint global = (uint)0;
static uint global_1 = (uint)0;
static uint global_2 = (uint)0;
static uint global_3 = (uint)0;
struct ComputeInput_main {
uint __local_invocation_index : SV_GroupIndex;
};
void main_1()
void function()
{
uint _e5 = subgroup_size_1;
uint _e6 = subgroup_invocation_id_1;
uint _e5 = global_2;
uint _e6 = global_3;
const uint4 _e9 = WaveActiveBallot(((_e6 & 1u) == 1u));
const uint4 _e10 = WaveActiveBallot(true);
const bool _e12 = WaveActiveAllTrue((_e6 != 0u));
@ -38,13 +38,13 @@ void main_1()
[numthreads(1, 1, 1)]
void main(ComputeInput_main computeinput_main)
{
uint num_subgroups = (1u + WaveGetLaneCount() - 1u) / WaveGetLaneCount();
uint subgroup_id = computeinput_main.__local_invocation_index / WaveGetLaneCount();
uint subgroup_size = WaveGetLaneCount();
uint subgroup_invocation_id = WaveGetLaneIndex();
num_subgroups_1 = num_subgroups;
subgroup_id_1 = subgroup_id;
subgroup_size_1 = subgroup_size;
subgroup_invocation_id_1 = subgroup_invocation_id;
main_1();
uint param = (1u + WaveGetLaneCount() - 1u) / WaveGetLaneCount();
uint param_1 = computeinput_main.__local_invocation_index / WaveGetLaneCount();
uint param_2 = WaveGetLaneCount();
uint param_3 = WaveGetLaneIndex();
global = param;
global_1 = param_1;
global_2 = param_2;
global_3 = param_3;
function();
}

View File

@ -194,8 +194,8 @@
GlobalVariable(2),
GlobalVariable(0),
GlobalVariable(1),
Constant(1),
Constant(0),
Constant(1),
AccessIndex(
base: 1,
index: 0,
@ -212,7 +212,7 @@
coordinate: 7,
array_index: None,
sample: None,
level: Some(3),
level: Some(4),
),
Splat(
size: Quad,

View File

@ -371,11 +371,11 @@
)),
local_variables: [],
expressions: [
GlobalVariable(0),
GlobalVariable(1),
GlobalVariable(0),
Constant(1),
Constant(2),
Constant(3),
Constant(1),
Constant(0),
FunctionArgument(0),
FunctionArgument(1),
@ -406,8 +406,8 @@
Compose(
ty: 4,
components: [
2,
3,
4,
],
),
Binary(
@ -421,7 +421,7 @@
),
Binary(
op: Divide,
left: 4,
left: 2,
right: 15,
),
Binary(
@ -431,7 +431,7 @@
),
Splat(
size: Bi,
value: 2,
value: 3,
),
Binary(
op: Add,
@ -474,7 +474,7 @@
),
Binary(
op: Divide,
left: 4,
left: 2,
right: 26,
),
Binary(
@ -507,8 +507,8 @@
convert: Some(4),
),
ImageSample(
image: 0,
sampler: 1,
image: 1,
sampler: 0,
gather: None,
coordinate: 31,
array_index: Some(33),
@ -527,7 +527,7 @@
condition: 9,
accept: [
Return(
value: Some(4),
value: Some(2),
),
],
reject: [],
@ -559,25 +559,25 @@
),
],
expressions: [
GlobalVariable(2),
GlobalVariable(5),
GlobalVariable(4),
GlobalVariable(3),
GlobalVariable(5),
GlobalVariable(6),
Constant(16),
Constant(14),
Constant(12),
Constant(17),
Constant(15),
Constant(18),
Constant(8),
Constant(6),
Constant(1),
GlobalVariable(4),
GlobalVariable(2),
Constant(10),
Constant(17),
Constant(8),
Constant(1),
Constant(13),
Constant(9),
Constant(11),
Constant(18),
Constant(6),
Constant(15),
Constant(12),
Constant(9),
Constant(0),
Constant(14),
Constant(16),
Constant(5),
LocalVariable(0),
Constant(7),
@ -586,12 +586,12 @@
pointer: 22,
),
AccessIndex(
base: 0,
base: 4,
index: 0,
),
Access(
base: 24,
index: 16,
index: 15,
),
Load(
pointer: 25,
@ -615,7 +615,7 @@
pointer: 22,
),
AccessIndex(
base: 3,
base: 0,
index: 0,
),
Load(
@ -633,7 +633,7 @@
pointer: 34,
),
Load(
pointer: 2,
pointer: 3,
),
Binary(
op: Multiply,
@ -652,7 +652,7 @@
arg3: None,
),
AccessIndex(
base: 3,
base: 0,
index: 0,
),
Load(
@ -668,13 +668,13 @@
),
Access(
base: 44,
index: 14,
index: 5,
),
Load(
pointer: 45,
),
AccessIndex(
base: 3,
base: 0,
index: 0,
),
Load(
@ -690,13 +690,13 @@
),
Access(
base: 50,
index: 17,
index: 10,
),
Load(
pointer: 51,
),
AccessIndex(
base: 3,
base: 0,
index: 0,
),
Load(
@ -712,7 +712,7 @@
),
Access(
base: 56,
index: 7,
index: 14,
),
Load(
pointer: 57,
@ -726,22 +726,22 @@
],
),
Access(
base: 2,
index: 15,
base: 3,
index: 9,
),
Load(
pointer: 60,
),
Access(
base: 2,
index: 6,
base: 3,
index: 17,
),
Load(
pointer: 62,
),
Access(
base: 2,
index: 9,
base: 3,
index: 13,
),
Load(
pointer: 64,
@ -775,7 +775,7 @@
),
Math(
fun: Max,
arg: 18,
arg: 16,
arg1: Some(69),
arg2: None,
arg3: None,
@ -786,7 +786,7 @@
right: 70,
),
AccessIndex(
base: 3,
base: 0,
index: 0,
),
Load(
@ -802,13 +802,13 @@
),
Access(
base: 75,
index: 5,
index: 18,
),
Load(
pointer: 76,
),
AccessIndex(
base: 3,
base: 0,
index: 0,
),
Load(
@ -824,13 +824,13 @@
),
Access(
base: 81,
index: 8,
index: 6,
),
Load(
pointer: 82,
),
AccessIndex(
base: 3,
base: 0,
index: 0,
),
Load(
@ -846,7 +846,7 @@
),
Access(
base: 87,
index: 10,
index: 11,
),
Load(
pointer: 88,
@ -875,7 +875,7 @@
Binary(
op: Add,
left: 93,
right: 11,
right: 7,
),
Load(
pointer: 20,
@ -884,7 +884,7 @@
ty: 3,
components: [
95,
13,
8,
],
),
],
@ -942,7 +942,7 @@
end: 97,
)),
Store(
pointer: 4,
pointer: 2,
value: 96,
),
Return(

View File

@ -590,48 +590,48 @@
)),
local_variables: [],
expressions: [
GlobalVariable(2),
GlobalVariable(3),
GlobalVariable(5),
GlobalVariable(6),
GlobalVariable(1),
GlobalVariable(4),
GlobalVariable(0),
GlobalVariable(1),
GlobalVariable(3),
GlobalVariable(6),
Constant(15),
Constant(2),
Constant(28),
Constant(26),
Constant(24),
Constant(22),
Constant(20),
Constant(10),
Constant(7),
Constant(18),
Constant(3),
Constant(31),
Constant(29),
Constant(9),
Constant(27),
Constant(25),
GlobalVariable(2),
Constant(16),
Constant(13),
Constant(12),
Constant(21),
Constant(34),
Constant(10),
Constant(31),
Constant(8),
Constant(6),
Constant(27),
Constant(4),
Constant(1),
Constant(16),
Constant(30),
Constant(14),
Constant(32),
Constant(13),
Constant(23),
Constant(11),
Constant(26),
Constant(19),
Constant(33),
Constant(15),
Constant(14),
Constant(34),
Constant(30),
Constant(29),
Constant(6),
Constant(2),
Constant(25),
Constant(22),
Constant(18),
Constant(17),
Constant(11),
Constant(9),
Constant(32),
Constant(33),
Constant(7),
Constant(5),
Constant(3),
Constant(0),
Constant(24),
Constant(21),
Constant(20),
Constant(28),
FunctionArgument(0),
FunctionArgument(1),
AccessIndex(
@ -641,7 +641,7 @@
Binary(
op: LessEqual,
left: 44,
right: 41,
right: 37,
),
AccessIndex(
base: 43,
@ -661,8 +661,8 @@
Compose(
ty: 5,
components: [
8,
17,
25,
36,
],
),
Binary(
@ -676,7 +676,7 @@
),
Binary(
op: Divide,
left: 29,
left: 15,
right: 51,
),
Binary(
@ -686,7 +686,7 @@
),
Splat(
size: Bi,
value: 8,
value: 25,
),
Binary(
op: Add,
@ -729,7 +729,7 @@
),
Binary(
op: Divide,
left: 29,
left: 15,
right: 62,
),
Binary(
@ -762,8 +762,8 @@
convert: Some(4),
),
ImageSample(
image: 3,
sampler: 4,
image: 5,
sampler: 3,
gather: None,
coordinate: 67,
array_index: Some(69),
@ -782,7 +782,7 @@
condition: 45,
accept: [
Return(
value: Some(29),
value: Some(15),
),
],
reject: [],
@ -814,48 +814,48 @@
),
],
expressions: [
GlobalVariable(2),
GlobalVariable(3),
GlobalVariable(5),
GlobalVariable(6),
GlobalVariable(1),
GlobalVariable(4),
GlobalVariable(0),
GlobalVariable(1),
GlobalVariable(3),
GlobalVariable(6),
Constant(15),
Constant(2),
Constant(28),
Constant(26),
Constant(24),
Constant(22),
Constant(20),
Constant(10),
Constant(7),
Constant(18),
Constant(3),
Constant(31),
Constant(29),
Constant(9),
Constant(27),
Constant(25),
GlobalVariable(2),
Constant(16),
Constant(13),
Constant(12),
Constant(21),
Constant(34),
Constant(10),
Constant(31),
Constant(8),
Constant(6),
Constant(27),
Constant(4),
Constant(1),
Constant(16),
Constant(30),
Constant(14),
Constant(32),
Constant(13),
Constant(23),
Constant(11),
Constant(26),
Constant(19),
Constant(33),
Constant(15),
Constant(14),
Constant(34),
Constant(30),
Constant(29),
Constant(6),
Constant(2),
Constant(25),
Constant(22),
Constant(18),
Constant(17),
Constant(11),
Constant(9),
Constant(32),
Constant(33),
Constant(7),
Constant(5),
Constant(3),
Constant(0),
Constant(24),
Constant(21),
Constant(20),
Constant(28),
Constant(5),
LocalVariable(0),
Constant(7),
@ -864,12 +864,12 @@
pointer: 45,
),
AccessIndex(
base: 0,
base: 6,
index: 0,
),
Access(
base: 47,
index: 36,
index: 30,
),
Load(
pointer: 48,
@ -877,7 +877,7 @@
Math(
fun: Min,
arg: 49,
arg1: Some(27),
arg1: Some(24),
arg2: None,
arg3: None,
),
@ -893,7 +893,7 @@
pointer: 45,
),
AccessIndex(
base: 5,
base: 0,
index: 0,
),
Load(
@ -911,7 +911,7 @@
pointer: 57,
),
Load(
pointer: 2,
pointer: 4,
),
Binary(
op: Multiply,
@ -930,7 +930,7 @@
arg3: None,
),
AccessIndex(
base: 5,
base: 0,
index: 0,
),
Load(
@ -946,13 +946,13 @@
),
Access(
base: 67,
index: 30,
index: 7,
),
Load(
pointer: 68,
),
AccessIndex(
base: 5,
base: 0,
index: 0,
),
Load(
@ -968,13 +968,13 @@
),
Access(
base: 73,
index: 37,
index: 18,
),
Load(
pointer: 74,
),
AccessIndex(
base: 5,
base: 0,
index: 0,
),
Load(
@ -990,7 +990,7 @@
),
Access(
base: 79,
index: 12,
index: 27,
),
Load(
pointer: 80,
@ -1004,22 +1004,22 @@
],
),
Access(
base: 2,
index: 35,
base: 4,
index: 16,
),
Load(
pointer: 83,
),
Access(
base: 2,
index: 11,
base: 4,
index: 38,
),
Load(
pointer: 85,
),
Access(
base: 2,
index: 22,
base: 4,
index: 26,
),
Load(
pointer: 87,
@ -1053,7 +1053,7 @@
),
Math(
fun: Max,
arg: 41,
arg: 37,
arg1: Some(92),
arg2: None,
arg3: None,
@ -1064,7 +1064,7 @@
right: 93,
),
AccessIndex(
base: 5,
base: 0,
index: 0,
),
Load(
@ -1080,13 +1080,13 @@
),
Access(
base: 98,
index: 9,
index: 41,
),
Load(
pointer: 99,
),
AccessIndex(
base: 5,
base: 0,
index: 0,
),
Load(
@ -1102,13 +1102,13 @@
),
Access(
base: 104,
index: 18,
index: 11,
),
Load(
pointer: 105,
),
AccessIndex(
base: 5,
base: 0,
index: 0,
),
Load(
@ -1124,7 +1124,7 @@
),
Access(
base: 110,
index: 25,
index: 21,
),
Load(
pointer: 111,
@ -1153,7 +1153,7 @@
Binary(
op: Add,
left: 116,
right: 26,
right: 12,
),
Load(
pointer: 43,
@ -1162,7 +1162,7 @@
ty: 3,
components: [
118,
29,
15,
],
),
],
@ -1220,7 +1220,7 @@
end: 120,
)),
Store(
pointer: 6,
pointer: 2,
value: 119,
),
Return(

View File

@ -319,34 +319,34 @@
),
],
expressions: [
GlobalVariable(2),
GlobalVariable(0),
GlobalVariable(1),
GlobalVariable(5),
GlobalVariable(3),
GlobalVariable(2),
GlobalVariable(4),
GlobalVariable(6),
GlobalVariable(0),
GlobalVariable(5),
Override(2),
Constant(1),
Constant(0),
Override(0),
Override(1),
Constant(1),
Override(0),
Constant(0),
Override(2),
LocalVariable(0),
LocalVariable(1),
Select(
condition: 11,
condition: 7,
accept: 8,
reject: 9,
reject: 10,
),
Binary(
op: Multiply,
left: 10,
left: 9,
right: 14,
),
Select(
condition: 7,
condition: 11,
accept: 8,
reject: 9,
reject: 10,
),
Binary(
op: Multiply,
@ -357,10 +357,10 @@
pointer: 1,
),
Load(
pointer: 0,
pointer: 4,
),
AccessIndex(
base: 2,
base: 3,
index: 0,
),
Load(
@ -388,14 +388,14 @@
right: 24,
),
AccessIndex(
base: 6,
base: 2,
index: 0,
),
Load(
pointer: 26,
),
AccessIndex(
base: 4,
base: 6,
index: 0,
),
Load(
@ -444,7 +444,7 @@
right: 37,
),
AccessIndex(
base: 3,
base: 5,
index: 0,
),
],
@ -463,7 +463,7 @@
end: 19,
)),
Store(
pointer: 5,
pointer: 0,
value: 18,
),
Emit((

View File

@ -422,37 +422,37 @@
),
],
expressions: [
GlobalVariable(2),
GlobalVariable(0),
GlobalVariable(7),
GlobalVariable(1),
GlobalVariable(5),
GlobalVariable(3),
GlobalVariable(2),
GlobalVariable(4),
GlobalVariable(6),
GlobalVariable(0),
GlobalVariable(5),
GlobalVariable(7),
Override(2),
Constant(1),
Constant(2),
Constant(3),
Constant(0),
Override(0),
Override(1),
Constant(1),
Constant(3),
Override(0),
Constant(0),
Override(2),
LocalVariable(0),
LocalVariable(1),
Select(
condition: 14,
accept: 9,
reject: 12,
condition: 9,
accept: 10,
reject: 13,
),
Binary(
op: Multiply,
left: 13,
left: 12,
right: 17,
),
Select(
condition: 8,
accept: 9,
reject: 12,
condition: 14,
accept: 10,
reject: 13,
),
Binary(
op: Multiply,
@ -460,13 +460,13 @@
right: 19,
),
Load(
pointer: 1,
pointer: 2,
),
Load(
pointer: 0,
pointer: 5,
),
AccessIndex(
base: 2,
base: 4,
index: 0,
),
Load(
@ -485,7 +485,7 @@
components: [
25,
26,
9,
10,
],
),
Binary(
@ -494,14 +494,14 @@
right: 27,
),
AccessIndex(
base: 6,
base: 3,
index: 0,
),
Load(
pointer: 29,
),
AccessIndex(
base: 4,
base: 7,
index: 0,
),
Load(
@ -533,7 +533,7 @@
35,
36,
37,
9,
10,
],
),
Binary(
@ -550,7 +550,7 @@
right: 40,
),
AccessIndex(
base: 3,
base: 6,
index: 0,
),
],
@ -569,7 +569,7 @@
end: 22,
)),
Store(
pointer: 5,
pointer: 0,
value: 21,
),
Emit((

View File

@ -5,12 +5,12 @@
using metal::uint;
void main_1(
thread uint& subgroup_size_1,
thread uint& subgroup_invocation_id_1
void function(
thread uint& global_2,
thread uint& global_3
) {
uint _e5 = subgroup_size_1;
uint _e6 = subgroup_invocation_id_1;
uint _e5 = global_2;
uint _e6 = global_3;
metal::uint4 unnamed = metal::uint4((uint64_t)metal::simd_ballot((_e6 & 1u) == 1u), 0, 0, 0);
metal::uint4 unnamed_1 = metal::uint4((uint64_t)metal::simd_ballot(true), 0, 0, 0);
bool unnamed_2 = metal::simd_all(_e6 != 0u);
@ -38,18 +38,18 @@ void main_1(
struct main_Input {
};
kernel void main_(
uint num_subgroups [[simdgroups_per_threadgroup]]
, uint subgroup_id [[simdgroup_index_in_threadgroup]]
, uint subgroup_size [[threads_per_simdgroup]]
, uint subgroup_invocation_id [[thread_index_in_simdgroup]]
uint param [[simdgroups_per_threadgroup]]
, uint param_1 [[simdgroup_index_in_threadgroup]]
, uint param_2 [[threads_per_simdgroup]]
, uint param_3 [[thread_index_in_simdgroup]]
) {
uint num_subgroups_1 = {};
uint subgroup_id_1 = {};
uint subgroup_size_1 = {};
uint subgroup_invocation_id_1 = {};
num_subgroups_1 = num_subgroups;
subgroup_id_1 = subgroup_id;
subgroup_size_1 = subgroup_size;
subgroup_invocation_id_1 = subgroup_invocation_id;
main_1(subgroup_size_1, subgroup_invocation_id_1);
uint global = {};
uint global_1 = {};
uint global_2 = {};
uint global_3 = {};
global = param;
global_1 = param_1;
global_2 = param_2;
global_3 = param_3;
function(global_2, global_3);
}

View File

@ -17,43 +17,43 @@ var<storage, read_write> global: type_5;
var<storage> global_1: type_3;
fn function() {
var phi_33_: type_2;
var phi_34_: type_2;
var phi_49_: type_2;
var phi_63_: bool;
var phi_28_: type_2;
var phi_29_: type_2;
var phi_43_: type_2;
var phi_54_: bool;
let _e11 = global_1.member;
phi_33_ = type_2(0u, _e11);
phi_28_ = type_2(0u, _e11);
loop {
let _e14 = phi_33_;
let _e14 = phi_28_;
if (_e14.member < _e14.member_1) {
phi_34_ = type_2((_e14.member + 1u), _e14.member_1);
phi_49_ = type_2(1u, _e14.member);
phi_29_ = type_2((_e14.member + 1u), _e14.member_1);
phi_43_ = type_2(1u, _e14.member);
} else {
phi_34_ = _e14;
phi_49_ = type_2(0u, type_2().member_1);
phi_29_ = _e14;
phi_43_ = type_2(0u, type_2().member_1);
}
let _e25 = phi_34_;
let _e27 = phi_49_;
let _e25 = phi_29_;
let _e27 = phi_43_;
switch bitcast<i32>(_e27.member) {
case 0: {
phi_63_ = false;
phi_54_ = false;
break;
}
case 1: {
let _e31 = atomicCompareExchangeWeak((&global.member), 3u, _e27.member_1);
phi_63_ = select(true, false, (_e31.old_value == 3u));
phi_54_ = select(true, false, (_e31.old_value == 3u));
break;
}
default: {
phi_63_ = bool();
phi_54_ = bool();
break;
}
}
let _e36 = phi_63_;
let _e36 = phi_54_;
continue;
continuing {
phi_33_ = _e25;
phi_28_ = _e25;
break if !(_e36);
}
}

View File

@ -17,57 +17,57 @@ var<storage, read_write> global: type_5;
var<storage> global_1: type_3;
fn function() {
var phi_33_: type_2;
var phi_36_: u32;
var phi_52_: type_2;
var phi_53_: type_2;
var phi_62_: bool;
var phi_34_: type_2;
var phi_37_: u32;
var phi_26_: type_2;
var phi_29_: u32;
var phi_43_: type_2;
var phi_44_: type_2;
var phi_53_: bool;
var phi_27_: type_2;
var phi_30_: u32;
let _e10 = global_1.member;
phi_33_ = type_2(0u, _e10);
phi_36_ = 0u;
phi_26_ = type_2(0u, _e10);
phi_29_ = 0u;
loop {
let _e13 = phi_33_;
let _e15 = phi_36_;
let _e13 = phi_26_;
let _e15 = phi_29_;
if (_e13.member < _e13.member_1) {
phi_52_ = type_2((_e13.member + 1u), _e13.member_1);
phi_53_ = type_2(1u, _e13.member);
phi_43_ = type_2((_e13.member + 1u), _e13.member_1);
phi_44_ = type_2(1u, _e13.member);
} else {
phi_52_ = _e13;
phi_53_ = type_2(0u, type_2().member_1);
phi_43_ = _e13;
phi_44_ = type_2(0u, type_2().member_1);
}
let _e26 = phi_52_;
let _e28 = phi_53_;
let _e26 = phi_43_;
let _e28 = phi_44_;
switch bitcast<i32>(_e28.member) {
case 0: {
phi_62_ = false;
phi_34_ = type_2();
phi_37_ = u32();
phi_53_ = false;
phi_27_ = type_2();
phi_30_ = u32();
break;
}
case 1: {
let _e31 = atomicExchange((&global.member), _e15);
phi_62_ = true;
phi_34_ = _e26;
phi_37_ = (_e15 + _e31);
phi_53_ = true;
phi_27_ = _e26;
phi_30_ = (_e15 + _e31);
break;
}
default: {
phi_62_ = false;
phi_34_ = type_2();
phi_37_ = u32();
phi_53_ = false;
phi_27_ = type_2();
phi_30_ = u32();
break;
}
}
let _e34 = phi_62_;
let _e36 = phi_34_;
let _e38 = phi_37_;
let _e34 = phi_53_;
let _e36 = phi_27_;
let _e38 = phi_30_;
continue;
continuing {
phi_33_ = _e36;
phi_36_ = _e38;
phi_26_ = _e36;
phi_29_ = _e38;
break if !(_e34);
}
}

View File

@ -12,17 +12,17 @@ var<storage, read_write> global: type_5;
var<storage, read_write> global_1: type_3;
fn function() {
var phi_40_: bool;
var phi_33_: bool;
loop {
let _e8 = atomicSub((&global.member), 1u);
if (_e8 < arrayLength((&global_1.member))) {
global_1.member[_e8] = _e8;
phi_40_ = select(true, false, (_e8 == 0u));
phi_33_ = select(true, false, (_e8 == 0u));
} else {
phi_40_ = false;
phi_33_ = false;
}
let _e16 = phi_40_;
let _e16 = phi_33_;
continue;
continuing {
break if !(_e16);

View File

@ -12,24 +12,24 @@ var<storage, read_write> global: type_4;
var<storage> global_1: type_2;
fn function() {
var phi_23_: u32;
var phi_24_: u32;
var phi_21_: u32;
var phi_22_: u32;
phi_23_ = 0u;
phi_21_ = 0u;
loop {
let _e10 = phi_23_;
let _e10 = phi_21_;
let _e11 = global_1.member;
let _e12 = (_e10 >= _e11);
if _e12 {
phi_24_ = u32();
phi_22_ = u32();
} else {
let _e13 = atomicAdd((&global.member), 1u);
phi_24_ = (_e10 + 1u);
phi_22_ = (_e10 + 1u);
}
let _e17 = phi_24_;
let _e17 = phi_22_;
continue;
continuing {
phi_23_ = _e17;
phi_21_ = _e17;
break if !(select(true, false, _e12));
}
}

View File

@ -17,49 +17,49 @@ var<storage, read_write> global: type_5;
var<storage> global_1: type_3;
fn function() {
var phi_32_: type_2;
var phi_49_: type_2;
var phi_50_: type_2;
var phi_59_: bool;
var phi_33_: type_2;
var phi_25_: type_2;
var phi_40_: type_2;
var phi_41_: type_2;
var phi_50_: bool;
var phi_26_: type_2;
let _e10 = global_1.member;
phi_32_ = type_2(0u, _e10);
phi_25_ = type_2(0u, _e10);
loop {
let _e13 = phi_32_;
let _e13 = phi_25_;
if (_e13.member < _e13.member_1) {
phi_49_ = type_2((_e13.member + 1u), _e13.member_1);
phi_50_ = type_2(1u, _e13.member);
phi_40_ = type_2((_e13.member + 1u), _e13.member_1);
phi_41_ = type_2(1u, _e13.member);
} else {
phi_49_ = _e13;
phi_50_ = type_2(0u, type_2().member_1);
phi_40_ = _e13;
phi_41_ = type_2(0u, type_2().member_1);
}
let _e24 = phi_49_;
let _e26 = phi_50_;
let _e24 = phi_40_;
let _e26 = phi_41_;
switch bitcast<i32>(_e26.member) {
case 0: {
phi_59_ = false;
phi_33_ = type_2();
phi_50_ = false;
phi_26_ = type_2();
break;
}
case 1: {
let _e29 = atomicLoad((&global.member));
atomicStore((&global.member), (_e29 + 2u));
phi_59_ = true;
phi_33_ = _e24;
phi_50_ = true;
phi_26_ = _e24;
break;
}
default: {
phi_59_ = false;
phi_33_ = type_2();
phi_50_ = false;
phi_26_ = type_2();
break;
}
}
let _e32 = phi_59_;
let _e34 = phi_33_;
let _e32 = phi_50_;
let _e34 = phi_26_;
continue;
continuing {
phi_32_ = _e34;
phi_25_ = _e34;
break if !(_e32);
}
}

View File

@ -1,11 +1,11 @@
var<private> num_subgroups_1: u32;
var<private> subgroup_id_1: u32;
var<private> subgroup_size_1: u32;
var<private> subgroup_invocation_id_1: u32;
var<private> global: u32;
var<private> global_1: u32;
var<private> global_2: u32;
var<private> global_3: u32;
fn main_1() {
let _e5 = subgroup_size_1;
let _e6 = subgroup_invocation_id_1;
fn function() {
let _e5 = global_2;
let _e6 = global_3;
let _e9 = subgroupBallot(((_e6 & 1u) == 1u));
let _e10 = subgroupBallot();
let _e12 = subgroupAll((_e6 != 0u));
@ -31,10 +31,10 @@ fn main_1() {
}
@compute @workgroup_size(1, 1, 1)
fn main(@builtin(num_subgroups) num_subgroups: u32, @builtin(subgroup_id) subgroup_id: u32, @builtin(subgroup_size) subgroup_size: u32, @builtin(subgroup_invocation_id) subgroup_invocation_id: u32) {
num_subgroups_1 = num_subgroups;
subgroup_id_1 = subgroup_id;
subgroup_size_1 = subgroup_size;
subgroup_invocation_id_1 = subgroup_invocation_id;
main_1();
fn main(@builtin(num_subgroups) param: u32, @builtin(subgroup_id) param_1: u32, @builtin(subgroup_size) param_2: u32, @builtin(subgroup_invocation_id) param_3: u32) {
global = param;
global_1 = param_1;
global_2 = param_2;
global_3 = param_3;
function();
}

View File

@ -1046,11 +1046,36 @@ fn unconsumed_vertex_outputs_hlsl_out() {
#[cfg(feature = "spv-in")]
fn convert_spv(name: &str, adjust_coordinate_space: bool, targets: Targets) {
use std::process::Command;
let _ = env_logger::try_init();
let input = Input::new(Some("spv"), name, "spv");
let input = Input::new(Some("spv"), name, "spvasm");
println!("Assembling '{}'", input.file_name.display());
let command = Command::new("spirv-as")
.arg(input.input_path())
.arg("-o")
.arg("-")
.output()
.expect(
"Failed to execute spirv-as. It can be installed \
by installing the Vulkan SDK and adding it to your path.",
);
println!("Processing '{}'", input.file_name.display());
if !command.status.success() {
panic!(
"spirv-as failed: {}\n{}",
String::from_utf8_lossy(&command.stdout),
String::from_utf8_lossy(&command.stderr)
);
}
let mut module = naga::front::spv::parse_u8_slice(
&input.read_bytes(),
&command.stdout,
&naga::front::spv::Options {
adjust_coordinate_space,
strict_capabilities: false,
@ -1058,6 +1083,7 @@ fn convert_spv(name: &str, adjust_coordinate_space: bool, targets: Targets) {
},
)
.unwrap();
check_targets(&input, &mut module, targets, None, None);
}

View File

@ -75,8 +75,25 @@ static MULTIPLE_DEVICES: GpuTestConfiguration = GpuTestConfiguration::new()
#[cfg(not(all(target_arch = "wasm32", not(target_os = "emscripten"))))]
#[gpu_test]
static REQUEST_DEVICE_ERROR_MESSAGE_NATIVE: GpuTestConfiguration =
GpuTestConfiguration::new().run_async(|_ctx| request_device_error_message());
static REQUEST_DEVICE_ERROR_MESSAGE_NATIVE: GpuTestConfiguration = GpuTestConfiguration::new()
.parameters({
let default = TestParameters::default();
// On CI, we have the vulkan SDK installed and this test initializes the Vulkan backend when all
// normal tests do not, so we get these weird error messages. This only actually gets hooked up
// on Windows, because that's the only platform where the actual runtime gets hooked up and there
// are no drivers.
if std::env::var("WGPU_CI").is_ok() && cfg!(windows) {
default.expect_fail(
FailureCase::always()
.validation_error("Registry lookup failed to get ICD manifest files. Possibly missing Vulkan driver?")
.validation_error("vkCreateInstance: Found no drivers!")
)
} else {
default
}
})
.run_async(|_ctx| request_device_error_message());
/// Check that `RequestDeviceError`s produced have some diagnostic information.
///