intrinsics: Add missing select() overload

WGSL supports select() with vectors, where the condition is a
scalar. To support this in SPIR-V versions older than 1.4, we need to
splat the condition operand to a vector of the same size as the
objects.

Fixed: tint:933
Change-Id: I571af46e74cd7bb24093524ccfed25a3ed612676
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/56340
Auto-Submit: James Price <jrprice@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
James Price 2021-06-29 08:45:34 +00:00 committed by Tint LUCI CQ
parent c7aa21e265
commit 077fe64b11
64 changed files with 4789 additions and 2463 deletions

File diff suppressed because it is too large Load Diff

View File

@ -359,6 +359,7 @@ fn reverseBits<N: num, T: iu32>(vec<N, T>) -> vec<N, T>
fn round(f32) -> f32 fn round(f32) -> f32
fn round<N: num>(vec<N, f32>) -> vec<N, f32> fn round<N: num>(vec<N, f32>) -> vec<N, f32>
fn select<T: scalar>(T, T, bool) -> T fn select<T: scalar>(T, T, bool) -> T
fn select<T: scalar, N: num>(vec<N, T>, vec<N, T>, bool) -> vec<N, T>
fn select<N: num, T: scalar>(vec<N, T>, vec<N, T>, vec<N, bool>) -> vec<N, T> fn select<N: num, T: scalar>(vec<N, T>, vec<N, T>, vec<N, bool>) -> vec<N, T>
fn sign(f32) -> f32 fn sign(f32) -> f32
fn sign<N: num>(vec<N, f32>) -> vec<N, f32> fn sign<N: num>(vec<N, f32>) -> vec<N, f32>

View File

@ -468,8 +468,9 @@ TEST_F(ResolverIntrinsicTest, Select_Error_NoParams) {
EXPECT_EQ(r()->error(), EXPECT_EQ(r()->error(),
R"(error: no matching call to select() R"(error: no matching call to select()
2 candidate functions: 3 candidate functions:
select(T, T, bool) -> T where: T is f32, i32, u32 or bool select(T, T, bool) -> T where: T is f32, i32, u32 or bool
select(vecN<T>, vecN<T>, bool) -> vecN<T> where: T is f32, i32, u32 or bool
select(vecN<T>, vecN<T>, vecN<bool>) -> vecN<T> where: T is f32, i32, u32 or bool select(vecN<T>, vecN<T>, vecN<bool>) -> vecN<T> where: T is f32, i32, u32 or bool
)"); )");
} }
@ -483,8 +484,9 @@ TEST_F(ResolverIntrinsicTest, Select_Error_SelectorInt) {
EXPECT_EQ(r()->error(), EXPECT_EQ(r()->error(),
R"(error: no matching call to select(i32, i32, i32) R"(error: no matching call to select(i32, i32, i32)
2 candidate functions: 3 candidate functions:
select(T, T, bool) -> T where: T is f32, i32, u32 or bool select(T, T, bool) -> T where: T is f32, i32, u32 or bool
select(vecN<T>, vecN<T>, bool) -> vecN<T> where: T is f32, i32, u32 or bool
select(vecN<T>, vecN<T>, vecN<bool>) -> vecN<T> where: T is f32, i32, u32 or bool select(vecN<T>, vecN<T>, vecN<bool>) -> vecN<T> where: T is f32, i32, u32 or bool
)"); )");
} }
@ -500,8 +502,9 @@ TEST_F(ResolverIntrinsicTest, Select_Error_Matrix) {
EXPECT_EQ(r()->error(), EXPECT_EQ(r()->error(),
R"(error: no matching call to select(mat2x2<f32>, mat2x2<f32>, bool) R"(error: no matching call to select(mat2x2<f32>, mat2x2<f32>, bool)
2 candidate functions: 3 candidate functions:
select(T, T, bool) -> T where: T is f32, i32, u32 or bool select(T, T, bool) -> T where: T is f32, i32, u32 or bool
select(vecN<T>, vecN<T>, bool) -> vecN<T> where: T is f32, i32, u32 or bool
select(vecN<T>, vecN<T>, vecN<bool>) -> vecN<T> where: T is f32, i32, u32 or bool select(vecN<T>, vecN<T>, vecN<bool>) -> vecN<T> where: T is f32, i32, u32 or bool
)"); )");
} }
@ -515,8 +518,9 @@ TEST_F(ResolverIntrinsicTest, Select_Error_MismatchTypes) {
EXPECT_EQ(r()->error(), EXPECT_EQ(r()->error(),
R"(error: no matching call to select(f32, vec2<f32>, bool) R"(error: no matching call to select(f32, vec2<f32>, bool)
2 candidate functions: 3 candidate functions:
select(T, T, bool) -> T where: T is f32, i32, u32 or bool select(T, T, bool) -> T where: T is f32, i32, u32 or bool
select(vecN<T>, vecN<T>, bool) -> vecN<T> where: T is f32, i32, u32 or bool
select(vecN<T>, vecN<T>, vecN<bool>) -> vecN<T> where: T is f32, i32, u32 or bool select(vecN<T>, vecN<T>, vecN<bool>) -> vecN<T> where: T is f32, i32, u32 or bool
)"); )");
} }
@ -531,8 +535,9 @@ TEST_F(ResolverIntrinsicTest, Select_Error_MismatchVectorSize) {
EXPECT_EQ(r()->error(), EXPECT_EQ(r()->error(),
R"(error: no matching call to select(vec2<f32>, vec3<f32>, bool) R"(error: no matching call to select(vec2<f32>, vec3<f32>, bool)
2 candidate functions: 3 candidate functions:
select(T, T, bool) -> T where: T is f32, i32, u32 or bool select(T, T, bool) -> T where: T is f32, i32, u32 or bool
select(vecN<T>, vecN<T>, bool) -> vecN<T> where: T is f32, i32, u32 or bool
select(vecN<T>, vecN<T>, vecN<bool>) -> vecN<T> where: T is f32, i32, u32 or bool select(vecN<T>, vecN<T>, vecN<bool>) -> vecN<T> where: T is f32, i32, u32 or bool
)"); )");
} }

