Skip to content

Commit 6d338a7

Browse files
committed
[tint] Allow read-only storage textures
Iff the chromium_experimental_read_write_storage_texture extension is enabled. Bug: tint:2007 Change-Id: Ic76c22b3d88d0b76253f9a0ed7b0befcd498ca0f Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/146960 Reviewed-by: Ben Clayton <[email protected]> Kokoro: Kokoro <[email protected]>
1 parent b116b99 commit 6d338a7

File tree

2 files changed

+31
-9
lines changed

2 files changed

+31
-9
lines changed

src/tint/lang/wgsl/resolver/type_validation_test.cc

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,7 +1143,19 @@ TEST_F(StorageTextureAccessTest, MissingAccess_Fail) {
11431143
EXPECT_EQ(r()->error(), R"(12:34 error: 'texture_storage_1d' requires 2 template arguments)");
11441144
}
11451145

1146-
TEST_F(StorageTextureAccessTest, ReadOnlyAccess_Fail) {
1146+
TEST_F(StorageTextureAccessTest, WriteOnlyAccess_Pass) {
1147+
// @group(0) @binding(0)
1148+
// var a : texture_storage_1d<r32uint, write>;
1149+
1150+
auto st = ty.storage_texture(core::type::TextureDimension::k1d, core::TexelFormat::kR32Uint,
1151+
core::Access::kWrite);
1152+
1153+
GlobalVar("a", st, Group(0_a), Binding(0_a));
1154+
1155+
EXPECT_TRUE(r()->Resolve()) << r()->error();
1156+
}
1157+
1158+
TEST_F(StorageTextureAccessTest, ReadOnlyAccess_WithoutExtension_Fail) {
11471159
// @group(0) @binding(0)
11481160
// var a : texture_storage_1d<r32uint, read>;
11491161

@@ -1154,15 +1166,18 @@ TEST_F(StorageTextureAccessTest, ReadOnlyAccess_Fail) {
11541166

11551167
EXPECT_FALSE(r()->Resolve());
11561168
EXPECT_EQ(r()->error(),
1157-
"12:34 error: storage textures currently only support 'write' access control");
1169+
"12:34 error: read-only storage textures require the "
1170+
"chromium_experimental_read_write_storage_texture extension to be enabled");
11581171
}
11591172

1160-
TEST_F(StorageTextureAccessTest, WriteOnlyAccess_Pass) {
1173+
TEST_F(StorageTextureAccessTest, ReadOnlyAccess_WithExtension_Pass) {
1174+
// enable chromium_experimental_read_write_storage_texture;
11611175
// @group(0) @binding(0)
1162-
// var a : texture_storage_1d<r32uint, write>;
1176+
// var a : texture_storage_1d<r32uint, read>;
11631177

1164-
auto st = ty.storage_texture(core::type::TextureDimension::k1d, core::TexelFormat::kR32Uint,
1165-
core::Access::kWrite);
1178+
Enable(core::Extension::kChromiumExperimentalReadWriteStorageTexture);
1179+
auto st = ty.storage_texture(Source{{12, 34}}, core::type::TextureDimension::k1d,
1180+
core::TexelFormat::kR32Uint, core::Access::kRead);
11661181

11671182
GlobalVar("a", st, Group(0_a), Binding(0_a));
11681183

src/tint/lang/wgsl/resolver/validator.cc

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,16 @@ bool Validator::Pointer(const ast::TemplatedIdentifier* a, const core::type::Poi
312312

313313
bool Validator::StorageTexture(const core::type::StorageTexture* t, const Source& source) const {
314314
switch (t->access()) {
315+
case core::Access::kRead:
316+
if (!enabled_extensions_.Contains(
317+
core::Extension::kChromiumExperimentalReadWriteStorageTexture)) {
318+
AddError(
319+
"read-only storage textures require the "
320+
"chromium_experimental_read_write_storage_texture extension to be enabled",
321+
source);
322+
return false;
323+
}
324+
break;
315325
case core::Access::kReadWrite:
316326
if (!enabled_extensions_.Contains(
317327
core::Extension::kChromiumExperimentalReadWriteStorageTexture)) {
@@ -327,9 +337,6 @@ bool Validator::StorageTexture(const core::type::StorageTexture* t, const Source
327337
case core::Access::kUndefined:
328338
AddError("storage texture missing access control", source);
329339
return false;
330-
default:
331-
AddError("storage textures currently only support 'write' access control", source);
332-
return false;
333340
}
334341

335342
if (!IsValidStorageTextureDimension(t->dim())) {

0 commit comments

Comments
 (0)