GLSL: clean up appending of depth reference.
Just a minor cleanup; no functional change.
Change-Id: Iac4f97c2b5507f7665024885a81f6ccf8e5ab269
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/82440
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
diff --git a/src/tint/writer/glsl/generator_impl.cc b/src/tint/writer/glsl/generator_impl.cc
index 4adbbc7..3c22dba 100644
--- a/src/tint/writer/glsl/generator_impl.cc
+++ b/src/tint/writer/glsl/generator_impl.cc
@@ -1265,6 +1265,16 @@
return true;
}
+const ast::Expression* GeneratorImpl::CreateF32Zero(
+ const sem::Statement* stmt) {
+ auto* zero = builder_.Expr(0.0f);
+ auto* f32 = builder_.create<sem::F32>();
+ auto* sem_zero = builder_.create<sem::Expression>(
+ zero, f32, stmt, sem::Constant{}, /* has_side_effects */ false);
+ builder_.Sem().Add(zero, sem_zero);
+ return zero;
+}
+
bool GeneratorImpl::EmitTextureCall(std::ostream& out,
const sem::Call* call,
const sem::Builtin* builtin) {
@@ -1446,20 +1456,14 @@
}
if (is_depth && append_depth_ref_to_coords) {
- if (auto* depth_ref = arg(Usage::kDepthRef)) {
- param_coords =
- AppendVector(&builder_, param_coords, depth_ref)->Declaration();
- } else {
+ auto* depth_ref = arg(Usage::kDepthRef);
+ if (!depth_ref) {
// Sampling a depth texture in GLSL always requires a depth reference, so
// append zero here.
- auto* f32 = builder_.create<sem::F32>();
- auto* zero = builder_.Expr(0.0f);
- auto* stmt = builder_.Sem().Get(param_coords)->Stmt();
- auto* sem_zero = builder_.create<sem::Expression>(
- zero, f32, stmt, sem::Constant{}, /* has_side_effects */ false);
- builder_.Sem().Add(zero, sem_zero);
- param_coords = AppendVector(&builder_, param_coords, zero)->Declaration();
+ depth_ref = CreateF32Zero(builder_.Sem().Get(param_coords)->Stmt());
}
+ param_coords =
+ AppendVector(&builder_, param_coords, depth_ref)->Declaration();
}
if (!EmitExpression(out, param_coords)) {
diff --git a/src/tint/writer/glsl/generator_impl.h b/src/tint/writer/glsl/generator_impl.h
index 1a591a4..791e54e 100644
--- a/src/tint/writer/glsl/generator_impl.h
+++ b/src/tint/writer/glsl/generator_impl.h
@@ -191,6 +191,11 @@
/// @param expr the fma() expression
/// @returns true if the expression is emitted
bool EmitEmulatedFMA(std::ostream& out, const ast::CallExpression* expr);
+ /// Create a float literal zero AST node, and associated semantic nodes.
+ /// @param stmt the statement which will own the semantic expression node
+ /// @returns an AST expression representing 0.0f
+ const ast::Expression* CreateF32Zero(const sem::Statement* stmt);
+
/// Handles generating a call to a texture function (`textureSample`,
/// `textureSampleGrad`, etc)
/// @param out the output of the expression stream
diff --git a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
index 4b0b145..d14ef3c 100644
--- a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
@@ -1,6 +1,6 @@
SKIP: FAILED
-../../src/tint/writer/glsl/generator_impl.cc:2582 internal compiler error: Multiplanar external texture transform was not run.
+../../src/tint/writer/glsl/generator_impl.cc:2587 internal compiler error: Multiplanar external texture transform was not run.
********************************************************************
diff --git a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl
index 4b0b145..d14ef3c 100644
--- a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl
@@ -1,6 +1,6 @@
SKIP: FAILED
-../../src/tint/writer/glsl/generator_impl.cc:2582 internal compiler error: Multiplanar external texture transform was not run.
+../../src/tint/writer/glsl/generator_impl.cc:2587 internal compiler error: Multiplanar external texture transform was not run.
********************************************************************
diff --git a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl
index 4b0b145..d14ef3c 100644
--- a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl
@@ -1,6 +1,6 @@
SKIP: FAILED
-../../src/tint/writer/glsl/generator_impl.cc:2582 internal compiler error: Multiplanar external texture transform was not run.
+../../src/tint/writer/glsl/generator_impl.cc:2587 internal compiler error: Multiplanar external texture transform was not run.
********************************************************************