mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-14 15:46:28 +00:00
tint/hlsl+glsl: fix workgroupUniformLoad polyfills
The BuiltinPolyfill transform expects the DirectVariableAccess transform to run after it, but this regressed as part of https://dawn-review.googlesource.com/c/dawn/+/122203 Add unit test along with e2e 1926.wgsl test. Bug: tint:1926 Change-Id: I5107453ce152b12e6f2f36930846e1fffa775708 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/131020 Reviewed-by: James Price <jrprice@google.com> Commit-Queue: Antonio Maiorano <amaiorano@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
committed by
Dawn LUCI CQ
parent
e903396ff2
commit
fa00fe9d41
@@ -16,6 +16,7 @@
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "src/tint/transform/direct_variable_access.h"
|
||||
#include "src/tint/transform/test_helper.h"
|
||||
|
||||
namespace tint::transform {
|
||||
@@ -3673,8 +3674,23 @@ fn f() {
|
||||
DataMap polyfillWorkgroupUniformLoad() {
|
||||
BuiltinPolyfill::Builtins builtins;
|
||||
builtins.workgroup_uniform_load = true;
|
||||
|
||||
DataMap data;
|
||||
data.Add<BuiltinPolyfill::Config>(builtins);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
DataMap polyfillWorkgroupUniformLoadWithDirectVariableAccess() {
|
||||
DataMap data;
|
||||
|
||||
BuiltinPolyfill::Builtins builtins;
|
||||
builtins.workgroup_uniform_load = true;
|
||||
data.Add<BuiltinPolyfill::Config>(builtins);
|
||||
|
||||
DirectVariableAccess::Options options;
|
||||
data.Add<DirectVariableAccess::Config>(options);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@@ -3830,6 +3846,50 @@ fn f() {
|
||||
EXPECT_EQ(expect, str(got));
|
||||
}
|
||||
|
||||
TEST_F(BuiltinPolyfillTest, WorkgroupUniformLoad_DirectVariableAccess) {
|
||||
auto* src = R"(
|
||||
var<workgroup> v : i32;
|
||||
var<workgroup> v2 : i32;
|
||||
|
||||
fn f() {
|
||||
let r = workgroupUniformLoad(&v);
|
||||
let s = workgroupUniformLoad(&v2);
|
||||
}
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
enable chromium_experimental_full_ptr_parameters;
|
||||
|
||||
fn tint_workgroupUniformLoad_v() -> i32 {
|
||||
workgroupBarrier();
|
||||
let result = v;
|
||||
workgroupBarrier();
|
||||
return result;
|
||||
}
|
||||
|
||||
fn tint_workgroupUniformLoad_v2() -> i32 {
|
||||
workgroupBarrier();
|
||||
let result = v2;
|
||||
workgroupBarrier();
|
||||
return result;
|
||||
}
|
||||
|
||||
var<workgroup> v : i32;
|
||||
|
||||
var<workgroup> v2 : i32;
|
||||
|
||||
fn f() {
|
||||
let r = tint_workgroupUniformLoad_v();
|
||||
let s = tint_workgroupUniformLoad_v2();
|
||||
}
|
||||
)";
|
||||
|
||||
auto got = Run<BuiltinPolyfill, DirectVariableAccess>(
|
||||
src, polyfillWorkgroupUniformLoadWithDirectVariableAccess());
|
||||
|
||||
EXPECT_EQ(expect, str(got));
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// quantizeToF16
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -170,7 +170,6 @@ SanitizedResult Sanitize(const Program* in,
|
||||
manager.Add<transform::PreservePadding>(); // Must come before DirectVariableAccess
|
||||
|
||||
manager.Add<transform::Unshadow>(); // Must come before DirectVariableAccess
|
||||
manager.Add<transform::DirectVariableAccess>();
|
||||
|
||||
manager.Add<transform::PromoteSideEffectsToDecl>();
|
||||
|
||||
@@ -203,9 +202,11 @@ SanitizedResult Sanitize(const Program* in,
|
||||
polyfills.texture_sample_base_clamp_to_edge_2d_f32 = true;
|
||||
polyfills.workgroup_uniform_load = true;
|
||||
data.Add<transform::BuiltinPolyfill::Config>(polyfills);
|
||||
manager.Add<transform::BuiltinPolyfill>();
|
||||
manager.Add<transform::BuiltinPolyfill>(); // Must come before DirectVariableAccess
|
||||
}
|
||||
|
||||
manager.Add<transform::DirectVariableAccess>();
|
||||
|
||||
if (!options.disable_workgroup_init) {
|
||||
// ZeroInitWorkgroupMemory must come before CanonicalizeEntryPointIO as
|
||||
// ZeroInitWorkgroupMemory may inject new builtin parameters.
|
||||
|
||||
@@ -176,8 +176,6 @@ SanitizedResult Sanitize(const Program* in, const Options& options) {
|
||||
|
||||
manager.Add<transform::Unshadow>(); // Must come before DirectVariableAccess
|
||||
|
||||
manager.Add<transform::DirectVariableAccess>();
|
||||
|
||||
// LocalizeStructArrayAssignment must come after:
|
||||
// * SimplifyPointers, because it assumes assignment to arrays in structs are
|
||||
// done directly, not indirectly.
|
||||
@@ -229,9 +227,11 @@ SanitizedResult Sanitize(const Program* in, const Options& options) {
|
||||
polyfills.texture_sample_base_clamp_to_edge_2d_f32 = true;
|
||||
polyfills.workgroup_uniform_load = true;
|
||||
data.Add<transform::BuiltinPolyfill::Config>(polyfills);
|
||||
manager.Add<transform::BuiltinPolyfill>();
|
||||
manager.Add<transform::BuiltinPolyfill>(); // Must come before DirectVariableAccess
|
||||
}
|
||||
|
||||
manager.Add<transform::DirectVariableAccess>();
|
||||
|
||||
if (!options.disable_workgroup_init) {
|
||||
// ZeroInitWorkgroupMemory must come before CanonicalizeEntryPointIO as
|
||||
// ZeroInitWorkgroupMemory may inject new builtin parameters.
|
||||
|
||||
@@ -119,7 +119,7 @@ SanitizedResult Sanitize(const Program* in, const Options& options) {
|
||||
polyfills.quantize_to_vec_f16 = true; // crbug.com/tint/1741
|
||||
polyfills.workgroup_uniform_load = true;
|
||||
data.Add<transform::BuiltinPolyfill::Config>(polyfills);
|
||||
manager.Add<transform::BuiltinPolyfill>();
|
||||
manager.Add<transform::BuiltinPolyfill>(); // Must come before DirectVariableAccess
|
||||
}
|
||||
|
||||
bool disable_workgroup_init_in_sanitizer =
|
||||
|
||||
Reference in New Issue
Block a user