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 <cwallez@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
This commit is contained in:
Corentin Wallez 2023-05-23 08:16:55 +00:00 committed by Dawn LUCI CQ
parent 47245bc33f
commit 8d45d44905
1 changed files with 67 additions and 58 deletions

View File

@ -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 <stdint.h>
#include <stddef.h>
#include <stdbool.h>
{% 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 %}
{% if member.optional %}
{{API}}_NULLABLE {{as_annotated_cType(member)}};
{% else %}
{{as_annotated_cType(member)}};
{%- if member.optional %} // nullable{% endif %}{{""}}
{% 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"