Refactors WireCmd.cpp generation to remove callbacks/userdata. - Removes callbacks and userdata from Transfer structs. - Uses "void *" type for userdata instead of "void" with "*" annotation. Bug: github.com/webgpu-native/webgpu-headers/issues/172 Change-Id: I48c50c9a79f2b15ab4ed6d6761601a07401d90e7 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/136042 Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: Loko Kung <lokokung@google.com> Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/dawn.json b/dawn.json index 87f94e7..92e54f1 100644 --- a/dawn.json +++ b/dawn.json
@@ -73,7 +73,7 @@ {"name": "status", "type": "request adapter status"}, {"name": "adapter", "type": "adapter"}, {"name": "message", "type": "char", "annotation": "const*", "length": "strlen", "optional": true}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, "adapter": { @@ -117,7 +117,7 @@ "args": [ {"name": "descriptor", "type": "device descriptor", "annotation": "const*", "optional": true, "no_default": true}, {"name": "callback", "type": "request device callback"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, { @@ -421,7 +421,7 @@ {"name": "offset", "type": "size_t"}, {"name": "size", "type": "size_t"}, {"name": "callback", "type": "buffer map callback"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, { @@ -481,7 +481,7 @@ "category": "function pointer", "args": [ {"name": "status", "type": "buffer map async status"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, "buffer map async status": { @@ -742,7 +742,7 @@ "args": [ {"name": "status", "type": "compilation info request status"}, {"name": "compilation info", "type": "compilation info", "annotation": "const*"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, "compilation info request status": { @@ -945,7 +945,7 @@ {"name": "status", "type": "create pipeline async status"}, {"name": "pipeline", "type": "compute pipeline"}, {"name": "message", "type": "char", "annotation": "const*", "length": "strlen"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, "create pipeline async status": { @@ -966,7 +966,7 @@ {"name": "status", "type": "create pipeline async status"}, {"name": "pipeline", "type": "render pipeline"}, {"name": "message", "type": "char", "annotation": "const*", "length": "strlen"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, "cull mode": { @@ -1029,7 +1029,7 @@ "args": [ {"name": "descriptor", "type": "compute pipeline descriptor", "annotation": "const*"}, {"name": "callback", "type": "create compute pipeline async callback"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, { @@ -1065,7 +1065,7 @@ "args": [ {"name": "descriptor", "type": "render pipeline descriptor", "annotation": "const*"}, {"name": "callback", "type": "create render pipeline async callback"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, { @@ -1187,7 +1187,7 @@ "no autolock": true, "args": [ {"name": "callback", "type": "error callback"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, { @@ -1196,7 +1196,7 @@ "tags": ["dawn"], "args": [ {"name": "callback", "type": "logging callback"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, { @@ -1205,7 +1205,7 @@ "tags": ["deprecated"], "args": [ {"name": "callback", "type": "device lost callback"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, { @@ -1218,7 +1218,7 @@ "name": "pop error scope", "args": [ {"name": "callback", "type": "error callback"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, { @@ -1250,7 +1250,7 @@ "args": [ {"name": "reason", "type": "device lost reason"}, {"name": "message", "type": "char", "annotation": "const*"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, "device lost reason": { @@ -1269,7 +1269,7 @@ "args": [ {"name": "type", "type": "error type"}, {"name": "message", "type": "char", "annotation": "const*"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, "limits": { @@ -1328,7 +1328,7 @@ "args": [ {"name": "type", "type": "logging type"}, {"name": "message", "type": "char", "annotation": "const*"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, "error filter": { @@ -1535,7 +1535,7 @@ "args": [ {"name": "options", "type": "request adapter options", "annotation": "const*", "optional": true, "no_default": true}, {"name": "callback", "type": "request adapter callback"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] } ] @@ -1745,7 +1745,7 @@ "args": [ {"name": "signal value", "type": "uint64_t"}, {"name": "callback", "type": "queue work done callback"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, { @@ -1753,7 +1753,7 @@ "tags": ["upstream"], "args": [ {"name": "callback", "type": "queue work done callback"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, { @@ -1817,7 +1817,7 @@ "category": "function pointer", "args": [ {"name": "status", "type": "queue work done status"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, "queue work done status": { @@ -2224,7 +2224,7 @@ {"name": "status", "type": "request device status"}, {"name": "device", "type": "device"}, {"name": "message", "type": "char", "annotation": "const*", "length": "strlen", "optional": true}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, @@ -2378,7 +2378,7 @@ "name": "get compilation info", "args": [ {"name": "callback", "type": "compilation info callback"}, - {"name": "userdata", "type": "void", "annotation": "*"} + {"name": "userdata", "type": "void *"} ] }, {
diff --git a/generator/dawn_json_generator.py b/generator/dawn_json_generator.py index 564b53b..1605ceb 100644 --- a/generator/dawn_json_generator.py +++ b/generator/dawn_json_generator.py
@@ -147,7 +147,6 @@ Type.__init__(self, name, json_data) self.return_type = None self.arguments = [] - self.is_wire_transparent = True class TypedefType(Type):
diff --git a/generator/templates/dawn/wire/WireCmd.cpp b/generator/templates/dawn/wire/WireCmd.cpp index 0b293a4..26f235a 100644 --- a/generator/templates/dawn/wire/WireCmd.cpp +++ b/generator/templates/dawn/wire/WireCmd.cpp
@@ -71,12 +71,9 @@ //* trusted boundary. {%- set Provider = ", provider" if member.type.may_have_dawn_object else "" -%} WIRE_TRY({{as_cType(member.type.name)}}Serialize({{in}}, &{{out}}, buffer{{Provider}})); - {%- elif member.type.category == "function pointer" -%} - //* Function pointers cannot be serialized. - if ({{in}} != nullptr) { - return WireResult::FatalError; - } - {{out}} = nullptr; + {%- elif member.type.category == "function pointer" or member.type.name.get() == "void *" -%} + //* Function pointers and explicit "void *" types (i.e. userdata) cannot be serialized. + if ({{in}} != nullptr) return WireResult::FatalError; {%- else -%} {{out}} = {{in}}; {%- endif -%} @@ -98,11 +95,8 @@ {%- endif -%} )); {%- endif -%} - {%- elif member.type.category == "function pointer" -%} - //* Function pointers cannot be deserialized. - if ({{in}} != nullptr) { - return WireResult::FatalError; - } + {%- elif member.type.category == "function pointer" or member.type.name.get() == "void *" -%} + //* Function pointers and explicit "void *" types (i.e. userdata) cannot be deserialized. {{out}} = nullptr; {%- elif member.type.name.get() == "size_t" -%} // Deserializing into size_t requires check that the uint64_t used on the wire won't narrow. @@ -141,6 +135,10 @@ {% endif %} {% for member in members %} + //* Function pointers and explicit "void *" types (i.e. userdata) do not get serialized. + {% if member.type.category == "function pointer" or member.type.name.get() == "void *" %} + {% continue %} + {% endif %} //* Value types are directly in the command, objects being replaced with their IDs. {% if member.annotation == "value" %} {{member_transfer_type(member)}} {{as_varName(member.name)}};