View File

@ -2441,6 +2441,23 @@ uint32_t Builder::GenerateIntrinsic(ast::CallExpression* call,
if (!cond_id || !true_id || !false_id) { if (!cond_id || !true_id || !false_id) {
return 0; return 0;
} }
// If the condition is scalar but the objects are vectors, we need to
// splat the condition into a vector of the same size.
// TODO(jrprice): If we're targeting SPIR-V 1.4, we don't need to do this.
auto* result_vector_type = intrinsic->ReturnType()->As<sem::Vector>();
if (result_vector_type && intrinsic->Parameters()[2].type->is_scalar()) {
sem::Bool bool_type;
sem::Vector bool_vec_type(&bool_type, result_vector_type->size());
if (!GenerateTypeIfNeeded(&bool_vec_type)) {
return 0;
}
cond_id = GenerateSplat(cond_id, &bool_vec_type);
if (cond_id == 0) {
return 0;
}
}
if (!push_function_inst( if (!push_function_inst(
spv::Op::OpSelect, spv::Op::OpSelect,
{Operand::Int(result_type_id), result, Operand::Int(cond_id), {Operand::Int(result_type_id), result, Operand::Int(cond_id),

View File

@ -0,0 +1,45 @@
// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
////////////////////////////////////////////////////////////////////////////////
// File generated by tools/intrinsic-gen
// using the template:
// test/intrinsics/intrinsics.wgsl.tmpl
// and the intrinsic defintion file:
// src/intrinsics.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
// fn select(vec<4, u32>, vec<4, u32>, bool) -> vec<4, u32>
fn select_087ea4() {
var res: vec4<u32> = select(vec4<u32>(), vec4<u32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_087ea4();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_087ea4();
}
[[stage(compute)]]
fn compute_main() {
select_087ea4();
}

View File

@ -0,0 +1,24 @@
void select_087ea4() {
uint4 res = (false ? uint4(0u, 0u, 0u, 0u) : uint4(0u, 0u, 0u, 0u));
}
struct tint_symbol {
float4 value : SV_Position;
};
tint_symbol vertex_main() {
select_087ea4();
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;
}
void fragment_main() {
select_087ea4();
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
select_087ea4();
return;
}

View File

@ -0,0 +1,27 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void select_087ea4() {
uint4 res = select(uint4(), uint4(), bool());
}
vertex tint_symbol vertex_main() {
select_087ea4();
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
fragment void fragment_main() {
select_087ea4();
return;
}
kernel void compute_main() {
select_087ea4();
return;
}

View File

@ -0,0 +1,76 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 41
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %tint_pointsize "tint_pointsize"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %select_087ea4 "select_087ea4"
OpName %res "res"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
OpDecorate %tint_pointsize BuiltIn PointSize
OpDecorate %tint_symbol_1 BuiltIn Position
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%8 = OpConstantNull %v4float
%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%uint = OpTypeInt 32 0
%v4uint = OpTypeVector %uint 4
%bool = OpTypeBool
%17 = OpConstantNull %bool
%18 = OpConstantNull %v4uint
%v4bool = OpTypeVector %bool 4
%_ptr_Function_v4bool = OpTypePointer Function %v4bool
%22 = OpConstantNull %v4bool
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
%26 = OpTypeFunction %void %v4float
%float_1 = OpConstant %float 1
%select_087ea4 = OpFunction %void None %9
%12 = OpLabel
%20 = OpVariable %_ptr_Function_v4bool Function %22
%res = OpVariable %_ptr_Function_v4uint Function %18
%23 = OpCompositeConstruct %v4bool %17 %17 %17 %17
%13 = OpSelect %v4uint %23 %18 %18
OpStore %res %13
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %26
%tint_symbol = OpFunctionParameter %v4float
%29 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %9
%31 = OpLabel
OpStore %tint_pointsize %float_1
%33 = OpFunctionCall %void %select_087ea4
%34 = OpFunctionCall %void %tint_symbol_2 %8
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %9
%36 = OpLabel
%37 = OpFunctionCall %void %select_087ea4
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %9
%39 = OpLabel
%40 = OpFunctionCall %void %select_087ea4
OpReturn
OpFunctionEnd

View File

@ -0,0 +1,19 @@
fn select_087ea4() {
var res : vec4<u32> = select(vec4<u32>(), vec4<u32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_087ea4();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_087ea4();
}
[[stage(compute)]]
fn compute_main() {
select_087ea4();
}

View File

@ -0,0 +1,45 @@
// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
////////////////////////////////////////////////////////////////////////////////
// File generated by tools/intrinsic-gen
// using the template:
// test/intrinsics/intrinsics.wgsl.tmpl
// and the intrinsic defintion file:
// src/intrinsics.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
// fn select(vec<3, bool>, vec<3, bool>, bool) -> vec<3, bool>
fn select_3c25ce() {
var res: vec3<bool> = select(vec3<bool>(), vec3<bool>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_3c25ce();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_3c25ce();
}
[[stage(compute)]]
fn compute_main() {
select_3c25ce();
}

View File

@ -0,0 +1,24 @@
void select_3c25ce() {
bool3 res = (false ? bool3(false, false, false) : bool3(false, false, false));
}
struct tint_symbol {
float4 value : SV_Position;
};
tint_symbol vertex_main() {
select_3c25ce();
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;
}
void fragment_main() {
select_3c25ce();
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
select_3c25ce();
return;
}

View File

@ -0,0 +1,27 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void select_3c25ce() {
bool3 res = select(bool3(), bool3(), bool());
}
vertex tint_symbol vertex_main() {
select_3c25ce();
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
fragment void fragment_main() {
select_3c25ce();
return;
}
kernel void compute_main() {
select_3c25ce();
return;
}

View File

@ -0,0 +1,72 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 37
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %tint_pointsize "tint_pointsize"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %select_3c25ce "select_3c25ce"
OpName %res "res"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
OpDecorate %tint_pointsize BuiltIn PointSize
OpDecorate %tint_symbol_1 BuiltIn Position
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%8 = OpConstantNull %v4float
%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%bool = OpTypeBool
%v3bool = OpTypeVector %bool 3
%16 = OpConstantNull %bool
%17 = OpConstantNull %v3bool
%_ptr_Function_v3bool = OpTypePointer Function %v3bool
%22 = OpTypeFunction %void %v4float
%float_1 = OpConstant %float 1
%select_3c25ce = OpFunction %void None %9
%12 = OpLabel
%18 = OpVariable %_ptr_Function_v3bool Function %17
%res = OpVariable %_ptr_Function_v3bool Function %17
%20 = OpCompositeConstruct %v3bool %16 %16 %16
%13 = OpSelect %v3bool %20 %17 %17
OpStore %res %13
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %22
%tint_symbol = OpFunctionParameter %v4float
%25 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %9
%27 = OpLabel
OpStore %tint_pointsize %float_1
%29 = OpFunctionCall %void %select_3c25ce
%30 = OpFunctionCall %void %tint_symbol_2 %8
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %9
%32 = OpLabel
%33 = OpFunctionCall %void %select_3c25ce
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %9
%35 = OpLabel
%36 = OpFunctionCall %void %select_3c25ce
OpReturn
OpFunctionEnd

View File

@ -0,0 +1,19 @@
fn select_3c25ce() {
var res : vec3<bool> = select(vec3<bool>(), vec3<bool>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_3c25ce();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_3c25ce();
}
[[stage(compute)]]
fn compute_main() {
select_3c25ce();
}

View File

@ -0,0 +1,45 @@
// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
////////////////////////////////////////////////////////////////////////////////
// File generated by tools/intrinsic-gen
// using the template:
// test/intrinsics/intrinsics.wgsl.tmpl
// and the intrinsic defintion file:
// src/intrinsics.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
// fn select(vec<2, u32>, vec<2, u32>, bool) -> vec<2, u32>
fn select_51b047() {
var res: vec2<u32> = select(vec2<u32>(), vec2<u32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_51b047();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_51b047();
}
[[stage(compute)]]
fn compute_main() {
select_51b047();
}

View File

@ -0,0 +1,24 @@
void select_51b047() {
uint2 res = (false ? uint2(0u, 0u) : uint2(0u, 0u));
}
struct tint_symbol {
float4 value : SV_Position;
};
tint_symbol vertex_main() {
select_51b047();
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;
}
void fragment_main() {
select_51b047();
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
select_51b047();
return;
}

View File

@ -0,0 +1,27 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void select_51b047() {
uint2 res = select(uint2(), uint2(), bool());
}
vertex tint_symbol vertex_main() {
select_51b047();
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
fragment void fragment_main() {
select_51b047();
return;
}
kernel void compute_main() {
select_51b047();
return;
}

View File

@ -0,0 +1,76 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 41
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %tint_pointsize "tint_pointsize"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %select_51b047 "select_51b047"
OpName %res "res"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
OpDecorate %tint_pointsize BuiltIn PointSize
OpDecorate %tint_symbol_1 BuiltIn Position
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%8 = OpConstantNull %v4float
%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
%bool = OpTypeBool
%17 = OpConstantNull %bool
%18 = OpConstantNull %v2uint
%v2bool = OpTypeVector %bool 2
%_ptr_Function_v2bool = OpTypePointer Function %v2bool
%22 = OpConstantNull %v2bool
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
%26 = OpTypeFunction %void %v4float
%float_1 = OpConstant %float 1
%select_51b047 = OpFunction %void None %9
%12 = OpLabel
%20 = OpVariable %_ptr_Function_v2bool Function %22
%res = OpVariable %_ptr_Function_v2uint Function %18
%23 = OpCompositeConstruct %v2bool %17 %17
%13 = OpSelect %v2uint %23 %18 %18
OpStore %res %13
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %26
%tint_symbol = OpFunctionParameter %v4float
%29 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %9
%31 = OpLabel
OpStore %tint_pointsize %float_1
%33 = OpFunctionCall %void %select_51b047
%34 = OpFunctionCall %void %tint_symbol_2 %8
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %9
%36 = OpLabel
%37 = OpFunctionCall %void %select_51b047
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %9
%39 = OpLabel
%40 = OpFunctionCall %void %select_51b047
OpReturn
OpFunctionEnd

View File

@ -0,0 +1,19 @@
fn select_51b047() {
var res : vec2<u32> = select(vec2<u32>(), vec2<u32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_51b047();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_51b047();
}
[[stage(compute)]]
fn compute_main() {
select_51b047();
}

View File

@ -0,0 +1,45 @@
// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
////////////////////////////////////////////////////////////////////////////////
// File generated by tools/intrinsic-gen
// using the template:
// test/intrinsics/intrinsics.wgsl.tmpl
// and the intrinsic defintion file:
// src/intrinsics.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
// fn select(vec<4, f32>, vec<4, f32>, bool) -> vec<4, f32>
fn select_713567() {
var res: vec4<f32> = select(vec4<f32>(), vec4<f32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_713567();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_713567();
}
[[stage(compute)]]
fn compute_main() {
select_713567();
}

View File

@ -0,0 +1,24 @@
void select_713567() {
float4 res = (false ? float4(0.0f, 0.0f, 0.0f, 0.0f) : float4(0.0f, 0.0f, 0.0f, 0.0f));
}
struct tint_symbol {
float4 value : SV_Position;
};
tint_symbol vertex_main() {
select_713567();
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;
}
void fragment_main() {
select_713567();
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
select_713567();
return;
}

View File

@ -0,0 +1,27 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void select_713567() {
float4 res = select(float4(), float4(), bool());
}
vertex tint_symbol vertex_main() {
select_713567();
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
fragment void fragment_main() {
select_713567();
return;
}
kernel void compute_main() {
select_713567();
return;
}

View File

@ -0,0 +1,73 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 38
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %tint_pointsize "tint_pointsize"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %select_713567 "select_713567"
OpName %res "res"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
OpDecorate %tint_pointsize BuiltIn PointSize
OpDecorate %tint_symbol_1 BuiltIn Position
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%8 = OpConstantNull %v4float
%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%bool = OpTypeBool
%15 = OpConstantNull %bool
%v4bool = OpTypeVector %bool 4
%_ptr_Function_v4bool = OpTypePointer Function %v4bool
%19 = OpConstantNull %v4bool
%_ptr_Function_v4float = OpTypePointer Function %v4float
%23 = OpTypeFunction %void %v4float
%float_1 = OpConstant %float 1
%select_713567 = OpFunction %void None %9
%12 = OpLabel
%17 = OpVariable %_ptr_Function_v4bool Function %19
%res = OpVariable %_ptr_Function_v4float Function %8
%20 = OpCompositeConstruct %v4bool %15 %15 %15 %15
%13 = OpSelect %v4float %20 %8 %8
OpStore %res %13
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %23
%tint_symbol = OpFunctionParameter %v4float
%26 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %9
%28 = OpLabel
OpStore %tint_pointsize %float_1
%30 = OpFunctionCall %void %select_713567
%31 = OpFunctionCall %void %tint_symbol_2 %8
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %9
%33 = OpLabel
%34 = OpFunctionCall %void %select_713567
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %9
%36 = OpLabel
%37 = OpFunctionCall %void %select_713567
OpReturn
OpFunctionEnd

View File

@ -0,0 +1,19 @@
fn select_713567() {
var res : vec4<f32> = select(vec4<f32>(), vec4<f32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_713567();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_713567();
}
[[stage(compute)]]
fn compute_main() {
select_713567();
}

View File

@ -0,0 +1,45 @@
// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
////////////////////////////////////////////////////////////////////////////////
// File generated by tools/intrinsic-gen
// using the template:
// test/intrinsics/intrinsics.wgsl.tmpl
// and the intrinsic defintion file:
// src/intrinsics.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
// fn select(vec<3, f32>, vec<3, f32>, bool) -> vec<3, f32>
fn select_78be5f() {
var res: vec3<f32> = select(vec3<f32>(), vec3<f32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_78be5f();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_78be5f();
}
[[stage(compute)]]
fn compute_main() {
select_78be5f();
}

View File

@ -0,0 +1,24 @@
void select_78be5f() {
float3 res = (false ? float3(0.0f, 0.0f, 0.0f) : float3(0.0f, 0.0f, 0.0f));
}
struct tint_symbol {
float4 value : SV_Position;
};
tint_symbol vertex_main() {
select_78be5f();
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;
}
void fragment_main() {
select_78be5f();
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
select_78be5f();
return;
}

View File

@ -0,0 +1,27 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void select_78be5f() {
float3 res = select(float3(), float3(), bool());
}
vertex tint_symbol vertex_main() {
select_78be5f();
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
fragment void fragment_main() {
select_78be5f();
return;
}
kernel void compute_main() {
select_78be5f();
return;
}

View File

@ -0,0 +1,75 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 40
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %tint_pointsize "tint_pointsize"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %select_78be5f "select_78be5f"
OpName %res "res"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
OpDecorate %tint_pointsize BuiltIn PointSize
OpDecorate %tint_symbol_1 BuiltIn Position
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%8 = OpConstantNull %v4float
%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%v3float = OpTypeVector %float 3
%bool = OpTypeBool
%16 = OpConstantNull %bool
%17 = OpConstantNull %v3float
%v3bool = OpTypeVector %bool 3
%_ptr_Function_v3bool = OpTypePointer Function %v3bool
%21 = OpConstantNull %v3bool
%_ptr_Function_v3float = OpTypePointer Function %v3float
%25 = OpTypeFunction %void %v4float
%float_1 = OpConstant %float 1
%select_78be5f = OpFunction %void None %9
%12 = OpLabel
%19 = OpVariable %_ptr_Function_v3bool Function %21
%res = OpVariable %_ptr_Function_v3float Function %17
%22 = OpCompositeConstruct %v3bool %16 %16 %16
%13 = OpSelect %v3float %22 %17 %17
OpStore %res %13
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %25
%tint_symbol = OpFunctionParameter %v4float
%28 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %9
%30 = OpLabel
OpStore %tint_pointsize %float_1
%32 = OpFunctionCall %void %select_78be5f
%33 = OpFunctionCall %void %tint_symbol_2 %8
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %9
%35 = OpLabel
%36 = OpFunctionCall %void %select_78be5f
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %9
%38 = OpLabel
%39 = OpFunctionCall %void %select_78be5f
OpReturn
OpFunctionEnd

View File

@ -0,0 +1,19 @@
fn select_78be5f() {
var res : vec3<f32> = select(vec3<f32>(), vec3<f32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_78be5f();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_78be5f();
}
[[stage(compute)]]
fn compute_main() {
select_78be5f();
}

View File

@ -0,0 +1,45 @@
// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
////////////////////////////////////////////////////////////////////////////////
// File generated by tools/intrinsic-gen
// using the template:
// test/intrinsics/intrinsics.wgsl.tmpl
// and the intrinsic defintion file:
// src/intrinsics.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
// fn select(vec<3, i32>, vec<3, i32>, bool) -> vec<3, i32>
fn select_8fa62c() {
var res: vec3<i32> = select(vec3<i32>(), vec3<i32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_8fa62c();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_8fa62c();
}
[[stage(compute)]]
fn compute_main() {
select_8fa62c();
}

View File

@ -0,0 +1,24 @@
void select_8fa62c() {
int3 res = (false ? int3(0, 0, 0) : int3(0, 0, 0));
}
struct tint_symbol {
float4 value : SV_Position;
};
tint_symbol vertex_main() {
select_8fa62c();
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;
}
void fragment_main() {
select_8fa62c();
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
select_8fa62c();
return;
}

View File

@ -0,0 +1,27 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void select_8fa62c() {
int3 res = select(int3(), int3(), bool());
}
vertex tint_symbol vertex_main() {
select_8fa62c();
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
fragment void fragment_main() {
select_8fa62c();
return;
}
kernel void compute_main() {
select_8fa62c();
return;
}

View File

@ -0,0 +1,76 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 41
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %tint_pointsize "tint_pointsize"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %select_8fa62c "select_8fa62c"
OpName %res "res"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
OpDecorate %tint_pointsize BuiltIn PointSize
OpDecorate %tint_symbol_1 BuiltIn Position
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%8 = OpConstantNull %v4float
%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%int = OpTypeInt 32 1
%v3int = OpTypeVector %int 3
%bool = OpTypeBool
%17 = OpConstantNull %bool
%18 = OpConstantNull %v3int
%v3bool = OpTypeVector %bool 3
%_ptr_Function_v3bool = OpTypePointer Function %v3bool
%22 = OpConstantNull %v3bool
%_ptr_Function_v3int = OpTypePointer Function %v3int
%26 = OpTypeFunction %void %v4float
%float_1 = OpConstant %float 1
%select_8fa62c = OpFunction %void None %9
%12 = OpLabel
%20 = OpVariable %_ptr_Function_v3bool Function %22
%res = OpVariable %_ptr_Function_v3int Function %18
%23 = OpCompositeConstruct %v3bool %17 %17 %17
%13 = OpSelect %v3int %23 %18 %18
OpStore %res %13
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %26
%tint_symbol = OpFunctionParameter %v4float
%29 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %9
%31 = OpLabel
OpStore %tint_pointsize %float_1
%33 = OpFunctionCall %void %select_8fa62c
%34 = OpFunctionCall %void %tint_symbol_2 %8
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %9
%36 = OpLabel
%37 = OpFunctionCall %void %select_8fa62c
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %9
%39 = OpLabel
%40 = OpFunctionCall %void %select_8fa62c
OpReturn
OpFunctionEnd

View File

@ -0,0 +1,19 @@
fn select_8fa62c() {
var res : vec3<i32> = select(vec3<i32>(), vec3<i32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_8fa62c();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_8fa62c();
}
[[stage(compute)]]
fn compute_main() {
select_8fa62c();
}

View File

@ -0,0 +1,45 @@
// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
////////////////////////////////////////////////////////////////////////////////
// File generated by tools/intrinsic-gen
// using the template:
// test/intrinsics/intrinsics.wgsl.tmpl
// and the intrinsic defintion file:
// src/intrinsics.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
// fn select(vec<4, i32>, vec<4, i32>, bool) -> vec<4, i32>
fn select_ab069f() {
var res: vec4<i32> = select(vec4<i32>(), vec4<i32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_ab069f();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_ab069f();
}
[[stage(compute)]]
fn compute_main() {
select_ab069f();
}

View File

@ -0,0 +1,24 @@
void select_ab069f() {
int4 res = (false ? int4(0, 0, 0, 0) : int4(0, 0, 0, 0));
}
struct tint_symbol {
float4 value : SV_Position;
};
tint_symbol vertex_main() {
select_ab069f();
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;
}
void fragment_main() {
select_ab069f();
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
select_ab069f();
return;
}

View File

@ -0,0 +1,27 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void select_ab069f() {
int4 res = select(int4(), int4(), bool());
}
vertex tint_symbol vertex_main() {
select_ab069f();
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
fragment void fragment_main() {
select_ab069f();
return;
}
kernel void compute_main() {
select_ab069f();
return;
}

View File

@ -0,0 +1,76 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 41
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %tint_pointsize "tint_pointsize"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %select_ab069f "select_ab069f"
OpName %res "res"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
OpDecorate %tint_pointsize BuiltIn PointSize
OpDecorate %tint_symbol_1 BuiltIn Position
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%8 = OpConstantNull %v4float
%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%int = OpTypeInt 32 1
%v4int = OpTypeVector %int 4
%bool = OpTypeBool
%17 = OpConstantNull %bool
%18 = OpConstantNull %v4int
%v4bool = OpTypeVector %bool 4
%_ptr_Function_v4bool = OpTypePointer Function %v4bool
%22 = OpConstantNull %v4bool
%_ptr_Function_v4int = OpTypePointer Function %v4int
%26 = OpTypeFunction %void %v4float
%float_1 = OpConstant %float 1
%select_ab069f = OpFunction %void None %9
%12 = OpLabel
%20 = OpVariable %_ptr_Function_v4bool Function %22
%res = OpVariable %_ptr_Function_v4int Function %18
%23 = OpCompositeConstruct %v4bool %17 %17 %17 %17
%13 = OpSelect %v4int %23 %18 %18
OpStore %res %13
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %26
%tint_symbol = OpFunctionParameter %v4float
%29 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %9
%31 = OpLabel
OpStore %tint_pointsize %float_1
%33 = OpFunctionCall %void %select_ab069f
%34 = OpFunctionCall %void %tint_symbol_2 %8
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %9
%36 = OpLabel
%37 = OpFunctionCall %void %select_ab069f
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %9
%39 = OpLabel
%40 = OpFunctionCall %void %select_ab069f
OpReturn
OpFunctionEnd

View File

@ -0,0 +1,19 @@
fn select_ab069f() {
var res : vec4<i32> = select(vec4<i32>(), vec4<i32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_ab069f();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_ab069f();
}
[[stage(compute)]]
fn compute_main() {
select_ab069f();
}

View File

@ -0,0 +1,45 @@
// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
////////////////////////////////////////////////////////////////////////////////
// File generated by tools/intrinsic-gen
// using the template:
// test/intrinsics/intrinsics.wgsl.tmpl
// and the intrinsic defintion file:
// src/intrinsics.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
// fn select(vec<3, u32>, vec<3, u32>, bool) -> vec<3, u32>
fn select_b04721() {
var res: vec3<u32> = select(vec3<u32>(), vec3<u32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_b04721();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_b04721();
}
[[stage(compute)]]
fn compute_main() {
select_b04721();
}

View File

@ -0,0 +1,24 @@
void select_b04721() {
uint3 res = (false ? uint3(0u, 0u, 0u) : uint3(0u, 0u, 0u));
}
struct tint_symbol {
float4 value : SV_Position;
};
tint_symbol vertex_main() {
select_b04721();
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;
}
void fragment_main() {
select_b04721();
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
select_b04721();
return;
}

View File

@ -0,0 +1,27 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void select_b04721() {
uint3 res = select(uint3(), uint3(), bool());
}
vertex tint_symbol vertex_main() {
select_b04721();
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
fragment void fragment_main() {
select_b04721();
return;
}
kernel void compute_main() {
select_b04721();
return;
}

View File

@ -0,0 +1,76 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 41
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %tint_pointsize "tint_pointsize"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %select_b04721 "select_b04721"
OpName %res "res"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
OpDecorate %tint_pointsize BuiltIn PointSize
OpDecorate %tint_symbol_1 BuiltIn Position
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%8 = OpConstantNull %v4float
%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
%bool = OpTypeBool
%17 = OpConstantNull %bool
%18 = OpConstantNull %v3uint
%v3bool = OpTypeVector %bool 3
%_ptr_Function_v3bool = OpTypePointer Function %v3bool
%22 = OpConstantNull %v3bool
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
%26 = OpTypeFunction %void %v4float
%float_1 = OpConstant %float 1
%select_b04721 = OpFunction %void None %9
%12 = OpLabel
%20 = OpVariable %_ptr_Function_v3bool Function %22
%res = OpVariable %_ptr_Function_v3uint Function %18
%23 = OpCompositeConstruct %v3bool %17 %17 %17
%13 = OpSelect %v3uint %23 %18 %18
OpStore %res %13
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %26
%tint_symbol = OpFunctionParameter %v4float
%29 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %9
%31 = OpLabel
OpStore %tint_pointsize %float_1
%33 = OpFunctionCall %void %select_b04721
%34 = OpFunctionCall %void %tint_symbol_2 %8
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %9
%36 = OpLabel
%37 = OpFunctionCall %void %select_b04721
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %9
%39 = OpLabel
%40 = OpFunctionCall %void %select_b04721
OpReturn
OpFunctionEnd

View File

@ -0,0 +1,19 @@
fn select_b04721() {
var res : vec3<u32> = select(vec3<u32>(), vec3<u32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_b04721();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_b04721();
}
[[stage(compute)]]
fn compute_main() {
select_b04721();
}

View File

@ -0,0 +1,45 @@
// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
////////////////////////////////////////////////////////////////////////////////
// File generated by tools/intrinsic-gen
// using the template:
// test/intrinsics/intrinsics.wgsl.tmpl
// and the intrinsic defintion file:
// src/intrinsics.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
// fn select(vec<2, i32>, vec<2, i32>, bool) -> vec<2, i32>
fn select_bb447f() {
var res: vec2<i32> = select(vec2<i32>(), vec2<i32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_bb447f();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_bb447f();
}
[[stage(compute)]]
fn compute_main() {
select_bb447f();
}

View File

@ -0,0 +1,24 @@
void select_bb447f() {
int2 res = (false ? int2(0, 0) : int2(0, 0));
}
struct tint_symbol {
float4 value : SV_Position;
};
tint_symbol vertex_main() {
select_bb447f();
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;
}
void fragment_main() {
select_bb447f();
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
select_bb447f();
return;
}

View File

@ -0,0 +1,27 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void select_bb447f() {
int2 res = select(int2(), int2(), bool());
}
vertex tint_symbol vertex_main() {
select_bb447f();
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
fragment void fragment_main() {
select_bb447f();
return;
}
kernel void compute_main() {
select_bb447f();
return;
}

View File

@ -0,0 +1,76 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 41
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %tint_pointsize "tint_pointsize"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %select_bb447f "select_bb447f"
OpName %res "res"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
OpDecorate %tint_pointsize BuiltIn PointSize
OpDecorate %tint_symbol_1 BuiltIn Position
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%8 = OpConstantNull %v4float
%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%int = OpTypeInt 32 1
%v2int = OpTypeVector %int 2
%bool = OpTypeBool
%17 = OpConstantNull %bool
%18 = OpConstantNull %v2int
%v2bool = OpTypeVector %bool 2
%_ptr_Function_v2bool = OpTypePointer Function %v2bool
%22 = OpConstantNull %v2bool
%_ptr_Function_v2int = OpTypePointer Function %v2int
%26 = OpTypeFunction %void %v4float
%float_1 = OpConstant %float 1
%select_bb447f = OpFunction %void None %9
%12 = OpLabel
%20 = OpVariable %_ptr_Function_v2bool Function %22
%res = OpVariable %_ptr_Function_v2int Function %18
%23 = OpCompositeConstruct %v2bool %17 %17
%13 = OpSelect %v2int %23 %18 %18
OpStore %res %13
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %26
%tint_symbol = OpFunctionParameter %v4float
%29 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %9
%31 = OpLabel
OpStore %tint_pointsize %float_1
%33 = OpFunctionCall %void %select_bb447f
%34 = OpFunctionCall %void %tint_symbol_2 %8
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %9
%36 = OpLabel
%37 = OpFunctionCall %void %select_bb447f
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %9
%39 = OpLabel
%40 = OpFunctionCall %void %select_bb447f
OpReturn
OpFunctionEnd

View File

@ -0,0 +1,19 @@
fn select_bb447f() {
var res : vec2<i32> = select(vec2<i32>(), vec2<i32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_bb447f();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_bb447f();
}
[[stage(compute)]]
fn compute_main() {
select_bb447f();
}

View File

@ -0,0 +1,45 @@
// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
////////////////////////////////////////////////////////////////////////////////
// File generated by tools/intrinsic-gen
// using the template:
// test/intrinsics/intrinsics.wgsl.tmpl
// and the intrinsic defintion file:
// src/intrinsics.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
// fn select(vec<2, f32>, vec<2, f32>, bool) -> vec<2, f32>
fn select_bf3d29() {
var res: vec2<f32> = select(vec2<f32>(), vec2<f32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_bf3d29();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_bf3d29();
}
[[stage(compute)]]
fn compute_main() {
select_bf3d29();
}

View File

@ -0,0 +1,24 @@
void select_bf3d29() {
float2 res = (false ? float2(0.0f, 0.0f) : float2(0.0f, 0.0f));
}
struct tint_symbol {
float4 value : SV_Position;
};
tint_symbol vertex_main() {
select_bf3d29();
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;
}
void fragment_main() {
select_bf3d29();
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
select_bf3d29();
return;
}

View File

@ -0,0 +1,27 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void select_bf3d29() {
float2 res = select(float2(), float2(), bool());
}
vertex tint_symbol vertex_main() {
select_bf3d29();
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
fragment void fragment_main() {
select_bf3d29();
return;
}
kernel void compute_main() {
select_bf3d29();
return;
}

View File

@ -0,0 +1,75 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 40
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %tint_pointsize "tint_pointsize"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %select_bf3d29 "select_bf3d29"
OpName %res "res"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
OpDecorate %tint_pointsize BuiltIn PointSize
OpDecorate %tint_symbol_1 BuiltIn Position
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%8 = OpConstantNull %v4float
%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%v2float = OpTypeVector %float 2
%bool = OpTypeBool
%16 = OpConstantNull %bool
%17 = OpConstantNull %v2float
%v2bool = OpTypeVector %bool 2
%_ptr_Function_v2bool = OpTypePointer Function %v2bool
%21 = OpConstantNull %v2bool
%_ptr_Function_v2float = OpTypePointer Function %v2float
%25 = OpTypeFunction %void %v4float
%float_1 = OpConstant %float 1
%select_bf3d29 = OpFunction %void None %9
%12 = OpLabel
%19 = OpVariable %_ptr_Function_v2bool Function %21
%res = OpVariable %_ptr_Function_v2float Function %17
%22 = OpCompositeConstruct %v2bool %16 %16
%13 = OpSelect %v2float %22 %17 %17
OpStore %res %13
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %25
%tint_symbol = OpFunctionParameter %v4float
%28 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %9
%30 = OpLabel
OpStore %tint_pointsize %float_1
%32 = OpFunctionCall %void %select_bf3d29
%33 = OpFunctionCall %void %tint_symbol_2 %8
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %9
%35 = OpLabel
%36 = OpFunctionCall %void %select_bf3d29
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %9
%38 = OpLabel
%39 = OpFunctionCall %void %select_bf3d29
OpReturn
OpFunctionEnd

View File

@ -0,0 +1,19 @@
fn select_bf3d29() {
var res : vec2<f32> = select(vec2<f32>(), vec2<f32>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_bf3d29();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_bf3d29();
}
[[stage(compute)]]
fn compute_main() {
select_bf3d29();
}

View File

@ -0,0 +1,45 @@
// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
////////////////////////////////////////////////////////////////////////////////
// File generated by tools/intrinsic-gen
// using the template:
// test/intrinsics/intrinsics.wgsl.tmpl
// and the intrinsic defintion file:
// src/intrinsics.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
// fn select(vec<4, bool>, vec<4, bool>, bool) -> vec<4, bool>
fn select_c41bd1() {
var res: vec4<bool> = select(vec4<bool>(), vec4<bool>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_c41bd1();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_c41bd1();
}
[[stage(compute)]]
fn compute_main() {
select_c41bd1();
}

View File

@ -0,0 +1,24 @@
void select_c41bd1() {
bool4 res = (false ? bool4(false, false, false, false) : bool4(false, false, false, false));
}
struct tint_symbol {
float4 value : SV_Position;
};
tint_symbol vertex_main() {
select_c41bd1();
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;
}
void fragment_main() {
select_c41bd1();
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
select_c41bd1();
return;
}

View File

@ -0,0 +1,27 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void select_c41bd1() {
bool4 res = select(bool4(), bool4(), bool());
}
vertex tint_symbol vertex_main() {
select_c41bd1();
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
fragment void fragment_main() {
select_c41bd1();
return;
}
kernel void compute_main() {
select_c41bd1();
return;
}

View File

@ -0,0 +1,72 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 37
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %tint_pointsize "tint_pointsize"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %select_c41bd1 "select_c41bd1"
OpName %res "res"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
OpDecorate %tint_pointsize BuiltIn PointSize
OpDecorate %tint_symbol_1 BuiltIn Position
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%8 = OpConstantNull %v4float
%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%bool = OpTypeBool
%v4bool = OpTypeVector %bool 4
%16 = OpConstantNull %bool
%17 = OpConstantNull %v4bool
%_ptr_Function_v4bool = OpTypePointer Function %v4bool
%22 = OpTypeFunction %void %v4float
%float_1 = OpConstant %float 1
%select_c41bd1 = OpFunction %void None %9
%12 = OpLabel
%18 = OpVariable %_ptr_Function_v4bool Function %17
%res = OpVariable %_ptr_Function_v4bool Function %17
%20 = OpCompositeConstruct %v4bool %16 %16 %16 %16
%13 = OpSelect %v4bool %20 %17 %17
OpStore %res %13
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %22
%tint_symbol = OpFunctionParameter %v4float
%25 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %9
%27 = OpLabel
OpStore %tint_pointsize %float_1
%29 = OpFunctionCall %void %select_c41bd1
%30 = OpFunctionCall %void %tint_symbol_2 %8
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %9
%32 = OpLabel
%33 = OpFunctionCall %void %select_c41bd1
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %9
%35 = OpLabel
%36 = OpFunctionCall %void %select_c41bd1
OpReturn
OpFunctionEnd

View File

@ -0,0 +1,19 @@
fn select_c41bd1() {
var res : vec4<bool> = select(vec4<bool>(), vec4<bool>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_c41bd1();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_c41bd1();
}
[[stage(compute)]]
fn compute_main() {
select_c41bd1();
}

View File

@ -0,0 +1,45 @@
// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
////////////////////////////////////////////////////////////////////////////////
// File generated by tools/intrinsic-gen
// using the template:
// test/intrinsics/intrinsics.wgsl.tmpl
// and the intrinsic defintion file:
// src/intrinsics.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
// fn select(vec<2, bool>, vec<2, bool>, bool) -> vec<2, bool>
fn select_fb7e53() {
var res: vec2<bool> = select(vec2<bool>(), vec2<bool>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_fb7e53();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_fb7e53();
}
[[stage(compute)]]
fn compute_main() {
select_fb7e53();
}

View File

@ -0,0 +1,24 @@
void select_fb7e53() {
bool2 res = (false ? bool2(false, false) : bool2(false, false));
}
struct tint_symbol {
float4 value : SV_Position;
};
tint_symbol vertex_main() {
select_fb7e53();
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;
}
void fragment_main() {
select_fb7e53();
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
select_fb7e53();
return;
}

View File

@ -0,0 +1,27 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void select_fb7e53() {
bool2 res = select(bool2(), bool2(), bool());
}
vertex tint_symbol vertex_main() {
select_fb7e53();
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
fragment void fragment_main() {
select_fb7e53();
return;
}
kernel void compute_main() {
select_fb7e53();
return;
}

View File

@ -0,0 +1,72 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 37
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %tint_pointsize "tint_pointsize"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %select_fb7e53 "select_fb7e53"
OpName %res "res"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
OpDecorate %tint_pointsize BuiltIn PointSize
OpDecorate %tint_symbol_1 BuiltIn Position
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%8 = OpConstantNull %v4float
%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
%9 = OpTypeFunction %void
%bool = OpTypeBool
%v2bool = OpTypeVector %bool 2
%16 = OpConstantNull %bool
%17 = OpConstantNull %v2bool
%_ptr_Function_v2bool = OpTypePointer Function %v2bool
%22 = OpTypeFunction %void %v4float
%float_1 = OpConstant %float 1
%select_fb7e53 = OpFunction %void None %9
%12 = OpLabel
%18 = OpVariable %_ptr_Function_v2bool Function %17
%res = OpVariable %_ptr_Function_v2bool Function %17
%20 = OpCompositeConstruct %v2bool %16 %16
%13 = OpSelect %v2bool %20 %17 %17
OpStore %res %13
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %22
%tint_symbol = OpFunctionParameter %v4float
%25 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %9
%27 = OpLabel
OpStore %tint_pointsize %float_1
%29 = OpFunctionCall %void %select_fb7e53
%30 = OpFunctionCall %void %tint_symbol_2 %8
OpReturn
OpFunctionEnd
%fragment_main = OpFunction %void None %9
%32 = OpLabel
%33 = OpFunctionCall %void %select_fb7e53
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %9
%35 = OpLabel
%36 = OpFunctionCall %void %select_fb7e53
OpReturn
OpFunctionEnd

View File

@ -0,0 +1,19 @@
fn select_fb7e53() {
var res : vec2<bool> = select(vec2<bool>(), vec2<bool>(), bool());
}
[[stage(vertex)]]
fn vertex_main() -> [[builtin(position)]] vec4<f32> {
select_fb7e53();
return vec4<f32>();
}
[[stage(fragment)]]
fn fragment_main() {
select_fb7e53();
}
[[stage(compute)]]
fn compute_main() {
select_fb7e53();
}