Reorganize WireCmd.cpp. No functional changes.
- Puts all the macros first, then all the instantiation of macros for more clarity of what code actually gets generated. - Move ErrorObjectProvider and friend in the anonymous namespace. - Give a name to a boolean parameter. Bug: dawn:1186 Change-Id: I2662ba16bfff23b53342d352d9b7fbd62aabb8c3 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/68940 Commit-Queue: Loko Kung <lokokung@google.com> Auto-Submit: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org> Reviewed-by: Loko Kung <lokokung@google.com>
This commit is contained in:
parent
610f184fd9
commit
1f05a8540a
|
@ -92,15 +92,6 @@
|
|||
{%- endif -%}
|
||||
{% endmacro %}
|
||||
|
||||
namespace {
|
||||
|
||||
struct WGPUChainedStructTransfer {
|
||||
WGPUSType sType;
|
||||
bool hasNext;
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
//* The main [de]serialization macro
|
||||
//* Methods are very similar to structures that have one member corresponding to each arguments.
|
||||
//* This macro takes advantage of the similarity to output [de]serialization code for a record
|
||||
|
@ -209,7 +200,9 @@ namespace {
|
|||
|
||||
//* Serializes `record` into `transfer`, using `buffer` to get more space for pointed-to data
|
||||
//* and `provider` to serialize objects.
|
||||
DAWN_DECLARE_UNUSED WireResult {{Return}}{{name}}Serialize(const {{Return}}{{name}}{{Cmd}}& record, {{Return}}{{name}}Transfer* transfer,
|
||||
DAWN_DECLARE_UNUSED WireResult {{Return}}{{name}}Serialize(
|
||||
const {{Return}}{{name}}{{Cmd}}& record,
|
||||
{{Return}}{{name}}Transfer* transfer,
|
||||
SerializeBuffer* buffer
|
||||
{%- if record.may_have_dawn_object -%}
|
||||
, const ObjectIdProvider& provider
|
||||
|
@ -291,8 +284,11 @@ namespace {
|
|||
//* Deserializes `transfer` into `record` getting more serialized data from `buffer` and `size`
|
||||
//* if needed, using `allocator` to store pointed-to values and `resolver` to translate object
|
||||
//* Ids to actual objects.
|
||||
DAWN_DECLARE_UNUSED WireResult {{Return}}{{name}}Deserialize({{Return}}{{name}}{{Cmd}}* record, const volatile {{Return}}{{name}}Transfer* transfer,
|
||||
DeserializeBuffer* deserializeBuffer, DeserializeAllocator* allocator
|
||||
DAWN_DECLARE_UNUSED WireResult {{Return}}{{name}}Deserialize(
|
||||
{{Return}}{{name}}{{Cmd}}* record,
|
||||
const volatile {{Return}}{{name}}Transfer* transfer,
|
||||
DeserializeBuffer* deserializeBuffer,
|
||||
DeserializeAllocator* allocator
|
||||
{%- if record.may_have_dawn_object -%}
|
||||
, const ObjectIdResolver& resolver
|
||||
{%- endif -%}
|
||||
|
@ -453,81 +449,7 @@ namespace {
|
|||
}
|
||||
{% endmacro %}
|
||||
|
||||
namespace dawn_wire {
|
||||
|
||||
ObjectHandle::ObjectHandle() = default;
|
||||
ObjectHandle::ObjectHandle(ObjectId id, ObjectGeneration generation)
|
||||
: id(id), generation(generation) {
|
||||
}
|
||||
|
||||
ObjectHandle::ObjectHandle(const volatile ObjectHandle& rhs)
|
||||
: id(rhs.id), generation(rhs.generation) {
|
||||
}
|
||||
ObjectHandle& ObjectHandle::operator=(const volatile ObjectHandle& rhs) {
|
||||
id = rhs.id;
|
||||
generation = rhs.generation;
|
||||
return *this;
|
||||
}
|
||||
|
||||
ObjectHandle& ObjectHandle::AssignFrom(const ObjectHandle& rhs) {
|
||||
id = rhs.id;
|
||||
generation = rhs.generation;
|
||||
return *this;
|
||||
}
|
||||
ObjectHandle& ObjectHandle::AssignFrom(const volatile ObjectHandle& rhs) {
|
||||
id = rhs.id;
|
||||
generation = rhs.generation;
|
||||
return *this;
|
||||
}
|
||||
|
||||
namespace {
|
||||
// Allocates enough space from allocator to countain T[count] and return it in out.
|
||||
// Return FatalError if the allocator couldn't allocate the memory.
|
||||
// Always writes to |out| on success.
|
||||
template <typename T, typename N>
|
||||
WireResult GetSpace(DeserializeAllocator* allocator, N count, T** out) {
|
||||
constexpr size_t kMaxCountWithoutOverflows = std::numeric_limits<size_t>::max() / sizeof(T);
|
||||
if (count > kMaxCountWithoutOverflows) {
|
||||
return WireResult::FatalError;
|
||||
}
|
||||
|
||||
size_t totalSize = sizeof(T) * count;
|
||||
*out = static_cast<T*>(allocator->GetSpace(totalSize));
|
||||
if (*out == nullptr) {
|
||||
return WireResult::FatalError;
|
||||
}
|
||||
|
||||
return WireResult::Success;
|
||||
}
|
||||
|
||||
size_t GetChainedStructExtraRequiredSize(const WGPUChainedStruct* chainedStruct);
|
||||
DAWN_NO_DISCARD WireResult SerializeChainedStruct(const WGPUChainedStruct* chainedStruct,
|
||||
SerializeBuffer* buffer,
|
||||
const ObjectIdProvider& provider);
|
||||
WireResult DeserializeChainedStruct(const WGPUChainedStruct** outChainNext,
|
||||
DeserializeBuffer* deserializeBuffer,
|
||||
DeserializeAllocator* allocator,
|
||||
const ObjectIdResolver& resolver);
|
||||
|
||||
size_t GetChainedStructExtraRequiredSize(WGPUChainedStructOut* chainedStruct);
|
||||
DAWN_NO_DISCARD WireResult SerializeChainedStruct(WGPUChainedStructOut* chainedStruct,
|
||||
SerializeBuffer* buffer,
|
||||
const ObjectIdProvider& provider);
|
||||
WireResult DeserializeChainedStruct(WGPUChainedStructOut** outChainNext,
|
||||
DeserializeBuffer* deserializeBuffer,
|
||||
DeserializeAllocator* allocator,
|
||||
const ObjectIdResolver& resolver);
|
||||
|
||||
//* Output structure [de]serialization first because it is used by commands.
|
||||
{% for type in by_category["structure"] %}
|
||||
{% set name = as_cType(type.name) %}
|
||||
{% if type.name.CamelCase() not in client_side_structures %}
|
||||
{{write_record_serialization_helpers(type, name, type.members,
|
||||
is_cmd=False)}}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% macro make_chained_struct_serialization_helpers(out) %}
|
||||
{% macro make_chained_struct_serialization_helpers(out=None) %}
|
||||
{% set ChainedStructPtr = "WGPUChainedStructOut*" if out else "const WGPUChainedStruct*" %}
|
||||
{% set ChainedStruct = "WGPUChainedStructOut" if out else "WGPUChainedStruct" %}
|
||||
size_t GetChainedStructExtraRequiredSize({{ChainedStructPtr}} chainedStruct) {
|
||||
|
@ -679,14 +601,92 @@ namespace dawn_wire {
|
|||
}
|
||||
{% endmacro %}
|
||||
|
||||
{{ make_chained_struct_serialization_helpers(False) }}
|
||||
{{ make_chained_struct_serialization_helpers(True) }}
|
||||
namespace dawn_wire {
|
||||
|
||||
ObjectHandle::ObjectHandle() = default;
|
||||
ObjectHandle::ObjectHandle(ObjectId id, ObjectGeneration generation)
|
||||
: id(id), generation(generation) {
|
||||
}
|
||||
|
||||
ObjectHandle::ObjectHandle(const volatile ObjectHandle& rhs)
|
||||
: id(rhs.id), generation(rhs.generation) {
|
||||
}
|
||||
ObjectHandle& ObjectHandle::operator=(const volatile ObjectHandle& rhs) {
|
||||
id = rhs.id;
|
||||
generation = rhs.generation;
|
||||
return *this;
|
||||
}
|
||||
|
||||
ObjectHandle& ObjectHandle::AssignFrom(const ObjectHandle& rhs) {
|
||||
id = rhs.id;
|
||||
generation = rhs.generation;
|
||||
return *this;
|
||||
}
|
||||
ObjectHandle& ObjectHandle::AssignFrom(const volatile ObjectHandle& rhs) {
|
||||
id = rhs.id;
|
||||
generation = rhs.generation;
|
||||
return *this;
|
||||
}
|
||||
|
||||
namespace {
|
||||
// Allocates enough space from allocator to countain T[count] and return it in out.
|
||||
// Return FatalError if the allocator couldn't allocate the memory.
|
||||
// Always writes to |out| on success.
|
||||
template <typename T, typename N>
|
||||
WireResult GetSpace(DeserializeAllocator* allocator, N count, T** out) {
|
||||
constexpr size_t kMaxCountWithoutOverflows = std::numeric_limits<size_t>::max() / sizeof(T);
|
||||
if (count > kMaxCountWithoutOverflows) {
|
||||
return WireResult::FatalError;
|
||||
}
|
||||
|
||||
size_t totalSize = sizeof(T) * count;
|
||||
*out = static_cast<T*>(allocator->GetSpace(totalSize));
|
||||
if (*out == nullptr) {
|
||||
return WireResult::FatalError;
|
||||
}
|
||||
|
||||
return WireResult::Success;
|
||||
}
|
||||
|
||||
struct WGPUChainedStructTransfer {
|
||||
WGPUSType sType;
|
||||
bool hasNext;
|
||||
};
|
||||
|
||||
size_t GetChainedStructExtraRequiredSize(const WGPUChainedStruct* chainedStruct);
|
||||
DAWN_NO_DISCARD WireResult SerializeChainedStruct(const WGPUChainedStruct* chainedStruct,
|
||||
SerializeBuffer* buffer,
|
||||
const ObjectIdProvider& provider);
|
||||
WireResult DeserializeChainedStruct(const WGPUChainedStruct** outChainNext,
|
||||
DeserializeBuffer* deserializeBuffer,
|
||||
DeserializeAllocator* allocator,
|
||||
const ObjectIdResolver& resolver);
|
||||
|
||||
size_t GetChainedStructExtraRequiredSize(WGPUChainedStructOut* chainedStruct);
|
||||
DAWN_NO_DISCARD WireResult SerializeChainedStruct(WGPUChainedStructOut* chainedStruct,
|
||||
SerializeBuffer* buffer,
|
||||
const ObjectIdProvider& provider);
|
||||
WireResult DeserializeChainedStruct(WGPUChainedStructOut** outChainNext,
|
||||
DeserializeBuffer* deserializeBuffer,
|
||||
DeserializeAllocator* allocator,
|
||||
const ObjectIdResolver& resolver);
|
||||
|
||||
//* Output structure [de]serialization first because it is used by commands.
|
||||
{% for type in by_category["structure"] %}
|
||||
{% set name = as_cType(type.name) %}
|
||||
{% if type.name.CamelCase() not in client_side_structures %}
|
||||
{{write_record_serialization_helpers(type, name, type.members, is_cmd=False)}}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
{{ make_chained_struct_serialization_helpers(out=False) }}
|
||||
{{ make_chained_struct_serialization_helpers(out=True) }}
|
||||
|
||||
//* Output [de]serialization helpers for commands
|
||||
{% for command in cmd_records["command"] %}
|
||||
{% set name = command.name.CamelCase() %}
|
||||
{{write_record_serialization_helpers(command, name, command.members,
|
||||
is_cmd=True)}}
|
||||
{{write_record_serialization_helpers(command, name, command.members, is_cmd=True)}}
|
||||
{% endfor %}
|
||||
|
||||
//* Output [de]serialization helpers for return commands
|
||||
|
@ -695,15 +695,6 @@ namespace dawn_wire {
|
|||
{{write_record_serialization_helpers(command, name, command.members,
|
||||
is_cmd=True, is_return_command=True)}}
|
||||
{% endfor %}
|
||||
} // anonymous namespace
|
||||
|
||||
{% for command in cmd_records["command"] %}
|
||||
{{ write_command_serialization_methods(command, False) }}
|
||||
{% endfor %}
|
||||
|
||||
{% for command in cmd_records["return command"] %}
|
||||
{{ write_command_serialization_methods(command, True) }}
|
||||
{% endfor %}
|
||||
|
||||
// Implementation of ObjectIdResolver that always errors.
|
||||
// Used when the generator adds a provider argument because of a chained
|
||||
|
@ -735,6 +726,16 @@ namespace dawn_wire {
|
|||
{% endfor %}
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
{% for command in cmd_records["command"] %}
|
||||
{{ write_command_serialization_methods(command, False) }}
|
||||
{% endfor %}
|
||||
|
||||
{% for command in cmd_records["return command"] %}
|
||||
{{ write_command_serialization_methods(command, True) }}
|
||||
{% endfor %}
|
||||
|
||||
// Implementations of serialization/deserialization of WPGUDeviceProperties.
|
||||
size_t SerializedWGPUDevicePropertiesSize(const WGPUDeviceProperties* deviceProperties) {
|
||||
return sizeof(WGPUDeviceProperties) +
|
||||
|
|
Loading…
Reference in New Issue