Add support for converting bool to other types
The only non-trivial case is SPIR-V, which generates OpSelect to choose between 1 or 0. Fixed: tint:997 Change-Id: Ifda7b3ec1e0a713843a2da7ed59c3449d4eec8bd Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/58521 Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: James Price <jrprice@google.com> Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
parent
93d4501e67
commit
1fa28acc7a
|
@ -2752,11 +2752,7 @@ bool Resolver::ValidateVectorConstructor(
|
|||
// A mismatch of vector type parameter T is only an error if multiple
|
||||
// arguments are present. A single argument constructor constitutes a
|
||||
// type conversion expression.
|
||||
// NOTE: A conversion expression from a vec<bool> to any other vecN<T>
|
||||
// is disallowed (see
|
||||
// https://gpuweb.github.io/gpuweb/wgsl.html#conversion-expr).
|
||||
if (elem_type != value_elem_type &&
|
||||
(values.size() > 1u || value_vec->is_bool_vector())) {
|
||||
if (elem_type != value_elem_type && values.size() > 1u) {
|
||||
AddError(
|
||||
"type in vector constructor does not match vector type: "
|
||||
"expected '" +
|
||||
|
@ -2878,11 +2874,10 @@ bool Resolver::ValidateScalarConstructor(
|
|||
using U32 = sem::U32;
|
||||
using F32 = sem::F32;
|
||||
|
||||
const bool is_valid =
|
||||
(type->Is<Bool>() && value_type->IsAnyOf<Bool, I32, U32, F32>()) ||
|
||||
(type->Is<I32>() && value_type->IsAnyOf<I32, U32, F32>()) ||
|
||||
(type->Is<U32>() && value_type->IsAnyOf<I32, U32, F32>()) ||
|
||||
(type->Is<F32>() && value_type->IsAnyOf<I32, U32, F32>());
|
||||
const bool is_valid = (type->Is<Bool>() && value_type->is_scalar()) ||
|
||||
(type->Is<I32>() && value_type->is_scalar()) ||
|
||||
(type->Is<U32>() && value_type->is_scalar()) ||
|
||||
(type->Is<F32>() && value_type->is_scalar());
|
||||
if (!is_valid) {
|
||||
AddError("cannot construct '" + type_name + "' with a value of type '" +
|
||||
TypeNameOf(value) + "'",
|
||||
|
|
|
@ -255,12 +255,15 @@ static constexpr Params valid_cases[] = {
|
|||
ParamsFor<bool, i32>(), //
|
||||
ParamsFor<bool, f32>(), //
|
||||
|
||||
ParamsFor<i32, bool>(), //
|
||||
ParamsFor<i32, u32>(), //
|
||||
ParamsFor<i32, f32>(), //
|
||||
|
||||
ParamsFor<u32, bool>(), //
|
||||
ParamsFor<u32, i32>(), //
|
||||
ParamsFor<u32, f32>(), //
|
||||
|
||||
ParamsFor<f32, bool>(), //
|
||||
ParamsFor<f32, u32>(), //
|
||||
ParamsFor<f32, i32>(), //
|
||||
|
||||
|
@ -268,12 +271,15 @@ static constexpr Params valid_cases[] = {
|
|||
ParamsFor<vec3<bool>, vec3<i32>>(), //
|
||||
ParamsFor<vec3<bool>, vec3<f32>>(), //
|
||||
|
||||
ParamsFor<vec3<i32>, vec3<bool>>(), //
|
||||
ParamsFor<vec3<i32>, vec3<u32>>(), //
|
||||
ParamsFor<vec3<i32>, vec3<f32>>(), //
|
||||
|
||||
ParamsFor<vec3<u32>, vec3<bool>>(), //
|
||||
ParamsFor<vec3<u32>, vec3<i32>>(), //
|
||||
ParamsFor<vec3<u32>, vec3<f32>>(), //
|
||||
|
||||
ParamsFor<vec3<f32>, vec3<bool>>(), //
|
||||
ParamsFor<vec3<f32>, vec3<u32>>(), //
|
||||
ParamsFor<vec3<f32>, vec3<i32>>(), //
|
||||
};
|
||||
|
@ -388,13 +394,15 @@ TEST_F(ResolverTypeConstructorValidationTest,
|
|||
|
||||
TEST_F(ResolverTypeConstructorValidationTest,
|
||||
ConversionConstructorInvalid_InvalidInitializer) {
|
||||
auto* a = Var("a", ty.f32(), ast::StorageClass::kNone,
|
||||
Construct(Source{{12, 34}}, ty.f32(), Expr(true)));
|
||||
auto* a =
|
||||
Var("a", ty.f32(), ast::StorageClass::kNone,
|
||||
Construct(Source{{12, 34}}, ty.f32(), Construct(ty.array<f32, 4>())));
|
||||
WrapInFunction(a);
|
||||
|
||||
ASSERT_FALSE(r()->Resolve());
|
||||
ASSERT_EQ(r()->error(),
|
||||
"12:34 error: cannot construct 'f32' with a value of type 'bool'");
|
||||
"12:34 error: cannot construct 'f32' with a value of type "
|
||||
"'array<f32, 4>'");
|
||||
}
|
||||
|
||||
} // namespace ConversionConstructorTest
|
||||
|
@ -716,20 +724,6 @@ TEST_F(ResolverTypeConstructorValidationTest,
|
|||
"12:34 error: attempted to construct 'vec2<f32>' with 3 component(s)");
|
||||
}
|
||||
|
||||
TEST_F(ResolverTypeConstructorValidationTest,
|
||||
Expr_Constructor_Vec2_Error_InvalidConversionFromVec2Bool) {
|
||||
SetSource(Source::Location({12, 34}));
|
||||
|
||||
auto* tc = vec2<f32>(create<ast::TypeConstructorExpression>(
|
||||
Source{{12, 34}}, ty.vec2<bool>(), ExprList()));
|
||||
WrapInFunction(tc);
|
||||
|
||||
EXPECT_FALSE(r()->Resolve());
|
||||
EXPECT_EQ(r()->error(),
|
||||
"12:34 error: type in vector constructor does not match vector "
|
||||
"type: expected 'f32', found 'bool'");
|
||||
}
|
||||
|
||||
TEST_F(ResolverTypeConstructorValidationTest,
|
||||
Expr_Constructor_Vec2_Error_InvalidArgumentType) {
|
||||
auto* tc = vec2<f32>(create<ast::TypeConstructorExpression>(
|
||||
|
@ -986,18 +980,6 @@ TEST_F(ResolverTypeConstructorValidationTest,
|
|||
"12:34 error: attempted to construct 'vec3<f32>' with 4 component(s)");
|
||||
}
|
||||
|
||||
TEST_F(ResolverTypeConstructorValidationTest,
|
||||
Expr_Constructor_Vec3_Error_InvalidConversionFromVec3Bool) {
|
||||
auto* tc = vec3<f32>(create<ast::TypeConstructorExpression>(
|
||||
Source{{12, 34}}, ty.vec3<bool>(), ExprList()));
|
||||
WrapInFunction(tc);
|
||||
|
||||
EXPECT_FALSE(r()->Resolve());
|
||||
EXPECT_EQ(r()->error(),
|
||||
"12:34 error: type in vector constructor does not match vector "
|
||||
"type: expected 'f32', found 'bool'");
|
||||
}
|
||||
|
||||
TEST_F(ResolverTypeConstructorValidationTest,
|
||||
Expr_Constructor_Vec3_Error_InvalidArgumentType) {
|
||||
auto* tc = vec3<f32>(create<ast::TypeConstructorExpression>(
|
||||
|
@ -1348,18 +1330,6 @@ TEST_F(ResolverTypeConstructorValidationTest,
|
|||
"12:34 error: attempted to construct 'vec4<f32>' with 6 component(s)");
|
||||
}
|
||||
|
||||
TEST_F(ResolverTypeConstructorValidationTest,
|
||||
Expr_Constructor_Vec4_Error_InvalidConversionFromVec4Bool) {
|
||||
auto* tc = vec4<f32>(create<ast::TypeConstructorExpression>(
|
||||
Source{{12, 34}}, ty.vec4<bool>(), ExprList()));
|
||||
WrapInFunction(tc);
|
||||
|
||||
EXPECT_FALSE(r()->Resolve());
|
||||
EXPECT_EQ(r()->error(),
|
||||
"12:34 error: type in vector constructor does not match vector "
|
||||
"type: expected 'f32', found 'bool'");
|
||||
}
|
||||
|
||||
TEST_F(ResolverTypeConstructorValidationTest,
|
||||
Expr_Constructor_Vec4_Error_InvalidArgumentType) {
|
||||
auto* tc = vec4<f32>(create<ast::TypeConstructorExpression>(
|
||||
|
|
|
@ -1568,7 +1568,51 @@ uint32_t Builder::GenerateCastOrCopyOrPassthrough(const sem::Type* to_type,
|
|||
}
|
||||
|
||||
return result_id;
|
||||
} else if (from_type->is_bool_scalar_or_vector() &&
|
||||
to_type->is_numeric_scalar_or_vector()) {
|
||||
// Convert bool scalar/vector to numeric scalar/vector.
|
||||
// Use the bool to select between 1 (if true) and 0 (if false).
|
||||
|
||||
const auto* to_elem_type = elem_type_of(to_type);
|
||||
uint32_t one_id;
|
||||
uint32_t zero_id;
|
||||
if (to_elem_type->Is<sem::F32>()) {
|
||||
ast::FloatLiteral one(ProgramID(), Source{}, 1.0f);
|
||||
ast::FloatLiteral zero(ProgramID(), Source{}, 0.0f);
|
||||
one_id = GenerateLiteralIfNeeded(nullptr, &one);
|
||||
zero_id = GenerateLiteralIfNeeded(nullptr, &zero);
|
||||
} else if (to_elem_type->Is<sem::U32>()) {
|
||||
ast::UintLiteral one(ProgramID(), Source{}, 1);
|
||||
ast::UintLiteral zero(ProgramID(), Source{}, 0);
|
||||
one_id = GenerateLiteralIfNeeded(nullptr, &one);
|
||||
zero_id = GenerateLiteralIfNeeded(nullptr, &zero);
|
||||
} else if (to_elem_type->Is<sem::I32>()) {
|
||||
ast::SintLiteral one(ProgramID(), Source{}, 1);
|
||||
ast::SintLiteral zero(ProgramID(), Source{}, 0);
|
||||
one_id = GenerateLiteralIfNeeded(nullptr, &one);
|
||||
zero_id = GenerateLiteralIfNeeded(nullptr, &zero);
|
||||
} else {
|
||||
error_ = "invalid destination type for bool conversion";
|
||||
return false;
|
||||
}
|
||||
if (auto* to_vec = to_type->As<sem::Vector>()) {
|
||||
// Splat the scalars into vectors.
|
||||
one_id = GenerateConstantVectorSplatIfNeeded(to_vec, one_id);
|
||||
zero_id = GenerateConstantVectorSplatIfNeeded(to_vec, zero_id);
|
||||
}
|
||||
if (!one_id || !zero_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
op = spv::Op::OpSelect;
|
||||
if (!push_function_inst(
|
||||
op, {Operand::Int(result_type_id), Operand::Int(result_id),
|
||||
Operand::Int(val_id), Operand::Int(one_id),
|
||||
Operand::Int(zero_id)})) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return result_id;
|
||||
} else {
|
||||
TINT_ICE(Writer, builder_.Diagnostics()) << "Invalid from_type";
|
||||
}
|
||||
|
@ -1720,6 +1764,31 @@ uint32_t Builder::GenerateConstantNullIfNeeded(const sem::Type* type) {
|
|||
return result_id;
|
||||
}
|
||||
|
||||
uint32_t Builder::GenerateConstantVectorSplatIfNeeded(const sem::Vector* type,
|
||||
uint32_t value_id) {
|
||||
auto type_id = GenerateTypeIfNeeded(type);
|
||||
if (type_id == 0 || value_id == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t key = (static_cast<uint64_t>(type->size()) << 32) + value_id;
|
||||
return utils::GetOrCreate(const_splat_to_id_, key, [&] {
|
||||
auto result = result_op();
|
||||
auto result_id = result.to_i();
|
||||
|
||||
OperandList ops;
|
||||
ops.push_back(Operand::Int(type_id));
|
||||
ops.push_back(result);
|
||||
for (uint32_t i = 0; i < type->size(); i++) {
|
||||
ops.push_back(Operand::Int(value_id));
|
||||
}
|
||||
push_type(spv::Op::OpConstantComposite, ops);
|
||||
|
||||
const_splat_to_id_[key] = result_id;
|
||||
return result_id;
|
||||
});
|
||||
}
|
||||
|
||||
uint32_t Builder::GenerateShortCircuitBinaryExpression(
|
||||
ast::BinaryExpression* expr) {
|
||||
auto lhs_id = GenerateExpression(expr->lhs());
|
||||
|
|
|
@ -536,7 +536,7 @@ class Builder {
|
|||
return builder_.TypeOf(expr);
|
||||
}
|
||||
|
||||
/// Generates a constant if needed
|
||||
/// Generates a scalar constant if needed
|
||||
/// @param constant the constant to generate.
|
||||
/// @returns the ID on success or 0 on failure
|
||||
uint32_t GenerateConstantIfNeeded(const ScalarConstant& constant);
|
||||
|
@ -546,6 +546,13 @@ class Builder {
|
|||
/// @returns the ID on success or 0 on failure
|
||||
uint32_t GenerateConstantNullIfNeeded(const sem::Type* type);
|
||||
|
||||
/// Generates a vector constant splat if needed
|
||||
/// @param type the type of the vector to generate
|
||||
/// @param value_id the ID of the scalar value to splat
|
||||
/// @returns the ID on success or 0 on failure
|
||||
uint32_t GenerateConstantVectorSplatIfNeeded(const sem::Vector* type,
|
||||
uint32_t value_id);
|
||||
|
||||
ProgramBuilder builder_;
|
||||
std::string error_;
|
||||
uint32_t next_id_ = 1;
|
||||
|
@ -567,6 +574,7 @@ class Builder {
|
|||
std::unordered_map<ScalarConstant, uint32_t> const_to_id_;
|
||||
std::unordered_map<std::string, uint32_t> type_constructor_to_id_;
|
||||
std::unordered_map<std::string, uint32_t> const_null_to_id_;
|
||||
std::unordered_map<uint64_t, uint32_t> const_splat_to_id_;
|
||||
std::unordered_map<std::string, uint32_t>
|
||||
texture_type_name_to_sampled_image_type_id_;
|
||||
ScopeStack<uint32_t> scope_stack_;
|
||||
|
|
|
@ -11,9 +11,11 @@ fn main() {
|
|||
|
||||
var i32_var1 : i32 = i32(123u);
|
||||
var i32_var2 : i32 = i32(123.0);
|
||||
var i32_var3 : i32 = i32(true);
|
||||
|
||||
var u32_var1 : u32 = u32(123);
|
||||
var u32_var2 : u32 = u32(123.0);
|
||||
var u32_var3 : u32 = u32(true);
|
||||
|
||||
var v3bool_var1 : vec3<bool> = vec3<bool>(vec3<u32>(123u));
|
||||
var v3bool_var11 : vec3<bool> = vec3<bool>(vec3<u32>(1234u));
|
||||
|
@ -22,9 +24,11 @@ fn main() {
|
|||
|
||||
var v3i32_var1 : vec3<i32> = vec3<i32>(vec3<u32>(123u));
|
||||
var v3i32_var2 : vec3<i32> = vec3<i32>(vec3<f32>(123.0));
|
||||
var v3i32_var3 : vec3<i32> = vec3<i32>(vec3<bool>(true));
|
||||
|
||||
var v3u32_var1 : vec3<u32> = vec3<u32>(vec3<i32>(123));
|
||||
var v3u32_var2 : vec3<u32> = vec3<u32>(vec3<f32>(123.0));
|
||||
var v3u32_var3 : vec3<u32> = vec3<u32>(vec3<bool>(true));
|
||||
|
||||
var v3bool_var4 : vec3<bool> = vec3<bool>(vec2<bool>(vec2<f32>(123.0)), true);
|
||||
var v4bool_var5 : vec4<bool> = vec4<bool>(vec2<bool>(vec2<f32>(123.0, 0.0)), vec2<bool>(true, bool(f32(0.0))));
|
||||
|
|
|
@ -10,16 +10,20 @@ void main() {
|
|||
bool bool_var3 = bool(123.0f);
|
||||
int i32_var1 = int(123u);
|
||||
int i32_var2 = int(123.0f);
|
||||
int i32_var3 = int(true);
|
||||
uint u32_var1 = uint(123);
|
||||
uint u32_var2 = uint(123.0f);
|
||||
uint u32_var3 = uint(true);
|
||||
bool3 v3bool_var1 = bool3(uint3((123u).xxx));
|
||||
bool3 v3bool_var11 = bool3(uint3((1234u).xxx));
|
||||
bool3 v3bool_var2 = bool3(int3((123).xxx));
|
||||
bool3 v3bool_var3 = bool3(float3((123.0f).xxx));
|
||||
int3 v3i32_var1 = int3(uint3((123u).xxx));
|
||||
int3 v3i32_var2 = int3(float3((123.0f).xxx));
|
||||
int3 v3i32_var3 = int3(bool3((true).xxx));
|
||||
uint3 v3u32_var1 = uint3(int3((123).xxx));
|
||||
uint3 v3u32_var2 = uint3(float3((123.0f).xxx));
|
||||
uint3 v3u32_var3 = uint3(bool3((true).xxx));
|
||||
bool3 v3bool_var4 = bool3(bool2(float2((123.0f).xx)), true);
|
||||
bool4 v4bool_var5 = bool4(bool2(float2(123.0f, 0.0f)), bool2(true, bool(float(0.0f))));
|
||||
return;
|
||||
|
|
|
@ -12,16 +12,20 @@ kernel void tint_symbol() {
|
|||
bool bool_var3 = bool(123.0f);
|
||||
int i32_var1 = int(123u);
|
||||
int i32_var2 = int(123.0f);
|
||||
int i32_var3 = int(true);
|
||||
uint u32_var1 = uint(123);
|
||||
uint u32_var2 = uint(123.0f);
|
||||
uint u32_var3 = uint(true);
|
||||
bool3 v3bool_var1 = bool3(uint3(123u));
|
||||
bool3 v3bool_var11 = bool3(uint3(1234u));
|
||||
bool3 v3bool_var2 = bool3(int3(123));
|
||||
bool3 v3bool_var3 = bool3(float3(123.0f));
|
||||
int3 v3i32_var1 = int3(uint3(123u));
|
||||
int3 v3i32_var2 = int3(float3(123.0f));
|
||||
int3 v3i32_var3 = int3(bool3(true));
|
||||
uint3 v3u32_var1 = uint3(int3(123));
|
||||
uint3 v3u32_var2 = uint3(float3(123.0f));
|
||||
uint3 v3u32_var3 = uint3(bool3(true));
|
||||
bool3 v3bool_var4 = bool3(bool2(float2(123.0f)), true);
|
||||
bool4 v4bool_var5 = bool4(bool2(float2(123.0f, 0.0f)), bool2(true, bool(float(0.0f))));
|
||||
return;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 65
|
||||
; Bound: 73
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
|
@ -16,16 +16,20 @@
|
|||
OpName %bool_var3 "bool_var3"
|
||||
OpName %i32_var1 "i32_var1"
|
||||
OpName %i32_var2 "i32_var2"
|
||||
OpName %i32_var3 "i32_var3"
|
||||
OpName %u32_var1 "u32_var1"
|
||||
OpName %u32_var2 "u32_var2"
|
||||
OpName %u32_var3 "u32_var3"
|
||||
OpName %v3bool_var1 "v3bool_var1"
|
||||
OpName %v3bool_var11 "v3bool_var11"
|
||||
OpName %v3bool_var2 "v3bool_var2"
|
||||
OpName %v3bool_var3 "v3bool_var3"
|
||||
OpName %v3i32_var1 "v3i32_var1"
|
||||
OpName %v3i32_var2 "v3i32_var2"
|
||||
OpName %v3i32_var3 "v3i32_var3"
|
||||
OpName %v3u32_var1 "v3u32_var1"
|
||||
OpName %v3u32_var2 "v3u32_var2"
|
||||
OpName %v3u32_var3 "v3u32_var3"
|
||||
OpName %v3bool_var4 "v3bool_var4"
|
||||
OpName %v4bool_var5 "v4bool_var5"
|
||||
%void = OpTypeVoid
|
||||
|
@ -45,28 +49,32 @@
|
|||
%int_123 = OpConstant %int 123
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%29 = OpConstantNull %int
|
||||
%int_1 = OpConstant %int 1
|
||||
%uint = OpTypeInt 32 0
|
||||
%uint_123 = OpConstant %uint 123
|
||||
%_ptr_Function_uint = OpTypePointer Function %uint
|
||||
%35 = OpConstantNull %uint
|
||||
%37 = OpConstantNull %uint
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%38 = OpConstantComposite %v3bool %true %true %true
|
||||
%42 = OpConstantComposite %v3bool %true %true %true
|
||||
%_ptr_Function_v3bool = OpTypePointer Function %v3bool
|
||||
%41 = OpConstantNull %v3bool
|
||||
%45 = OpConstantNull %v3bool
|
||||
%v3int = OpTypeVector %int 3
|
||||
%46 = OpConstantComposite %v3int %int_123 %int_123 %int_123
|
||||
%50 = OpConstantComposite %v3int %int_123 %int_123 %int_123
|
||||
%_ptr_Function_v3int = OpTypePointer Function %v3int
|
||||
%49 = OpConstantNull %v3int
|
||||
%53 = OpConstantNull %v3int
|
||||
%55 = OpConstantComposite %v3int %int_1 %int_1 %int_1
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%52 = OpConstantComposite %v3uint %uint_123 %uint_123 %uint_123
|
||||
%58 = OpConstantComposite %v3uint %uint_123 %uint_123 %uint_123
|
||||
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
|
||||
%55 = OpConstantNull %v3uint
|
||||
%57 = OpConstantComposite %v3bool %true %true %true
|
||||
%61 = OpConstantNull %v3uint
|
||||
%63 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
|
||||
%65 = OpConstantComposite %v3bool %true %true %true
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%false = OpConstantFalse %bool
|
||||
%61 = OpConstantComposite %v4bool %true %false %true %false
|
||||
%69 = OpConstantComposite %v4bool %true %false %true %false
|
||||
%_ptr_Function_v4bool = OpTypePointer Function %v4bool
|
||||
%64 = OpConstantNull %v4bool
|
||||
%72 = OpConstantNull %v4bool
|
||||
%constant_with_non_constant = OpFunction %void None %1
|
||||
%4 = OpLabel
|
||||
%a = OpVariable %_ptr_Function_float Function %6
|
||||
|
@ -84,34 +92,42 @@
|
|||
%bool_var3 = OpVariable %_ptr_Function_bool Function %22
|
||||
%i32_var1 = OpVariable %_ptr_Function_int Function %29
|
||||
%i32_var2 = OpVariable %_ptr_Function_int Function %29
|
||||
%u32_var1 = OpVariable %_ptr_Function_uint Function %35
|
||||
%u32_var2 = OpVariable %_ptr_Function_uint Function %35
|
||||
%v3bool_var1 = OpVariable %_ptr_Function_v3bool Function %41
|
||||
%v3bool_var11 = OpVariable %_ptr_Function_v3bool Function %41
|
||||
%v3bool_var2 = OpVariable %_ptr_Function_v3bool Function %41
|
||||
%v3bool_var3 = OpVariable %_ptr_Function_v3bool Function %41
|
||||
%v3i32_var1 = OpVariable %_ptr_Function_v3int Function %49
|
||||
%v3i32_var2 = OpVariable %_ptr_Function_v3int Function %49
|
||||
%v3u32_var1 = OpVariable %_ptr_Function_v3uint Function %55
|
||||
%v3u32_var2 = OpVariable %_ptr_Function_v3uint Function %55
|
||||
%v3bool_var4 = OpVariable %_ptr_Function_v3bool Function %41
|
||||
%v4bool_var5 = OpVariable %_ptr_Function_v4bool Function %64
|
||||
%i32_var3 = OpVariable %_ptr_Function_int Function %29
|
||||
%u32_var1 = OpVariable %_ptr_Function_uint Function %37
|
||||
%u32_var2 = OpVariable %_ptr_Function_uint Function %37
|
||||
%u32_var3 = OpVariable %_ptr_Function_uint Function %37
|
||||
%v3bool_var1 = OpVariable %_ptr_Function_v3bool Function %45
|
||||
%v3bool_var11 = OpVariable %_ptr_Function_v3bool Function %45
|
||||
%v3bool_var2 = OpVariable %_ptr_Function_v3bool Function %45
|
||||
%v3bool_var3 = OpVariable %_ptr_Function_v3bool Function %45
|
||||
%v3i32_var1 = OpVariable %_ptr_Function_v3int Function %53
|
||||
%v3i32_var2 = OpVariable %_ptr_Function_v3int Function %53
|
||||
%v3i32_var3 = OpVariable %_ptr_Function_v3int Function %53
|
||||
%v3u32_var1 = OpVariable %_ptr_Function_v3uint Function %61
|
||||
%v3u32_var2 = OpVariable %_ptr_Function_v3uint Function %61
|
||||
%v3u32_var3 = OpVariable %_ptr_Function_v3uint Function %61
|
||||
%v3bool_var4 = OpVariable %_ptr_Function_v3bool Function %45
|
||||
%v4bool_var5 = OpVariable %_ptr_Function_v4bool Function %72
|
||||
OpStore %bool_var1 %true
|
||||
OpStore %bool_var2 %true
|
||||
OpStore %bool_var3 %true
|
||||
OpStore %i32_var1 %int_123
|
||||
OpStore %i32_var2 %int_123
|
||||
OpStore %i32_var3 %int_1
|
||||
OpStore %u32_var1 %uint_123
|
||||
OpStore %u32_var2 %uint_123
|
||||
OpStore %v3bool_var1 %38
|
||||
OpStore %v3bool_var11 %38
|
||||
OpStore %v3bool_var2 %38
|
||||
OpStore %v3bool_var3 %38
|
||||
OpStore %v3i32_var1 %46
|
||||
OpStore %v3i32_var2 %46
|
||||
OpStore %v3u32_var1 %52
|
||||
OpStore %v3u32_var2 %52
|
||||
OpStore %v3bool_var4 %57
|
||||
OpStore %v4bool_var5 %61
|
||||
OpStore %u32_var3 %uint_1
|
||||
OpStore %v3bool_var1 %42
|
||||
OpStore %v3bool_var11 %42
|
||||
OpStore %v3bool_var2 %42
|
||||
OpStore %v3bool_var3 %42
|
||||
OpStore %v3i32_var1 %50
|
||||
OpStore %v3i32_var2 %50
|
||||
OpStore %v3i32_var3 %55
|
||||
OpStore %v3u32_var1 %58
|
||||
OpStore %v3u32_var2 %58
|
||||
OpStore %v3u32_var3 %63
|
||||
OpStore %v3bool_var4 %65
|
||||
OpStore %v4bool_var5 %69
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
|
|
@ -10,16 +10,20 @@ fn main() {
|
|||
var bool_var3 : bool = bool(123.0);
|
||||
var i32_var1 : i32 = i32(123u);
|
||||
var i32_var2 : i32 = i32(123.0);
|
||||
var i32_var3 : i32 = i32(true);
|
||||
var u32_var1 : u32 = u32(123);
|
||||
var u32_var2 : u32 = u32(123.0);
|
||||
var u32_var3 : u32 = u32(true);
|
||||
var v3bool_var1 : vec3<bool> = vec3<bool>(vec3<u32>(123u));
|
||||
var v3bool_var11 : vec3<bool> = vec3<bool>(vec3<u32>(1234u));
|
||||
var v3bool_var2 : vec3<bool> = vec3<bool>(vec3<i32>(123));
|
||||
var v3bool_var3 : vec3<bool> = vec3<bool>(vec3<f32>(123.0));
|
||||
var v3i32_var1 : vec3<i32> = vec3<i32>(vec3<u32>(123u));
|
||||
var v3i32_var2 : vec3<i32> = vec3<i32>(vec3<f32>(123.0));
|
||||
var v3i32_var3 : vec3<i32> = vec3<i32>(vec3<bool>(true));
|
||||
var v3u32_var1 : vec3<u32> = vec3<u32>(vec3<i32>(123));
|
||||
var v3u32_var2 : vec3<u32> = vec3<u32>(vec3<f32>(123.0));
|
||||
var v3u32_var3 : vec3<u32> = vec3<u32>(vec3<bool>(true));
|
||||
var v3bool_var4 : vec3<bool> = vec3<bool>(vec2<bool>(vec2<f32>(123.0)), true);
|
||||
var v4bool_var5 : vec4<bool> = vec4<bool>(vec2<bool>(vec2<f32>(123.0, 0.0)), vec2<bool>(true, bool(f32(0.0))));
|
||||
}
|
||||
|
|
|
@ -4,9 +4,11 @@ var<private> bool_var3 : bool = bool(1.0);
|
|||
|
||||
var<private> i32_var1 : i32 = i32(1u);
|
||||
var<private> i32_var2 : i32 = i32(1.0);
|
||||
var<private> i32_var3 : i32 = i32(true);
|
||||
|
||||
var<private> u32_var1 : u32 = u32(1);
|
||||
var<private> u32_var2 : u32 = u32(1.0);
|
||||
var<private> u32_var3 : u32 = u32(true);
|
||||
|
||||
var<private> v3bool_var1 : vec3<bool> = vec3<bool>(vec3<u32>(1u));
|
||||
var<private> v3bool_var2 : vec3<bool> = vec3<bool>(vec3<i32>(1));
|
||||
|
@ -14,9 +16,11 @@ var<private> v3bool_var3 : vec3<bool> = vec3<bool>(vec3<f32>(1.0));
|
|||
|
||||
var<private> v3i32_var1 : vec3<i32> = vec3<i32>(vec3<u32>(1u));
|
||||
var<private> v3i32_var2 : vec3<i32> = vec3<i32>(vec3<f32>(1.0));
|
||||
var<private> v3i32_var3 : vec3<i32> = vec3<i32>(vec3<bool>(true));
|
||||
|
||||
var<private> v3u32_var1 : vec3<u32> = vec3<u32>(vec3<i32>(1));
|
||||
var<private> v3u32_var2 : vec3<u32> = vec3<u32>(vec3<f32>(1.0));
|
||||
var<private> v3u32_var3 : vec3<u32> = vec3<u32>(vec3<bool>(true));
|
||||
|
||||
var<private> v3bool_var4 : vec3<bool> = vec3<bool>(vec2<bool>(vec2<f32>(123.0)), true);
|
||||
var<private> v4bool_var5 : vec4<bool> = vec4<bool>(vec2<bool>(vec2<f32>(123.0, 0.0)), vec2<bool>(true, bool(f32(0.0))));
|
||||
|
@ -29,8 +33,10 @@ fn main() {
|
|||
bool_var3 = bool();
|
||||
i32_var1 = i32();
|
||||
i32_var2 = i32();
|
||||
i32_var3 = i32();
|
||||
u32_var1 = u32();
|
||||
u32_var2 = u32();
|
||||
u32_var3 = u32();
|
||||
v3bool_var1 = vec3<bool>();
|
||||
v3bool_var2 = vec3<bool>();
|
||||
v3bool_var3 = vec3<bool>();
|
||||
|
@ -38,6 +44,8 @@ fn main() {
|
|||
v4bool_var5 = vec4<bool>();
|
||||
v3i32_var1 = vec3<i32>();
|
||||
v3i32_var2 = vec3<i32>();
|
||||
v3i32_var3 = vec3<i32>();
|
||||
v3u32_var1 = vec3<u32>();
|
||||
v3u32_var2 = vec3<u32>();
|
||||
v3u32_var3 = vec3<u32>();
|
||||
}
|
||||
|
|
|
@ -3,15 +3,19 @@ static bool bool_var2 = bool(1);
|
|||
static bool bool_var3 = bool(1.0f);
|
||||
static int i32_var1 = int(1u);
|
||||
static int i32_var2 = int(1.0f);
|
||||
static int i32_var3 = int(true);
|
||||
static uint u32_var1 = uint(1);
|
||||
static uint u32_var2 = uint(1.0f);
|
||||
static uint u32_var3 = uint(true);
|
||||
static bool3 v3bool_var1 = bool3(uint3((1u).xxx));
|
||||
static bool3 v3bool_var2 = bool3(int3((1).xxx));
|
||||
static bool3 v3bool_var3 = bool3(float3((1.0f).xxx));
|
||||
static int3 v3i32_var1 = int3(uint3((1u).xxx));
|
||||
static int3 v3i32_var2 = int3(float3((1.0f).xxx));
|
||||
static int3 v3i32_var3 = int3(bool3((true).xxx));
|
||||
static uint3 v3u32_var1 = uint3(int3((1).xxx));
|
||||
static uint3 v3u32_var2 = uint3(float3((1.0f).xxx));
|
||||
static uint3 v3u32_var3 = uint3(bool3((true).xxx));
|
||||
static bool3 v3bool_var4 = bool3(bool2(float2((123.0f).xx)), true);
|
||||
static bool4 v4bool_var5 = bool4(bool2(float2(123.0f, 0.0f)), bool2(true, bool(float(0.0f))));
|
||||
|
||||
|
@ -22,8 +26,10 @@ void main() {
|
|||
bool_var3 = false;
|
||||
i32_var1 = 0;
|
||||
i32_var2 = 0;
|
||||
i32_var3 = 0;
|
||||
u32_var1 = 0u;
|
||||
u32_var2 = 0u;
|
||||
u32_var3 = 0u;
|
||||
v3bool_var1 = bool3(false, false, false);
|
||||
v3bool_var2 = bool3(false, false, false);
|
||||
v3bool_var3 = bool3(false, false, false);
|
||||
|
@ -31,7 +37,9 @@ void main() {
|
|||
v4bool_var5 = bool4(false, false, false, false);
|
||||
v3i32_var1 = int3(0, 0, 0);
|
||||
v3i32_var2 = int3(0, 0, 0);
|
||||
v3i32_var3 = int3(0, 0, 0);
|
||||
v3u32_var1 = uint3(0u, 0u, 0u);
|
||||
v3u32_var2 = uint3(0u, 0u, 0u);
|
||||
v3u32_var3 = uint3(0u, 0u, 0u);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -7,33 +7,41 @@ kernel void tint_symbol() {
|
|||
thread bool tint_symbol_3 = bool(1.0f);
|
||||
thread int tint_symbol_4 = int(1u);
|
||||
thread int tint_symbol_5 = int(1.0f);
|
||||
thread uint tint_symbol_6 = uint(1);
|
||||
thread uint tint_symbol_7 = uint(1.0f);
|
||||
thread bool3 tint_symbol_8 = bool3(uint3(1u));
|
||||
thread bool3 tint_symbol_9 = bool3(int3(1));
|
||||
thread bool3 tint_symbol_10 = bool3(float3(1.0f));
|
||||
thread bool3 tint_symbol_11 = bool3(bool2(float2(123.0f)), true);
|
||||
thread bool4 tint_symbol_12 = bool4(bool2(float2(123.0f, 0.0f)), bool2(true, bool(float(0.0f))));
|
||||
thread int3 tint_symbol_13 = int3(uint3(1u));
|
||||
thread int3 tint_symbol_14 = int3(float3(1.0f));
|
||||
thread uint3 tint_symbol_15 = uint3(int3(1));
|
||||
thread uint3 tint_symbol_16 = uint3(float3(1.0f));
|
||||
thread int tint_symbol_6 = int(true);
|
||||
thread uint tint_symbol_7 = uint(1);
|
||||
thread uint tint_symbol_8 = uint(1.0f);
|
||||
thread uint tint_symbol_9 = uint(true);
|
||||
thread bool3 tint_symbol_10 = bool3(uint3(1u));
|
||||
thread bool3 tint_symbol_11 = bool3(int3(1));
|
||||
thread bool3 tint_symbol_12 = bool3(float3(1.0f));
|
||||
thread bool3 tint_symbol_13 = bool3(bool2(float2(123.0f)), true);
|
||||
thread bool4 tint_symbol_14 = bool4(bool2(float2(123.0f, 0.0f)), bool2(true, bool(float(0.0f))));
|
||||
thread int3 tint_symbol_15 = int3(uint3(1u));
|
||||
thread int3 tint_symbol_16 = int3(float3(1.0f));
|
||||
thread int3 tint_symbol_17 = int3(bool3(true));
|
||||
thread uint3 tint_symbol_18 = uint3(int3(1));
|
||||
thread uint3 tint_symbol_19 = uint3(float3(1.0f));
|
||||
thread uint3 tint_symbol_20 = uint3(bool3(true));
|
||||
tint_symbol_1 = bool();
|
||||
tint_symbol_2 = bool();
|
||||
tint_symbol_3 = bool();
|
||||
tint_symbol_4 = int();
|
||||
tint_symbol_5 = int();
|
||||
tint_symbol_6 = uint();
|
||||
tint_symbol_6 = int();
|
||||
tint_symbol_7 = uint();
|
||||
tint_symbol_8 = bool3();
|
||||
tint_symbol_9 = bool3();
|
||||
tint_symbol_8 = uint();
|
||||
tint_symbol_9 = uint();
|
||||
tint_symbol_10 = bool3();
|
||||
tint_symbol_11 = bool3();
|
||||
tint_symbol_12 = bool4();
|
||||
tint_symbol_13 = int3();
|
||||
tint_symbol_14 = int3();
|
||||
tint_symbol_15 = uint3();
|
||||
tint_symbol_16 = uint3();
|
||||
tint_symbol_12 = bool3();
|
||||
tint_symbol_13 = bool3();
|
||||
tint_symbol_14 = bool4();
|
||||
tint_symbol_15 = int3();
|
||||
tint_symbol_16 = int3();
|
||||
tint_symbol_17 = int3();
|
||||
tint_symbol_18 = uint3();
|
||||
tint_symbol_19 = uint3();
|
||||
tint_symbol_20 = uint3();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 51
|
||||
; Bound: 55
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
|
@ -12,15 +12,19 @@
|
|||
OpName %bool_var3 "bool_var3"
|
||||
OpName %i32_var1 "i32_var1"
|
||||
OpName %i32_var2 "i32_var2"
|
||||
OpName %i32_var3 "i32_var3"
|
||||
OpName %u32_var1 "u32_var1"
|
||||
OpName %u32_var2 "u32_var2"
|
||||
OpName %u32_var3 "u32_var3"
|
||||
OpName %v3bool_var1 "v3bool_var1"
|
||||
OpName %v3bool_var2 "v3bool_var2"
|
||||
OpName %v3bool_var3 "v3bool_var3"
|
||||
OpName %v3i32_var1 "v3i32_var1"
|
||||
OpName %v3i32_var2 "v3i32_var2"
|
||||
OpName %v3i32_var3 "v3i32_var3"
|
||||
OpName %v3u32_var1 "v3u32_var1"
|
||||
OpName %v3u32_var2 "v3u32_var2"
|
||||
OpName %v3u32_var3 "v3u32_var3"
|
||||
OpName %v3bool_var4 "v3bool_var4"
|
||||
OpName %v4bool_var5 "v4bool_var5"
|
||||
OpName %main "main"
|
||||
|
@ -35,60 +39,68 @@
|
|||
%_ptr_Private_int = OpTypePointer Private %int
|
||||
%i32_var1 = OpVariable %_ptr_Private_int Private %int_1
|
||||
%i32_var2 = OpVariable %_ptr_Private_int Private %int_1
|
||||
%i32_var3 = OpVariable %_ptr_Private_int Private %int_1
|
||||
%uint = OpTypeInt 32 0
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||
%u32_var1 = OpVariable %_ptr_Private_uint Private %uint_1
|
||||
%u32_var2 = OpVariable %_ptr_Private_uint Private %uint_1
|
||||
%u32_var3 = OpVariable %_ptr_Private_uint Private %uint_1
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%18 = OpConstantComposite %v3bool %true %true %true
|
||||
%20 = OpConstantComposite %v3bool %true %true %true
|
||||
%_ptr_Private_v3bool = OpTypePointer Private %v3bool
|
||||
%v3bool_var1 = OpVariable %_ptr_Private_v3bool Private %18
|
||||
%v3bool_var2 = OpVariable %_ptr_Private_v3bool Private %18
|
||||
%v3bool_var3 = OpVariable %_ptr_Private_v3bool Private %18
|
||||
%v3bool_var1 = OpVariable %_ptr_Private_v3bool Private %20
|
||||
%v3bool_var2 = OpVariable %_ptr_Private_v3bool Private %20
|
||||
%v3bool_var3 = OpVariable %_ptr_Private_v3bool Private %20
|
||||
%v3int = OpTypeVector %int 3
|
||||
%24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
|
||||
%26 = OpConstantComposite %v3int %int_1 %int_1 %int_1
|
||||
%_ptr_Private_v3int = OpTypePointer Private %v3int
|
||||
%v3i32_var1 = OpVariable %_ptr_Private_v3int Private %24
|
||||
%v3i32_var2 = OpVariable %_ptr_Private_v3int Private %24
|
||||
%v3i32_var1 = OpVariable %_ptr_Private_v3int Private %26
|
||||
%v3i32_var2 = OpVariable %_ptr_Private_v3int Private %26
|
||||
%v3i32_var3 = OpVariable %_ptr_Private_v3int Private %26
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%29 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
|
||||
%32 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
|
||||
%_ptr_Private_v3uint = OpTypePointer Private %v3uint
|
||||
%v3u32_var1 = OpVariable %_ptr_Private_v3uint Private %29
|
||||
%v3u32_var2 = OpVariable %_ptr_Private_v3uint Private %29
|
||||
%33 = OpConstantComposite %v3bool %true %true %true
|
||||
%v3bool_var4 = OpVariable %_ptr_Private_v3bool Private %33
|
||||
%v3u32_var1 = OpVariable %_ptr_Private_v3uint Private %32
|
||||
%v3u32_var2 = OpVariable %_ptr_Private_v3uint Private %32
|
||||
%v3u32_var3 = OpVariable %_ptr_Private_v3uint Private %32
|
||||
%37 = OpConstantComposite %v3bool %true %true %true
|
||||
%v3bool_var4 = OpVariable %_ptr_Private_v3bool Private %37
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%false = OpConstantFalse %bool
|
||||
%37 = OpConstantComposite %v4bool %true %false %true %false
|
||||
%41 = OpConstantComposite %v4bool %true %false %true %false
|
||||
%_ptr_Private_v4bool = OpTypePointer Private %v4bool
|
||||
%v4bool_var5 = OpVariable %_ptr_Private_v4bool Private %37
|
||||
%v4bool_var5 = OpVariable %_ptr_Private_v4bool Private %41
|
||||
%void = OpTypeVoid
|
||||
%40 = OpTypeFunction %void
|
||||
%44 = OpConstantNull %bool
|
||||
%45 = OpConstantNull %int
|
||||
%46 = OpConstantNull %uint
|
||||
%47 = OpConstantNull %v3bool
|
||||
%48 = OpConstantNull %v4bool
|
||||
%49 = OpConstantNull %v3int
|
||||
%50 = OpConstantNull %v3uint
|
||||
%main = OpFunction %void None %40
|
||||
%43 = OpLabel
|
||||
OpStore %bool_var1 %44
|
||||
OpStore %bool_var2 %44
|
||||
OpStore %bool_var3 %44
|
||||
OpStore %i32_var1 %45
|
||||
OpStore %i32_var2 %45
|
||||
OpStore %u32_var1 %46
|
||||
OpStore %u32_var2 %46
|
||||
OpStore %v3bool_var1 %47
|
||||
OpStore %v3bool_var2 %47
|
||||
OpStore %v3bool_var3 %47
|
||||
OpStore %v3bool_var4 %47
|
||||
OpStore %v4bool_var5 %48
|
||||
OpStore %v3i32_var1 %49
|
||||
OpStore %v3i32_var2 %49
|
||||
OpStore %v3u32_var1 %50
|
||||
OpStore %v3u32_var2 %50
|
||||
%44 = OpTypeFunction %void
|
||||
%48 = OpConstantNull %bool
|
||||
%49 = OpConstantNull %int
|
||||
%50 = OpConstantNull %uint
|
||||
%51 = OpConstantNull %v3bool
|
||||
%52 = OpConstantNull %v4bool
|
||||
%53 = OpConstantNull %v3int
|
||||
%54 = OpConstantNull %v3uint
|
||||
%main = OpFunction %void None %44
|
||||
%47 = OpLabel
|
||||
OpStore %bool_var1 %48
|
||||
OpStore %bool_var2 %48
|
||||
OpStore %bool_var3 %48
|
||||
OpStore %i32_var1 %49
|
||||
OpStore %i32_var2 %49
|
||||
OpStore %i32_var3 %49
|
||||
OpStore %u32_var1 %50
|
||||
OpStore %u32_var2 %50
|
||||
OpStore %u32_var3 %50
|
||||
OpStore %v3bool_var1 %51
|
||||
OpStore %v3bool_var2 %51
|
||||
OpStore %v3bool_var3 %51
|
||||
OpStore %v3bool_var4 %51
|
||||
OpStore %v4bool_var5 %52
|
||||
OpStore %v3i32_var1 %53
|
||||
OpStore %v3i32_var2 %53
|
||||
OpStore %v3i32_var3 %53
|
||||
OpStore %v3u32_var1 %54
|
||||
OpStore %v3u32_var2 %54
|
||||
OpStore %v3u32_var3 %54
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
|
|
@ -8,10 +8,14 @@ var<private> i32_var1 : i32 = i32(1u);
|
|||
|
||||
var<private> i32_var2 : i32 = i32(1.0);
|
||||
|
||||
var<private> i32_var3 : i32 = i32(true);
|
||||
|
||||
var<private> u32_var1 : u32 = u32(1);
|
||||
|
||||
var<private> u32_var2 : u32 = u32(1.0);
|
||||
|
||||
var<private> u32_var3 : u32 = u32(true);
|
||||
|
||||
var<private> v3bool_var1 : vec3<bool> = vec3<bool>(vec3<u32>(1u));
|
||||
|
||||
var<private> v3bool_var2 : vec3<bool> = vec3<bool>(vec3<i32>(1));
|
||||
|
@ -22,10 +26,14 @@ var<private> v3i32_var1 : vec3<i32> = vec3<i32>(vec3<u32>(1u));
|
|||
|
||||
var<private> v3i32_var2 : vec3<i32> = vec3<i32>(vec3<f32>(1.0));
|
||||
|
||||
var<private> v3i32_var3 : vec3<i32> = vec3<i32>(vec3<bool>(true));
|
||||
|
||||
var<private> v3u32_var1 : vec3<u32> = vec3<u32>(vec3<i32>(1));
|
||||
|
||||
var<private> v3u32_var2 : vec3<u32> = vec3<u32>(vec3<f32>(1.0));
|
||||
|
||||
var<private> v3u32_var3 : vec3<u32> = vec3<u32>(vec3<bool>(true));
|
||||
|
||||
var<private> v3bool_var4 : vec3<bool> = vec3<bool>(vec2<bool>(vec2<f32>(123.0)), true);
|
||||
|
||||
var<private> v4bool_var5 : vec4<bool> = vec4<bool>(vec2<bool>(vec2<f32>(123.0, 0.0)), vec2<bool>(true, bool(f32(0.0))));
|
||||
|
@ -37,8 +45,10 @@ fn main() {
|
|||
bool_var3 = bool();
|
||||
i32_var1 = i32();
|
||||
i32_var2 = i32();
|
||||
i32_var3 = i32();
|
||||
u32_var1 = u32();
|
||||
u32_var2 = u32();
|
||||
u32_var3 = u32();
|
||||
v3bool_var1 = vec3<bool>();
|
||||
v3bool_var2 = vec3<bool>();
|
||||
v3bool_var3 = vec3<bool>();
|
||||
|
@ -46,6 +56,8 @@ fn main() {
|
|||
v4bool_var5 = vec4<bool>();
|
||||
v3i32_var1 = vec3<i32>();
|
||||
v3i32_var2 = vec3<i32>();
|
||||
v3i32_var3 = vec3<i32>();
|
||||
v3u32_var1 = vec3<u32>();
|
||||
v3u32_var2 = vec3<u32>();
|
||||
v3u32_var3 = vec3<u32>();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue