Fix build on vulkan-headers 1.3.241

i9 changed/i9/libplacebo-4.208.0-1.el9.inferit
Arkady L. Shane 1 year ago
parent 2dcf3b44a7
commit ec66796671
Signed by: tigro
GPG Key ID: 1EC08A25C9DB2503

@ -0,0 +1,136 @@
From 9b57dbc097d94131266ffea2bfb9101418613aa3 Mon Sep 17 00:00:00 2001
From: tigro <tigro@msvsphere-os.ru>
Date: Tue, 16 Jan 2024 16:53:19 +0300
Subject: [PATCH] Fix build on vulkan-headers 1.3.241
---
src/vulkan/utils_gen.py | 86 ++++++++++++++++++++++++++---------------
1 file changed, 55 insertions(+), 31 deletions(-)
diff --git a/src/vulkan/utils_gen.py b/src/vulkan/utils_gen.py
index fab43af..39ad4f0 100644
--- a/src/vulkan/utils_gen.py
+++ b/src/vulkan/utils_gen.py
@@ -127,56 +127,80 @@ class Obj(object):
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
-def findall_enum(registry, name):
- for e in registry.iterfind('enums[@name="{0}"]/enum'.format(name)):
- if not 'alias' in e.attrib:
- yield e
- for e in registry.iterfind('.//enum[@extends="{0}"]'.format(name)):
- # ext 289 is a non-existing extension that defines some names for
- # proprietary downstream consumers, causes problems unless excluded
- if e.attrib.get('extnumber', '0') == '289':
- continue
- # some other extensions contain reserved identifiers that generally
- # translate to compile failures
- if 'RESERVED' in e.attrib['name']:
- continue
- if not 'alias' in e.attrib:
- yield e
+class VkXML(ET.ElementTree):
+ def blacklist_block(self, req):
+ for t in req.iterfind('type'):
+ self.blacklist_types.add(t.attrib['name'])
+ for e in req.iterfind('enum'):
+ self.blacklist_enums.add(e.attrib['name'])
+
+ def __init__(self, *args, **kwargs):
+
+ super().__init__(*args, **kwargs)
+ self.blacklist_types = set()
+ self.blacklist_enums = set()
+
+ for f in self.iterfind('feature'):
+ # Feature block for non-Vulkan API
+ if not 'vulkan' in f.attrib['api'].split(','):
+ for r in f.iterfind('require'):
+ self.blacklist_block(r)
+
+ for e in self.iterfind('extensions/extension'):
+ # Entire extension is unsupported on vulkan or platform-specifid
+ if not 'vulkan' in e.attrib['supported'].split(',') or 'platform' in e.attrib:
+ for r in e.iterfind('require'):
+ self.blacklist_block(r)
+ continue
+
+ # Only individual <require> blocks are API-specific
+ for r in e.iterfind('require[@api]'):
+ if not 'vulkan' in r.attrib['api'].split(','):
+ self.blacklist_block(r)
+
+ def findall_enum(self, name):
+ for e in self.iterfind('enums[@name="{0}"]/enum'.format(name)):
+ if not 'alias' in e.attrib:
+ if not e.attrib['name'] in self.blacklist_enums:
+ yield e
+ for e in self.iterfind('.//enum[@extends="{0}"]'.format(name)):
+ if not 'alias' in e.attrib:
+ if not e.attrib['name'] in self.blacklist_enums:
+ yield e
+
+ def findall_type(self, category):
+ for t in self.iterfind('types/type[@category="{0}"]'.format(category)):
+ name = t.attrib.get('name') or t.find('name').text
+ if name in self.blacklist_types:
+ continue
+ yield t
+
def get_vkenum(registry, enum):
- for e in findall_enum(registry, enum):
+ for e in registry.findall_enum(enum):
yield e.attrib['name']
def get_vkobjects(registry):
- for t in registry.iterfind('types/type[@category="handle"]'):
+ for t in registry.findall_type('handle'):
if 'objtypeenum' in t.attrib:
yield Obj(enum = t.attrib['objtypeenum'],
name = t.find('name').text)
def get_vkstructs(registry):
- for e in registry.iterfind('types/type[@category="struct"]'):
- # Strings for platform-specific crap we want to blacklist as they will
- # most likely cause build failures
- blacklist_strs = [
- 'ANDROID', 'Surface', 'Win32', 'D3D12', 'GGP', 'FUCHSIA', 'Metal',
- ]
-
- if any([ str in e.attrib['name'] for str in blacklist_strs ]):
- continue
-
+ for t in registry.findall_type('struct'):
stype = None
- for m in e.iterfind('member'):
+ for m in t.iterfind('member'):
if m.find('name').text == 'sType':
stype = m
break
if stype and 'values' in stype.attrib:
yield Obj(stype = stype.attrib['values'],
- name = e.attrib['name'])
+ name = t.attrib['name'])
def get_vkaccess(registry):
access = Obj(read = 0, write = 0)
- for e in findall_enum(registry, 'VkAccessFlagBits'):
+ for e in registry.findall_enum('VkAccessFlagBits'):
if '_READ_' in e.attrib['name']:
access.read |= 1 << int(e.attrib['bitpos'])
if '_WRITE_' in e.attrib['name']:
@@ -212,7 +236,7 @@ if __name__ == '__main__':
if not xmlfile or xmlfile == '':
xmlfile = find_registry_xml(datadir)
- registry = ET.parse(xmlfile)
+ registry = VkXML(ET.parse(xmlfile))
with open(outfile, 'w') as f:
f.write(TEMPLATE.render(
vkresults = get_vkenum(registry, 'VkResult'),
--
2.43.0

@ -2,13 +2,14 @@
Name: libplacebo
Version: 4.208.0
Release: 1%{?dist}
Release: 1%{?dist}.inferit
Summary: Reusable library for GPU-accelerated video/image rendering primitives
License: LGPLv2+
URL: https://github.com/haasn/libplacebo
Source0: %{url}/archive/v%{version}%{?prerelease}/%{name}-%{version}%{?prerelease}.tar.gz
Patch0: 0001-move-resources-declaration-to-c-file.patch
Patch1: 0001-Fix-build-on-vulkan-headers-1.3.241.patch
BuildRequires: gcc
BuildRequires: gcc-c++
@ -76,6 +77,9 @@ developing applications that use %{name}.
%changelog
* Tue Jan 16 2024 Arkady L. Shane <ashejn@msvsphere.ru> - 4.208.0-1.inferit
- Fix build on vulkan-headers 1.3.241
* Tue Jul 18 2023 Arkady L. Shane <ashejn@msvsphere.ru> - 4.208.0-1
- Rebuilt for MSPSphere 9.2

Loading…
Cancel
Save