From ec66796671db9f6e29548bf808eaa161f1a0d1b1 Mon Sep 17 00:00:00 2001 From: tigro Date: Tue, 16 Jan 2024 16:56:15 +0300 Subject: [PATCH] Fix build on vulkan-headers 1.3.241 --- ...-Fix-build-on-vulkan-headers-1.3.241.patch | 136 ++++++++++++++++++ SPECS/libplacebo.spec | 6 +- 2 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 SOURCES/0001-Fix-build-on-vulkan-headers-1.3.241.patch diff --git a/SOURCES/0001-Fix-build-on-vulkan-headers-1.3.241.patch b/SOURCES/0001-Fix-build-on-vulkan-headers-1.3.241.patch new file mode 100644 index 0000000..b363c08 --- /dev/null +++ b/SOURCES/0001-Fix-build-on-vulkan-headers-1.3.241.patch @@ -0,0 +1,136 @@ +From 9b57dbc097d94131266ffea2bfb9101418613aa3 Mon Sep 17 00:00:00 2001 +From: tigro +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 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 + diff --git a/SPECS/libplacebo.spec b/SPECS/libplacebo.spec index 642e62d..a0cddbe 100644 --- a/SPECS/libplacebo.spec +++ b/SPECS/libplacebo.spec @@ -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 - 4.208.0-1.inferit +- Fix build on vulkan-headers 1.3.241 + * Tue Jul 18 2023 Arkady L. Shane - 4.208.0-1 - Rebuilt for MSPSphere 9.2