mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-25 21:21:21 +00:00
Merge branch 'ebassi/issue-5934' into 'main'
Lower the Python requirement Closes #5934 See merge request GNOME/gtk!6167
This commit is contained in:
commit
40707a6af0
@ -8,138 +8,123 @@ name = os.path.splitext(os.path.basename(sys.argv[1]))[0]
|
||||
var_name = "gsk_vulkan_" + name.replace('-', '_')
|
||||
struct_name = "GskVulkan" + name.title().replace('-', '') + "Instance"
|
||||
|
||||
lines = open (sys.argv[1]).readlines()
|
||||
matches = []
|
||||
with open(sys.argv[1]) as f:
|
||||
lines = f.readlines()
|
||||
matches = []
|
||||
|
||||
for line in lines:
|
||||
match = re.search("^layout\(location = ([0-9]+)\) in ([a-z0-9]+) ([a-zA-Z0-9]+);$", line)
|
||||
if not match:
|
||||
if re.search("layout.*\sin\s.*", line):
|
||||
raise Exception("Failed to parse file")
|
||||
continue;
|
||||
if not match.group(3).startswith('in'):
|
||||
raise Exception("Variable doesn't start with 'in'")
|
||||
matches.append({ 'name': ''.join('_' + char.lower() if char.isupper() else char for char in match.group(3))[3:],
|
||||
'location': int(match.group(1)),
|
||||
'type': match.group(2) })
|
||||
for line in lines:
|
||||
match = re.search(r"^layout\(location = ([0-9]+)\) in ([a-z0-9]+) ([a-zA-Z0-9]+);$", line)
|
||||
if not match:
|
||||
if re.search(r"layout.*\sin\s.*", line):
|
||||
raise Exception("Failed to parse file")
|
||||
continue
|
||||
if not match.group(3).startswith('in'):
|
||||
raise Exception("Variable doesn't start with 'in'")
|
||||
matches.append({'name': ''.join('_' + char.lower() if char.isupper() else char for char in match.group(3))[3:],
|
||||
'location': int(match.group(1)),
|
||||
'type': match.group(2)})
|
||||
|
||||
print(
|
||||
f'''#pragma once
|
||||
print(f'''/* This file is auto-generated; any change will not be preserved */
|
||||
#pragma once
|
||||
|
||||
typedef struct _{struct_name} {struct_name};
|
||||
|
||||
struct _{struct_name} {{''')
|
||||
|
||||
expected = 0;
|
||||
expected = 0
|
||||
for match in matches:
|
||||
if expected != int(match['location']):
|
||||
raise Exception(f"Should be layout location {expected} but is {match['location']}")
|
||||
raise Exception(f"Should be layout location {expected} but is {match['location']}") # noqa
|
||||
|
||||
match match['type']:
|
||||
case "float":
|
||||
print(f" float {match['name']};")
|
||||
expected += 1
|
||||
case "int":
|
||||
print(f" gint32 {match['name']};")
|
||||
expected += 1
|
||||
case "uint":
|
||||
print(f" guint32 {match['name']};")
|
||||
expected += 1
|
||||
case "uvec2":
|
||||
print(f" guint32 {match['name']}[2];")
|
||||
expected += 1
|
||||
case "vec2":
|
||||
print(f" float {match['name']}[2];")
|
||||
expected += 1
|
||||
case "vec4":
|
||||
print(f" float {match['name']}[4];")
|
||||
expected += 1
|
||||
case "mat3x4":
|
||||
print(f" float {match['name']}[12];")
|
||||
expected += 3
|
||||
case "mat4":
|
||||
print(f" float {match['name']}[16];")
|
||||
expected += 4
|
||||
case _:
|
||||
raise Exception(f"Don't know what a {match['type']} is")
|
||||
if match['type'] == 'float':
|
||||
print(f" float {match['name']};")
|
||||
expected += 1
|
||||
elif match['type'] == 'int':
|
||||
print(f" gint32 {match['name']};")
|
||||
expected += 1
|
||||
elif match['type'] == 'uint':
|
||||
print(f" guint32 {match['name']};")
|
||||
expected += 1
|
||||
elif match['type'] == 'uvec2':
|
||||
print(f" guint32 {match['name']}[2];")
|
||||
expected += 1
|
||||
elif match['type'] == 'vec2':
|
||||
print(f" float {match['name']}[2];")
|
||||
expected += 1
|
||||
elif match['type'] == 'vec4':
|
||||
print(f" float {match['name']}[4];")
|
||||
expected += 1
|
||||
elif match['type'] == 'mat3x4':
|
||||
print(f" float {match['name']}[12];")
|
||||
expected += 3
|
||||
elif match['type'] == 'mat4':
|
||||
print(f" float {match['name']}[16];")
|
||||
expected += 4
|
||||
else:
|
||||
raise Exception(f"Don't know what a {match['type']} is")
|
||||
|
||||
print(
|
||||
'''};
|
||||
print('''};
|
||||
''')
|
||||
|
||||
print(
|
||||
f'''static const VkPipelineVertexInputStateCreateInfo {var_name}_info = {{
|
||||
print(f'''static const VkPipelineVertexInputStateCreateInfo {var_name}_info = {{
|
||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
|
||||
.vertexBindingDescriptionCount = 1,
|
||||
.pVertexBindingDescriptions = (VkVertexInputBindingDescription[1]) {{
|
||||
{{
|
||||
.binding = 0,
|
||||
.stride = sizeof ({struct_name}),
|
||||
.inputRate = VK_VERTEX_INPUT_RATE_INSTANCE
|
||||
.binding = 0,
|
||||
.stride = sizeof ({struct_name}),
|
||||
.inputRate = VK_VERTEX_INPUT_RATE_INSTANCE
|
||||
}}
|
||||
}},
|
||||
.vertexAttributeDescriptionCount = {expected},
|
||||
.pVertexAttributeDescriptions = (VkVertexInputAttributeDescription[{expected}]) {{''')
|
||||
|
||||
for match in matches:
|
||||
match match['type']:
|
||||
case "float":
|
||||
print(
|
||||
f''' {{
|
||||
if match['type'] == 'float':
|
||||
print(f''' {{
|
||||
.location = {match['location']},
|
||||
.binding = 0,
|
||||
.format = VK_FORMAT_R32_SFLOAT,
|
||||
.offset = G_STRUCT_OFFSET({struct_name}, {match['name']}),
|
||||
}},''')
|
||||
|
||||
case "int":
|
||||
print(
|
||||
f''' {{
|
||||
elif match['type'] == 'int':
|
||||
print(f''' {{
|
||||
.location = {match['location']},
|
||||
.binding = 0,
|
||||
.format = VK_FORMAT_R32_SINT,
|
||||
.offset = G_STRUCT_OFFSET({struct_name}, {match['name']}),
|
||||
}},''')
|
||||
|
||||
case "uint":
|
||||
print(
|
||||
f''' {{
|
||||
elif match['type'] == 'uint':
|
||||
print(f''' {{
|
||||
.location = {match['location']},
|
||||
.binding = 0,
|
||||
.format = VK_FORMAT_R32_UINT,
|
||||
.offset = G_STRUCT_OFFSET({struct_name}, {match['name']}),
|
||||
}},''')
|
||||
|
||||
case "uvec2":
|
||||
print(
|
||||
f''' {{
|
||||
elif match['type'] == 'uvec2':
|
||||
print(f''' {{
|
||||
.location = {match['location']},
|
||||
.binding = 0,
|
||||
.format = VK_FORMAT_R32G32_UINT,
|
||||
.offset = G_STRUCT_OFFSET({struct_name}, {match['name']}),
|
||||
}},''')
|
||||
|
||||
case "vec2":
|
||||
print(
|
||||
f''' {{
|
||||
elif match['type'] == 'vec2':
|
||||
print(f''' {{
|
||||
.location = {match['location']},
|
||||
.binding = 0,
|
||||
.format = VK_FORMAT_R32G32_SFLOAT,
|
||||
.offset = G_STRUCT_OFFSET({struct_name}, {match['name']}),
|
||||
}},''')
|
||||
|
||||
case "vec4":
|
||||
print(
|
||||
f''' {{
|
||||
elif match['type'] == 'vec4':
|
||||
print(f''' {{
|
||||
.location = {match['location']},
|
||||
.binding = 0,
|
||||
.format = VK_FORMAT_R32G32B32A32_SFLOAT,
|
||||
.offset = G_STRUCT_OFFSET({struct_name}, {match['name']}),
|
||||
}},''')
|
||||
|
||||
case "mat3x4":
|
||||
print(
|
||||
f''' {{
|
||||
elif match['type'] == 'mat3x4':
|
||||
print(f''' {{
|
||||
.location = {match['location']},
|
||||
.binding = 0,
|
||||
.format = VK_FORMAT_R32G32B32A32_SFLOAT,
|
||||
@ -157,10 +142,8 @@ f''' {{
|
||||
.format = VK_FORMAT_R32G32B32A32_SFLOAT,
|
||||
.offset = G_STRUCT_OFFSET({struct_name}, {match['name']}) + sizeof (float) * 8,
|
||||
}},''')
|
||||
|
||||
case "mat4":
|
||||
print(
|
||||
f''' {{
|
||||
elif match['type'] == 'mat4':
|
||||
print(f''' {{
|
||||
.location = {match['location']},
|
||||
.binding = 0,
|
||||
.format = VK_FORMAT_R32G32B32A32_SFLOAT,
|
||||
@ -184,9 +167,8 @@ f''' {{
|
||||
.format = VK_FORMAT_R32G32B32A32_SFLOAT,
|
||||
.offset = G_STRUCT_OFFSET({struct_name}, {match['name']}) + sizeof (float) * 12,
|
||||
}},''')
|
||||
|
||||
case _:
|
||||
raise Exception(f"Don't know what a {match['type']} is")
|
||||
else:
|
||||
raise Exception(f"Don't know what a {match['type']} is")
|
||||
|
||||
print(" },")
|
||||
print("};")
|
||||
|
Loading…
Reference in New Issue
Block a user