Replace pointer-access.spv snapshot test with WGSL source. (#1450)

The original pointer access test used SPIR-V for its input because WGSL didn't
have a working pointer indirection operator at the time. Now that it does, we
can just write this test in WGSL directly.

Fixes #1432.
This commit is contained in:
Jim Blandy
2021-10-06 13:30:36 -07:00
committed by GitHub
parent 943e321bc6
commit 0e3fbc8166
7 changed files with 80 additions and 28 deletions

View File

@@ -1,7 +0,0 @@
(
spv: (
version: (1, 0),
debug: true,
adjust_coordinate_space: true,
),
)

View File

@@ -1,4 +1,5 @@
( (
index_bounds_check_policy: ReadZeroSkipWrite,
spv: ( spv: (
version: (1, 2), version: (1, 2),
debug: true, debug: true,

View File

@@ -3,3 +3,14 @@ fn f() {
let px = &v.x; let px = &v.x;
*px = 10; *px = 10;
} }
[[block]]
struct DynamicArray {
array: array<u32>;
};
fn index_dynamic_array(p: ptr<workgroup, DynamicArray>, i: i32, v: u32) -> u32 {
let old = (*p).array[i];
(*p).array[i] = v;
return old;
}

Binary file not shown.

View File

@@ -1,29 +1,71 @@
; SPIR-V ; SPIR-V
; Version: 1.2 ; Version: 1.2
; Generator: rspirv ; Generator: rspirv
; Bound: 16 ; Bound: 42
OpCapability Shader OpCapability Shader
OpCapability Linkage OpCapability Linkage
%1 = OpExtInstImport "GLSL.std.450" %1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450 OpMemoryModel Logical GLSL450
OpSource GLSL 450 OpSource GLSL 450
OpName %6 "v" OpMemberName %8 0 "array"
OpName %9 "f" OpName %8 "DynamicArray"
OpName %10 "v"
OpName %13 "f"
OpName %23 "index_dynamic_array"
OpDecorate %7 ArrayStride 4
OpDecorate %8 Block
OpMemberDecorate %8 0 Offset 0
%2 = OpTypeVoid %2 = OpTypeVoid
%4 = OpTypeInt 32 1 %4 = OpTypeInt 32 1
%3 = OpConstant %4 10 %3 = OpConstant %4 10
%5 = OpTypeVector %4 2 %5 = OpTypeVector %4 2
%7 = OpTypePointer Function %5 %6 = OpTypeInt 32 0
%10 = OpTypeFunction %2 %7 = OpTypeRuntimeArray %6
%12 = OpTypePointer Function %4 %8 = OpTypeStruct %7
%14 = OpTypeInt 32 0 %9 = OpTypePointer Workgroup %8
%13 = OpConstant %14 0 %11 = OpTypePointer Function %5
%9 = OpFunction %2 None %10 %14 = OpTypeFunction %2
%8 = OpLabel %16 = OpTypePointer Function %4
%6 = OpVariable %7 Function %17 = OpConstant %6 0
OpBranch %11 %24 = OpTypeFunction %6 %9 %4 %6
%11 = OpLabel %26 = OpTypePointer Workgroup %7
%15 = OpAccessChain %12 %6 %13 %27 = OpTypePointer Workgroup %6
OpStore %15 %3 %30 = OpTypeBool
%32 = OpConstantNull %6
%13 = OpFunction %2 None %14
%12 = OpLabel
%10 = OpVariable %11 Function
OpBranch %15
%15 = OpLabel
%18 = OpAccessChain %16 %10 %17
OpStore %18 %3
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%23 = OpFunction %6 None %24
%20 = OpFunctionParameter %9
%21 = OpFunctionParameter %4
%22 = OpFunctionParameter %6
%19 = OpLabel
OpBranch %25
%25 = OpLabel
%28 = OpArrayLength %6 %20 0
%29 = OpULessThan %30 %21 %28
OpSelectionMerge %33 None
OpBranchConditional %29 %34 %33
%34 = OpLabel
%31 = OpAccessChain %27 %20 %17 %21
%35 = OpLoad %6 %31
OpBranch %33
%33 = OpLabel
%36 = OpPhi %6 %32 %25 %35 %34
%37 = OpArrayLength %6 %20 0
%38 = OpULessThan %30 %21 %37
OpSelectionMerge %40 None
OpBranchConditional %38 %41 %40
%41 = OpLabel
%39 = OpAccessChain %27 %20 %17 %21
OpStore %39 %22
OpBranch %40
%40 = OpLabel
OpReturnValue %36
OpFunctionEnd

View File

@@ -1,3 +1,8 @@
[[block]]
struct DynamicArray {
array1: [[stride(4)]] array<u32>;
};
fn f() { fn f() {
var v: vec2<i32>; var v: vec2<i32>;
@@ -6,3 +11,9 @@ fn f() {
return; return;
} }
fn index_dynamic_array(p: ptr<workgroup, DynamicArray>, i: i32, v1: u32) -> u32 {
let old: u32 = (*p).array1[i];
(*p).array1[i] = v1;
return old;
}

View File

@@ -598,12 +598,6 @@ fn convert_spv_inverse_hyperbolic_trig_functions() {
); );
} }
#[cfg(all(feature = "spv-in", feature = "spv-out"))]
//#[test] //TODO: https://github.com/gfx-rs/naga/issues/1432
fn _convert_spv_pointer_access() {
convert_spv("pointer-access", true, Targets::SPIRV);
}
#[cfg(feature = "glsl-in")] #[cfg(feature = "glsl-in")]
#[allow(unused_variables)] #[allow(unused_variables)]
#[test] #[test]