Skip to content

Commit

Permalink
webgpu.h: Add overridable (default empty) attributes to all types
Browse files Browse the repository at this point in the history
See webgpu-native/webgpu-headers#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 <[email protected]>
Kokoro: Kokoro <[email protected]>
Reviewed-by: Austin Eng <[email protected]>
Reviewed-by: Kai Ninomiya <[email protected]>
  • Loading branch information
Kangz authored and Dawn LUCI CQ committed May 23, 2023
1 parent 47245bc commit 8d45d44
Showing 1 changed file with 67 additions and 58 deletions.
125 changes: 67 additions & 58 deletions generator/templates/api.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 %}
Expand All @@ -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"] %}
Expand All @@ -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 %}
Expand All @@ -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"
Expand Down

0 comments on commit 8d45d44

Please sign in to comment.