Skip to content

Commit

Permalink
Replace pointer-access.spv snapshot test with WGSL source. (#1450)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
jimblandy authored Oct 6, 2021
1 parent 943e321 commit 0e3fbc8
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 28 deletions.
7 changes: 0 additions & 7 deletions tests/in/pointer-access.param.ron

This file was deleted.

1 change: 1 addition & 0 deletions tests/in/pointers.param.ron
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
(
index_bounds_check_policy: ReadZeroSkipWrite,
spv: (
version: (1, 2),
debug: true,
Expand Down
11 changes: 11 additions & 0 deletions tests/in/pointers.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,14 @@ fn f() {
let px = &v.x;
*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 removed tests/in/spv/pointer-access.spv
Binary file not shown.
72 changes: 57 additions & 15 deletions tests/out/spv/pointers.spvasm
Original file line number Diff line number Diff line change
@@ -1,29 +1,71 @@
; SPIR-V
; Version: 1.2
; Generator: rspirv
; Bound: 16
; Bound: 42
OpCapability Shader
OpCapability Linkage
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpSource GLSL 450
OpName %6 "v"
OpName %9 "f"
OpMemberName %8 0 "array"
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
%4 = OpTypeInt 32 1
%3 = OpConstant %4 10
%5 = OpTypeVector %4 2
%7 = OpTypePointer Function %5
%10 = OpTypeFunction %2
%12 = OpTypePointer Function %4
%14 = OpTypeInt 32 0
%13 = OpConstant %14 0
%9 = OpFunction %2 None %10
%8 = OpLabel
%6 = OpVariable %7 Function
OpBranch %11
%11 = OpLabel
%15 = OpAccessChain %12 %6 %13
OpStore %15 %3
%6 = OpTypeInt 32 0
%7 = OpTypeRuntimeArray %6
%8 = OpTypeStruct %7
%9 = OpTypePointer Workgroup %8
%11 = OpTypePointer Function %5
%14 = OpTypeFunction %2
%16 = OpTypePointer Function %4
%17 = OpConstant %6 0
%24 = OpTypeFunction %6 %9 %4 %6
%26 = OpTypePointer Workgroup %7
%27 = OpTypePointer Workgroup %6
%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
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
11 changes: 11 additions & 0 deletions tests/out/wgsl/pointers.wgsl
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
[[block]]
struct DynamicArray {
array1: [[stride(4)]] array<u32>;
};

fn f() {
var v: vec2<i32>;

Expand All @@ -6,3 +11,9 @@ fn f() {
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;
}

6 changes: 0 additions & 6 deletions tests/snapshots.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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")]
#[allow(unused_variables)]
#[test]
Expand Down

0 comments on commit 0e3fbc8

Please sign in to comment.