intrinsic/gen: Don't permutate impossible workgroup ptr types
Change-Id: I1e6a3436553ca886a52075315d09ff7ef04eb492
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/116082
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/tools/src/tint/intrinsic/gen/permutate.go b/tools/src/tint/intrinsic/gen/permutate.go
index 648b351..1a3ddab 100644
--- a/tools/src/tint/intrinsic/gen/permutate.go
+++ b/tools/src/tint/intrinsic/gen/permutate.go
@@ -328,17 +328,22 @@
return false // Builtin, untypeable return type
}
- switch fqn.Target.GetName() {
- case "array":
- elTy := fqn.TemplateArguments[0].(sem.FullyQualifiedName)
+ isStorable := func(elTy sem.FullyQualifiedName) bool {
elTyName := elTy.Target.GetName()
switch {
- case elTyName == "bool" ||
+ case elTyName == "bool",
strings.Contains(elTyName, "sampler"),
- strings.Contains(elTyName, "texture"):
- return false // Not storable
- case IsAbstract(DeepestElementType(elTy)):
- return false // Abstract types are not typeable
+ strings.Contains(elTyName, "texture"),
+ IsAbstract(DeepestElementType(elTy)):
+ return false
+ }
+ return true
+ }
+
+ switch fqn.Target.GetName() {
+ case "array":
+ if !isStorable(fqn.TemplateArguments[0].(sem.FullyQualifiedName)) {
+ return false
}
case "ptr":
// https://gpuweb.github.io/gpuweb/wgsl/#address-space
@@ -355,6 +360,9 @@
if access != "read_write" {
return false
}
+ if !isStorable(fqn.TemplateArguments[1].(sem.FullyQualifiedName)) {
+ return false
+ }
case "uniform":
if access != "read" {
return false