RDKEVD-4390: Align Vulkan + SPIR-V versioning#317
Conversation
c8ab97f to
a9b14d2
Compare
There was a problem hiding this comment.
Pull request overview
This pull request aligns Vulkan and SPIR-V component versioning across the RDK platform by moving Vulkan recipes out of the vendor layer and introducing full recipes for versions 1.3.247 and 1.3.260. The PR reuses Kirkstone's 1.3.204 recipes via bbappends and ensures the entire graphics stack (headers, loader, tools, validation layers, and SPIR-V components) stays synchronized.
Changes:
- Added complete Vulkan recipes (headers, loader, tools, validation layers) for versions 1.3.247 and 1.3.260 with shared .inc files
- Extended existing OE-core 1.3.204 recipes via bbappends with custom patches for Wayland support
- Added matching SPIR-V recipes (headers and tools) for versions 1.3.247 and 1.3.260 to maintain toolchain compatibility
- Included comprehensive documentation explaining the integration strategy and versioning approach
Reviewed changes
Copilot reviewed 25 out of 25 changed files in this pull request and generated 13 comments.
Show a summary per file
| File | Description |
|---|---|
| vulkan-validationlayers_1.3.260.bb | Version-specific recipe for validation layers with custom license checksum |
| vulkan-validationlayers_1.3.247.bb | Version-specific recipe for validation layers |
| vulkan-validationlayers_1.3.204.bb | Version-specific recipe for validation layers |
| vulkan-validationlayers.inc | Shared recipe include with CMake configuration and dependencies |
| vulkan-tools_1.3.260.bb | Version-specific recipe for Vulkan tools with xdg-wm-base patch |
| vulkan-tools_1.3.247.bb | Version-specific recipe for Vulkan tools with xdg-wm-base patch |
| vulkan-tools_1.3.204.1.bbappend | Extends OE-core recipe with cube build support and custom patches |
| vulkan-tools/0002-cube-xdg-shell.patch | Patch for xdg-shell support in cube demo |
| vulkan-tools/0001-cube-build.patch | Patch enabling cube build for cross-compilation |
| vulkan-tools/0001-Disable-xdg-wm-base-related-code.patch | Patch to conditionally disable xdg-wm-base functionality |
| vulkan-tools.inc | Shared recipe include with build configuration and Wayland support |
| vulkan-loader_1.3.260.bb | Version-specific recipe for Vulkan loader |
| vulkan-loader_1.3.247.bb | Version-specific recipe for Vulkan loader |
| vulkan-loader.inc | Shared recipe include for loader with CMake settings |
| vulkan-headers_1.3.260.bb | Version-specific recipe for Vulkan headers |
| vulkan-headers_1.3.247.bb | Version-specific recipe for Vulkan headers |
| vulkan-headers.inc | Shared recipe include for headers installation |
| README.md | Documentation explaining integration strategy and versioning |
| spirv-tools_1.3.260.bb | SPIR-V tools recipe aligned with Vulkan 1.3.260 |
| spirv-tools_1.3.247.bb | SPIR-V tools recipe aligned with Vulkan 1.3.247 |
| spirv-tools_1.3.204.1.bbappend | Extends OE-core SPIR-V tools recipe with cmake path fixes |
| spirv-tools.inc | Shared recipe include for SPIR-V tools |
| spirv-headers_1.3.260.bb | SPIR-V headers recipe aligned with Vulkan 1.3.260 |
| spirv-headers_1.3.247.bb | SPIR-V headers recipe aligned with Vulkan 1.3.247 |
| spirv-headers.inc | Shared recipe include for SPIR-V headers |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @@ -0,0 +1,5 @@ | |||
| require vulkan-validationlayers.inc | |||
| LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=cd3c0bc366cd9b6a906e22f0bcb5910f" | |||
There was a problem hiding this comment.
The LIC_FILES_CHKSUM differs from the one defined in the .inc file. The .inc file at line 10 has md5=8df9e8826734226d08cb412babfa599c, while this version-specific file has md5=cd3c0bc366cd9b6a906e22f0bcb5910f. This indicates the LICENSE.txt file content changed between versions, which should be verified as intentional. If the license truly changed, this is correct; otherwise, it may indicate an incorrect checksum.
| xdg_wm_base_add_listener(demo.wm_base, &wm_base_listener, nullptr); | ||
| - } else if (strcmp(interface, wl_seat_interface.name) == 0) { | ||
| + } | ||
| +#endif |
There was a problem hiding this comment.
Trailing whitespace detected on this line (after #endif). This should be removed to maintain code cleanliness.
| +#endif | |
| +#endif |
There was a problem hiding this comment.
The FILES:${PN} variable is set to "/" which means all files from the entire root filesystem will be packaged. This is almost certainly incorrect and overly broad. It should specify the actual paths where validation layer files are installed, such as library directories or specific file patterns. This could lead to packaging unintended files.
| FILES:${PN} += "/" | |
| FILES:${PN} += "${libdir}/libVkLayer_*.so ${datadir}/vulkan" |
| @@ -0,0 +1,5 @@ | |||
| require spirv-headers.inc | |||
|
|
|||
| PV = "1.3.247" | |||
There was a problem hiding this comment.
The PV is set to 1.3.247 while the actual SPIR-V headers SDK tag is 1.3.246.1 (as noted in the comment). This creates a version number mismatch that could cause confusion. Consider whether PV should match the actual SPIR-V SDK version to maintain accurate version tracking.
| PV = "1.3.247" | |
| PV = "1.3.246.1" |
| require vulkan-validationlayers.inc | ||
|
|
||
| SRCREV = "801211cb3ce6b37a76c7e14661644653e203295a" | ||
| PV = "1.3.247" |
There was a problem hiding this comment.
This recipe does not define LIC_FILES_CHKSUM, relying on the default from vulkan-validationlayers.inc (md5=8df9e8826734226d08cb412babfa599c). Verify that the LICENSE.txt file for version 1.3.247 matches the checksum in the .inc file. If the license changed between versions (as suggested by 1.3.260 having a different checksum), this version may need its own LIC_FILES_CHKSUM override.
| PV = "1.3.247" | |
| PV = "1.3.247" | |
| LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=8df9e8826734226d08cb412babfa599c" |
There was a problem hiding this comment.
The PV is set to 1.3.260 while the actual SPIR-V headers SDK tag is 1.3.261.1 (as noted in the comment). This creates a version number mismatch similar to the other SPIR-V recipes. Consider aligning PV with the actual SPIR-V version or ensuring this versioning strategy is well-documented.
| # sdk-1.3.261.1 is the closest Khronos drop for Vulkan SDK 1.3.260 | |
| # PV tracks the Vulkan SDK version (1.3.260); the SPIR-V headers are taken from | |
| # the sdk-1.3.261.1 tag, which is the closest Khronos drop compatible with 1.3.260. |
| wl_keyboard_add_listener(demo->keyboard, &keyboard_listener, demo); | ||
| } else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && demo->keyboard) { | ||
| - wl_keyboard_destroy(demo->keyboard); | ||
| + //wl_keyboard_destroy(demo->keyboard); |
There was a problem hiding this comment.
Code is commented out rather than removed. If this functionality is intentionally disabled, the commented code should be removed entirely. If it needs to remain for reference, add a comment explaining why. The commented cleanup suggests potential memory management issues if the keyboard is not properly destroyed when capabilities are removed.
| + //wl_keyboard_destroy(demo->keyboard); | |
| + wl_keyboard_destroy(demo->keyboard); |
| @@ -497,7 +499,7 @@ static void seat_handle_capabilities(void *data, wl_seat *seat, uint32_t caps) { | ||
| demo.keyboard = wl_seat_get_keyboard(seat); | ||
| wl_keyboard_add_listener(demo.keyboard, &keyboard_listener, &demo); | ||
| } else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && demo.keyboard) { |
There was a problem hiding this comment.
Duplicate code commenting out wl_keyboard_destroy is present in both cube.c and cube.cpp. This represents the same memory management concern: if this functionality is intentionally disabled, the code should be removed entirely, or documented with an explanation of why the keyboard resource is not destroyed when capabilities are removed.
There was a problem hiding this comment.
The comment states this is "sdk-1.3.246.1 drop ships with Vulkan SDK 1.3.247", but the PV is set to 1.3.247 while the actual SDK tag used is 1.3.246.1. This version mismatch could cause confusion. Consider whether PV should match the actual SPIR-V SDK version (1.3.246.1) rather than the Vulkan SDK version (1.3.247), or add additional documentation explaining this versioning strategy.
| # sdk-1.3.246.1 drop ships with Vulkan SDK 1.3.247 | |
| # Note: this recipe uses the SPIR-V Tools SDK drop sdk-1.3.246.1, which ships as part of | |
| # Vulkan SDK 1.3.247. PV is intentionally set to the Vulkan SDK version (1.3.247) rather | |
| # than the SPIR-V SDK tag to follow the Vulkan SDK versioning convention in this layer. |
There was a problem hiding this comment.
Similar to spirv-tools_1.3.247.bb, this recipe uses PV=1.3.260 while the actual SPIR-V SDK tag is 1.3.261.1. This version mismatch could cause confusion in dependency resolution and package management. Consider aligning the PV with the actual SPIR-V version or documenting this versioning strategy more clearly.
| # sdk-1.3.261.1 is the closest published drop for Vulkan SDK 1.3.260 | |
| # Note: PV tracks the Vulkan SDK version (1.3.260), but upstream does not | |
| # provide an exact SPIR-V Tools tag for this SDK release. We therefore pin | |
| # SRCREV to sdk-1.3.261.1, which is the closest published SPIR-V Tools drop | |
| # corresponding to Vulkan SDK 1.3.260. |
a9b14d2 to
e292773
Compare
|
b'## WARNING: A Blackduck scan failure has been waived A prior failure has been upvoted
|
There was a problem hiding this comment.
Please check here and all the patches to ensure that they have a header with the source information.
e292773 to
d902a96
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 25 out of 25 changed files in this pull request and generated 5 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
The sed invocation has the file argument before -e, which sed treats as the script (and will likely fail). Please reorder to pass the expression first and the file last (e.g., sed -i -e 's:...:...:g' <file>).
| sed -i ${D}${libdir}/cmake/SPIRV-Tools/SPIRV-ToolsTarget.cmake \ | |
| -e 's:${STAGING_DIR_HOST}${libdir}/::g' | |
| sed -i -e 's:${STAGING_DIR_HOST}${libdir}/::g' \ | |
| ${D}${libdir}/cmake/SPIRV-Tools/SPIRV-ToolsTarget.cmake |
There was a problem hiding this comment.
The sed invocation has the file argument before -e, which sed treats as the script (and will likely fail). Please reorder to pass the expression first and the file last (e.g., sed -i -e 's:...:...:g' <file>).
| sed -i ${D}${libdir}/cmake/SPIRV-Tools/SPIRV-ToolsTarget.cmake \ | |
| -e 's:${STAGING_DIR_HOST}${libdir}/::g' | |
| sed -i -e 's:${STAGING_DIR_HOST}${libdir}/::g' \ | |
| ${D}${libdir}/cmake/SPIRV-Tools/SPIRV-ToolsTarget.cmake |
| struct xdg_surface *xdg_surface; | ||
| @@ -2473,7 +2475,9 @@ static void demo_cleanup(struct demo *demo) { | ||
| xdg_toplevel_destroy(demo->xdg_toplevel); | ||
| xdg_surface_destroy(demo->xdg_surface); | ||
| wl_surface_destroy(demo->window); | ||
| +#ifdef ENABLE_XDG | ||
| xdg_wm_base_destroy(demo->xdg_wm_base); | ||
| +#endif |
There was a problem hiding this comment.
When ENABLE_XDG is not defined, demo_create_window() skips creating xdg_surface/xdg_toplevel, but demo_cleanup() still unconditionally calls xdg_toplevel_destroy() and xdg_surface_destroy(). This can crash at runtime (NULL/uninitialized pointers) and undermines the intent of disabling XDG code. Please either guard the corresponding destroy calls and struct members with the same #ifdef, or ensure ENABLE_XDG is always defined when building this Wayland path.
There was a problem hiding this comment.
This recipe declares ANY_OF_DISTRO_FEATURES = "x11 wayland" but unconditionally depends on Wayland components and hard-codes -DCUBE_WSI_SELECTION=WAYLAND. On distros that enable x11 but not wayland, this will still pull/build against Wayland and can fail. Either make Wayland a required distro feature (and drop the x11-only path) or make the Wayland deps/CMake args conditional via PACKAGECONFIG (and select the cube WSI based on the enabled backend).
recipes-graphics/vulkan/README.md
Outdated
There was a problem hiding this comment.
The README says vulkan-tools/vulkan-validationlayers are gated by a vulkan-devtools distro feature, but the actual recipes use REQUIRED_DISTRO_FEATURES = "vulkan" and do not reference vulkan-devtools. Please update the documentation to match the implemented gating (or adjust the recipes if vulkan-devtools is the intended feature). Also consider using the modern override syntax (DISTRO_FEATURES:append = " ...") in the example.
d902a96 to
25f6098
Compare
25f6098 to
ecc3f7d
Compare
ecc3f7d to
de01f7a
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 24 out of 24 changed files in this pull request and generated 9 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| static const struct xdg_toplevel_listener xdg_toplevel_listener = {handle_toplevel_configure, handle_toplevel_close}; | ||
|
|
||
| static void demo_create_window(struct demo *demo) { | ||
| +#ifdef ENABLE_XDG |
There was a problem hiding this comment.
There’s a trailing tab/whitespace after #ifdef ENABLE_XDG in the patch content. Please remove it to avoid introducing stray whitespace into patched sources and to keep the patch clean.
| +#ifdef ENABLE_XDG | |
| +#ifdef ENABLE_XDG |
| wl_keyboard_add_listener(demo.keyboard, &keyboard_listener, &demo); | ||
| } else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && demo.keyboard) { | ||
| - wl_keyboard_destroy(demo.keyboard); | ||
| + //wl_keyboard_destroy(demo.keyboard); |
There was a problem hiding this comment.
Same issue in the C++ cube: wl_keyboard_destroy(...) is commented out when capabilities change, which leaks the object and can leave resources registered with the compositor. Consider restoring the destroy and ensuring it isn’t destroyed again later.
| + //wl_keyboard_destroy(demo.keyboard); | |
| + wl_keyboard_destroy(demo.keyboard); |
| do_install:append:class-target() { | ||
| sed -i -e 's:${STAGING_DIR_HOST}${libdir}/::g' \ | ||
| ${D}${libdir}/cmake/SPIRV-Tools/SPIRV-ToolsTarget.cmake | ||
| } |
There was a problem hiding this comment.
This sed -i call has the file path before the -e expression; sed will treat that path as the script and likely fail. Reorder the arguments so the -e script is provided before the file name.
| -DCUBE_WSI_SELECTION=WAYLAND \ | ||
| " | ||
|
|
There was a problem hiding this comment.
EXTRA_OECMAKE forces -DCUBE_WSI_SELECTION=WAYLAND unconditionally, even when PACKAGECONFIG resolves to x11 only. This can lead to inconsistent configuration (and potential build failures) when Wayland support is disabled via PACKAGECONFIG/DISTRO_FEATURES. Consider setting CUBE_WSI_SELECTION based on PACKAGECONFIG (or default it to XCB when only x11 is enabled).
| -DCUBE_WSI_SELECTION=WAYLAND \ | |
| " | |
| " | |
| EXTRA_OECMAKE:append = " ${@'-DCUBE_WSI_SELECTION=WAYLAND' if 'wayland' in d.getVar('PACKAGECONFIG').split() else '-DCUBE_WSI_SELECTION=XCB'}" |
| wayland \ | ||
| wayland-protocols \ | ||
| wayland-native \ |
There was a problem hiding this comment.
DEPENDS unconditionally pulls in Wayland (and wayland-native/protocols), but the recipe advertises ANY_OF_DISTRO_FEATURES = "x11 wayland" and has PACKAGECONFIG knobs for x11/wayland. If this recipe is meant to be buildable in an x11-only distro, move Wayland dependencies into PACKAGECONFIG[wayland] (and only enable them when Wayland is selected).
| wayland \ | |
| wayland-protocols \ | |
| wayland-native \ |
| From 097578b35dde6718966f144299598856813a038c Mon Sep 17 00:00:00 2001 | ||
| From: Tarik Sekmen <tarik.sekmen@sky.uk> | ||
| Date: Wed, 11 Jun 2025 15:23:24 +0100 | ||
| Subject: [PATCH] Disable xdg-wm-base related code | ||
|
|
||
| --- | ||
| cube/cube.c | 23 +++++++++++++++++++---- | ||
| cube/cube.cpp | 24 +++++++++++++++++++----- | ||
| 2 files changed, 38 insertions(+), 9 deletions(-) | ||
|
|
There was a problem hiding this comment.
This patch file is missing the standard metadata headers used elsewhere in this repo’s patches (e.g., Upstream-Status: and typically Signed-off-by:). Please add them near the top of the patch to document upstreaming status and ownership (see e.g. recipes-graphics/cairo/cairo-1.16.0/0001-add-noaa-compositor-for-v1.16.patch:4-6).
| From 247dd2ac91a3d6f32e12258c0dab9c572bf1664f Mon Sep 17 00:00:00 2001 | ||
| From: Tarik Sekmen <tarik.sekmen@sky.uk> | ||
| Date: Tue, 10 Feb 2026 18:13:04 +0000 | ||
| Subject: [PATCH] vulkan-tools/cube: Yocto cross-build and optional xdg-wm-base | ||
|
|
||
| - Allow cross-build of vkcube and vkcubepp by removing | ||
| the native-only check (CMAKE_SYSTEM_PROCESSOR eq | ||
| CMAKE_HOST_SYSTEM_PROCESSOR). Keep linking with rt when available. | ||
| - Guard xdg_wm_base usage in cube.c and cube.cpp with | ||
| #if defined(XDG_WM_BASE_PROTO) so the build works when xdg-wm-base | ||
| is not available (e.g. minimal Wayland). | ||
| --- | ||
| cube/CMakeLists.txt | 18 ++++++------------ | ||
| cube/cube.c | 8 +++++++- | ||
| cube/cube.cpp | 8 +++++++- | ||
| 3 files changed, 20 insertions(+), 14 deletions(-) | ||
|
|
There was a problem hiding this comment.
This patch file is missing the standard metadata headers used elsewhere in this repo’s patches (e.g., Upstream-Status: and typically Signed-off-by:). Please add them near the top of the patch to document upstreaming status and ownership (see e.g. recipes-graphics/cairo/cairo-1.16.0/0001-add-noaa-compositor-for-v1.16.patch:4-6).
| do_install:append:class-target() { | ||
| # reproducibility: remove build host path | ||
| sed -i -e 's:${STAGING_DIR_HOST}${libdir}/::g' \ | ||
| ${D}${libdir}/cmake/SPIRV-Tools/SPIRV-ToolsTarget.cmake | ||
| } |
There was a problem hiding this comment.
The sed -i invocation places the target file path before -e, which GNU sed will interpret as the script/commands rather than an input file (likely causing do_install to fail). Reorder arguments so options/scripts come before the file path (e.g., sed -i -e ... <file>).
There was a problem hiding this comment.
Grammar: "their applications correct use" is missing the apostrophe. Consider changing to "their application's correct use" (or "their applications' correct use").
| their applications correct use of the Vulkan API." | |
| their application's correct use of the Vulkan API." |
Reason for change: Move Vulkan recipes out of the vendor layer, reuse Kirkstone 1.3.204 bits via bbappends, add full 1.3.247/1.3.260 recipes for headers/loader/tools/validation layers, and mirror that versioning for spirv-headers and spirv-tools so the entire stack stays in lockstep. Test Procedure: Build and test Priority: P1 Risks: Low Signed-off-by: Tarik Sekmen <tarik.sekmen@gmail.com>
de01f7a to
ab914a7
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 24 out of 24 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| -DSPIRV-Headers_SOURCE_DIR=${STAGING_EXECPREFIXDIR} \ | ||
| -DSPIRV_TOOLS_BUILD_STATIC=OFF \ | ||
| -DBUILD_SHARED_LIBS=ON \ | ||
| -DSPIRV_SKIP_TESTS=ON \ | ||
| " | ||
|
|
There was a problem hiding this comment.
SPIRV-Headers_SOURCE_DIR is set to ${STAGING_EXECPREFIXDIR}, which typically points at the sysroot prefix (e.g. .../sysroot/usr) rather than a SPIRV-Headers source tree. If SPIRV-Tools’ CMake expects this to contain the SPIRV-Headers repository (with its CMakeLists.txt), configure will fail. Consider vendoring SPIRV-Headers into SRC_URI (destsuffix) or switching to a find_package/install-dir based configuration if supported by this SPIRV-Tools revision.
| -DSPIRV-Headers_SOURCE_DIR=${STAGING_EXECPREFIXDIR} \ | |
| -DSPIRV_TOOLS_BUILD_STATIC=OFF \ | |
| -DBUILD_SHARED_LIBS=ON \ | |
| -DSPIRV_SKIP_TESTS=ON \ | |
| " | |
| -DSPIRV_TOOLS_BUILD_STATIC=OFF \ | |
| -DBUILD_SHARED_LIBS=ON \ | |
| -DSPIRV_SKIP_TESTS=ON \ | |
| " |
| @@ -2391,14 +2391,16 @@ static void demo_cleanup(struct demo *demo) { | ||
| wl_keyboard_destroy(demo->keyboard); | ||
| wl_pointer_destroy(demo->pointer); | ||
| wl_seat_destroy(demo->seat); | ||
| +#if defined(XDG_WM_BASE_PROTO) | ||
| xdg_toplevel_destroy(demo->xdg_toplevel); | ||
| xdg_surface_destroy(demo->xdg_surface); | ||
| - wl_surface_destroy(demo->window); | ||
| xdg_wm_base_destroy(demo->xdg_wm_base); | ||
| if (demo->xdg_decoration_mgr) { | ||
| zxdg_toplevel_decoration_v1_destroy(demo->toplevel_decoration); | ||
| zxdg_decoration_manager_v1_destroy(demo->xdg_decoration_mgr); | ||
| } | ||
| +#endif | ||
| + wl_surface_destroy(demo->window); | ||
| wl_compositor_destroy(demo->compositor); | ||
| wl_registry_destroy(demo->registry); | ||
| wl_display_disconnect(demo->display); | ||
| @@ -2812,11 +2814,13 @@ static void handle_toplevel_close(void *data, struct xdg_toplevel *xdg_toplevel | ||
| static const struct xdg_toplevel_listener xdg_toplevel_listener = {handle_toplevel_configure, handle_toplevel_close}; | ||
|
|
||
| static void demo_create_window(struct demo *demo) { | ||
| +#if defined(XDG_WM_BASE_PROTO) | ||
| if (!demo->xdg_wm_base) { | ||
| printf("Compositor did not provide the standard protocol xdg-wm-base\n"); | ||
| fflush(stdout); | ||
| exit(1); | ||
| } | ||
| +#endif |
There was a problem hiding this comment.
This patch relies on #if defined(XDG_WM_BASE_PROTO) to gate xdg-wm-base usage, but that macro isn’t defined anywhere in this layer (recipes/patches). Unless it is guaranteed to be provided by generated protocol headers or compiler flags, these blocks will never compile in, leaving the Wayland surface without an xdg role and likely breaking vkcube at runtime. Consider switching to a macro that is actually provided by the xdg-shell headers (or defining the feature via CMake/compile definitions) and guarding the code based on that.
| @@ -2391,14 +2391,16 @@ static void demo_cleanup(struct demo *demo) { | |
| wl_keyboard_destroy(demo->keyboard); | |
| wl_pointer_destroy(demo->pointer); | |
| wl_seat_destroy(demo->seat); | |
| +#if defined(XDG_WM_BASE_PROTO) | |
| xdg_toplevel_destroy(demo->xdg_toplevel); | |
| xdg_surface_destroy(demo->xdg_surface); | |
| - wl_surface_destroy(demo->window); | |
| xdg_wm_base_destroy(demo->xdg_wm_base); | |
| if (demo->xdg_decoration_mgr) { | |
| zxdg_toplevel_decoration_v1_destroy(demo->toplevel_decoration); | |
| zxdg_decoration_manager_v1_destroy(demo->xdg_decoration_mgr); | |
| } | |
| +#endif | |
| + wl_surface_destroy(demo->window); | |
| wl_compositor_destroy(demo->compositor); | |
| wl_registry_destroy(demo->registry); | |
| wl_display_disconnect(demo->display); | |
| @@ -2812,11 +2814,13 @@ static void handle_toplevel_close(void *data, struct xdg_toplevel *xdg_toplevel | |
| static const struct xdg_toplevel_listener xdg_toplevel_listener = {handle_toplevel_configure, handle_toplevel_close}; | |
| static void demo_create_window(struct demo *demo) { | |
| +#if defined(XDG_WM_BASE_PROTO) | |
| if (!demo->xdg_wm_base) { | |
| printf("Compositor did not provide the standard protocol xdg-wm-base\n"); | |
| fflush(stdout); | |
| exit(1); | |
| } | |
| +#endif | |
| @@ -2391,14 +2391,17 @@ static void demo_cleanup(struct demo *demo) { | |
| wl_keyboard_destroy(demo->keyboard); | |
| wl_pointer_destroy(demo->pointer); | |
| wl_seat_destroy(demo->seat); | |
| - xdg_toplevel_destroy(demo->xdg_toplevel); | |
| - xdg_surface_destroy(demo->xdg_surface); | |
| - wl_surface_destroy(demo->window); | |
| - xdg_wm_base_destroy(demo->xdg_wm_base); | |
| - if (demo->xdg_decoration_mgr) { | |
| - zxdg_toplevel_decoration_v1_destroy(demo->toplevel_decoration); | |
| - zxdg_decoration_manager_v1_destroy(demo->xdg_decoration_mgr); | |
| - } | |
| + if (demo->xdg_wm_base) { | |
| + xdg_toplevel_destroy(demo->xdg_toplevel); | |
| + xdg_surface_destroy(demo->xdg_surface); | |
| + xdg_wm_base_destroy(demo->xdg_wm_base); | |
| + if (demo->xdg_decoration_mgr) { | |
| + zxdg_toplevel_decoration_v1_destroy(demo->toplevel_decoration); | |
| + zxdg_decoration_manager_v1_destroy(demo->xdg_decoration_mgr); | |
| + } | |
| + } | |
| + wl_surface_destroy(demo->window); | |
| wl_compositor_destroy(demo->compositor); | |
| wl_registry_destroy(demo->registry); | |
| wl_display_disconnect(demo->display); | |
| @@ -2812,11 +2814,11 @@ static void handle_toplevel_close(void *data, struct xdg_toplevel *xdg_toplevel | |
| static const struct xdg_toplevel_listener xdg_toplevel_listener = {handle_toplevel_configure, handle_toplevel_close}; | |
| static void demo_create_window(struct demo *demo) { | |
| if (!demo->xdg_wm_base) { | |
| printf("Compositor did not provide the standard protocol xdg-wm-base\n"); | |
| fflush(stdout); | |
| exit(1); | |
| } |
Reason for change: Move Vulkan recipes out of the vendor layer, reuse Kirkstone 1.3.204 bits via bbappends, add full 1.3.247/1.3.260 recipes for headers/loader/tools/validation layers, and mirror that versioning for spirv-headers and spirv-tools so the entire stack stays in lockstep.
Test Procedure: Build and test
Priority: P1
Risks: Low