mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
disallow ptr to workgroup fn arguments
This commit is contained in:
@@ -1001,12 +1001,7 @@ impl super::Validator {
|
||||
#[cfg(feature = "validate")]
|
||||
for (index, argument) in fun.arguments.iter().enumerate() {
|
||||
match module.types[argument.ty].inner.pointer_space() {
|
||||
Some(
|
||||
crate::AddressSpace::Private
|
||||
| crate::AddressSpace::Function
|
||||
| crate::AddressSpace::WorkGroup,
|
||||
)
|
||||
| None => {}
|
||||
Some(crate::AddressSpace::Private | crate::AddressSpace::Function) | None => {}
|
||||
Some(other) => {
|
||||
return Err(FunctionError::InvalidArgumentPointerSpace {
|
||||
index,
|
||||
|
||||
@@ -164,12 +164,14 @@ fn check_member_layout(
|
||||
/// `TypeFlags::empty()`.
|
||||
///
|
||||
/// Pointers passed as arguments to user-defined functions must be in the
|
||||
/// `Function`, `Private`, or `Workgroup` storage space.
|
||||
/// `Function` or `Private` address space.
|
||||
const fn ptr_space_argument_flag(space: crate::AddressSpace) -> TypeFlags {
|
||||
use crate::AddressSpace as As;
|
||||
match space {
|
||||
As::Function | As::Private | As::WorkGroup => TypeFlags::ARGUMENT,
|
||||
As::Uniform | As::Storage { .. } | As::Handle | As::PushConstant => TypeFlags::empty(),
|
||||
As::Function | As::Private => TypeFlags::ARGUMENT,
|
||||
As::Uniform | As::Storage { .. } | As::Handle | As::PushConstant | As::WorkGroup => {
|
||||
TypeFlags::empty()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -316,7 +318,7 @@ impl super::Validator {
|
||||
return Err(TypeError::InvalidPointerBase(base));
|
||||
}
|
||||
|
||||
// Runtime-sized values can only live in the `Storage` storage
|
||||
// Runtime-sized values can only live in the `Storage` address
|
||||
// space, so it's useless to have a pointer to such a type in
|
||||
// any other space.
|
||||
//
|
||||
@@ -336,7 +338,7 @@ impl super::Validator {
|
||||
}
|
||||
}
|
||||
|
||||
// `Validator::validate_function` actually checks the storage
|
||||
// `Validator::validate_function` actually checks the address
|
||||
// space of pointer arguments explicitly before checking the
|
||||
// `ARGUMENT` flag, to give better error messages. But it seems
|
||||
// best to set `ARGUMENT` accurately anyway.
|
||||
@@ -364,7 +366,7 @@ impl super::Validator {
|
||||
// `InvalidPointerBase` or `InvalidPointerToUnsized`.
|
||||
self.check_width(kind, width)?;
|
||||
|
||||
// `Validator::validate_function` actually checks the storage
|
||||
// `Validator::validate_function` actually checks the address
|
||||
// space of pointer arguments explicitly before checking the
|
||||
// `ARGUMENT` flag, to give better error messages. But it seems
|
||||
// best to set `ARGUMENT` accurately anyway.
|
||||
|
||||
@@ -151,9 +151,7 @@ fn foo_frag() -> @location(0) vec4<f32> {
|
||||
return vec4<f32>(0.0);
|
||||
}
|
||||
|
||||
var<workgroup> val: u32;
|
||||
|
||||
fn assign_through_ptr_fn(p: ptr<workgroup, u32>) {
|
||||
fn assign_through_ptr_fn(p: ptr<function, u32>) {
|
||||
*p = 42u;
|
||||
}
|
||||
|
||||
@@ -163,8 +161,9 @@ fn assign_array_through_ptr_fn(foo: ptr<function, array<vec4<f32>, 2>>) {
|
||||
|
||||
@compute @workgroup_size(1)
|
||||
fn assign_through_ptr() {
|
||||
var arr = array<vec4<f32>, 2>(vec4(6.0), vec4(7.0));
|
||||
|
||||
var val = 33u;
|
||||
assign_through_ptr_fn(&val);
|
||||
|
||||
var arr = array<vec4<f32>, 2>(vec4(6.0), vec4(7.0));
|
||||
assign_array_through_ptr_fn(&arr);
|
||||
}
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
("READ"),
|
||||
(""),
|
||||
(""),
|
||||
(""),
|
||||
],
|
||||
expressions: [
|
||||
(
|
||||
@@ -1144,7 +1143,6 @@
|
||||
(""),
|
||||
(""),
|
||||
("READ"),
|
||||
(""),
|
||||
],
|
||||
expressions: [
|
||||
(
|
||||
@@ -2414,7 +2412,6 @@
|
||||
(""),
|
||||
(""),
|
||||
(""),
|
||||
(""),
|
||||
],
|
||||
expressions: [
|
||||
(
|
||||
@@ -2454,7 +2451,6 @@
|
||||
(""),
|
||||
(""),
|
||||
(""),
|
||||
(""),
|
||||
],
|
||||
expressions: [
|
||||
(
|
||||
@@ -2503,7 +2499,6 @@
|
||||
(""),
|
||||
(""),
|
||||
(""),
|
||||
(""),
|
||||
],
|
||||
expressions: [
|
||||
(
|
||||
@@ -2546,7 +2541,6 @@
|
||||
(""),
|
||||
(""),
|
||||
(""),
|
||||
(""),
|
||||
],
|
||||
expressions: [
|
||||
(
|
||||
@@ -2638,7 +2632,6 @@
|
||||
("READ"),
|
||||
("READ"),
|
||||
("READ"),
|
||||
(""),
|
||||
],
|
||||
expressions: [
|
||||
(
|
||||
@@ -3302,7 +3295,6 @@
|
||||
(""),
|
||||
("WRITE"),
|
||||
(""),
|
||||
(""),
|
||||
],
|
||||
expressions: [
|
||||
(
|
||||
@@ -3736,9 +3728,32 @@
|
||||
(""),
|
||||
(""),
|
||||
(""),
|
||||
("READ"),
|
||||
],
|
||||
expressions: [
|
||||
(
|
||||
uniformity: (
|
||||
non_uniform_result: None,
|
||||
requirements: (""),
|
||||
),
|
||||
ref_count: 1,
|
||||
assignable_global: None,
|
||||
ty: Value(Scalar(
|
||||
kind: Uint,
|
||||
width: 4,
|
||||
)),
|
||||
),
|
||||
(
|
||||
uniformity: (
|
||||
non_uniform_result: Some(2),
|
||||
requirements: (""),
|
||||
),
|
||||
ref_count: 1,
|
||||
assignable_global: None,
|
||||
ty: Value(Pointer(
|
||||
base: 1,
|
||||
space: Function,
|
||||
)),
|
||||
),
|
||||
(
|
||||
uniformity: (
|
||||
non_uniform_result: None,
|
||||
@@ -3800,7 +3815,7 @@
|
||||
),
|
||||
(
|
||||
uniformity: (
|
||||
non_uniform_result: Some(6),
|
||||
non_uniform_result: Some(8),
|
||||
requirements: (""),
|
||||
),
|
||||
ref_count: 1,
|
||||
@@ -3810,18 +3825,6 @@
|
||||
space: Function,
|
||||
)),
|
||||
),
|
||||
(
|
||||
uniformity: (
|
||||
non_uniform_result: None,
|
||||
requirements: (""),
|
||||
),
|
||||
ref_count: 1,
|
||||
assignable_global: Some(6),
|
||||
ty: Value(Pointer(
|
||||
base: 1,
|
||||
space: WorkGroup,
|
||||
)),
|
||||
),
|
||||
],
|
||||
sampling: [],
|
||||
dual_source_blending: false,
|
||||
|
||||
@@ -19,8 +19,6 @@ struct Baz {
|
||||
struct MatCx2InArray {
|
||||
mat4x2 am[2];
|
||||
};
|
||||
shared uint val;
|
||||
|
||||
|
||||
float read_from_private(inout float foo_1) {
|
||||
float _e1 = foo_1;
|
||||
@@ -42,11 +40,7 @@ void assign_array_through_ptr_fn(inout vec4 foo_2[2]) {
|
||||
}
|
||||
|
||||
void main() {
|
||||
if (gl_LocalInvocationID == uvec3(0u)) {
|
||||
val = 0u;
|
||||
}
|
||||
memoryBarrierShared();
|
||||
barrier();
|
||||
uint val = 33u;
|
||||
vec4 arr[2] = vec4[2](vec4(6.0), vec4(7.0));
|
||||
assign_through_ptr_fn(val);
|
||||
assign_array_through_ptr_fn(arr);
|
||||
|
||||
@@ -81,7 +81,6 @@ RWByteAddressBuffer bar : register(u0);
|
||||
cbuffer baz : register(b1) { Baz baz; }
|
||||
RWByteAddressBuffer qux : register(u2);
|
||||
cbuffer nested_mat_cx2_ : register(b3) { MatCx2InArray nested_mat_cx2_; }
|
||||
groupshared uint val;
|
||||
|
||||
Baz ConstructBaz(float3x2 arg0) {
|
||||
Baz ret = (Baz)0;
|
||||
@@ -288,12 +287,9 @@ float4 foo_frag() : SV_Target0
|
||||
}
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void assign_through_ptr(uint3 __local_invocation_id : SV_GroupThreadID)
|
||||
void assign_through_ptr()
|
||||
{
|
||||
if (all(__local_invocation_id == uint3(0u, 0u, 0u))) {
|
||||
val = (uint)0;
|
||||
}
|
||||
GroupMemoryBarrierWithGroupSync();
|
||||
uint val = 33u;
|
||||
float4 arr[2] = Constructarray2_float4_((6.0).xxxx, (7.0).xxxx);
|
||||
|
||||
assign_through_ptr_fn(val);
|
||||
|
||||
@@ -279,7 +279,7 @@
|
||||
name: None,
|
||||
inner: Pointer(
|
||||
base: 1,
|
||||
space: WorkGroup,
|
||||
space: Function,
|
||||
),
|
||||
),
|
||||
(
|
||||
@@ -356,13 +356,6 @@
|
||||
ty: 20,
|
||||
init: None,
|
||||
),
|
||||
(
|
||||
name: Some("val"),
|
||||
space: WorkGroup,
|
||||
binding: None,
|
||||
ty: 1,
|
||||
init: None,
|
||||
),
|
||||
],
|
||||
const_expressions: [
|
||||
Literal(U32(0)),
|
||||
@@ -2137,54 +2130,60 @@
|
||||
arguments: [],
|
||||
result: None,
|
||||
local_variables: [
|
||||
(
|
||||
name: Some("val"),
|
||||
ty: 1,
|
||||
init: Some(1),
|
||||
),
|
||||
(
|
||||
name: Some("arr"),
|
||||
ty: 28,
|
||||
init: Some(5),
|
||||
init: Some(7),
|
||||
),
|
||||
],
|
||||
expressions: [
|
||||
Literal(U32(33)),
|
||||
LocalVariable(1),
|
||||
Literal(F32(6.0)),
|
||||
Splat(
|
||||
size: Quad,
|
||||
value: 1,
|
||||
),
|
||||
Literal(F32(7.0)),
|
||||
Splat(
|
||||
size: Quad,
|
||||
value: 3,
|
||||
),
|
||||
Literal(F32(7.0)),
|
||||
Splat(
|
||||
size: Quad,
|
||||
value: 5,
|
||||
),
|
||||
Compose(
|
||||
ty: 28,
|
||||
components: [
|
||||
2,
|
||||
4,
|
||||
6,
|
||||
],
|
||||
),
|
||||
LocalVariable(1),
|
||||
GlobalVariable(6),
|
||||
LocalVariable(2),
|
||||
],
|
||||
named_expressions: {},
|
||||
body: [
|
||||
Emit((
|
||||
start: 1,
|
||||
end: 2,
|
||||
)),
|
||||
Emit((
|
||||
start: 3,
|
||||
end: 5,
|
||||
)),
|
||||
Call(
|
||||
function: 5,
|
||||
arguments: [
|
||||
7,
|
||||
2,
|
||||
],
|
||||
result: None,
|
||||
),
|
||||
Emit((
|
||||
start: 3,
|
||||
end: 4,
|
||||
)),
|
||||
Emit((
|
||||
start: 5,
|
||||
end: 7,
|
||||
)),
|
||||
Call(
|
||||
function: 6,
|
||||
arguments: [
|
||||
6,
|
||||
8,
|
||||
],
|
||||
result: None,
|
||||
),
|
||||
|
||||
@@ -312,7 +312,7 @@
|
||||
name: None,
|
||||
inner: Pointer(
|
||||
base: 1,
|
||||
space: WorkGroup,
|
||||
space: Function,
|
||||
),
|
||||
),
|
||||
(
|
||||
@@ -389,13 +389,6 @@
|
||||
ty: 21,
|
||||
init: None,
|
||||
),
|
||||
(
|
||||
name: Some("val"),
|
||||
space: WorkGroup,
|
||||
binding: None,
|
||||
ty: 1,
|
||||
init: None,
|
||||
),
|
||||
],
|
||||
const_expressions: [
|
||||
Literal(U32(0)),
|
||||
@@ -2235,54 +2228,60 @@
|
||||
arguments: [],
|
||||
result: None,
|
||||
local_variables: [
|
||||
(
|
||||
name: Some("val"),
|
||||
ty: 1,
|
||||
init: Some(1),
|
||||
),
|
||||
(
|
||||
name: Some("arr"),
|
||||
ty: 32,
|
||||
init: Some(5),
|
||||
init: Some(7),
|
||||
),
|
||||
],
|
||||
expressions: [
|
||||
Literal(U32(33)),
|
||||
LocalVariable(1),
|
||||
Literal(F32(6.0)),
|
||||
Splat(
|
||||
size: Quad,
|
||||
value: 1,
|
||||
),
|
||||
Literal(F32(7.0)),
|
||||
Splat(
|
||||
size: Quad,
|
||||
value: 3,
|
||||
),
|
||||
Literal(F32(7.0)),
|
||||
Splat(
|
||||
size: Quad,
|
||||
value: 5,
|
||||
),
|
||||
Compose(
|
||||
ty: 32,
|
||||
components: [
|
||||
2,
|
||||
4,
|
||||
6,
|
||||
],
|
||||
),
|
||||
LocalVariable(1),
|
||||
GlobalVariable(6),
|
||||
LocalVariable(2),
|
||||
],
|
||||
named_expressions: {},
|
||||
body: [
|
||||
Emit((
|
||||
start: 1,
|
||||
end: 2,
|
||||
)),
|
||||
Emit((
|
||||
start: 3,
|
||||
end: 5,
|
||||
)),
|
||||
Call(
|
||||
function: 5,
|
||||
arguments: [
|
||||
7,
|
||||
2,
|
||||
],
|
||||
result: None,
|
||||
),
|
||||
Emit((
|
||||
start: 3,
|
||||
end: 4,
|
||||
)),
|
||||
Emit((
|
||||
start: 5,
|
||||
end: 7,
|
||||
)),
|
||||
Call(
|
||||
function: 6,
|
||||
arguments: [
|
||||
6,
|
||||
8,
|
||||
],
|
||||
result: None,
|
||||
),
|
||||
|
||||
@@ -146,7 +146,7 @@ float test_arr_as_arg(
|
||||
}
|
||||
|
||||
void assign_through_ptr_fn(
|
||||
threadgroup uint& p
|
||||
thread uint& p
|
||||
) {
|
||||
p = 42u;
|
||||
return;
|
||||
@@ -210,13 +210,8 @@ fragment foo_fragOutput foo_frag(
|
||||
|
||||
|
||||
kernel void assign_through_ptr(
|
||||
metal::uint3 __local_invocation_id [[thread_position_in_threadgroup]]
|
||||
, threadgroup uint& val
|
||||
) {
|
||||
if (metal::all(__local_invocation_id == metal::uint3(0u))) {
|
||||
val = {};
|
||||
}
|
||||
metal::threadgroup_barrier(metal::mem_flags::mem_threadgroup);
|
||||
uint val = 33u;
|
||||
type_22 arr = type_22 {metal::float4(6.0), metal::float4(7.0)};
|
||||
assign_through_ptr_fn(val);
|
||||
assign_array_through_ptr_fn(arr);
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
; SPIR-V
|
||||
; Version: 1.1
|
||||
; Generator: rspirv
|
||||
; Bound: 313
|
||||
; Bound: 301
|
||||
OpCapability Shader
|
||||
OpExtension "SPV_KHR_storage_buffer_storage_class"
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint Vertex %220 "foo_vert" %215 %218
|
||||
OpEntryPoint Fragment %274 "foo_frag" %273
|
||||
OpEntryPoint GLCompute %292 "assign_through_ptr" %299
|
||||
OpExecutionMode %274 OriginUpperLeft
|
||||
OpExecutionMode %292 LocalSize 1 1 1
|
||||
OpEntryPoint Vertex %219 "foo_vert" %214 %217
|
||||
OpEntryPoint Fragment %273 "foo_frag" %272
|
||||
OpEntryPoint GLCompute %291 "assign_through_ptr"
|
||||
OpExecutionMode %273 OriginUpperLeft
|
||||
OpExecutionMode %291 LocalSize 1 1 1
|
||||
OpMemberName %6 0 "a"
|
||||
OpMemberName %6 1 "b"
|
||||
OpMemberName %6 2 "c"
|
||||
@@ -33,28 +33,28 @@ OpName %42 "bar"
|
||||
OpName %44 "baz"
|
||||
OpName %47 "qux"
|
||||
OpName %50 "nested_mat_cx2"
|
||||
OpName %53 "val"
|
||||
OpName %55 "test_matrix_within_struct_accesses"
|
||||
OpName %83 "idx"
|
||||
OpName %85 "t"
|
||||
OpName %131 "test_matrix_within_array_within_struct_accesses"
|
||||
OpName %141 "idx"
|
||||
OpName %142 "t"
|
||||
OpName %188 "foo"
|
||||
OpName %189 "read_from_private"
|
||||
OpName %194 "a"
|
||||
OpName %195 "test_arr_as_arg"
|
||||
OpName %201 "p"
|
||||
OpName %202 "assign_through_ptr_fn"
|
||||
OpName %207 "foo"
|
||||
OpName %208 "assign_array_through_ptr_fn"
|
||||
OpName %215 "vi"
|
||||
OpName %220 "foo_vert"
|
||||
OpName %232 "foo"
|
||||
OpName %233 "c2"
|
||||
OpName %274 "foo_frag"
|
||||
OpName %292 "assign_through_ptr"
|
||||
OpName %296 "arr"
|
||||
OpName %54 "test_matrix_within_struct_accesses"
|
||||
OpName %82 "idx"
|
||||
OpName %84 "t"
|
||||
OpName %130 "test_matrix_within_array_within_struct_accesses"
|
||||
OpName %140 "idx"
|
||||
OpName %141 "t"
|
||||
OpName %187 "foo"
|
||||
OpName %188 "read_from_private"
|
||||
OpName %193 "a"
|
||||
OpName %194 "test_arr_as_arg"
|
||||
OpName %200 "p"
|
||||
OpName %201 "assign_through_ptr_fn"
|
||||
OpName %206 "foo"
|
||||
OpName %207 "assign_array_through_ptr_fn"
|
||||
OpName %214 "vi"
|
||||
OpName %219 "foo_vert"
|
||||
OpName %231 "foo"
|
||||
OpName %232 "c2"
|
||||
OpName %273 "foo_frag"
|
||||
OpName %291 "assign_through_ptr"
|
||||
OpName %296 "val"
|
||||
OpName %297 "arr"
|
||||
OpMemberDecorate %6 0 Offset 0
|
||||
OpMemberDecorate %6 1 Offset 16
|
||||
OpMemberDecorate %6 2 Offset 28
|
||||
@@ -99,10 +99,9 @@ OpDecorate %50 DescriptorSet 0
|
||||
OpDecorate %50 Binding 3
|
||||
OpDecorate %51 Block
|
||||
OpMemberDecorate %51 0 Offset 0
|
||||
OpDecorate %215 BuiltIn VertexIndex
|
||||
OpDecorate %218 BuiltIn Position
|
||||
OpDecorate %273 Location 0
|
||||
OpDecorate %299 BuiltIn LocalInvocationId
|
||||
OpDecorate %214 BuiltIn VertexIndex
|
||||
OpDecorate %217 BuiltIn Position
|
||||
OpDecorate %272 Location 0
|
||||
%2 = OpTypeVoid
|
||||
%3 = OpTypeInt 32 0
|
||||
%4 = OpTypeVector %3 3
|
||||
@@ -134,7 +133,7 @@ OpDecorate %299 BuiltIn LocalInvocationId
|
||||
%29 = OpTypeArray %28 %30
|
||||
%31 = OpTypeVector %10 4
|
||||
%32 = OpTypeArray %5 %30
|
||||
%33 = OpTypePointer Workgroup %3
|
||||
%33 = OpTypePointer Function %3
|
||||
%34 = OpTypeArray %31 %14
|
||||
%35 = OpTypePointer Function %34
|
||||
%36 = OpConstant %3 0
|
||||
@@ -154,327 +153,309 @@ OpDecorate %299 BuiltIn LocalInvocationId
|
||||
%51 = OpTypeStruct %26
|
||||
%52 = OpTypePointer Uniform %51
|
||||
%50 = OpVariable %52 Uniform
|
||||
%53 = OpVariable %33 Workgroup
|
||||
%56 = OpTypeFunction %2
|
||||
%57 = OpTypePointer Uniform %22
|
||||
%59 = OpConstant %5 1
|
||||
%60 = OpConstant %10 1.0
|
||||
%61 = OpConstantComposite %12 %60 %60
|
||||
%62 = OpConstant %10 2.0
|
||||
%63 = OpConstantComposite %12 %62 %62
|
||||
%64 = OpConstant %10 3.0
|
||||
%65 = OpConstantComposite %12 %64 %64
|
||||
%66 = OpConstantComposite %21 %61 %63 %65
|
||||
%67 = OpConstantComposite %22 %66
|
||||
%68 = OpConstant %10 6.0
|
||||
%69 = OpConstantComposite %12 %68 %68
|
||||
%70 = OpConstant %10 5.0
|
||||
%71 = OpConstantComposite %12 %70 %70
|
||||
%72 = OpConstant %10 4.0
|
||||
%73 = OpConstantComposite %12 %72 %72
|
||||
%74 = OpConstantComposite %21 %69 %71 %73
|
||||
%75 = OpConstant %10 9.0
|
||||
%76 = OpConstantComposite %12 %75 %75
|
||||
%77 = OpConstant %10 90.0
|
||||
%78 = OpConstantComposite %12 %77 %77
|
||||
%79 = OpConstant %10 10.0
|
||||
%80 = OpConstant %10 20.0
|
||||
%81 = OpConstant %10 30.0
|
||||
%82 = OpConstant %10 40.0
|
||||
%84 = OpTypePointer Function %5
|
||||
%86 = OpTypePointer Function %22
|
||||
%90 = OpTypePointer Uniform %21
|
||||
%93 = OpTypePointer Uniform %12
|
||||
%99 = OpTypePointer Uniform %10
|
||||
%100 = OpConstant %3 1
|
||||
%115 = OpTypePointer Function %21
|
||||
%117 = OpTypePointer Function %12
|
||||
%121 = OpTypePointer Function %10
|
||||
%132 = OpTypePointer Uniform %26
|
||||
%134 = OpConstantNull %25
|
||||
%135 = OpConstantComposite %26 %134
|
||||
%136 = OpConstant %10 8.0
|
||||
%137 = OpConstantComposite %12 %136 %136
|
||||
%138 = OpConstant %10 7.0
|
||||
%139 = OpConstantComposite %12 %138 %138
|
||||
%140 = OpConstantComposite %24 %137 %139 %69 %71
|
||||
%143 = OpTypePointer Function %26
|
||||
%147 = OpTypePointer Uniform %25
|
||||
%150 = OpTypePointer Uniform %24
|
||||
%172 = OpTypePointer Function %25
|
||||
%174 = OpTypePointer Function %24
|
||||
%190 = OpTypeFunction %10 %27
|
||||
%196 = OpTypeFunction %10 %29
|
||||
%203 = OpTypeFunction %2 %33
|
||||
%204 = OpConstant %3 42
|
||||
%209 = OpTypeFunction %2 %35
|
||||
%210 = OpConstantComposite %31 %60 %60 %60 %60
|
||||
%211 = OpConstantComposite %31 %62 %62 %62 %62
|
||||
%212 = OpConstantComposite %34 %210 %211
|
||||
%216 = OpTypePointer Input %3
|
||||
%215 = OpVariable %216 Input
|
||||
%219 = OpTypePointer Output %31
|
||||
%218 = OpVariable %219 Output
|
||||
%222 = OpTypePointer StorageBuffer %23
|
||||
%225 = OpConstant %10 0.0
|
||||
%226 = OpConstant %3 3
|
||||
%227 = OpConstant %5 3
|
||||
%228 = OpConstant %5 4
|
||||
%229 = OpConstant %5 5
|
||||
%230 = OpConstant %5 42
|
||||
%231 = OpConstantNull %29
|
||||
%234 = OpTypePointer Function %32
|
||||
%235 = OpConstantNull %32
|
||||
%240 = OpTypePointer StorageBuffer %8
|
||||
%243 = OpTypePointer StorageBuffer %18
|
||||
%244 = OpConstant %3 4
|
||||
%247 = OpTypePointer StorageBuffer %9
|
||||
%248 = OpTypePointer StorageBuffer %10
|
||||
%251 = OpTypePointer StorageBuffer %19
|
||||
%254 = OpTypePointer StorageBuffer %7
|
||||
%255 = OpTypePointer StorageBuffer %5
|
||||
%267 = OpTypeVector %5 4
|
||||
%273 = OpVariable %219 Output
|
||||
%276 = OpConstantComposite %9 %225 %225 %225
|
||||
%277 = OpConstantComposite %9 %60 %60 %60
|
||||
%278 = OpConstantComposite %9 %62 %62 %62
|
||||
%279 = OpConstantComposite %9 %64 %64 %64
|
||||
%280 = OpConstantComposite %8 %276 %277 %278 %279
|
||||
%281 = OpConstantComposite %17 %36 %36
|
||||
%282 = OpConstantComposite %17 %100 %100
|
||||
%283 = OpConstantComposite %18 %281 %282
|
||||
%284 = OpConstantNull %23
|
||||
%285 = OpConstantComposite %31 %225 %225 %225 %225
|
||||
%293 = OpConstantComposite %31 %68 %68 %68 %68
|
||||
%294 = OpConstantComposite %31 %138 %138 %138 %138
|
||||
%55 = OpTypeFunction %2
|
||||
%56 = OpTypePointer Uniform %22
|
||||
%58 = OpConstant %5 1
|
||||
%59 = OpConstant %10 1.0
|
||||
%60 = OpConstantComposite %12 %59 %59
|
||||
%61 = OpConstant %10 2.0
|
||||
%62 = OpConstantComposite %12 %61 %61
|
||||
%63 = OpConstant %10 3.0
|
||||
%64 = OpConstantComposite %12 %63 %63
|
||||
%65 = OpConstantComposite %21 %60 %62 %64
|
||||
%66 = OpConstantComposite %22 %65
|
||||
%67 = OpConstant %10 6.0
|
||||
%68 = OpConstantComposite %12 %67 %67
|
||||
%69 = OpConstant %10 5.0
|
||||
%70 = OpConstantComposite %12 %69 %69
|
||||
%71 = OpConstant %10 4.0
|
||||
%72 = OpConstantComposite %12 %71 %71
|
||||
%73 = OpConstantComposite %21 %68 %70 %72
|
||||
%74 = OpConstant %10 9.0
|
||||
%75 = OpConstantComposite %12 %74 %74
|
||||
%76 = OpConstant %10 90.0
|
||||
%77 = OpConstantComposite %12 %76 %76
|
||||
%78 = OpConstant %10 10.0
|
||||
%79 = OpConstant %10 20.0
|
||||
%80 = OpConstant %10 30.0
|
||||
%81 = OpConstant %10 40.0
|
||||
%83 = OpTypePointer Function %5
|
||||
%85 = OpTypePointer Function %22
|
||||
%89 = OpTypePointer Uniform %21
|
||||
%92 = OpTypePointer Uniform %12
|
||||
%98 = OpTypePointer Uniform %10
|
||||
%99 = OpConstant %3 1
|
||||
%114 = OpTypePointer Function %21
|
||||
%116 = OpTypePointer Function %12
|
||||
%120 = OpTypePointer Function %10
|
||||
%131 = OpTypePointer Uniform %26
|
||||
%133 = OpConstantNull %25
|
||||
%134 = OpConstantComposite %26 %133
|
||||
%135 = OpConstant %10 8.0
|
||||
%136 = OpConstantComposite %12 %135 %135
|
||||
%137 = OpConstant %10 7.0
|
||||
%138 = OpConstantComposite %12 %137 %137
|
||||
%139 = OpConstantComposite %24 %136 %138 %68 %70
|
||||
%142 = OpTypePointer Function %26
|
||||
%146 = OpTypePointer Uniform %25
|
||||
%149 = OpTypePointer Uniform %24
|
||||
%171 = OpTypePointer Function %25
|
||||
%173 = OpTypePointer Function %24
|
||||
%189 = OpTypeFunction %10 %27
|
||||
%195 = OpTypeFunction %10 %29
|
||||
%202 = OpTypeFunction %2 %33
|
||||
%203 = OpConstant %3 42
|
||||
%208 = OpTypeFunction %2 %35
|
||||
%209 = OpConstantComposite %31 %59 %59 %59 %59
|
||||
%210 = OpConstantComposite %31 %61 %61 %61 %61
|
||||
%211 = OpConstantComposite %34 %209 %210
|
||||
%215 = OpTypePointer Input %3
|
||||
%214 = OpVariable %215 Input
|
||||
%218 = OpTypePointer Output %31
|
||||
%217 = OpVariable %218 Output
|
||||
%221 = OpTypePointer StorageBuffer %23
|
||||
%224 = OpConstant %10 0.0
|
||||
%225 = OpConstant %3 3
|
||||
%226 = OpConstant %5 3
|
||||
%227 = OpConstant %5 4
|
||||
%228 = OpConstant %5 5
|
||||
%229 = OpConstant %5 42
|
||||
%230 = OpConstantNull %29
|
||||
%233 = OpTypePointer Function %32
|
||||
%234 = OpConstantNull %32
|
||||
%239 = OpTypePointer StorageBuffer %8
|
||||
%242 = OpTypePointer StorageBuffer %18
|
||||
%243 = OpConstant %3 4
|
||||
%246 = OpTypePointer StorageBuffer %9
|
||||
%247 = OpTypePointer StorageBuffer %10
|
||||
%250 = OpTypePointer StorageBuffer %19
|
||||
%253 = OpTypePointer StorageBuffer %7
|
||||
%254 = OpTypePointer StorageBuffer %5
|
||||
%266 = OpTypeVector %5 4
|
||||
%272 = OpVariable %218 Output
|
||||
%275 = OpConstantComposite %9 %224 %224 %224
|
||||
%276 = OpConstantComposite %9 %59 %59 %59
|
||||
%277 = OpConstantComposite %9 %61 %61 %61
|
||||
%278 = OpConstantComposite %9 %63 %63 %63
|
||||
%279 = OpConstantComposite %8 %275 %276 %277 %278
|
||||
%280 = OpConstantComposite %17 %36 %36
|
||||
%281 = OpConstantComposite %17 %99 %99
|
||||
%282 = OpConstantComposite %18 %280 %281
|
||||
%283 = OpConstantNull %23
|
||||
%284 = OpConstantComposite %31 %224 %224 %224 %224
|
||||
%292 = OpConstant %3 33
|
||||
%293 = OpConstantComposite %31 %67 %67 %67 %67
|
||||
%294 = OpConstantComposite %31 %137 %137 %137 %137
|
||||
%295 = OpConstantComposite %34 %293 %294
|
||||
%298 = OpConstantNull %3
|
||||
%300 = OpTypePointer Input %4
|
||||
%299 = OpVariable %300 Input
|
||||
%302 = OpConstantNull %4
|
||||
%304 = OpTypeBool
|
||||
%303 = OpTypeVector %304 3
|
||||
%309 = OpConstant %3 264
|
||||
%55 = OpFunction %2 None %56
|
||||
%54 = OpLabel
|
||||
%83 = OpVariable %84 Function %59
|
||||
%85 = OpVariable %86 Function %67
|
||||
%58 = OpAccessChain %57 %44 %36
|
||||
OpBranch %87
|
||||
%87 = OpLabel
|
||||
%88 = OpLoad %5 %83
|
||||
%89 = OpISub %5 %88 %59
|
||||
OpStore %83 %89
|
||||
%91 = OpAccessChain %90 %58 %36
|
||||
%92 = OpLoad %21 %91
|
||||
%94 = OpAccessChain %93 %58 %36 %36
|
||||
%95 = OpLoad %12 %94
|
||||
%96 = OpLoad %5 %83
|
||||
%97 = OpAccessChain %93 %58 %36 %96
|
||||
%98 = OpLoad %12 %97
|
||||
%101 = OpAccessChain %99 %58 %36 %36 %100
|
||||
%102 = OpLoad %10 %101
|
||||
%103 = OpLoad %5 %83
|
||||
%104 = OpAccessChain %99 %58 %36 %36 %103
|
||||
%105 = OpLoad %10 %104
|
||||
%106 = OpLoad %5 %83
|
||||
%107 = OpAccessChain %99 %58 %36 %106 %100
|
||||
%108 = OpLoad %10 %107
|
||||
%109 = OpLoad %5 %83
|
||||
%110 = OpLoad %5 %83
|
||||
%111 = OpAccessChain %99 %58 %36 %109 %110
|
||||
%112 = OpLoad %10 %111
|
||||
%113 = OpLoad %5 %83
|
||||
%114 = OpIAdd %5 %113 %59
|
||||
OpStore %83 %114
|
||||
%116 = OpAccessChain %115 %85 %36
|
||||
OpStore %116 %74
|
||||
%118 = OpAccessChain %117 %85 %36 %36
|
||||
OpStore %118 %76
|
||||
%119 = OpLoad %5 %83
|
||||
%120 = OpAccessChain %117 %85 %36 %119
|
||||
OpStore %120 %78
|
||||
%122 = OpAccessChain %121 %85 %36 %36 %100
|
||||
OpStore %122 %79
|
||||
%123 = OpLoad %5 %83
|
||||
%124 = OpAccessChain %121 %85 %36 %36 %123
|
||||
OpStore %124 %80
|
||||
%125 = OpLoad %5 %83
|
||||
%126 = OpAccessChain %121 %85 %36 %125 %100
|
||||
OpStore %126 %81
|
||||
%127 = OpLoad %5 %83
|
||||
%128 = OpLoad %5 %83
|
||||
%129 = OpAccessChain %121 %85 %36 %127 %128
|
||||
OpStore %129 %82
|
||||
%54 = OpFunction %2 None %55
|
||||
%53 = OpLabel
|
||||
%82 = OpVariable %83 Function %58
|
||||
%84 = OpVariable %85 Function %66
|
||||
%57 = OpAccessChain %56 %44 %36
|
||||
OpBranch %86
|
||||
%86 = OpLabel
|
||||
%87 = OpLoad %5 %82
|
||||
%88 = OpISub %5 %87 %58
|
||||
OpStore %82 %88
|
||||
%90 = OpAccessChain %89 %57 %36
|
||||
%91 = OpLoad %21 %90
|
||||
%93 = OpAccessChain %92 %57 %36 %36
|
||||
%94 = OpLoad %12 %93
|
||||
%95 = OpLoad %5 %82
|
||||
%96 = OpAccessChain %92 %57 %36 %95
|
||||
%97 = OpLoad %12 %96
|
||||
%100 = OpAccessChain %98 %57 %36 %36 %99
|
||||
%101 = OpLoad %10 %100
|
||||
%102 = OpLoad %5 %82
|
||||
%103 = OpAccessChain %98 %57 %36 %36 %102
|
||||
%104 = OpLoad %10 %103
|
||||
%105 = OpLoad %5 %82
|
||||
%106 = OpAccessChain %98 %57 %36 %105 %99
|
||||
%107 = OpLoad %10 %106
|
||||
%108 = OpLoad %5 %82
|
||||
%109 = OpLoad %5 %82
|
||||
%110 = OpAccessChain %98 %57 %36 %108 %109
|
||||
%111 = OpLoad %10 %110
|
||||
%112 = OpLoad %5 %82
|
||||
%113 = OpIAdd %5 %112 %58
|
||||
OpStore %82 %113
|
||||
%115 = OpAccessChain %114 %84 %36
|
||||
OpStore %115 %73
|
||||
%117 = OpAccessChain %116 %84 %36 %36
|
||||
OpStore %117 %75
|
||||
%118 = OpLoad %5 %82
|
||||
%119 = OpAccessChain %116 %84 %36 %118
|
||||
OpStore %119 %77
|
||||
%121 = OpAccessChain %120 %84 %36 %36 %99
|
||||
OpStore %121 %78
|
||||
%122 = OpLoad %5 %82
|
||||
%123 = OpAccessChain %120 %84 %36 %36 %122
|
||||
OpStore %123 %79
|
||||
%124 = OpLoad %5 %82
|
||||
%125 = OpAccessChain %120 %84 %36 %124 %99
|
||||
OpStore %125 %80
|
||||
%126 = OpLoad %5 %82
|
||||
%127 = OpLoad %5 %82
|
||||
%128 = OpAccessChain %120 %84 %36 %126 %127
|
||||
OpStore %128 %81
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%131 = OpFunction %2 None %56
|
||||
%130 = OpLabel
|
||||
%141 = OpVariable %84 Function %59
|
||||
%142 = OpVariable %143 Function %135
|
||||
%133 = OpAccessChain %132 %50 %36
|
||||
OpBranch %144
|
||||
%144 = OpLabel
|
||||
%145 = OpLoad %5 %141
|
||||
%146 = OpISub %5 %145 %59
|
||||
OpStore %141 %146
|
||||
%148 = OpAccessChain %147 %133 %36
|
||||
%149 = OpLoad %25 %148
|
||||
%151 = OpAccessChain %150 %133 %36 %36
|
||||
%152 = OpLoad %24 %151
|
||||
%153 = OpAccessChain %93 %133 %36 %36 %36
|
||||
%154 = OpLoad %12 %153
|
||||
%155 = OpLoad %5 %141
|
||||
%156 = OpAccessChain %93 %133 %36 %36 %155
|
||||
%157 = OpLoad %12 %156
|
||||
%158 = OpAccessChain %99 %133 %36 %36 %36 %100
|
||||
%159 = OpLoad %10 %158
|
||||
%160 = OpLoad %5 %141
|
||||
%161 = OpAccessChain %99 %133 %36 %36 %36 %160
|
||||
%162 = OpLoad %10 %161
|
||||
%163 = OpLoad %5 %141
|
||||
%164 = OpAccessChain %99 %133 %36 %36 %163 %100
|
||||
%165 = OpLoad %10 %164
|
||||
%166 = OpLoad %5 %141
|
||||
%167 = OpLoad %5 %141
|
||||
%168 = OpAccessChain %99 %133 %36 %36 %166 %167
|
||||
%169 = OpLoad %10 %168
|
||||
%170 = OpLoad %5 %141
|
||||
%171 = OpIAdd %5 %170 %59
|
||||
OpStore %141 %171
|
||||
%173 = OpAccessChain %172 %142 %36
|
||||
OpStore %173 %134
|
||||
%175 = OpAccessChain %174 %142 %36 %36
|
||||
OpStore %175 %140
|
||||
%176 = OpAccessChain %117 %142 %36 %36 %36
|
||||
OpStore %176 %76
|
||||
%177 = OpLoad %5 %141
|
||||
%178 = OpAccessChain %117 %142 %36 %36 %177
|
||||
%130 = OpFunction %2 None %55
|
||||
%129 = OpLabel
|
||||
%140 = OpVariable %83 Function %58
|
||||
%141 = OpVariable %142 Function %134
|
||||
%132 = OpAccessChain %131 %50 %36
|
||||
OpBranch %143
|
||||
%143 = OpLabel
|
||||
%144 = OpLoad %5 %140
|
||||
%145 = OpISub %5 %144 %58
|
||||
OpStore %140 %145
|
||||
%147 = OpAccessChain %146 %132 %36
|
||||
%148 = OpLoad %25 %147
|
||||
%150 = OpAccessChain %149 %132 %36 %36
|
||||
%151 = OpLoad %24 %150
|
||||
%152 = OpAccessChain %92 %132 %36 %36 %36
|
||||
%153 = OpLoad %12 %152
|
||||
%154 = OpLoad %5 %140
|
||||
%155 = OpAccessChain %92 %132 %36 %36 %154
|
||||
%156 = OpLoad %12 %155
|
||||
%157 = OpAccessChain %98 %132 %36 %36 %36 %99
|
||||
%158 = OpLoad %10 %157
|
||||
%159 = OpLoad %5 %140
|
||||
%160 = OpAccessChain %98 %132 %36 %36 %36 %159
|
||||
%161 = OpLoad %10 %160
|
||||
%162 = OpLoad %5 %140
|
||||
%163 = OpAccessChain %98 %132 %36 %36 %162 %99
|
||||
%164 = OpLoad %10 %163
|
||||
%165 = OpLoad %5 %140
|
||||
%166 = OpLoad %5 %140
|
||||
%167 = OpAccessChain %98 %132 %36 %36 %165 %166
|
||||
%168 = OpLoad %10 %167
|
||||
%169 = OpLoad %5 %140
|
||||
%170 = OpIAdd %5 %169 %58
|
||||
OpStore %140 %170
|
||||
%172 = OpAccessChain %171 %141 %36
|
||||
OpStore %172 %133
|
||||
%174 = OpAccessChain %173 %141 %36 %36
|
||||
OpStore %174 %139
|
||||
%175 = OpAccessChain %116 %141 %36 %36 %36
|
||||
OpStore %175 %75
|
||||
%176 = OpLoad %5 %140
|
||||
%177 = OpAccessChain %116 %141 %36 %36 %176
|
||||
OpStore %177 %77
|
||||
%178 = OpAccessChain %120 %141 %36 %36 %36 %99
|
||||
OpStore %178 %78
|
||||
%179 = OpAccessChain %121 %142 %36 %36 %36 %100
|
||||
OpStore %179 %79
|
||||
%180 = OpLoad %5 %141
|
||||
%181 = OpAccessChain %121 %142 %36 %36 %36 %180
|
||||
OpStore %181 %80
|
||||
%182 = OpLoad %5 %141
|
||||
%183 = OpAccessChain %121 %142 %36 %36 %182 %100
|
||||
OpStore %183 %81
|
||||
%184 = OpLoad %5 %141
|
||||
%185 = OpLoad %5 %141
|
||||
%186 = OpAccessChain %121 %142 %36 %36 %184 %185
|
||||
OpStore %186 %82
|
||||
%179 = OpLoad %5 %140
|
||||
%180 = OpAccessChain %120 %141 %36 %36 %36 %179
|
||||
OpStore %180 %79
|
||||
%181 = OpLoad %5 %140
|
||||
%182 = OpAccessChain %120 %141 %36 %36 %181 %99
|
||||
OpStore %182 %80
|
||||
%183 = OpLoad %5 %140
|
||||
%184 = OpLoad %5 %140
|
||||
%185 = OpAccessChain %120 %141 %36 %36 %183 %184
|
||||
OpStore %185 %81
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%189 = OpFunction %10 None %190
|
||||
%188 = OpFunctionParameter %27
|
||||
%187 = OpLabel
|
||||
OpBranch %191
|
||||
%191 = OpLabel
|
||||
%192 = OpLoad %10 %188
|
||||
OpReturnValue %192
|
||||
%188 = OpFunction %10 None %189
|
||||
%187 = OpFunctionParameter %27
|
||||
%186 = OpLabel
|
||||
OpBranch %190
|
||||
%190 = OpLabel
|
||||
%191 = OpLoad %10 %187
|
||||
OpReturnValue %191
|
||||
OpFunctionEnd
|
||||
%195 = OpFunction %10 None %196
|
||||
%194 = OpFunctionParameter %29
|
||||
%193 = OpLabel
|
||||
OpBranch %197
|
||||
%197 = OpLabel
|
||||
%198 = OpCompositeExtract %28 %194 4
|
||||
%199 = OpCompositeExtract %10 %198 9
|
||||
OpReturnValue %199
|
||||
%194 = OpFunction %10 None %195
|
||||
%193 = OpFunctionParameter %29
|
||||
%192 = OpLabel
|
||||
OpBranch %196
|
||||
%196 = OpLabel
|
||||
%197 = OpCompositeExtract %28 %193 4
|
||||
%198 = OpCompositeExtract %10 %197 9
|
||||
OpReturnValue %198
|
||||
OpFunctionEnd
|
||||
%202 = OpFunction %2 None %203
|
||||
%201 = OpFunctionParameter %33
|
||||
%200 = OpLabel
|
||||
OpBranch %205
|
||||
%201 = OpFunction %2 None %202
|
||||
%200 = OpFunctionParameter %33
|
||||
%199 = OpLabel
|
||||
OpBranch %204
|
||||
%204 = OpLabel
|
||||
OpStore %200 %203
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%207 = OpFunction %2 None %208
|
||||
%206 = OpFunctionParameter %35
|
||||
%205 = OpLabel
|
||||
OpStore %201 %204
|
||||
OpBranch %212
|
||||
%212 = OpLabel
|
||||
OpStore %206 %211
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%208 = OpFunction %2 None %209
|
||||
%207 = OpFunctionParameter %35
|
||||
%206 = OpLabel
|
||||
OpBranch %213
|
||||
%219 = OpFunction %2 None %55
|
||||
%213 = OpLabel
|
||||
OpStore %207 %212
|
||||
%231 = OpVariable %27 Function %224
|
||||
%232 = OpVariable %233 Function %234
|
||||
%216 = OpLoad %3 %214
|
||||
%220 = OpAccessChain %56 %44 %36
|
||||
%222 = OpAccessChain %221 %47 %36
|
||||
%223 = OpAccessChain %131 %50 %36
|
||||
OpBranch %235
|
||||
%235 = OpLabel
|
||||
%236 = OpLoad %10 %231
|
||||
OpStore %231 %59
|
||||
%237 = OpFunctionCall %2 %54
|
||||
%238 = OpFunctionCall %2 %130
|
||||
%240 = OpAccessChain %239 %42 %36
|
||||
%241 = OpLoad %8 %240
|
||||
%244 = OpAccessChain %242 %42 %243
|
||||
%245 = OpLoad %18 %244
|
||||
%248 = OpAccessChain %247 %42 %36 %225 %36
|
||||
%249 = OpLoad %10 %248
|
||||
%251 = OpArrayLength %3 %42 5
|
||||
%252 = OpISub %3 %251 %14
|
||||
%255 = OpAccessChain %254 %42 %30 %252 %36
|
||||
%256 = OpLoad %5 %255
|
||||
%257 = OpLoad %23 %222
|
||||
%258 = OpFunctionCall %10 %188 %231
|
||||
%259 = OpConvertFToS %5 %249
|
||||
%260 = OpCompositeConstruct %32 %256 %259 %226 %227 %228
|
||||
OpStore %232 %260
|
||||
%261 = OpIAdd %3 %216 %99
|
||||
%262 = OpAccessChain %83 %232 %261
|
||||
OpStore %262 %229
|
||||
%263 = OpAccessChain %83 %232 %216
|
||||
%264 = OpLoad %5 %263
|
||||
%265 = OpFunctionCall %10 %194 %230
|
||||
%267 = OpCompositeConstruct %266 %264 %264 %264 %264
|
||||
%268 = OpConvertSToF %31 %267
|
||||
%269 = OpMatrixTimesVector %9 %241 %268
|
||||
%270 = OpCompositeConstruct %31 %269 %61
|
||||
OpStore %217 %270
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%220 = OpFunction %2 None %56
|
||||
%214 = OpLabel
|
||||
%232 = OpVariable %27 Function %225
|
||||
%233 = OpVariable %234 Function %235
|
||||
%217 = OpLoad %3 %215
|
||||
%221 = OpAccessChain %57 %44 %36
|
||||
%223 = OpAccessChain %222 %47 %36
|
||||
%224 = OpAccessChain %132 %50 %36
|
||||
OpBranch %236
|
||||
%236 = OpLabel
|
||||
%237 = OpLoad %10 %232
|
||||
OpStore %232 %60
|
||||
%238 = OpFunctionCall %2 %55
|
||||
%239 = OpFunctionCall %2 %131
|
||||
%241 = OpAccessChain %240 %42 %36
|
||||
%242 = OpLoad %8 %241
|
||||
%245 = OpAccessChain %243 %42 %244
|
||||
%246 = OpLoad %18 %245
|
||||
%249 = OpAccessChain %248 %42 %36 %226 %36
|
||||
%250 = OpLoad %10 %249
|
||||
%252 = OpArrayLength %3 %42 5
|
||||
%253 = OpISub %3 %252 %14
|
||||
%256 = OpAccessChain %255 %42 %30 %253 %36
|
||||
%257 = OpLoad %5 %256
|
||||
%258 = OpLoad %23 %223
|
||||
%259 = OpFunctionCall %10 %189 %232
|
||||
%260 = OpConvertFToS %5 %250
|
||||
%261 = OpCompositeConstruct %32 %257 %260 %227 %228 %229
|
||||
OpStore %233 %261
|
||||
%262 = OpIAdd %3 %217 %100
|
||||
%263 = OpAccessChain %84 %233 %262
|
||||
OpStore %263 %230
|
||||
%264 = OpAccessChain %84 %233 %217
|
||||
%265 = OpLoad %5 %264
|
||||
%266 = OpFunctionCall %10 %195 %231
|
||||
%268 = OpCompositeConstruct %267 %265 %265 %265 %265
|
||||
%269 = OpConvertSToF %31 %268
|
||||
%270 = OpMatrixTimesVector %9 %242 %269
|
||||
%271 = OpCompositeConstruct %31 %270 %62
|
||||
OpStore %218 %271
|
||||
%273 = OpFunction %2 None %55
|
||||
%271 = OpLabel
|
||||
%274 = OpAccessChain %221 %47 %36
|
||||
OpBranch %285
|
||||
%285 = OpLabel
|
||||
%286 = OpAccessChain %247 %42 %36 %99 %14
|
||||
OpStore %286 %59
|
||||
%287 = OpAccessChain %239 %42 %36
|
||||
OpStore %287 %279
|
||||
%288 = OpAccessChain %242 %42 %243
|
||||
OpStore %288 %282
|
||||
%289 = OpAccessChain %254 %42 %30 %99 %36
|
||||
OpStore %289 %58
|
||||
OpStore %274 %283
|
||||
OpStore %272 %284
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%274 = OpFunction %2 None %56
|
||||
%272 = OpLabel
|
||||
%275 = OpAccessChain %222 %47 %36
|
||||
OpBranch %286
|
||||
%286 = OpLabel
|
||||
%287 = OpAccessChain %248 %42 %36 %100 %14
|
||||
OpStore %287 %60
|
||||
%288 = OpAccessChain %240 %42 %36
|
||||
OpStore %288 %280
|
||||
%289 = OpAccessChain %243 %42 %244
|
||||
OpStore %289 %283
|
||||
%290 = OpAccessChain %255 %42 %30 %100 %36
|
||||
OpStore %290 %59
|
||||
OpStore %275 %284
|
||||
OpStore %273 %285
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%292 = OpFunction %2 None %56
|
||||
%291 = OpLabel
|
||||
%296 = OpVariable %35 Function %295
|
||||
OpBranch %297
|
||||
%297 = OpLabel
|
||||
%301 = OpLoad %4 %299
|
||||
%305 = OpIEqual %303 %301 %302
|
||||
%306 = OpAll %304 %305
|
||||
OpSelectionMerge %307 None
|
||||
OpBranchConditional %306 %308 %307
|
||||
%308 = OpLabel
|
||||
OpStore %53 %298
|
||||
OpBranch %307
|
||||
%307 = OpLabel
|
||||
OpControlBarrier %14 %14 %309
|
||||
OpBranch %310
|
||||
%310 = OpLabel
|
||||
%311 = OpFunctionCall %2 %202 %53
|
||||
%312 = OpFunctionCall %2 %208 %296
|
||||
%291 = OpFunction %2 None %55
|
||||
%290 = OpLabel
|
||||
%296 = OpVariable %33 Function %292
|
||||
%297 = OpVariable %35 Function %295
|
||||
OpBranch %298
|
||||
%298 = OpLabel
|
||||
%299 = OpFunctionCall %2 %201 %296
|
||||
%300 = OpFunctionCall %2 %207 %297
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
@@ -34,7 +34,6 @@ var<uniform> baz: Baz;
|
||||
var<storage, read_write> qux: vec2<i32>;
|
||||
@group(0) @binding(3)
|
||||
var<uniform> nested_mat_cx2_: MatCx2InArray;
|
||||
var<workgroup> val: u32;
|
||||
|
||||
fn test_matrix_within_struct_accesses() {
|
||||
var idx: i32 = 1;
|
||||
@@ -117,7 +116,7 @@ fn test_arr_as_arg(a: array<array<f32, 10>, 5>) -> f32 {
|
||||
return a[4][9];
|
||||
}
|
||||
|
||||
fn assign_through_ptr_fn(p: ptr<workgroup, u32>) {
|
||||
fn assign_through_ptr_fn(p: ptr<function, u32>) {
|
||||
(*p) = 42u;
|
||||
return;
|
||||
}
|
||||
@@ -162,6 +161,7 @@ fn foo_frag() -> @location(0) vec4<f32> {
|
||||
|
||||
@compute @workgroup_size(1, 1, 1)
|
||||
fn assign_through_ptr() {
|
||||
var val: u32 = 33u;
|
||||
var arr: array<vec4<f32>, 2> = array<vec4<f32>, 2>(vec4(6.0), vec4(7.0));
|
||||
|
||||
assign_through_ptr_fn((&val));
|
||||
|
||||
@@ -1065,7 +1065,7 @@ fn invalid_functions() {
|
||||
})
|
||||
}
|
||||
|
||||
// Pointers of these storage classes cannot be passed as arguments.
|
||||
// Pointers of these address spaces cannot be passed as arguments.
|
||||
check_validation! {
|
||||
"fn unacceptable_ptr_space(arg: ptr<storage, array<f32>>) { }":
|
||||
Err(naga::valid::ValidationError::Function {
|
||||
@@ -1079,7 +1079,6 @@ fn invalid_functions() {
|
||||
})
|
||||
if function_name == "unacceptable_ptr_space" && argument_name == "arg"
|
||||
}
|
||||
|
||||
check_validation! {
|
||||
"fn unacceptable_ptr_space(arg: ptr<uniform, f32>) { }":
|
||||
Err(naga::valid::ValidationError::Function {
|
||||
@@ -1093,6 +1092,19 @@ fn invalid_functions() {
|
||||
})
|
||||
if function_name == "unacceptable_ptr_space" && argument_name == "arg"
|
||||
}
|
||||
check_validation! {
|
||||
"fn unacceptable_ptr_space(arg: ptr<workgroup, f32>) { }":
|
||||
Err(naga::valid::ValidationError::Function {
|
||||
name: function_name,
|
||||
source: naga::valid::FunctionError::InvalidArgumentPointerSpace {
|
||||
index: 0,
|
||||
name: argument_name,
|
||||
space: naga::AddressSpace::WorkGroup,
|
||||
},
|
||||
..
|
||||
})
|
||||
if function_name == "unacceptable_ptr_space" && argument_name == "arg"
|
||||
}
|
||||
|
||||
check_validation! {
|
||||
"
|
||||
|
||||
Reference in New Issue
Block a user