Use a descriptor for PipelineLayout (#206)

Adds support for structures inside descriptors.
This commit is contained in:
Kai Ninomiya
2018-06-27 16:21:39 -07:00
committed by GitHub
parent a2f9277dac
commit f53f98bf86
46 changed files with 192 additions and 158 deletions

View File

@@ -155,8 +155,18 @@ def link_structure(struct, types):
def make_member(m):
return StructureMember(Name(m['name']), types[m['type']], m.get('annotation', 'value'))
# TODO(cwallez@chromium.org): Handle pointer members and their length
struct.members = [make_member(m) for m in struct.record['members']]
members = []
members_by_name = {}
for m in struct.record['members']:
member = make_member(m)
members.append(member)
members_by_name[member.name.canonical_case()] = member
struct.members = members
for (member, m) in zip(members, struct.record['members']):
# TODO(kainino@chromium.org): More robust pointer/length handling?
if 'length' in m:
member.length = members_by_name[m['length']]
def parse_json(json):
category_to_parser = {

View File

@@ -176,10 +176,10 @@
size_t memberLength = {{member_length(member, "record.")}};
auto memberBuffer = reinterpret_cast<{{member_transfer_type(member)}}*>(buffer);
buffer += memberLength * {{member_transfer_sizeof(member)}};
for (size_t i = 0; i < memberLength; ++i) {
{{serialize_member(member, "record." + memberName + "[i]", "memberBuffer[i]" )}}
}
buffer += memberLength * {{member_transfer_sizeof(member)}};
}
{% endfor %}
}