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) %}