From 8d45d449058ac05b1ff46ca08a914e9298d73432 Mon Sep 17 00:00:00 2001 From: Corentin Wallez Date: Tue, 23 May 2023 08:16:55 +0000 Subject: [PATCH] webgpu.h: Add overridable (default empty) attributes to all types See https://github.com/webgpu-native/webgpu-headers/issues/179 Also changes WGPU_NULLABLE instead of /* nullable */ and make a couple formatting fixes. Bug: None Change-Id: Ieb4315cddd3c806144892221fba11888171f072f Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/133102 Commit-Queue: Corentin Wallez Kokoro: Kokoro Reviewed-by: Austin Eng Reviewed-by: Kai Ninomiya --- generator/templates/api.h | 125 ++++++++++++++++++++------------------ 1 file changed, 67 insertions(+), 58 deletions(-) diff --git a/generator/templates/api.h b/generator/templates/api.h index bf220e750c..baf0cc66f9 100644 --- a/generator/templates/api.h +++ b/generator/templates/api.h @@ -32,37 +32,53 @@ #ifndef {{metadata.api.upper()}}_H_ #define {{metadata.api.upper()}}_H_ -{% set c_prefix = metadata.c_prefix %} -#if defined({{c_prefix}}_SHARED_LIBRARY) +{% set API = metadata.c_prefix %} +#if defined({{API}}_SHARED_LIBRARY) # if defined(_WIN32) -# if defined({{c_prefix}}_IMPLEMENTATION) -# define {{c_prefix}}_EXPORT __declspec(dllexport) +# if defined({{API}}_IMPLEMENTATION) +# define {{API}}_EXPORT __declspec(dllexport) # else -# define {{c_prefix}}_EXPORT __declspec(dllimport) +# define {{API}}_EXPORT __declspec(dllimport) # endif # else // defined(_WIN32) -# if defined({{c_prefix}}_IMPLEMENTATION) -# define {{c_prefix}}_EXPORT __attribute__((visibility("default"))) +# if defined({{API}}_IMPLEMENTATION) +# define {{API}}_EXPORT __attribute__((visibility("default"))) # else -# define {{c_prefix}}_EXPORT +# define {{API}}_EXPORT # endif # endif // defined(_WIN32) -#else // defined({{c_prefix}}_SHARED_LIBRARY) -# define {{c_prefix}}_EXPORT -#endif // defined({{c_prefix}}_SHARED_LIBRARY) +#else // defined({{API}}_SHARED_LIBRARY) +# define {{API}}_EXPORT +#endif // defined({{API}}_SHARED_LIBRARY) + +#if !defined({{API}}_OBJECT_ATTRIBUTE) +#define {{API}}_OBJECT_ATTRIBUTE +#endif +#if !defined({{API}}_ENUM_ATTRIBUTE) +#define {{API}}_ENUM_ATTRIBUTE +#endif +#if !defined({{API}}_STRUCTURE_ATTRIBUTE) +#define {{API}}_STRUCTURE_ATTRIBUTE +#endif +#if !defined({{API}}_FUNCTION_ATTRIBUTE) +#define {{API}}_FUNCTION_ATTRIBUTE +#endif +#if !defined({{API}}_NULLABLE) +#define {{API}}_NULLABLE +#endif #include #include #include {% for constant in by_category["constant"] %} - #define {{c_prefix}}_{{constant.name.SNAKE_CASE()}} {{constant.value}} + #define {{API}}_{{constant.name.SNAKE_CASE()}} {{constant.value}} {% endfor %} -typedef uint32_t {{c_prefix}}Flags; +typedef uint32_t {{API}}Flags; {% for type in by_category["object"] %} - typedef struct {{as_cType(type.name)}}Impl* {{as_cType(type.name)}}; + typedef struct {{as_cType(type.name)}}Impl* {{as_cType(type.name)}} {{API}}_OBJECT_ATTRIBUTE; {% endfor %} // Structure forward declarations @@ -76,34 +92,34 @@ typedef uint32_t {{c_prefix}}Flags; {{as_cEnum(type.name, value.name)}} = 0x{{format(value.value, "08X")}}, {% endfor %} {{as_cEnum(type.name, Name("force32"))}} = 0x7FFFFFFF - } {{as_cType(type.name)}}; + } {{as_cType(type.name)}} {{API}}_ENUM_ATTRIBUTE; {% if type.category == "bitmask" %} - typedef {{c_prefix}}Flags {{as_cType(type.name)}}Flags; + typedef {{API}}Flags {{as_cType(type.name)}}Flags {{API}}_ENUM_ATTRIBUTE; {% endif %} {% endfor -%} - {% for type in by_category["function pointer"] %} typedef {{as_cType(type.return_type.name)}} (*{{as_cType(type.name)}})( {%- if type.arguments == [] -%} void {%- else -%} {%- for arg in type.arguments -%} - {% if not loop.first %}, {% endif %}{% if arg.type.category == "structure" %}struct {% endif %}{{as_annotated_cType(arg)}} + {% if not loop.first %}, {% endif %} + {% if arg.type.category == "structure" %}struct {% endif %}{{as_annotated_cType(arg)}} {%- endfor -%} {%- endif -%} - ); + ) {{API}}_FUNCTION_ATTRIBUTE; {% endfor %} -typedef struct {{c_prefix}}ChainedStruct { - struct {{c_prefix}}ChainedStruct const * next; - {{c_prefix}}SType sType; -} {{c_prefix}}ChainedStruct; +typedef struct {{API}}ChainedStruct { + struct {{API}}ChainedStruct const * next; + {{API}}SType sType; +} {{API}}ChainedStruct {{API}}_STRUCTURE_ATTRIBUTE; -typedef struct {{c_prefix}}ChainedStructOut { - struct {{c_prefix}}ChainedStructOut * next; - {{c_prefix}}SType sType; -} {{c_prefix}}ChainedStructOut; +typedef struct {{API}}ChainedStructOut { + struct {{API}}ChainedStructOut * next; + {{API}}SType sType; +} {{API}}ChainedStructOut {{API}}_STRUCTURE_ATTRIBUTE; {% for type in by_category["structure"] %} {% for root in type.chain_roots %} @@ -113,16 +129,19 @@ typedef struct {{c_prefix}}ChainedStructOut { {% set Out = "Out" if type.output else "" %} {% set const = "const " if not type.output else "" %} {% if type.extensible %} - {{c_prefix}}ChainedStruct{{Out}} {{const}}* nextInChain; + {{API}}ChainedStruct{{Out}} {{const}}* nextInChain; {% endif %} {% if type.chained %} - {{c_prefix}}ChainedStruct{{Out}} chain; + {{API}}ChainedStruct{{Out}} chain; {% endif %} {% for member in type.members %} - {{as_annotated_cType(member)}}; - {%- if member.optional %} // nullable{% endif %}{{""}} + {% if member.optional %} + {{API}}_NULLABLE {{as_annotated_cType(member)}}; + {% else %} + {{as_annotated_cType(member)}}; + {% endif-%} {% endfor %} - } {{as_cType(type.name)}}; + } {{as_cType(type.name)}} {{API}}_STRUCTURE_ATTRIBUTE; {% endfor %} {% for typeDef in by_category["typedef"] %} @@ -135,26 +154,14 @@ typedef struct {{c_prefix}}ChainedStructOut { extern "C" { #endif -{% for type in by_category["function pointer"] %} - typedef {{as_cType(type.return_type.name)}} (*{{as_cType(type.name)}})( - {%- if type.arguments == [] -%} - void - {%- else -%} - {%- for arg in type.arguments -%} - {% if not loop.first %}, {% endif %}{{as_annotated_cType(arg)}} - {%- endfor -%} - {%- endif -%} - ); -{% endfor %} - -#if !defined({{c_prefix}}_SKIP_PROCS) +#if !defined({{API}}_SKIP_PROCS) {% for function in by_category["function"] %} typedef {{as_cType(function.return_type.name)}} (*{{as_cProc(None, function.name)}})( {%- for arg in function.arguments -%} {% if not loop.first %}, {% endif %}{{as_annotated_cType(arg)}} {%- endfor -%} - ); + ) {{API}}_FUNCTION_ATTRIBUTE; {% endfor %} {% for type in by_category["object"] if len(c_methods(type)) > 0 %} @@ -163,39 +170,41 @@ extern "C" { typedef {{as_cType(method.return_type.name)}} (*{{as_cProc(type.name, method.name)}})( {{-as_cType(type.name)}} {{as_varName(type.name)}} {%- for arg in method.arguments -%} - , {{as_annotated_cType(arg)}} - {%- if arg.optional %} /* nullable */{% endif %} + ,{{" "}} + {%- if arg.optional %}{{API}}_NULLABLE {% endif -%} + {{as_annotated_cType(arg)}} {%- endfor -%} - ); + ) {{API}}_FUNCTION_ATTRIBUTE; {% endfor %} {% endfor %} -#endif // !defined({{c_prefix}}_SKIP_PROCS) +#endif // !defined({{API}}_SKIP_PROCS) -#if !defined({{c_prefix}}_SKIP_DECLARATIONS) +#if !defined({{API}}_SKIP_DECLARATIONS) {% for function in by_category["function"] %} - {{c_prefix}}_EXPORT {{as_cType(function.return_type.name)}} {{as_cMethod(None, function.name)}}( + {{API}}_EXPORT {{as_cType(function.return_type.name)}} {{as_cMethod(None, function.name)}}( {%- for arg in function.arguments -%} {% if not loop.first %}, {% endif %}{{as_annotated_cType(arg)}} {%- endfor -%} - ); + ) {{API}}_FUNCTION_ATTRIBUTE; {% endfor %} {% for type in by_category["object"] if len(c_methods(type)) > 0 %} // Methods of {{type.name.CamelCase()}} {% for method in c_methods(type) %} - {{c_prefix}}_EXPORT {{as_cType(method.return_type.name)}} {{as_cMethod(type.name, method.name)}}( + {{API}}_EXPORT {{as_cType(method.return_type.name)}} {{as_cMethod(type.name, method.name)}}( {{-as_cType(type.name)}} {{as_varName(type.name)}} {%- for arg in method.arguments -%} - , {{as_annotated_cType(arg)}} - {%- if arg.optional %} /* nullable */{% endif %} + ,{{" "}} + {%- if arg.optional %}{{API}}_NULLABLE {% endif -%} + {{as_annotated_cType(arg)}} {%- endfor -%} - ); + ) {{API}}_FUNCTION_ATTRIBUTE; {% endfor %} {% endfor %} -#endif // !defined({{c_prefix}}_SKIP_DECLARATIONS) +#endif // !defined({{API}}_SKIP_DECLARATIONS) #ifdef __cplusplus } // extern "C"