Make dawn.h closer to webgpu.h
This includes several changes to make dawn.h closer to webgpu.h (apart
from the renames and copyright changes):
- Make nextInChain follow the same type convention as the rest of the
header.
- Add defines that allow skipping the procs definition or the functions
declaration part of the header.
- Sort the methods by name for each object.
- Put the callback definition inside extern "C"
- Make the enums typedef have the name of the enum twice.
BUG=dawn:22
Change-Id: I36e4587d60ca43886636ebd19d54752004f4696d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/11903
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/generator/dawn_json_generator.py b/generator/dawn_json_generator.py
index 7e37717..36c3f58 100644
--- a/generator/dawn_json_generator.py
+++ b/generator/dawn_json_generator.py
@@ -195,6 +195,7 @@
methods = [make_method(m) for m in obj.json_data.get('methods', [])]
obj.methods = [method for method in methods if not is_native_method(method)]
+ obj.methods.sort(key=lambda method: method.name.canonical_case())
obj.native_methods = [method for method in methods if is_native_method(method)]
def link_structure(struct, types):
@@ -439,7 +440,7 @@
return as_cppType(typ.name)
def cpp_native_methods(types, typ):
- return typ.methods + typ.native_methods
+ return sorted(typ.methods + typ.native_methods, key=lambda method: method.name.canonical_case())
def c_native_methods(types, typ):
return cpp_native_methods(types, typ) + [
diff --git a/generator/templates/api.h b/generator/templates/api.h
index 4a80cb4..1b0e9cd 100644
--- a/generator/templates/api.h
+++ b/generator/templates/api.h
@@ -28,7 +28,7 @@
{% endfor %}
{% for type in by_category["enum"] + by_category["bitmask"] %}
- typedef enum {
+ typedef enum {{as_cType(type.name)}} {
{% for value in type.values %}
{{as_cEnum(type.name, value.name)}} = 0x{{format(value.value, "08X")}},
{% endfor %}
@@ -40,7 +40,7 @@
{% for type in by_category["structure"] %}
typedef struct {{as_cType(type.name)}} {
{% if type.extensible %}
- const void* nextInChain;
+ void const * nextInChain;
{% endif %}
{% for member in type.members %}
{{as_annotated_cType(member)}};
@@ -49,6 +49,10 @@
{% endfor %}
+#ifdef __cplusplus
+extern "C" {
+#endif
+
// Custom types depending on the target language
typedef void (*DawnErrorCallback)(DawnErrorType type, const char* message, void* userdata);
typedef void (*DawnBufferCreateMappedCallback)(DawnBufferMapAsyncStatus status,
@@ -64,9 +68,7 @@
void* userdata);
typedef void (*DawnFenceOnCompletionCallback)(DawnFenceCompletionStatus status, void* userdata);
-#ifdef __cplusplus
-extern "C" {
-#endif
+#if !defined(DAWN_SKIP_PROCS)
{% for type in by_category["object"] %}
// Procs of {{type.name.CamelCase()}}
@@ -80,6 +82,7 @@
{% endfor %}
{% endfor %}
+#endif // !defined(DAWN_SKIP_PROCS)
struct DawnProcTable_s {
{% for type in by_category["object"] %}
@@ -93,6 +96,8 @@
// Stuff below is for convenience and will forward calls to a static DawnProcTable.
+#if !defined(DAWN_SKIP_DECLARATIONS)
+
// Set which DawnProcTable will be used
DAWN_EXPORT void dawnSetProcs(const DawnProcTable* procs);
@@ -108,6 +113,7 @@
{% endfor %}
{% endfor %}
+#endif // !defined(DAWN_SKIP_DECLARATIONS)
#ifdef __cplusplus
} // extern "C"
diff --git a/generator/templates/apicpp.cpp b/generator/templates/apicpp.cpp
index 5b61b2f..ad468d1 100644
--- a/generator/templates/apicpp.cpp
+++ b/generator/templates/apicpp.cpp
@@ -29,7 +29,6 @@
{% endfor %}
-
{% for type in by_category["structure"] %}
{% set CppType = as_cppType(type.name) %}
{% set CType = as_cType(type.name) %}