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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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: (
version: (1, 2),
debug: true,

View File

@ -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 not shown.

View File

@ -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

View File

@ -1,3 +1,8 @@
[[block]]
struct DynamicArray {
array1: [[stride(4)]] array<u32>;
};
fn f() {
var v: vec2<i32>;
@ -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;
}

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")]
#[allow(unused_variables)]
#[test]