writer/hlsl: Implement select()
Fixed: tint:304
Change-Id: I8821bc6e4bfa0487161b8d915a6a107afd474105
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/53389
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index 394017d..40f90e1 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -587,8 +587,7 @@
return EmitTextureCall(pre, out, expr, intrinsic);
}
if (intrinsic->Type() == sem::IntrinsicType::kSelect) {
- diagnostics_.add_error("select not supported in HLSL backend yet");
- return false;
+ return EmitSelectCall(pre, out, expr);
} else if (intrinsic->Type() == sem::IntrinsicType::kIsNormal) {
diagnostics_.add_error("is_normal not supported in HLSL backend yet");
return false;
@@ -676,6 +675,32 @@
return true;
}
+bool GeneratorImpl::EmitSelectCall(std::ostream& pre,
+ std::ostream& out,
+ ast::CallExpression* expr) {
+ auto* expr_true = expr->params()[0];
+ auto* expr_false = expr->params()[1];
+ auto* expr_cond = expr->params()[2];
+ ScopedParen paren(out);
+ if (!EmitExpression(pre, out, expr_cond)) {
+ return false;
+ }
+
+ out << " ? ";
+
+ if (!EmitExpression(pre, out, expr_true)) {
+ return false;
+ }
+
+ out << " : ";
+
+ if (!EmitExpression(pre, out, expr_false)) {
+ return false;
+ }
+
+ return true;
+}
+
bool GeneratorImpl::EmitDataPackingCall(std::ostream& pre,
std::ostream& out,
ast::CallExpression* expr,
diff --git a/src/writer/hlsl/generator_impl.h b/src/writer/hlsl/generator_impl.h
index 1b62c76..3aa4958 100644
--- a/src/writer/hlsl/generator_impl.h
+++ b/src/writer/hlsl/generator_impl.h
@@ -139,6 +139,16 @@
std::ostream& out,
ast::CallExpression* expr,
const sem::Intrinsic* intrinsic);
+
+ /// Handles generating a call to the `select()` intrinsic
+ /// @param pre the preamble of the expression stream
+ /// @param out the output of the expression stream
+ /// @param expr the call expression
+ /// @returns true if the call expression is emitted
+ bool EmitSelectCall(std::ostream& pre,
+ std::ostream& out,
+ ast::CallExpression* expr);
+
/// Handles generating a call to data packing intrinsic
/// @param pre the preamble of the expression stream
/// @param out the output of the expression stream
diff --git a/src/writer/hlsl/generator_impl_intrinsic_test.cc b/src/writer/hlsl/generator_impl_intrinsic_test.cc
index a6d79c6..314ead2 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_test.cc
@@ -272,6 +272,28 @@
EXPECT_EQ(result(), "dot(param1, param2)");
}
+TEST_F(HlslGeneratorImplTest_Intrinsic, Select_Scalar) {
+ auto* call = Call("select", 1.0f, 2.0f, true);
+ WrapInFunction(call);
+ GeneratorImpl& gen = Build();
+
+ gen.increment_indent();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
+ EXPECT_EQ(result(), "(true ? 1.0f : 2.0f)");
+}
+
+TEST_F(HlslGeneratorImplTest_Intrinsic, Select_Vector) {
+ auto* call =
+ Call("select", vec2<i32>(1, 2), vec2<i32>(3, 4), vec2<bool>(true, false));
+ WrapInFunction(call);
+ GeneratorImpl& gen = Build();
+
+ gen.increment_indent();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
+ EXPECT_EQ(result(),
+ "(vector<bool, 2>(true, false) ? int2(1, 2) : int2(3, 4))");
+}
+
TEST_F(HlslGeneratorImplTest_Intrinsic, Pack4x8Snorm) {
auto* call = Call("pack4x8snorm", "p1");
Global("p1", ty.vec4<f32>(), ast::StorageClass::kPrivate);
diff --git a/test/intrinsics/gen/select/00b848.wgsl.expected.hlsl b/test/intrinsics/gen/select/00b848.wgsl.expected.hlsl
index 813c530..7c4709c 100644
--- a/test/intrinsics/gen/select/00b848.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/00b848.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_00b848() {
- var res : vec2<i32> = select(vec2<i32>(), vec2<i32>(), vec2<bool>());
+void select_00b848() {
+ int2 res = (vector<bool, 2>(false, false) ? int2(0, 0) : int2(0, 0));
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_00b848();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_00b848();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_00b848();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/01e2cd.wgsl.expected.hlsl b/test/intrinsics/gen/select/01e2cd.wgsl.expected.hlsl
index a59ac84..f94a217 100644
--- a/test/intrinsics/gen/select/01e2cd.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/01e2cd.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_01e2cd() {
- var res : vec3<i32> = select(vec3<i32>(), vec3<i32>(), vec3<bool>());
+void select_01e2cd() {
+ int3 res = (vector<bool, 3>(false, false, false) ? int3(0, 0, 0) : int3(0, 0, 0));
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_01e2cd();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_01e2cd();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_01e2cd();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/1e960b.wgsl.expected.hlsl b/test/intrinsics/gen/select/1e960b.wgsl.expected.hlsl
index 2ad2b34..8a476b8 100644
--- a/test/intrinsics/gen/select/1e960b.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/1e960b.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_1e960b() {
- var res : vec2<u32> = select(vec2<u32>(), vec2<u32>(), vec2<bool>());
+void select_1e960b() {
+ uint2 res = (vector<bool, 2>(false, false) ? uint2(0u, 0u) : uint2(0u, 0u));
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_1e960b();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_1e960b();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_1e960b();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/266aff.wgsl.expected.hlsl b/test/intrinsics/gen/select/266aff.wgsl.expected.hlsl
index 7fa28bc..430c689 100644
--- a/test/intrinsics/gen/select/266aff.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/266aff.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_266aff() {
- var res : vec2<f32> = select(vec2<f32>(), vec2<f32>(), vec2<bool>());
+void select_266aff() {
+ float2 res = (vector<bool, 2>(false, false) ? float2(0.0f, 0.0f) : float2(0.0f, 0.0f));
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_266aff();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_266aff();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_266aff();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/28a27e.wgsl.expected.hlsl b/test/intrinsics/gen/select/28a27e.wgsl.expected.hlsl
index 51b8dcb..ad1d992 100644
--- a/test/intrinsics/gen/select/28a27e.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/28a27e.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_28a27e() {
- var res : vec3<u32> = select(vec3<u32>(), vec3<u32>(), vec3<bool>());
+void select_28a27e() {
+ uint3 res = (vector<bool, 3>(false, false, false) ? uint3(0u, 0u, 0u) : uint3(0u, 0u, 0u));
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_28a27e();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_28a27e();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_28a27e();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/416e14.wgsl.expected.hlsl b/test/intrinsics/gen/select/416e14.wgsl.expected.hlsl
index f2cabc0..afcb7f0 100644
--- a/test/intrinsics/gen/select/416e14.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/416e14.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_416e14() {
- var res : f32 = select(1.0, 1.0, bool());
+void select_416e14() {
+ float res = (false ? 1.0f : 1.0f);
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_416e14();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_416e14();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_416e14();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/80a9a9.wgsl.expected.hlsl b/test/intrinsics/gen/select/80a9a9.wgsl.expected.hlsl
index 784f9fd..f0700b1 100644
--- a/test/intrinsics/gen/select/80a9a9.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/80a9a9.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_80a9a9() {
- var res : vec3<bool> = select(vec3<bool>(), vec3<bool>(), vec3<bool>());
+void select_80a9a9() {
+ vector<bool, 3> res = (vector<bool, 3>(false, false, false) ? vector<bool, 3>(false, false, false) : vector<bool, 3>(false, false, false));
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_80a9a9();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_80a9a9();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_80a9a9();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/99f883.wgsl.expected.hlsl b/test/intrinsics/gen/select/99f883.wgsl.expected.hlsl
index 7c30f9a..c187413 100644
--- a/test/intrinsics/gen/select/99f883.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/99f883.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_99f883() {
- var res : u32 = select(1u, 1u, bool());
+void select_99f883() {
+ uint res = (false ? 1u : 1u);
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_99f883();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_99f883();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_99f883();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/a2860e.wgsl.expected.hlsl b/test/intrinsics/gen/select/a2860e.wgsl.expected.hlsl
index 06245b9..6266236 100644
--- a/test/intrinsics/gen/select/a2860e.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/a2860e.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_a2860e() {
- var res : vec4<i32> = select(vec4<i32>(), vec4<i32>(), vec4<bool>());
+void select_a2860e() {
+ int4 res = (vector<bool, 4>(false, false, false, false) ? int4(0, 0, 0, 0) : int4(0, 0, 0, 0));
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_a2860e();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_a2860e();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_a2860e();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/bb8aae.wgsl.expected.hlsl b/test/intrinsics/gen/select/bb8aae.wgsl.expected.hlsl
index b057c7f..55e26b8 100644
--- a/test/intrinsics/gen/select/bb8aae.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/bb8aae.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_bb8aae() {
- var res : vec4<f32> = select(vec4<f32>(), vec4<f32>(), vec4<bool>());
+void select_bb8aae() {
+ float4 res = (vector<bool, 4>(false, false, false, false) ? float4(0.0f, 0.0f, 0.0f, 0.0f) : float4(0.0f, 0.0f, 0.0f, 0.0f));
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_bb8aae();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_bb8aae();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_bb8aae();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/c31f9e.wgsl.expected.hlsl b/test/intrinsics/gen/select/c31f9e.wgsl.expected.hlsl
index 65ab282..7d8695e 100644
--- a/test/intrinsics/gen/select/c31f9e.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/c31f9e.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_c31f9e() {
- var res : bool = select(bool(), bool(), bool());
+void select_c31f9e() {
+ bool res = (false ? false : false);
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_c31f9e();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_c31f9e();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_c31f9e();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/c4a4ef.wgsl.expected.hlsl b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.hlsl
index 00ad061..b5c3056 100644
--- a/test/intrinsics/gen/select/c4a4ef.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_c4a4ef() {
- var res : vec4<u32> = select(vec4<u32>(), vec4<u32>(), vec4<bool>());
+void select_c4a4ef() {
+ uint4 res = (vector<bool, 4>(false, false, false, false) ? uint4(0u, 0u, 0u, 0u) : uint4(0u, 0u, 0u, 0u));
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_c4a4ef();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_c4a4ef();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_c4a4ef();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/cb9301.wgsl.expected.hlsl b/test/intrinsics/gen/select/cb9301.wgsl.expected.hlsl
index 3c9013c..5041d26 100644
--- a/test/intrinsics/gen/select/cb9301.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/cb9301.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_cb9301() {
- var res : vec2<bool> = select(vec2<bool>(), vec2<bool>(), vec2<bool>());
+void select_cb9301() {
+ vector<bool, 2> res = (vector<bool, 2>(false, false) ? vector<bool, 2>(false, false) : vector<bool, 2>(false, false));
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_cb9301();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_cb9301();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_cb9301();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/e3e028.wgsl.expected.hlsl b/test/intrinsics/gen/select/e3e028.wgsl.expected.hlsl
index 31a4f02..f65fa64 100644
--- a/test/intrinsics/gen/select/e3e028.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/e3e028.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_e3e028() {
- var res : vec4<bool> = select(vec4<bool>(), vec4<bool>(), vec4<bool>());
+void select_e3e028() {
+ vector<bool, 4> res = (vector<bool, 4>(false, false, false, false) ? vector<bool, 4>(false, false, false, false) : vector<bool, 4>(false, false, false, false));
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_e3e028();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_e3e028();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_e3e028();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/ebfea2.wgsl.expected.hlsl b/test/intrinsics/gen/select/ebfea2.wgsl.expected.hlsl
index 9889d93..7183f0e 100644
--- a/test/intrinsics/gen/select/ebfea2.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/ebfea2.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_ebfea2() {
- var res : vec3<f32> = select(vec3<f32>(), vec3<f32>(), vec3<bool>());
+void select_ebfea2() {
+ float3 res = (vector<bool, 3>(false, false, false) ? float3(0.0f, 0.0f, 0.0f) : float3(0.0f, 0.0f, 0.0f));
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_ebfea2();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_ebfea2();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_ebfea2();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet
diff --git a/test/intrinsics/gen/select/ed8a15.wgsl.expected.hlsl b/test/intrinsics/gen/select/ed8a15.wgsl.expected.hlsl
index 4211aca..48f9b92 100644
--- a/test/intrinsics/gen/select/ed8a15.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/ed8a15.wgsl.expected.hlsl
@@ -1,23 +1,25 @@
-SKIP: FAILED
+struct tint_symbol {
+ float4 value : SV_Position;
+};
-
-fn select_ed8a15() {
- var res : i32 = select(1, 1, bool());
+void select_ed8a15() {
+ int res = (false ? 1 : 1);
}
-[[stage(vertex)]]
-fn vertex_main() {
+tint_symbol vertex_main() {
select_ed8a15();
+ const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+ return tint_symbol_1;
}
-[[stage(fragment)]]
-fn fragment_main() {
+void fragment_main() {
select_ed8a15();
+ return;
}
-[[stage(compute)]]
-fn compute_main() {
+[numthreads(1, 1, 1)]
+void compute_main() {
select_ed8a15();
+ return;
}
-Failed to generate: error: select not supported in HLSL backend yet