Skip to content

Commit 4256235

Browse files

File tree

2 files changed

+65
-72
lines changed

2 files changed

+65
-72
lines changed

tests/compiletests/ui/entry/asm/entry2_global_asm.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
// ignore-vulkan1.1
1515

1616
use core::arch::asm;
17+
use spirv_std::TypedBuffer;
1718
use spirv_std::glam::*;
1819
use spirv_std::spirv;
1920

@@ -34,23 +35,22 @@ pub fn entry() {
3435
frag_coord = in(reg) &mut frag_coord,
3536
};
3637

37-
#[derive(Copy, Clone, Default)]
38-
struct ViewportBuffer(Vec2);
39-
let mut viewport_size = &ViewportBuffer::default();
40-
asm! {
41-
"OpDecorate typeof*{viewport_size} Block",
42-
"%viewport_size = OpVariable typeof{viewport_size} Input",
43-
"OpDecorate %viewport_size DescriptorSet 0",
44-
"OpDecorate %viewport_size Binding 0",
45-
"OpDecorate %viewport_size NonWritable",
46-
"OpName %viewport_size \"viewport_size\"",
47-
"%tmp = OpLoad typeof*{viewport_size} %viewport_size",
48-
"OpStore {viewport_size} %tmp",
49-
viewport_size = in(reg) &mut viewport_size,
50-
};
38+
let mut result_slot = core::mem::MaybeUninit::<&TypedBuffer<Vec2>>::uninit();
39+
asm!(
40+
"%var = OpVariable typeof*{result_slot} StorageBuffer",
41+
"OpDecorate %var DescriptorSet {descriptor_set}",
42+
"OpDecorate %var Binding {binding}",
43+
"OpName %var \"viewport_size\"",
44+
"OpStore {result_slot} %var",
45+
descriptor_set = const 0,
46+
binding = const 0,
47+
result_slot = in(reg) result_slot.as_mut_ptr(),
48+
);
49+
let viewport_size_buffer: &TypedBuffer<Vec2> = result_slot.assume_init();
50+
let viewport_size: &Vec2 = &**viewport_size_buffer;
5151

5252
let mut output = Vec4::default();
53-
main(frag_coord, &viewport_size.0, &mut output);
53+
main(frag_coord, viewport_size, &mut output);
5454
asm! {
5555
"%output = OpVariable typeof{output} Output",
5656
"OpName %output \"output\"",

tests/compiletests/ui/entry/asm/entry2_global_asm.stderr

Lines changed: 50 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -4,69 +4,62 @@ OpEntryPoint Fragment %1 "main" %2 %3 %4
44
OpExecutionMode %1 OriginUpperLeft
55
OpName %2 "frag_coord"
66
OpName %3 "viewport_size"
7-
OpName %9 "(spirv_std::glam::Vec2, f32, f32)"
8-
OpMemberName %9 0 "0"
9-
OpMemberName %9 1 "1"
10-
OpMemberName %9 2 "2"
7+
OpName %10 "(spirv_std::glam::Vec2, f32, f32)"
8+
OpMemberName %10 0 "0"
9+
OpMemberName %10 1 "1"
10+
OpMemberName %10 2 "2"
1111
OpName %4 "output"
1212
OpName %1 "entry2_global_asm::entry"
1313
OpDecorate %2 BuiltIn FragCoord
14-
OpDecorate %10 Block
15-
OpDecorate %3 NonWritable
14+
OpDecorate %11 Block
15+
OpMemberDecorate %11 0 Offset 0
1616
OpDecorate %3 Binding 0
1717
OpDecorate %3 DescriptorSet 0
18-
OpMemberDecorate %9 0 Offset 0
19-
OpMemberDecorate %9 1 Offset 8
20-
OpMemberDecorate %9 2 Offset 12
18+
OpMemberDecorate %10 0 Offset 0
19+
OpMemberDecorate %10 1 Offset 8
20+
OpMemberDecorate %10 2 Offset 12
2121
OpDecorate %4 Location 0
22-
%11 = OpTypeVoid
23-
%12 = OpTypeFunction %11
24-
%13 = OpTypeFloat 32
25-
%14 = OpTypeVector %13 4
26-
%15 = OpTypePointer Input %14
27-
%2 = OpVariable %15 Input
28-
%16 = OpTypeVector %13 2
29-
%10 = OpTypePointer Function %16
30-
%17 = OpTypePointer Input %10
31-
%3 = OpVariable %17 Input
32-
%18 = OpTypePointer Function %13
33-
%19 = OpTypeInt 32 0
34-
%20 = OpConstant %19 0
35-
%21 = OpConstant %19 1
36-
%9 = OpTypeStruct %16 %13 %13
37-
%22 = OpUndef %9
38-
%23 = OpConstant %13 0
39-
%24 = OpConstant %13 1
40-
%25 = OpTypePointer Output %14
41-
%4 = OpVariable %25 Output
42-
%1 = OpFunction %11 None %12
43-
%26 = OpLabel
44-
%27 = OpLoad %14 %2
45-
%28 = OpLoad %10 %3
46-
%29 = OpCompositeExtract %13 %27 0
47-
%30 = OpCompositeExtract %13 %27 1
48-
%31 = OpInBoundsAccessChain %18 %28 %20
49-
%32 = OpLoad %13 %31
50-
%33 = OpInBoundsAccessChain %18 %28 %21
51-
%34 = OpLoad %13 %33
52-
%35 = OpFDiv %13 %29 %32
53-
%36 = OpFDiv %13 %30 %34
54-
%37 = OpCompositeInsert %9 %35 %22 0 0
55-
%38 = OpCompositeInsert %9 %36 %37 0 1
56-
%39 = OpCompositeInsert %9 %23 %38 1
57-
%40 = OpCompositeInsert %9 %24 %39 2
58-
%41 = OpCompositeExtract %13 %40 0 0
59-
%42 = OpCompositeExtract %13 %40 0 1
60-
%43 = OpCompositeConstruct %14 %41 %42 %23 %24
61-
OpStore %4 %43
22+
%12 = OpTypeVoid
23+
%13 = OpTypeFunction %12
24+
%14 = OpTypeFloat 32
25+
%15 = OpTypeVector %14 4
26+
%16 = OpTypePointer Input %15
27+
%2 = OpVariable %16 Input
28+
%17 = OpTypeVector %14 2
29+
%18 = OpTypePointer StorageBuffer %17
30+
%11 = OpTypeStruct %17
31+
%19 = OpTypePointer StorageBuffer %11
32+
%3 = OpVariable %19 StorageBuffer
33+
%20 = OpTypeInt 32 0
34+
%21 = OpConstant %20 0
35+
%22 = OpTypePointer StorageBuffer %14
36+
%23 = OpConstant %20 1
37+
%10 = OpTypeStruct %17 %14 %14
38+
%24 = OpUndef %10
39+
%25 = OpConstant %14 0
40+
%26 = OpConstant %14 1
41+
%27 = OpTypePointer Output %15
42+
%4 = OpVariable %27 Output
43+
%1 = OpFunction %12 None %13
44+
%28 = OpLabel
45+
%29 = OpLoad %15 %2
46+
%30 = OpAccessChain %18 %3 %21
47+
%31 = OpCompositeExtract %14 %29 0
48+
%32 = OpCompositeExtract %14 %29 1
49+
%33 = OpInBoundsAccessChain %22 %30 %21
50+
%34 = OpLoad %14 %33
51+
%35 = OpInBoundsAccessChain %22 %30 %23
52+
%36 = OpLoad %14 %35
53+
%37 = OpFDiv %14 %31 %34
54+
%38 = OpFDiv %14 %32 %36
55+
%39 = OpCompositeInsert %10 %37 %24 0 0
56+
%40 = OpCompositeInsert %10 %38 %39 0 1
57+
%41 = OpCompositeInsert %10 %25 %40 1
58+
%42 = OpCompositeInsert %10 %26 %41 2
59+
%43 = OpCompositeExtract %14 %42 0 0
60+
%44 = OpCompositeExtract %14 %42 0 1
61+
%45 = OpCompositeConstruct %15 %43 %44 %25 %26
62+
OpStore %4 %45
6263
OpNoLine
6364
OpReturn
6465
OpFunctionEnd
65-
error: error:0:0 - Block decoration on target <id> '10[%_ptr_Function_v2float]' must be a structure type
66-
OpDecorate %_ptr_Function_v2float Block
67-
|
68-
= note: spirv-val failed
69-
= note: module `$TEST_BUILD_DIR/spirv-attr/entry/entry2_global_asm.vulkan1.2`
70-
71-
error: aborting due to 1 previous error
72-

0 commit comments

Comments
 (0)