From 0d2609c7f8a52ab84d1d30ac4c5d8ef3ee078786 Mon Sep 17 00:00:00 2001 From: David Barbion Date: Fri, 12 Mar 2021 22:06:43 +0100 Subject: [PATCH 1/9] feat: enable vulkan in mesa3d for broadcom and enable vulkan in retroarch --- custom/list.hash | 2 + custom/package/mesa3d/Config.in | 446 ++++++++++++++++++++++++++ custom/package/mesa3d/Config.in.patch | 60 ++++ custom/package/mesa3d/mesa3d.mk | 271 ++++++++++++++++ custom/package/mesa3d/mesa3d.mk.patch | 16 + package/recalbox-system/Config.in | 11 + package/retroarch/retroarch.mk | 6 + 7 files changed, 812 insertions(+) create mode 100644 custom/package/mesa3d/Config.in create mode 100644 custom/package/mesa3d/Config.in.patch create mode 100644 custom/package/mesa3d/mesa3d.mk create mode 100644 custom/package/mesa3d/mesa3d.mk.patch diff --git a/custom/list.hash b/custom/list.hash index d8030c2bdb..c709c76af4 100644 --- a/custom/list.hash +++ b/custom/list.hash @@ -19,6 +19,8 @@ be7091dd90cc6633f644562fd3416acb package/libcec/libcec.mk dfe35e9f39b004b3977968223107bd51 package/libgtk3/0001-disable-atk-bridge.patch 84caeaa857a89462b8a4e4c775a60ea4 package/lirc-tools/lirc-tools.mk 64b2fa393cafff6958f4bfd2b9e30f24 package/luajit/Config.in +201ba12d953eb7111d08b3952a7b6b3c package/mesa3d/Config.in +6d6f9c8f807001b9b421d1b924e8d2f3 package/mesa3d/mesa3d.mk f0dfbbe844feaf583ba0cd9432704f09 package/mosquitto/mosquitto.mk 2cd9a8d1ff6aa58b1ae2709179929998 package/mpv/mpv.mk eccca9996f67a8e3091c986d75a6b85e package/python-pygame/python-pygame.hash diff --git a/custom/package/mesa3d/Config.in b/custom/package/mesa3d/Config.in new file mode 100644 index 0000000000..cfe46c8558 --- /dev/null +++ b/custom/package/mesa3d/Config.in @@ -0,0 +1,446 @@ +menuconfig BR2_PACKAGE_MESA3D + bool "mesa3d" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_1 + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8 + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_WAYLAND_PROTOCOLS if BR2_PACKAGE_WAYLAND + select BR2_PACKAGE_ZLIB + help + Mesa 3D, an open-source implementation of the OpenGL + specification. + + http://mesa3d.org + +if BR2_PACKAGE_MESA3D + +# Some Gallium driver needs libelf when built with LLVM support +config BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS + bool + +config BR2_PACKAGE_MESA3D_LLVM + bool "llvm support" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::shared_future + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR # std::wstring + depends on BR2_HOST_GCC_AT_LEAST_5 # host-llvm + select BR2_PACKAGE_LLVM + +comment "llvm support needs a toolchain w/ wchar, threads, C++, dynamic library, host gcc >= 5" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP \ + || BR2_STATIC_LIBS || !BR2_USE_WCHAR \ + || !BR2_HOST_GCC_AT_LEAST_5 + +comment "llvm support needs a toolchain not affected by GCC bug 64735" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +# clang and libclc dependencies are satisfied by +# BR2_PACKAGE_MESA3D_LLVM +config BR2_PACKAGE_MESA3D_OPENCL + bool "OpenCL support" + depends on BR2_PACKAGE_MESA3D_LLVM + depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 || \ + BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI + select BR2_PACKAGE_LLVM_RTTI + select BR2_PACKAGE_CLANG + select BR2_PACKAGE_LIBCLC + select BR2_PACKAGE_HAS_LIBOPENCL + +# inform the .mk file of gallium, dri, dri3 or vulkan driver selection +config BR2_PACKAGE_MESA3D_DRI3 + bool + select BR2_PACKAGE_XLIB_LIBXSHMFENCE + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + bool + select BR2_PACKAGE_MESA3D_DRIVER + +config BR2_PACKAGE_MESA3D_VULKAN_DRIVER + bool + select BR2_PACKAGE_MESA3D_DRIVER + +config BR2_PACKAGE_MESA3D_DRIVER + bool + +# Gallium xa state tracker. +# Quote from mesa3d meson.build: "XA state tracker requires at least +# one of the following gallium drivers: nouveau, freedreno, i915, svga. +config BR2_PACKAGE_MESA3D_NEEDS_XA + bool + +# OpenGL GLX and Gallium VDPAU both needs X11 +config BR2_PACKAGE_MESA3D_NEEDS_X11 + bool + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_LIBXCB + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXDAMAGE + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XLIB_LIBXFIXES + select BR2_PACKAGE_XLIB_LIBXRANDR + select BR2_PACKAGE_XLIB_LIBXXF86VM + select BR2_PACKAGE_XORGPROTO + +comment "Gallium drivers" + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_CROCUS + bool "Gallium crocus driver" + depends on BR2_i386 || BR2_x86_64 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + help + Mesa driver for gen4-7 Intel GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_ETNAVIV + bool "Gallium Etnaviv driver" + depends on (BR2_TOOLCHAIN_HAS_SYNC_4 && !BR2_RISCV_32) || !BR2_PACKAGE_XORG7 # libxshmfence + select BR2_PACKAGE_MESA3D_DRI3 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_ETNAVIV + help + Mesa driver for Vivante GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_FREEDRENO + bool "Gallium freedreno driver" + depends on BR2_arm || BR2_aarch64 || BR2_aarch64_be # libdrm-freedreno + # libdrm's freedreno option depends on LIBDRM_HAS_ATOMIC. Propagating + # that dependency here causes a circular dependency that Kconfig + # can't see is just spurious. However, that dependency is about + # the toolchain having sync4 primitives, which is always a given + # for arm/aarch64. + select BR2_PACKAGE_MESA3D_DRI3 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_FREEDRENO + help + Mesa driver for Freedreno GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_I915 + bool "Gallium i915 driver" + depends on BR2_i386 || BR2_x86_64 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_INTEL + help + Support for i915-based Intel GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_IRIS + bool "Gallium iris driver" + depends on BR2_i386 || BR2_x86_64 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + help + Mesa driver for iris-based Intel GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_LIMA + bool "Gallium lima driver" + depends on (BR2_TOOLCHAIN_HAS_SYNC_4 && !BR2_RISCV_32) || !BR2_PACKAGE_XORG7 # libxshmfence + select BR2_PACKAGE_MESA3D_DRI3 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + help + Mesa driver for ARM Mali Utgard GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU + bool "Gallium nouveau driver" + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_NOUVEAU + select BR2_PACKAGE_MESA3D_NEEDS_XA + select BR2_PACKAGE_LLVM_RTTI if BR2_PACKAGE_MESA3D_LLVM + help + Supports all Nvidia GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_PANFROST + bool "Gallium panfrost driver" + depends on (BR2_TOOLCHAIN_HAS_SYNC_4 && !BR2_RISCV_32) || !BR2_PACKAGE_XORG7 # libxshmfence + select BR2_PACKAGE_MESA3D_DRI3 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + help + Mesa driver for ARM Mali Midgard and Bifrost GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R300 + bool "Gallium Radeon R300 driver" + depends on BR2_i386 || BR2_x86_64 + # lbdrm's radeon option depends on LIBDRM_HAS_ATOMIC. Propagating + # that dependency here causes a circular dependency that Kconfig + # can't see is just spurious. However, that dependency is about + # the toolchain having sync4 primitives, which is always a given + # for x86. + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_RADEON + help + Driver for ATI/AMD Radeon R300/R400/R500 GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 + bool "Gallium Radeon R600 driver" + depends on BR2_i386 || BR2_x86_64 + depends on !BR2_PACKAGE_MESA3D_LLVM || \ + (BR2_PACKAGE_MESA3D_LLVM && (BR2_TOOLCHAIN_USES_UCLIBC || \ + BR2_TOOLCHAIN_USES_GLIBC)) # elfutils + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_RADEON + select BR2_PACKAGE_LLVM_AMDGPU if BR2_PACKAGE_MESA3D_LLVM + select BR2_PACKAGE_ELFUTILS if BR2_PACKAGE_MESA3D_LLVM + select BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS if BR2_PACKAGE_MESA3D_LLVM + help + Driver for ATI/AMD Radeon R600/R700/HD5000/HD6000 GPUs. + +# R600 needs libelf when Mesa3D is built with LLVM support +# musl is not currently compatible with elfutils +comment "R600 driver needs a uClibc or glibc toolchain when llvm is enabled" + depends on BR2_PACKAGE_MESA3D_LLVM + depends on !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI + bool "Gallium Radeon SI driver" + depends on BR2_USE_MMU # libdrm + depends on BR2_i386 || BR2_x86_64 + depends on BR2_PACKAGE_MESA3D_LLVM + depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC # elfutils + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_AMDGPU + select BR2_PACKAGE_LIBDRM_RADEON + select BR2_PACKAGE_LLVM_AMDGPU + select BR2_PACKAGE_ELFUTILS + select BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS + help + Driver for ATI/AMD Radeon HD7000/HD8000/Rx200 GPUs. + +# Radeon SI needs libelf +# musl is not currently compatible with elfutils +comment "Radeon SI driver needs a uClibc or glibc toolchain" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_MESA3D_LLVM + depends on !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SVGA + bool "Gallium vmware svga driver" + depends on BR2_i386 || BR2_x86_64 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_VMWGFX + select BR2_PACKAGE_MESA3D_NEEDS_XA + help + This is a virtual GPU driver for VMWare virtual machines. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST + bool "Gallium swrast driver" + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + help + This is a software opengl implementation using the Gallium3D + infrastructure. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_TEGRA + bool "Gallium tegra driver" + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU + select BR2_PACKAGE_LIBDRM_NOUVEAU + select BR2_PACKAGE_MESA3D_NEEDS_XA + help + Adds support for Nvidia Tegra GPUs, requires nouveau. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_V3D + bool "Gallium v3d driver" + depends on (BR2_arm && BR2_ARM_CPU_HAS_NEON) || BR2_aarch64 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 # libxshmfence + select BR2_PACKAGE_MESA3D_DRI3 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VC4 # runtime + select BR2_PACKAGE_MESA3D_OPENGL_EGL + help + Driver for Broadcom VC6 (rpi4) GPUs (needs vc4). + + It requires a kernel 4.18+ with DRM V3D support enabled: + + - CONFIG_DRM_V3D + - CONFIG_DRM_VC4 + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VC4 + bool "Gallium vc4 driver" + depends on (BR2_arm && BR2_ARM_CPU_HAS_NEON) || BR2_aarch64 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 # libxshmfence + select BR2_PACKAGE_MESA3D_DRI3 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_VC4 + select BR2_PACKAGE_MESA3D_OPENGL_EGL + help + Driver for Broadcom VC4 (rpi2/3) GPUs. + It requires a vanilla 4.5+ kernel with drm vc4 (open) support. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VIRGL + bool "Gallium virgl driver" + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_MESA3D_OPENGL_EGL + help + virgl is the 3D acceleration backend for the virtio-gpu + shipping with qemu. + +config BR2_PACKAGE_MESA3D_VDPAU + bool "Gallium VDPAU state tracker" + depends on BR2_PACKAGE_XORG7 + depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R300 \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI + select BR2_PACKAGE_MESA3D_NEEDS_X11 + select BR2_PACKAGE_LIBVDPAU + help + VDPAU state tracker (needs r300, r600, radeonsi or nouveau + gallium drivers). + +comment "Gallium VDPAU state tracker needs X.org and gallium drivers r300, r600, radeonsi or nouveau" + depends on !BR2_PACKAGE_XORG7 || \ + !(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R300 \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI) + +comment "Vulkan drivers" + +config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_INTEL + bool "Vulkan Intel driver" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 # libxshmfence + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 # memfd.h + depends on BR2_TOOLCHAIN_USES_GLIBC # ifunc, static_assert + select BR2_PACKAGE_MESA3D_DRI3 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_MESA3D_VULKAN_DRIVER + help + Vulkan driver for Intel hardware from Ivy Bridge onward. + +comment "intel vulkan needs a glibc toolchain w/ headers >= 3.17" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 || \ + !BR2_TOOLCHAIN_USES_GLIBC + +config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_BROADCOM + bool "Vulkan Broadcom driver" + depends on BR2_arm || BR2_aarch64 + depends on BR2_TOOLCHAIN_USES_GLIBC # ifunc, static_assert + select BR2_PACKAGE_MESA3D_VULKAN_DRIVER + help + Vulkan driver for Broadcom hardware from v3dv Raspberry PI 4. + +comment "broadcom vulkan needs a glibc toolchain w/ headers >= 3.17" + depends on BR2_arm || BR2_aarch64 + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 || \ + !BR2_TOOLCHAIN_USES_GLIBC + +config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_HASWELL + bool "Vulkan Haswell driver" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 # libxshmfence + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 # memfd.h + depends on BR2_TOOLCHAIN_USES_GLIBC # ifunc, static_assert + select BR2_PACKAGE_MESA3D_DRI3 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_MESA3D_VULKAN_DRIVER + help + Vulkan driver for older Intel Gen7/Gen8 GPU. + +comment "intel haswell vulkan needs a glibc toolchain w/ headers >= 3.17" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 || \ + !BR2_TOOLCHAIN_USES_GLIBC + +config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_AMD + bool "Vulkan AMD Radeon driver" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libxshmfence + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 # memfd.h + depends on BR2_TOOLCHAIN_USES_GLIBC # ifunc, static_assert + depends on BR2_PACKAGE_XORG7 # xorgproto + select BR2_PACKAGE_MESA3D_VULKAN_DRIVER + select BR2_PACKAGE_XORGPROTO + select BR2_PACKAGE_XLIB_LIBXSHMFENCE + help + Vulkan driver for AMD Radeon GPU. + +comment "radeon vulkan depends on X.org and needs a glibc toolchain w/ headers >= 3.17" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 || \ + !BR2_TOOLCHAIN_USES_GLIBC || !BR2_PACKAGE_XORG7 + +comment "Off-screen Rendering" + +config BR2_PACKAGE_MESA3D_OSMESA_GALLIUM + bool "OSMesa (Gallium) library" + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST + help + The OSMesa API provides functions for off-screen rendering. + +if BR2_PACKAGE_MESA3D_DRIVER + +comment "OpenGL API Support" + +config BR2_PACKAGE_MESA3D_GBM + bool "gbm" + depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER && \ + BR2_PACKAGE_MESA3D_OPENGL_EGL + select BR2_PACKAGE_HAS_LIBGBM + select BR2_PACKAGE_LIBGBM_HAS_FEATURE_FORMAT_MODIFIER_PLANE_COUNT + select BR2_PACKAGE_LIBGBM_HAS_FEATURE_DMA_BUF + help + Enable Generic Buffer Management (gbm) + +comment "gbm support needs a gallium driver w/ EGL support." + depends on !(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER && BR2_PACKAGE_MESA3D_OPENGL_EGL) + +config BR2_PACKAGE_MESA3D_OPENGL_GLX + bool "OpenGL GLX" + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_HAS_LIBGL if !BR2_PACKAGE_LIBGLVND + select BR2_PACKAGE_LIBGLVND_DISPATCH_GL if BR2_PACKAGE_LIBGLVND + select BR2_PACKAGE_MESA3D_NEEDS_X11 + help + Enable GLX graphic acceleration (OpenGL + X11). + +comment "OpenGL GLX support needs X11" + depends on !BR2_PACKAGE_XORG7 + +config BR2_PACKAGE_MESA3D_OPENGL_EGL + bool "OpenGL EGL" + depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_HAS_LIBEGL if !BR2_PACKAGE_LIBGLVND + select BR2_PACKAGE_LIBGLVND_DISPATCH_EGL if BR2_PACKAGE_LIBGLVND + select BR2_PACKAGE_HAS_LIBEGL_WAYLAND + select BR2_PACKAGE_MESA3D_GBM + help + Use the Khronos EGL APIs. EGL is a window manager for OpenGL + applications similar to GLX, for X, and WGL, for Windows. + +config BR2_PACKAGE_MESA3D_OPENGL_ES + bool "OpenGL ES" + select BR2_PACKAGE_HAS_LIBGLES if !BR2_PACKAGE_LIBGLVND + select BR2_PACKAGE_LIBGLVND_DISPATCH_GLES if BR2_PACKAGE_LIBGLVND + help + Use the Khronos OpenGL ES APIs. This is commonly used on + embedded systems and represents a subset of the OpenGL API. + +endif # BR2_PACKAGE_MESA3D_DRIVER + +config BR2_PACKAGE_PROVIDES_LIBGBM + default "mesa3d" if BR2_PACKAGE_MESA3D_GBM + +config BR2_PACKAGE_PROVIDES_LIBGL + default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_GLX && !BR2_PACKAGE_LIBGLVND + +config BR2_PACKAGE_PROVIDES_LIBEGL + default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_EGL && !BR2_PACKAGE_LIBGLVND + +config BR2_PACKAGE_PROVIDES_LIBGLES + default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_ES && !BR2_PACKAGE_LIBGLVND + +config BR2_PACKAGE_PROVIDES_LIBOPENCL + default "mesa3d" if BR2_PACKAGE_MESA3D_OPENCL + +endif # BR2_PACKAGE_MESA3D + +comment "mesa3d needs a toolchain w/ gcc >=8, C++, NPTL, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_8 + depends on BR2_TOOLCHAIN_HAS_SYNC_1 diff --git a/custom/package/mesa3d/Config.in.patch b/custom/package/mesa3d/Config.in.patch new file mode 100644 index 0000000000..6fda1c248c --- /dev/null +++ b/custom/package/mesa3d/Config.in.patch @@ -0,0 +1,60 @@ +diff --git a/package/mesa3d/Config.in b/package/mesa3d/Config.in +index e21bbbe3e4..cfe46c8558 100644 +--- a/package/mesa3d/Config.in ++++ b/package/mesa3d/Config.in +@@ -316,6 +316,55 @@ comment "intel vulkan needs a glibc toolchain w/ headers >= 3.17" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 || \ + !BR2_TOOLCHAIN_USES_GLIBC + ++config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_BROADCOM ++ bool "Vulkan Broadcom driver" ++ depends on BR2_arm || BR2_aarch64 ++ depends on BR2_TOOLCHAIN_USES_GLIBC # ifunc, static_assert ++ select BR2_PACKAGE_MESA3D_VULKAN_DRIVER ++ help ++ Vulkan driver for Broadcom hardware from v3dv Raspberry PI 4. ++ ++comment "broadcom vulkan needs a glibc toolchain w/ headers >= 3.17" ++ depends on BR2_arm || BR2_aarch64 ++ depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 || \ ++ !BR2_TOOLCHAIN_USES_GLIBC ++ ++config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_HASWELL ++ bool "Vulkan Haswell driver" ++ depends on BR2_i386 || BR2_x86_64 ++ depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 # libxshmfence ++ depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 # memfd.h ++ depends on BR2_TOOLCHAIN_USES_GLIBC # ifunc, static_assert ++ select BR2_PACKAGE_MESA3D_DRI3 if BR2_PACKAGE_XORG7 ++ select BR2_PACKAGE_MESA3D_VULKAN_DRIVER ++ help ++ Vulkan driver for older Intel Gen7/Gen8 GPU. ++ ++comment "intel haswell vulkan needs a glibc toolchain w/ headers >= 3.17" ++ depends on BR2_i386 || BR2_x86_64 ++ depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 ++ depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 || \ ++ !BR2_TOOLCHAIN_USES_GLIBC ++ ++config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_AMD ++ bool "Vulkan AMD Radeon driver" ++ depends on BR2_i386 || BR2_x86_64 ++ depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libxshmfence ++ depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 # memfd.h ++ depends on BR2_TOOLCHAIN_USES_GLIBC # ifunc, static_assert ++ depends on BR2_PACKAGE_XORG7 # xorgproto ++ select BR2_PACKAGE_MESA3D_VULKAN_DRIVER ++ select BR2_PACKAGE_XORGPROTO ++ select BR2_PACKAGE_XLIB_LIBXSHMFENCE ++ help ++ Vulkan driver for AMD Radeon GPU. ++ ++comment "radeon vulkan depends on X.org and needs a glibc toolchain w/ headers >= 3.17" ++ depends on BR2_i386 || BR2_x86_64 ++ depends on BR2_TOOLCHAIN_HAS_SYNC_4 ++ depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 || \ ++ !BR2_TOOLCHAIN_USES_GLIBC || !BR2_PACKAGE_XORG7 ++ + comment "Off-screen Rendering" + + config BR2_PACKAGE_MESA3D_OSMESA_GALLIUM diff --git a/custom/package/mesa3d/mesa3d.mk b/custom/package/mesa3d/mesa3d.mk new file mode 100644 index 0000000000..926910d5cf --- /dev/null +++ b/custom/package/mesa3d/mesa3d.mk @@ -0,0 +1,271 @@ +################################################################################ +# +# mesa3d +# +################################################################################ + +# When updating the version, please also update mesa3d-headers +MESA3D_VERSION = 22.3.4 +MESA3D_SOURCE = mesa-$(MESA3D_VERSION).tar.xz +MESA3D_SITE = https://archive.mesa3d.org +MESA3D_LICENSE = MIT, SGI, Khronos +MESA3D_LICENSE_FILES = docs/license.rst +MESA3D_CPE_ID_VENDOR = mesa3d +MESA3D_CPE_ID_PRODUCT = mesa + +MESA3D_INSTALL_STAGING = YES + +MESA3D_PROVIDES = + +MESA3D_DEPENDENCIES = \ + host-bison \ + host-flex \ + host-python-mako \ + expat \ + libdrm \ + zlib + +MESA3D_CONF_OPTS = \ + -Dgallium-omx=disabled \ + -Dpower8=disabled + +# Codesourcery ARM 2014.05 fail to link libmesa_dri_drivers.so with --as-needed linker +# flag due to a linker bug between binutils 2.24 and 2.25 (2.24.51.20140217). +ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM),y) +MESA3D_CONF_OPTS += -Db_asneeded=false +endif + +ifeq ($(BR2_PACKAGE_MESA3D_DRI3),y) +MESA3D_CONF_OPTS += -Ddri3=enabled +ifeq ($(BR2_PACKAGE_XLIB_LIBXSHMFENCE),y) +MESA3D_DEPENDENCIES += xlib_libxshmfence +endif +else +MESA3D_CONF_OPTS += -Ddri3=disabled +endif + +ifeq ($(BR2_PACKAGE_MESA3D_LLVM),y) +MESA3D_DEPENDENCIES += host-llvm llvm +MESA3D_MESON_EXTRA_BINARIES += llvm-config='$(STAGING_DIR)/usr/bin/llvm-config' +MESA3D_CONF_OPTS += -Dllvm=enabled +ifeq ($(BR2_PACKAGE_LLVM_RTTI),y) +MESA3D_CONF_OPTS += -Dcpp_rtti=true +else +MESA3D_CONF_OPTS += -Dcpp_rtti=false +endif +else +# Avoid automatic search of llvm-config +MESA3D_CONF_OPTS += -Dllvm=disabled +endif + +# Disable opencl-icd: OpenCL lib will be named libOpenCL instead of +# libMesaOpenCL and CL headers are installed +ifeq ($(BR2_PACKAGE_MESA3D_OPENCL),y) +MESA3D_PROVIDES += libopencl +MESA3D_DEPENDENCIES += clang libclc +MESA3D_CONF_OPTS += -Dgallium-opencl=standalone +else +MESA3D_CONF_OPTS += -Dgallium-opencl=disabled +endif + +ifeq ($(BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS),y) +MESA3D_DEPENDENCIES += elfutils +endif + +ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_GLX),y) +# Disable-mangling not yet supported by meson build system. +# glx: +# dri : dri based GLX requires at least one DRI driver || dri based GLX requires shared-glapi +# xlib : xlib conflicts with any dri driver +# Always enable glx-direct; without it, many GLX applications don't work. +MESA3D_CONF_OPTS += \ + -Dglx=dri \ + -Dglx-direct=true +ifeq ($(BR2_PACKAGE_MESA3D_NEEDS_XA),y) +MESA3D_CONF_OPTS += -Dgallium-xa=enabled +else +MESA3D_CONF_OPTS += -Dgallium-xa=disabled +endif +else +MESA3D_CONF_OPTS += \ + -Dglx=disabled \ + -Dgallium-xa=disabled +endif + +ifeq ($(BR2_ARM_CPU_HAS_NEON),y) +MESA3D_CONF_OPTS += -Dgallium-vc4-neon=auto +else +MESA3D_CONF_OPTS += -Dgallium-vc4-neon=disabled +endif + +# Drivers + +#Gallium Drivers +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_CROCUS) += crocus +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_ETNAVIV) += etnaviv +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_FREEDRENO) += freedreno +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_I915) += i915 +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_IRIS) += iris +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_LIMA) += lima +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU) += nouveau +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_PANFROST) += panfrost +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R300) += r300 +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600) += r600 +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI) += radeonsi +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SVGA) += svga +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST) += swrast +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_TEGRA) += tegra +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_V3D) += v3d +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VC4) += vc4 +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VIRGL) += virgl +# Vulkan Drivers +MESA3D_VULKAN_DRIVERS-$(BR2_PACKAGE_MESA3D_VULKAN_DRIVER_INTEL) += intel +MESA3D_VULKAN_DRIVERS-$(BR2_PACKAGE_MESA3D_VULKAN_DRIVER_HASWELL) += intel_hasvk +MESA3D_VULKAN_DRIVERS-$(BR2_PACKAGE_MESA3D_VULKAN_DRIVER_AMD) += amd +MESA3D_VULKAN_DRIVERS-$(BR2_PACKAGE_MESA3D_VULKAN_DRIVER_BROADCOM) += broadcom + +ifeq ($(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER),) +MESA3D_CONF_OPTS += \ + -Dgallium-drivers= \ + -Dgallium-extra-hud=false +else +MESA3D_CONF_OPTS += \ + -Dshared-glapi=enabled \ + -Dgallium-drivers=$(subst $(space),$(comma),$(MESA3D_GALLIUM_DRIVERS-y)) \ + -Dgallium-extra-hud=true +endif + +ifeq ($(BR2_PACKAGE_MESA3D_VULKAN_DRIVER),) +MESA3D_CONF_OPTS += \ + -Dvulkan-drivers= +else +MESA3D_DEPENDENCIES += host-python-glslang +MESA3D_CONF_OPTS += \ + -Dvulkan-drivers=$(subst $(space),$(comma),$(MESA3D_VULKAN_DRIVERS-y)) +endif + +# APIs + +ifeq ($(BR2_PACKAGE_MESA3D_OSMESA_GALLIUM),y) +MESA3D_CONF_OPTS += -Dosmesa=true +else +MESA3D_CONF_OPTS += -Dosmesa=false +endif + +# Always enable OpenGL: +# - Building OpenGL ES without OpenGL is not supported, so always keep opengl enabled. +MESA3D_CONF_OPTS += -Dopengl=true + +# libva and mesa3d have a circular dependency +# we do not need libva support in mesa3d, therefore disable this option +MESA3D_CONF_OPTS += -Dgallium-va=disabled + +# libGL is only provided for a full xorg stack, without libglvnd +ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_GLX),y) +MESA3D_PROVIDES += $(if $(BR2_PACKAGE_LIBGLVND),,libgl) +else +define MESA3D_REMOVE_OPENGL_HEADERS + rm -rf $(STAGING_DIR)/usr/include/GL/ +endef + +MESA3D_POST_INSTALL_STAGING_HOOKS += MESA3D_REMOVE_OPENGL_HEADERS +endif + +ifeq ($(BR2_PACKAGE_MESA3D_NEEDS_X11),y) +MESA3D_DEPENDENCIES += \ + xlib_libX11 \ + xlib_libXext \ + xlib_libXdamage \ + xlib_libXfixes \ + xlib_libXrandr \ + xlib_libXxf86vm \ + xorgproto \ + libxcb +MESA3D_PLATFORMS += x11 +endif +ifeq ($(BR2_PACKAGE_WAYLAND),y) +MESA3D_DEPENDENCIES += wayland wayland-protocols +MESA3D_PLATFORMS += wayland +endif + +MESA3D_CONF_OPTS += \ + -Dplatforms=$(subst $(space),$(comma),$(MESA3D_PLATFORMS)) + +ifeq ($(BR2_PACKAGE_MESA3D_GBM),y) +MESA3D_CONF_OPTS += \ + -Dgbm=enabled +else +MESA3D_CONF_OPTS += \ + -Dgbm=disabled +endif + +ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_EGL),y) +MESA3D_PROVIDES += $(if $(BR2_PACKAGE_LIBGLVND),,libegl) +MESA3D_CONF_OPTS += \ + -Degl=enabled +else +MESA3D_CONF_OPTS += \ + -Degl=disabled +endif + +ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_ES),y) +MESA3D_PROVIDES += $(if $(BR2_PACKAGE_LIBGLVND),,libgles) +MESA3D_CONF_OPTS += -Dgles1=enabled -Dgles2=enabled +else +MESA3D_CONF_OPTS += -Dgles1=disabled -Dgles2=disabled +endif + +ifeq ($(BR2_PACKAGE_VALGRIND),y) +MESA3D_CONF_OPTS += -Dvalgrind=enabled +MESA3D_DEPENDENCIES += valgrind +else +MESA3D_CONF_OPTS += -Dvalgrind=disabled +endif + +ifeq ($(BR2_PACKAGE_LIBUNWIND),y) +MESA3D_CONF_OPTS += -Dlibunwind=enabled +MESA3D_DEPENDENCIES += libunwind +else +MESA3D_CONF_OPTS += -Dlibunwind=disabled +endif + +ifeq ($(BR2_PACKAGE_MESA3D_VDPAU),y) +MESA3D_DEPENDENCIES += libvdpau +MESA3D_CONF_OPTS += -Dgallium-vdpau=enabled +else +MESA3D_CONF_OPTS += -Dgallium-vdpau=disabled +endif + +ifeq ($(BR2_PACKAGE_LM_SENSORS),y) +MESA3D_CONF_OPTS += -Dlmsensors=enabled +MESA3D_DEPENDENCIES += lm-sensors +else +MESA3D_CONF_OPTS += -Dlmsensors=disabled +endif + +ifeq ($(BR2_PACKAGE_ZSTD),y) +MESA3D_CONF_OPTS += -Dzstd=enabled +MESA3D_DEPENDENCIES += zstd +else +MESA3D_CONF_OPTS += -Dzstd=disabled +endif + +MESA3D_CFLAGS = $(TARGET_CFLAGS) + +# m68k needs 32-bit offsets in switch tables to build +ifeq ($(BR2_m68k),y) +MESA3D_CFLAGS += -mlong-jump-table-offsets +endif + +ifeq ($(BR2_PACKAGE_LIBGLVND),y) +ifneq ($(BR2_PACKAGE_MESA3D_OPENGL_GLX)$(BR2_PACKAGE_MESA3D_OPENGL_EGL),) +MESA3D_DEPENDENCIES += libglvnd +MESA3D_CONF_OPTS += -Dglvnd=true +else +MESA3D_CONF_OPTS += -Dglvnd=false +endif +else +MESA3D_CONF_OPTS += -Dglvnd=false +endif + +$(eval $(meson-package)) diff --git a/custom/package/mesa3d/mesa3d.mk.patch b/custom/package/mesa3d/mesa3d.mk.patch new file mode 100644 index 0000000000..a135037718 --- /dev/null +++ b/custom/package/mesa3d/mesa3d.mk.patch @@ -0,0 +1,16 @@ +diff --git a/package/mesa3d/mesa3d.mk b/package/mesa3d/mesa3d.mk +index 36b7151510..926910d5cf 100644 +--- a/package/mesa3d/mesa3d.mk ++++ b/package/mesa3d/mesa3d.mk +@@ -119,7 +119,10 @@ MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_V3D) += v3d + MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VC4) += vc4 + MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VIRGL) += virgl + # Vulkan Drivers +-MESA3D_VULKAN_DRIVERS-$(BR2_PACKAGE_MESA3D_VULKAN_DRIVER_INTEL) += intel ++MESA3D_VULKAN_DRIVERS-$(BR2_PACKAGE_MESA3D_VULKAN_DRIVER_INTEL) += intel ++MESA3D_VULKAN_DRIVERS-$(BR2_PACKAGE_MESA3D_VULKAN_DRIVER_HASWELL) += intel_hasvk ++MESA3D_VULKAN_DRIVERS-$(BR2_PACKAGE_MESA3D_VULKAN_DRIVER_AMD) += amd ++MESA3D_VULKAN_DRIVERS-$(BR2_PACKAGE_MESA3D_VULKAN_DRIVER_BROADCOM) += broadcom + + ifeq ($(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER),) + MESA3D_CONF_OPTS += \ diff --git a/package/recalbox-system/Config.in b/package/recalbox-system/Config.in index a5c131fb67..e2574f094f 100644 --- a/package/recalbox-system/Config.in +++ b/package/recalbox-system/Config.in @@ -132,6 +132,17 @@ config BR2_PACKAGE_RECALBOX_HAS_LIBGLES3 BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2 ||\ BR2_PACKAGE_RECALBOX_TARGET_RG353X +config BR2_PACKAGE_RECALBOX_HAS_VULKAN + bool + default y if \ + BR2_PACKAGE_RECALBOX_TARGET_RPI4_64 ||\ + BR2_PACKAGE_RECALBOX_TARGET_X86_64 + select BR2_PACKAGE_VULKAN_LOADER + select BR2_PACKAGE_MESA3D_VULKAN_DRIVER_BROADCOM if BR2_PACKAGE_RECALBOX_TARGET_RPI4_64 + select BR2_PACKAGE_MESA3D_VULKAN_DRIVER_INTEL if BR2_PACKAGE_RECALBOX_TARGET_X86_64 + select BR2_PACKAGE_MESA3D_VULKAN_DRIVER_HASWELL if BR2_PACKAGE_RECALBOX_TARGET_X86_64 + select BR2_PACKAGE_MESA3D_VULKAN_DRIVER_AMD if BR2_PACKAGE_RECALBOX_TARGET_X86_64 + config BR2_PACKAGE_RECALBOX_HAS_KMS bool default y if \ diff --git a/package/retroarch/retroarch.mk b/package/retroarch/retroarch.mk index 47db411227..b7ee4b353b 100644 --- a/package/retroarch/retroarch.mk +++ b/package/retroarch/retroarch.mk @@ -73,6 +73,12 @@ ifeq ($(BR2_PACKAGE_RECALBOX_HAS_KMS),y) RETROARCH_CONF_OPTS += --enable-kms endif +# vulkan +ifeq ($(BR2_PACKAGE_VULKAN_HEADERS),y) +RETROARCH_CONF_OPTS += --enable-vulkan +RETROARCH_DEPENDENCIES += vulkan-loader +endif + # x86 : SSE ifeq ($(BR2_X86_CPU_HAS_SSE),y) RETROARCH_CONF_OPTS += --enable-sse -- GitLab From 77e60450b1feb2a9dcc307bb2d48232b20fb006d Mon Sep 17 00:00:00 2001 From: David Barbion Date: Fri, 12 Mar 2021 22:15:24 +0100 Subject: [PATCH 2/9] feat: add vulkan-loader package --- Config.in | 3 ++ custom/list.hash | 2 ++ .../vulkan-headers/vulkan-headers.hash | 3 ++ .../vulkan-headers/vulkan-headers.hash.patch | 9 +++++ .../package/vulkan-headers/vulkan-headers.mk | 13 +++++++ .../vulkan-headers/vulkan-headers.mk.patch | 13 +++++++ .../0001-asm-offset-path.patch.old | 20 +++++++++++ package/vulkan-loader/Config.in | 6 ++++ package/vulkan-loader/vulkan-loader.mk | 35 +++++++++++++++++++ package/vulkan-tools/Config.in | 5 +++ package/vulkan-tools/vulkan-tools.mk | 18 ++++++++++ 11 files changed, 127 insertions(+) create mode 100644 custom/package/vulkan-headers/vulkan-headers.hash create mode 100644 custom/package/vulkan-headers/vulkan-headers.hash.patch create mode 100644 custom/package/vulkan-headers/vulkan-headers.mk create mode 100644 custom/package/vulkan-headers/vulkan-headers.mk.patch create mode 100644 package/vulkan-loader/0001-asm-offset-path.patch.old create mode 100644 package/vulkan-loader/Config.in create mode 100644 package/vulkan-loader/vulkan-loader.mk create mode 100644 package/vulkan-tools/Config.in create mode 100644 package/vulkan-tools/vulkan-tools.mk diff --git a/Config.in b/Config.in index 8cb8303a45..c9ae08e935 100644 --- a/Config.in +++ b/Config.in @@ -22,6 +22,9 @@ menu "Recalbox" menu "Librelec" source "$BR2_EXTERNAL_RECALBOX_PATH/package/librelec-libmali/Config.in" endmenu + menu "Vulkan" + source "$BR2_EXTERNAL_RECALBOX_PATH/package/vulkan-loader/Config.in" + endmenu endmenu menu "Boot" comment "Boot specific options" diff --git a/custom/list.hash b/custom/list.hash index c709c76af4..6f2cafbe59 100644 --- a/custom/list.hash +++ b/custom/list.hash @@ -34,6 +34,8 @@ f976cbc5a7299cfc48ec83f255ddf85b package/sdl2_mixer/sdl2_mixer.mk 7255c6ecc9f8bd6a511a495b1c8c1d0a package/sdl_sound/sdl_sound.mk 503c8043fd40aa5486cd99bc9ccfdc75 package/skeleton-init-common/skeleton-init-common.mk 837f387642582c0188c5f6e48d6d2f57 package/usbmount/usbmount.mk +27dcf5bb34815943d76c903cb8d9b40f package/vulkan-headers/vulkan-headers.hash +ed4e31d4e0fce4196f11064ce5b77e5d package/vulkan-headers/vulkan-headers.mk 6e3ab6b232135fb951ccb3c161e481d8 package/x265/x265.mk 67a78ca1ca82b120ba9b24423c089ccf support/scripts/mkusers 2673dc3e7fbc4920c43ad91ad9214d3e system/device_table.txt diff --git a/custom/package/vulkan-headers/vulkan-headers.hash b/custom/package/vulkan-headers/vulkan-headers.hash new file mode 100644 index 0000000000..ec0f3bc43b --- /dev/null +++ b/custom/package/vulkan-headers/vulkan-headers.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 f6e44769c42685fd5d380aea280a2406a431fe584d7ae3256ce83958cd0899f4 vulkan-headers-1.3.260.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/custom/package/vulkan-headers/vulkan-headers.hash.patch b/custom/package/vulkan-headers/vulkan-headers.hash.patch new file mode 100644 index 0000000000..45999b202a --- /dev/null +++ b/custom/package/vulkan-headers/vulkan-headers.hash.patch @@ -0,0 +1,9 @@ +diff --git a/package/vulkan-headers/vulkan-headers.hash b/package/vulkan-headers/vulkan-headers.hash +index c43736405c..ec0f3bc43b 100644 +--- a/package/vulkan-headers/vulkan-headers.hash ++++ b/package/vulkan-headers/vulkan-headers.hash +@@ -1,3 +1,3 @@ + # Locally calculated +-sha256 7239108c372f1fbe365bd8d1610ca2bb4e72b73b2151f2551bf9df54dd539639 vulkan-headers-1.2.203.tar.gz ++sha256 f6e44769c42685fd5d380aea280a2406a431fe584d7ae3256ce83958cd0899f4 vulkan-headers-1.3.260.tar.gz + sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/custom/package/vulkan-headers/vulkan-headers.mk b/custom/package/vulkan-headers/vulkan-headers.mk new file mode 100644 index 0000000000..1e72736341 --- /dev/null +++ b/custom/package/vulkan-headers/vulkan-headers.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# vulkan-headers +# +################################################################################ + +VULKAN_HEADERS_VERSION = 1.3.260 +VULKAN_HEADERS_SITE = $(call github,KhronosGroup,Vulkan-Headers,v$(VULKAN_HEADERS_VERSION)) +VULKAN_HEADERS_LICENSE = Apache-2.0 +VULKAN_HEADERS_LICENSE_FILES = LICENSE.txt +VULKAN_HEADERS_INSTALL_STAGING = YES + +$(eval $(cmake-package)) diff --git a/custom/package/vulkan-headers/vulkan-headers.mk.patch b/custom/package/vulkan-headers/vulkan-headers.mk.patch new file mode 100644 index 0000000000..3b73ea800a --- /dev/null +++ b/custom/package/vulkan-headers/vulkan-headers.mk.patch @@ -0,0 +1,13 @@ +diff --git a/package/vulkan-headers/vulkan-headers.mk b/package/vulkan-headers/vulkan-headers.mk +index 13cae1e685..1e72736341 100644 +--- a/package/vulkan-headers/vulkan-headers.mk ++++ b/package/vulkan-headers/vulkan-headers.mk +@@ -4,7 +4,7 @@ + # + ################################################################################ + +-VULKAN_HEADERS_VERSION = 1.2.203 ++VULKAN_HEADERS_VERSION = 1.3.260 + VULKAN_HEADERS_SITE = $(call github,KhronosGroup,Vulkan-Headers,v$(VULKAN_HEADERS_VERSION)) + VULKAN_HEADERS_LICENSE = Apache-2.0 + VULKAN_HEADERS_LICENSE_FILES = LICENSE.txt diff --git a/package/vulkan-loader/0001-asm-offset-path.patch.old b/package/vulkan-loader/0001-asm-offset-path.patch.old new file mode 100644 index 0000000000..be35a8fcb8 --- /dev/null +++ b/package/vulkan-loader/0001-asm-offset-path.patch.old @@ -0,0 +1,20 @@ +--- vulkan-loader-1.2.203/loader/CMakeLists.txt 2021-12-20 17:46:42.000000000 +0100 ++++ vulkan-loader-1.2.203/loader/CMakeLists.txt-2 2023-07-27 15:47:45.964409408 +0200 +@@ -197,7 +197,7 @@ + + add_executable(asm_offset asm_offset.c) + target_link_libraries(asm_offset Vulkan::Headers) +- add_custom_command(OUTPUT gen_defines.asm DEPENDS asm_offset COMMAND asm_offset MASM) ++ add_custom_command(OUTPUT gen_defines.asm DEPENDS asm_offset COMMAND ./asm_offset MASM) + add_custom_target(loader_asm_gen_files DEPENDS gen_defines.asm) + set_target_properties(loader_asm_gen_files PROPERTIES FOLDER ${LOADER_HELPER_FOLDER}) + add_library(loader-unknown-chain OBJECT unknown_ext_chain_masm.asm) +@@ -246,7 +246,7 @@ + add_executable(asm_offset asm_offset.c) + target_link_libraries(asm_offset Vulkan::Headers) + target_compile_definitions(asm_offset PRIVATE _GNU_SOURCE) +- add_custom_command(OUTPUT gen_defines.asm DEPENDS asm_offset COMMAND asm_offset GAS) ++ add_custom_command(OUTPUT gen_defines.asm DEPENDS asm_offset COMMAND ./asm_offset GAS) + add_custom_target(loader_asm_gen_files DEPENDS gen_defines.asm) + else() + if(USE_GAS) diff --git a/package/vulkan-loader/Config.in b/package/vulkan-loader/Config.in new file mode 100644 index 0000000000..26735387a6 --- /dev/null +++ b/package/vulkan-loader/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_VULKAN_LOADER + bool "Vulkan loader" + select BR2_PACKAGE_VULKAN_HEADERS + help + Vulkan loader + https://github.com/KhronosGroup/Vulkan-Loader diff --git a/package/vulkan-loader/vulkan-loader.mk b/package/vulkan-loader/vulkan-loader.mk new file mode 100644 index 0000000000..37dc9c7532 --- /dev/null +++ b/package/vulkan-loader/vulkan-loader.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# vulkan-loader +# +################################################################################ + +VULKAN_LOADER_VERSION = 1.3.259 +VULKAN_LOADER_SITE = $(call github,KhronosGroup,Vulkan-Loader,v$(VULKAN_LOADER_VERSION)) +VULKAN_LOADER_LICENSE = Apache-2.0 +VULKAN_LOADER_LICENSE_FILES = LICENSE.txt +VULKAN_LOADER_INSTALL_STAGING = YES +VULKAN_LOADER_DEPENDENCIES = vulkan-headers + +VULKAN_LOADER_CONF_OPTS = -DVulkanHeaders_INCLUDE_DIR=$(STAGING_DIR)/usr/include/ \ + -DVulkanRegistry_DIR=$(TARGET_DIR)/usr/share/vulkan/registry + +ifeq ($(BR2_PACKAGE_XORG7),y) +VULKAN_LOADER_DEPENDENCIES += libxcb xserver_xorg-server +VULKAN_LOADER_CONF_OPTS += \ + -DBUILD_WSI_XCB_SUPPORT=ON \ + -DBUILD_WSI_XLIB_SUPPORT=ON +else +VULKAN_LOADER_CONF_OPTS += \ + -DBUILD_WSI_XCB_SUPPORT=OFF \ + -DBUILD_WSI_XLIB_SUPPORT=OFF +endif + +ifeq ($(BR2_PACKAGE_WAYLAND),y) +VULKAN_LOADER_DEPENDENCIES += wayland +VULKAN_LOADER_CONF_OPTS += -DBUILD_WSI_WAYLAND_SUPPORT=ON +else +VULKAN_LOADER_CONF_OPTS += -DBUILD_WSI_WAYLAND_SUPPORT=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/vulkan-tools/Config.in b/package/vulkan-tools/Config.in new file mode 100644 index 0000000000..34d874d8f2 --- /dev/null +++ b/package/vulkan-tools/Config.in @@ -0,0 +1,5 @@ +config BR2_PACKAGE_VULKAN_HEADERS + bool "Vulkan headers" + help + Vulkan Header files and API registry + https://github.com/KhronosGroup/Vulkan-Headers diff --git a/package/vulkan-tools/vulkan-tools.mk b/package/vulkan-tools/vulkan-tools.mk new file mode 100644 index 0000000000..cee9216621 --- /dev/null +++ b/package/vulkan-tools/vulkan-tools.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# vulkan-tols +# +################################################################################ + +VULKAN_TOOLS_VERSION = v1.2.171 +VULKAN_TOOLS_SITE = $(call github,KhronosGroup,Vulkan-Tools,$(VULKAN_TOOLS_VERSION)) +VULKAN_TOOLS_LICENSE = Apache-2.0 +VULKAN_TOOLS_LICENSE_FILES = LICENSE.txt +VULKAN_TOOLS_INSTALL_STAGING = YES +VULKAN_TOOLS_SUBDIR = vulkaninfo + +VULKAN_TOOLS_CONF_OPTS = -DBUILD_WSI_XCB_SUPPORT=OFF \ + -DBUILD_WSI_XLIB_SUPPORT=OFF \ + -DBUILD_WSI_WAYLAND_SUPPORT=OFF + +$(eval $(cmake-package)) -- GitLab From 1805185440ca101a64ce1ec9347535e844aa15f1 Mon Sep 17 00:00:00 2001 From: David Barbion Date: Thu, 27 Jul 2023 00:07:19 +0200 Subject: [PATCH 3/9] feat: enable vulkan for dolphin --- package/dolphin-emu/Config.in | 33 +++++++++++++++--------------- package/dolphin-emu/dolphin-emu.mk | 14 ++++++++++++- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/package/dolphin-emu/Config.in b/package/dolphin-emu/Config.in index 3979b5ed33..3caf09453d 100644 --- a/package/dolphin-emu/Config.in +++ b/package/dolphin-emu/Config.in @@ -1,6 +1,6 @@ config BR2_PACKAGE_DOLPHIN_EMU bool "dolphin-emu" - depends on BR2_x86_64 + depends on BR2_x86_64 || BR2_aarch64 select BR2_PACKAGE_LIBEVDEV select BR2_PACKAGE_FFMPEG select BR2_PACKAGE_ZLIB @@ -8,26 +8,27 @@ config BR2_PACKAGE_DOLPHIN_EMU select BR2_PACKAGE_LZO select BR2_PACKAGE_LIBUSB select BR2_PACKAGE_LIBCURL - select BR2_PACKAGE_SFML + select BR2_PACKAGE_SFML if BR2_PACKAGE_XORG7 select BR2_PACKAGE_BLUEZ5_UTILS select BR2_PACKAGE_CAIRO_SCRIPT + select BR2_PACKAGE_CAIRO select BR2_PACKAGE_HIDAPI - select BR2_PACKAGE_QT5 - select BR2_PACKAGE_QT5BASE - select BR2_PACKAGE_QT5BASE_OPENGL if BR2_PACKAGE_RECALBOX_TARGET_X86_64 - select BR2_PACKAGE_QT5BASE_XCB - select BR2_PACKAGE_QT5BASE_EGLFS - select BR2_PACKAGE_QT5BASE_FONTCONFIG - select BR2_PACKAGE_QT5BASE_GUI - select BR2_PACKAGE_QT5BASE_WIDGETS - select BR2_PACKAGE_HICOLOR_ICON_THEME - select BR2_PACKAGE_QT5BASE_GIF - select BR2_PACKAGE_QT5BASE_JPEG - select BR2_PACKAGE_QT5BASE_PNG + select BR2_PACKAGE_QT5 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_QT5BASE if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_QT5BASE_OPENGL if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_QT5BASE_XCB if (BR2_PACKAGE_XORG7 && BR2_x86_64) + select BR2_PACKAGE_QT5BASE_EGLFS if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_QT5BASE_FONTCONFIG if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_QT5BASE_GUI if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_QT5BASE_WIDGETS if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_HICOLOR_ICON_THEME if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_QT5BASE_GIF if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_QT5BASE_JPEG if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_QT5BASE_PNG if BR2_PACKAGE_XORG7 select BR2_PACKAGE_XORG7 if BR2_PACKAGE_RECALBOX_TARGET_X86_64 help A Nintendo GameCube/Wii emulator. https://github.com/dolphin-emu/dolphin -comment "Dolphin needs x86_64, XORG7" - depends on !BR2_x86_64 || !BR2_PACKAGE_XORG7 +comment "Dolphin needs x86_64, XORG7 or aarch64" + depends on (!BR2_x86_64 || !BR2_PACKAGE_XORG7) && !BR2_aarch64 diff --git a/package/dolphin-emu/dolphin-emu.mk b/package/dolphin-emu/dolphin-emu.mk index fb37449cf8..d53b11d20b 100644 --- a/package/dolphin-emu/dolphin-emu.mk +++ b/package/dolphin-emu/dolphin-emu.mk @@ -22,9 +22,21 @@ DOLPHIN_EMU_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF DOLPHIN_EMU_CONF_OPTS += -DUSE_MGBA=OFF ifeq ($(BR2_PACKAGE_XSERVER_XORG_SERVER),y) -DOLPHIN_EMU_DEPENDENCIES += xserver_xorg-server qt5base +DOLPHIN_EMU_DEPENDENCIES += xserver_xorg-server DOLPHIN_EMU_CONF_OPTS += -DENABLE_NOGUI=OFF DOLPHIN_EMU_CONF_OPTS += -DENABLE_EGL=OFF endif +ifeq ($(BR2_PACKAGE_RECALBOX_HAS_VULKAN),y) +DOLPHIN_EMU_DEPENDENCIES += vulkan-headers +DOLPHIN_EMU_CONF_OPTS += -DENABLE_VULKAN=ON +endif + +ifeq ($(BR2_PACKAGE_QT5),y) +DOLPHIN_EMU_DEPENDENCIES += qt5base +DOLPHIN_EMU_CONF_OPTS += -DENABLE_QT=ON +else +DOLPHIN_EMU_CONF_OPTS += -DENABLE_QT=OFF +endif + $(eval $(cmake-package)) -- GitLab From 7033f7945d5a28f98c6dcbca856d494b1931065c Mon Sep 17 00:00:00 2001 From: David Barbion Date: Sun, 30 Jul 2023 00:34:05 +0200 Subject: [PATCH 4/9] feat: enable vulkan support in SDL2 --- custom/package/sdl2/sdl2.mk | 8 +++++++- custom/package/sdl2/sdl2.mk.patch | 24 +++++++++++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/custom/package/sdl2/sdl2.mk b/custom/package/sdl2/sdl2.mk index 52c9e3b187..7ac9298cb2 100644 --- a/custom/package/sdl2/sdl2.mk +++ b/custom/package/sdl2/sdl2.mk @@ -26,7 +26,6 @@ SDL2_CONF_OPTS += \ --disable-video-wayland \ --disable-video-dummy \ --disable-video-offscreen \ - --disable-video-vulkan \ --disable-ime \ --disable-ibus \ --disable-fcitx \ @@ -185,6 +184,13 @@ else SDL2_CONF_OPTS += --disable-pulseaudio endif +ifeq ($(BR2_PACKAGE_RECALBOX_HAS_VULKAN),y) +SDL2_DEPENDENCIES += vulkan-headers +SDL2_CONF_OPTS += --enable-video-vulkan +else +SDL2_CONF_OPTS += --disable-video-vulkan +endif + ifeq ($(BR2_PACKAGE_SDL2_KMSDRM),y) SDL2_DEPENDENCIES += libdrm libgbm libegl SDL2_CONF_OPTS += --enable-video-kmsdrm diff --git a/custom/package/sdl2/sdl2.mk.patch b/custom/package/sdl2/sdl2.mk.patch index f314b9deae..da42beacb6 100644 --- a/custom/package/sdl2/sdl2.mk.patch +++ b/custom/package/sdl2/sdl2.mk.patch @@ -1,8 +1,8 @@ diff --git a/package/sdl2/sdl2.mk b/package/sdl2/sdl2.mk -index 5f2e1e0ed1..52c9e3b187 100644 +index 5f2e1e0ed1..7ac9298cb2 100644 --- a/package/sdl2/sdl2.mk +++ b/package/sdl2/sdl2.mk -@@ -15,11 +15,11 @@ SDL2_INSTALL_STAGING = YES +@@ -15,18 +15,17 @@ SDL2_INSTALL_STAGING = YES SDL2_CONFIG_SCRIPTS = sdl2-config SDL2_CONF_OPTS += \ @@ -15,7 +15,14 @@ index 5f2e1e0ed1..52c9e3b187 100644 --disable-video-vivante \ --disable-video-cocoa \ --disable-video-metal \ -@@ -50,6 +50,10 @@ define SDL2_FIX_SDL2_CONFIG_CMAKE + --disable-video-wayland \ + --disable-video-dummy \ + --disable-video-offscreen \ +- --disable-video-vulkan \ + --disable-ime \ + --disable-ibus \ + --disable-fcitx \ +@@ -50,6 +49,10 @@ define SDL2_FIX_SDL2_CONFIG_CMAKE $(STAGING_DIR)/usr/lib/cmake/SDL2/sdl2-config.cmake endef SDL2_POST_INSTALL_STAGING_HOOKS += SDL2_FIX_SDL2_CONFIG_CMAKE @@ -26,7 +33,7 @@ index 5f2e1e0ed1..52c9e3b187 100644 # We must enable static build to get compilation successful. SDL2_CONF_OPTS += --enable-static -@@ -174,6 +178,13 @@ else +@@ -174,6 +177,20 @@ else SDL2_CONF_OPTS += --disable-alsa endif @@ -36,11 +43,18 @@ index 5f2e1e0ed1..52c9e3b187 100644 +else +SDL2_CONF_OPTS += --disable-pulseaudio +endif ++ ++ifeq ($(BR2_PACKAGE_RECALBOX_HAS_VULKAN),y) ++SDL2_DEPENDENCIES += vulkan-headers ++SDL2_CONF_OPTS += --enable-video-vulkan ++else ++SDL2_CONF_OPTS += --disable-video-vulkan ++endif + ifeq ($(BR2_PACKAGE_SDL2_KMSDRM),y) SDL2_DEPENDENCIES += libdrm libgbm libegl SDL2_CONF_OPTS += --enable-video-kmsdrm -@@ -181,4 +192,15 @@ else +@@ -181,4 +198,15 @@ else SDL2_CONF_OPTS += --disable-video-kmsdrm endif -- GitLab From b070dbe9d112c9b96dbc62ad4aa22607dac55ce6 Mon Sep 17 00:00:00 2001 From: digitalLumberjack Date: Mon, 7 Aug 2023 11:47:06 +0200 Subject: [PATCH 5/9] feat(configgen): vulkan: add vulkan management in configgen --- .../generators/libretro/libretroGenerator.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/projects/configgen/configgen/generators/libretro/libretroGenerator.py b/projects/configgen/configgen/generators/libretro/libretroGenerator.py index 018a13fb3f..85b6b3eeaa 100644 --- a/projects/configgen/configgen/generators/libretro/libretroGenerator.py +++ b/projects/configgen/configgen/generators/libretro/libretroGenerator.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +import os from typing import List, Dict, Any import configgen.recalboxFiles as recalboxFiles @@ -225,6 +226,19 @@ class LibretroGenerator(Generator): coreConfig.setString("mesen-s_gbmodel", '"Super Game Boy"') retroarchConfig.saveFile() coreConfig.saveFile() + + @staticmethod + def createVideoDriverConfiguration(system: Emulator, rom: str, recalboxOptions: keyValueSettings, + retroarchConfig: keyValueSettings, coreConfig: keyValueSettings, + retroarchOverrides: keyValueSettings): + vulkanCores = ["flycast"] + if os.path.exists("/usr/lib/libvulkan.so") and system.Core in vulkanCores: + retroarchConfig.setString("video_driver", "vulkan") + else: + retroarchConfig.removeOption("video_driver") + retroarchConfig.saveFile() + + # recalbox-crt-options.cfg options # Create configuration file @staticmethod def createConfigurationFile(system: Emulator, playersControllers: ControllerPerPlayer, rom: str, demo: bool, @@ -253,6 +267,10 @@ class LibretroGenerator(Generator): # Supergameboy config, core is selected by ES. Overlays are processed after that so there is a specific rule in it LibretroGenerator.createSuperGameBoyConfiguration(system, retroarchConfig, coreConfig) + # video driver config + LibretroGenerator.createVideoDriverConfiguration(system, rom, recalboxOptions, retroarchConfig, coreConfig, + retroarchOverrides) + # crt config (should be after tate as it will change ratio but keep other tate config) if system.CRTEnabled: LibretroGenerator.createCrtConfiguration(system, rom, recalboxOptions, retroarchConfig, coreConfig, -- GitLab From 7ccc9d00195f0f0d66b6b04b58b7bcc91ea16dd2 Mon Sep 17 00:00:00 2001 From: David Barbion Date: Sun, 6 Aug 2023 11:30:35 +0200 Subject: [PATCH 6/9] feat(vulkan): enable vulkan for flycast --- package/librelec-libmali/librelec-libmali.mk | 1 + ...0001-add-odroidgo2-platform.patch.pending} | 0 ...sshair-for-lightgun-feature.patch.pending} | 0 package/libretro-flycast/libretro-flycast.mk | 63 +++++++------------ package/recalbox-system/Config.in | 8 +++ 5 files changed, 30 insertions(+), 42 deletions(-) rename package/libretro-flycast/{0001-add-odroidgo2-platform.patch => 0001-add-odroidgo2-platform.patch.pending} (100%) rename package/libretro-flycast/{0002-unblend-crosshair-for-lightgun-feature.patch => 0002-unblend-crosshair-for-lightgun-feature.patch.pending} (100%) diff --git a/package/librelec-libmali/librelec-libmali.mk b/package/librelec-libmali/librelec-libmali.mk index 5b581b6dfb..7aba96e727 100644 --- a/package/librelec-libmali/librelec-libmali.mk +++ b/package/librelec-libmali/librelec-libmali.mk @@ -10,6 +10,7 @@ LIBRELEC_LIBMALI_INSTALL_STAGING = YES LIBRELEC_LIBMALI_PROVIDES = libegl libgles libgbm LIBRELEC_LIBMALI_LICENSE = COPYRIGHT LIBRELEC_LIBMALI_LICENSE_FILES = END_USER_LICENCE_AGREEMENT.txt +LIBRELEC_LIBMALI_DEPENDENCIES += libdrm ifeq ($(BR2_PACKAGE_LIBRELEC_LIBMALI_T62X),y) LIBRELEC_LIBMALI_DEPENDENCIES += wayland diff --git a/package/libretro-flycast/0001-add-odroidgo2-platform.patch b/package/libretro-flycast/0001-add-odroidgo2-platform.patch.pending similarity index 100% rename from package/libretro-flycast/0001-add-odroidgo2-platform.patch rename to package/libretro-flycast/0001-add-odroidgo2-platform.patch.pending diff --git a/package/libretro-flycast/0002-unblend-crosshair-for-lightgun-feature.patch b/package/libretro-flycast/0002-unblend-crosshair-for-lightgun-feature.patch.pending similarity index 100% rename from package/libretro-flycast/0002-unblend-crosshair-for-lightgun-feature.patch rename to package/libretro-flycast/0002-unblend-crosshair-for-lightgun-feature.patch.pending diff --git a/package/libretro-flycast/libretro-flycast.mk b/package/libretro-flycast/libretro-flycast.mk index cfab37f37d..afb476d63c 100644 --- a/package/libretro-flycast/libretro-flycast.mk +++ b/package/libretro-flycast/libretro-flycast.mk @@ -4,63 +4,42 @@ # ################################################################################ -# Commit of 17/05/2021 -LIBRETRO_FLYCAST_VERSION = 8e4fa54e26232d6d54d3b0adca163ae7e617b9bd -LIBRETRO_FLYCAST_SITE = $(call github,libretro,flycast,$(LIBRETRO_FLYCAST_VERSION)) +# Commit of 31/07/2023 +LIBRETRO_FLYCAST_VERSION = 92a10ba0f0a5ca0d1ec9498962002f4cdcc8e7f6 +LIBRETRO_FLYCAST_SITE = http://github.com/flyinghead/flycast.git LIBRETRO_FLYCAST_LICENSE = GPL-2.0 +LIBRETRO_FLYCAST_SITE_METHOD = git +LIBRETRO_FLYCAST_GIT_SUBMODULES = y LIBRETRO_FLYCAST_DEPENDENCIES = arcade-dats +LIBRETRO_FLYCAST_CONF_OPTS = -DLIBRETRO=ON -DBUILD_SHARED_LIBS=OFF -ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_ODROIDXU4),y) -LIBRETRO_FLYCAST_PLATFORM = odroid -LIBRETRO_FLYCAST_SUPP_OPT += BOARD=ODROID-XU4 CC_AS="$(TARGET_CC)" -else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2),y) -LIBRETRO_FLYCAST_PLATFORM = odroid-go2 -LIBRETRO_FLYCAST_SUPP_OPT += CC_AS="$(TARGET_CC)" LDFLAGS=-lmali -else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_RG353X),y) -LIBRETRO_FLYCAST_PLATFORM = arm64 -LIBRETRO_FLYCAST_SUPP_OPT += CC_AS="$(TARGET_CC)" LDFLAGS=-lmali -else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_RPIZERO2LEGACY),y) -LIBRETRO_FLYCAST_PLATFORM = rpi3 -LIBRETRO_FLYCAST_SUPP_OPT += CC_AS="$(TARGET_CC)" -else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_RPI3)$(BR2_PACKAGE_RECALBOX_TARGET_RPIZERO2),y) -LIBRETRO_FLYCAST_PLATFORM = rpi3-mesa -LIBRETRO_FLYCAST_SUPP_OPT += CC_AS="$(TARGET_CC)" -else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_RPI4_64),y) -LIBRETRO_FLYCAST_PLATFORM = rpi4_64 -LIBRETRO_FLYCAST_SUPP_OPT += HAVE_LTCG=0 CC_AS="$(TARGET_CC)" -else -LIBRETRO_FLYCAST_PLATFORM = $(RETROARCH_LIBRETRO_PLATFORM) -LIBRETRO_FLYCAST_SUPP_OPT = +ifeq ($(BR2_PACKAGE_RECALBOX_HAS_VULKAN),y) +# vulkan support is enabled by default +LIBRETRO_FLYCAST_DEPENDENCIES += vulkan-headers endif -LIBRETRO_FLYCAST_SUPP_OPT += ARCH=$(BR2_NORMALIZED_ARCH) - ifeq ($(BR2_PACKAGE_RECALBOX_HAS_LIBGLES),y) -LIBRETRO_FLYCAST_SUPP_OPT += FORCE_GLES=1 LIBRETRO_FLYCAST_DEPENDENCIES += libgles +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +LIBRETRO_FLYCAST_CONF_OPTS += \ + -DUSE_GLES=OFF \ + -DUSE_GLES2=ON \ + -DUSE_VIDEOCORE=ON +else +LIBRETRO_FLYCAST_CONF_OPTS += -DUSE_GLES=ON endif - -ifeq ($(BR2_PACKAGE_HAS_LIBGL),y) -LIBRETRO_FLYCAST_DEPENDENCIES += libgl endif -LIBRETRO_FLYCAST_MAKE_ARGS = platform="$(LIBRETRO_FLYCAST_PLATFORM)" $(LIBRETRO_FLYCAST_SUPP_OPT) +ifeq ($(BR2_PACKAGE_RECALBOX_HAS_LIBMALI),y) +LIBRETRO_FLYCAST_SIDE_LIBS = -lmali +endif -define LIBRETRO_FLYCAST_BUILD_CMDS - $(SED) "s|-O2|-O3|g" $(@D)/Makefile - CFLAGS="$(TARGET_CFLAGS) $(COMPILER_COMMONS_CFLAGS_SO)" \ - CXXFLAGS="$(TARGET_CXXFLAGS) $(COMPILER_COMMONS_CXXFLAGS_SO)" \ - LDFLAGS="$(TARGET_LDFLAGS) $(COMPILER_COMMONS_LDFLAGS_SO) -lrt" \ - $(MAKE) CXX="$(TARGET_CXX)" CC="$(TARGET_CC)" AR="$(TARGET_AR)" -C $(@D)/ -f Makefile $(LIBRETRO_FLYCAST_MAKE_ARGS) -endef +LIBRETRO_FLYCAST_CONF_OPTS += -DCMAKE_CXX_FLAGS="$(COMPILER_COMMONS_CXXFLAGS_EXE) $(LIBRETRO_FLYCAST_SIDE_LIBS)" define LIBRETRO_FLYCAST_INSTALL_TARGET_CMDS - $(call InstallArcadeFiles,libretro,naomi,$(LIBRETRO_FLYCAST_VERSION)) - $(call InstallArcadeFiles,libretro,naomigd,$(LIBRETRO_FLYCAST_VERSION)) - $(call InstallArcadeFiles,libretro,atomiswave,$(LIBRETRO_FLYCAST_VERSION)) $(INSTALL) -D $(@D)/flycast_libretro.so \ $(TARGET_DIR)/usr/lib/libretro/flycast_libretro.so endef -$(eval $(generic-package)) +$(eval $(cmake-package)) diff --git a/package/recalbox-system/Config.in b/package/recalbox-system/Config.in index e2574f094f..acb8889fec 100644 --- a/package/recalbox-system/Config.in +++ b/package/recalbox-system/Config.in @@ -154,6 +154,14 @@ config BR2_PACKAGE_RECALBOX_HAS_KMS BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2 ||\ BR2_PACKAGE_RECALBOX_TARGET_RG353X +config BR2_PACKAGE_RECALBOX_HAS_LIBMALI + bool + default y if \ + BR2_PACKAGE_RECALBOX_TARGET_ODROIDXU4 ||\ + BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2 ||\ + BR2_PACKAGE_RECALBOX_TARGET_RG353X ||\ + BR2_PACKAGE_RECALBOX_TARGET_RG351V + config BR2_PACKAGE_RECALBOX_EGL_NO_X11 bool default y if \ -- GitLab From b44d49a0a8c9b32f593c9e0b975aa124ea8c0155 Mon Sep 17 00:00:00 2001 From: David Barbion Date: Mon, 7 Aug 2023 13:51:38 +0200 Subject: [PATCH 7/9] chore: add spirv-headers and spirv-tools packages --- Config.in | 2 ++ package/spirv-headers/Config.in.host | 5 +++++ package/spirv-headers/spirv-headers.mk | 14 ++++++++++++++ package/spirv-tools/Config.in | 7 +++++++ package/spirv-tools/spirv-tools.mk | 16 ++++++++++++++++ 5 files changed, 44 insertions(+) create mode 100644 package/spirv-headers/Config.in.host create mode 100644 package/spirv-headers/spirv-headers.mk create mode 100644 package/spirv-tools/Config.in create mode 100644 package/spirv-tools/spirv-tools.mk diff --git a/Config.in b/Config.in index c9ae08e935..6be6945e84 100644 --- a/Config.in +++ b/Config.in @@ -24,6 +24,8 @@ menu "Recalbox" endmenu menu "Vulkan" source "$BR2_EXTERNAL_RECALBOX_PATH/package/vulkan-loader/Config.in" + source "$BR2_EXTERNAL_RECALBOX_PATH/package/spirv-tools/Config.in" + source "$BR2_EXTERNAL_RECALBOX_PATH/package/spirv-headers/Config.in.host" endmenu endmenu menu "Boot" diff --git a/package/spirv-headers/Config.in.host b/package/spirv-headers/Config.in.host new file mode 100644 index 0000000000..444d35ae76 --- /dev/null +++ b/package/spirv-headers/Config.in.host @@ -0,0 +1,5 @@ +config BR2_PACKAGE_HOST_SPIRV_HEADERS + bool "spirv-headers" + help + The SPIR-V Tools project provides an API and commands for processing SPIR-V modules. + https://github.com/KhronosGroup/SPIRV-Headers diff --git a/package/spirv-headers/spirv-headers.mk b/package/spirv-headers/spirv-headers.mk new file mode 100644 index 0000000000..e89e9a0c2e --- /dev/null +++ b/package/spirv-headers/spirv-headers.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# spirv-headers +# +################################################################################ + +SPIRV_HEADERS_VERSION = 1.3.246.1 +SPIRV_HEADERS_SITE = $(call github,KhronosGroup,SPIRV-Headers,sdk-$(SPIRV_HEADERS_VERSION)) +SPIRV_HEADERS_LICENSE = Apache-2.0 +SPIRV_HEADERS_LICENSE_FILES = LICENSE +SPIRV_HEADERS_DEPENDENCIES = host-python3 + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/spirv-tools/Config.in b/package/spirv-tools/Config.in new file mode 100644 index 0000000000..ac88d22a17 --- /dev/null +++ b/package/spirv-tools/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_SPIRV_TOOLS + bool "spirv-tools" + select BR2_PACKAGE_HOST_SPIRV_HEADERS + help + The SPIR-V Tools project provides an API and commands + for processing SPIR-V modules. + https://github.com/KhronosGroup/SPIRV-Tools diff --git a/package/spirv-tools/spirv-tools.mk b/package/spirv-tools/spirv-tools.mk new file mode 100644 index 0000000000..c9c2ea6337 --- /dev/null +++ b/package/spirv-tools/spirv-tools.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# spirv-tools +# +################################################################################ + +SPIRV_TOOLS_VERSION = 2023.2 +SPIRV_TOOLS_SITE = $(call github,KhronosGroup,SPIRV-Tools,v$(SPIRV_TOOLS_VERSION)) +SPIRV_TOOLS_LICENSE = Apache-2.0 +SPIRV_TOOLS_LICENSE_FILES = LICENSE +SPIRV_TOOLS_DEPENDENCIES = host-python3 host-spirv-headers + +# check spirv-headers if it needs a bump +SPIRV_TOOLS_CONF_OPTS = -DSPIRV-Headers_SOURCE_DIR=$(HOST_DIR)/usr + +$(eval $(cmake-package)) -- GitLab From 050100717c4247266883b334f87b5e73843c1010 Mon Sep 17 00:00:00 2001 From: David Barbion Date: Fri, 11 Aug 2023 20:49:49 +0200 Subject: [PATCH 8/9] feat(vulkan): bump libretro-ppsspp and enable vulkan for vulkan compatible boards --- package/libretro-ppsspp/libretro-ppsspp.mk | 50 +++++++++++++--------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/package/libretro-ppsspp/libretro-ppsspp.mk b/package/libretro-ppsspp/libretro-ppsspp.mk index f6743544e3..8cf19978c8 100644 --- a/package/libretro-ppsspp/libretro-ppsspp.mk +++ b/package/libretro-ppsspp/libretro-ppsspp.mk @@ -4,7 +4,7 @@ # ################################################################################ -LIBRETRO_PPSSPP_VERSION = 47ff758af11369f1dc602ec39cc710f33ac44bc3 +LIBRETRO_PPSSPP_VERSION = 87f7523f995af4a4d348ad222c02a96c0caf6638 LIBRETRO_PPSSPP_SITE = https://github.com/hrydgard/ppsspp LIBRETRO_PPSSPP_SITE_METHOD=git LIBRETRO_PPSSPP_GIT_SUBMODULES=y @@ -12,22 +12,6 @@ LIBRETRO_PPSSPP_DEPENDENCIES = ffmpeg snappy zip sdl2 libpng LIBRETRO_PPSSPP_LICENSE = GPL-2.0 LIBRETRO_PPSSPP_LICENSE_FILES = LICENSE.TXT -ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_XU4)$(BR2_PACKAGE_RECALBOX_TARGET_RPI4),y) -LIBRETRO_PPSSPP_PLATFORM=unix-gles -else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_RPI4_64)$(BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2),y) -LIBRETRO_PPSSPP_PLATFORM=arm64-gles -else -LIBRETRO_PPSSPP_PLATFORM=$(RETROARCH_LIBRETRO_PLATFORM) -endif - -ifeq ($(BR2_PACKAGE_HAS_LIBGL),y) -LIBRETRO_PPSSPP_DEPENDENCIES += libgl -endif - -ifeq ($(BR2_PACKAGE_HAS_LIBGLES),y) -LIBRETRO_PPSSPP_DEPENDENCIES += libgles -endif - LIBRETRO_PPSSPP_CONF_OPTS += -DCMAKE_C_ARCHIVE_CREATE=" qcs " LIBRETRO_PPSSPP_CONF_OPTS += -DCMAKE_C_ARCHIVE_FINISH=true LIBRETRO_PPSSPP_CONF_OPTS += -DCMAKE_CXX_ARCHIVE_CREATE=" qcs " @@ -60,14 +44,38 @@ LIBRETRO_PPSSPP_CONF_OPTS += -DUNITTEST=OFF LIBRETRO_PPSSPP_CONF_OPTS += -DSIMULATOR=OFF LIBRETRO_PPSSPP_CONF_OPTS += -DLIBRETRO=ON # :: Environments -ifeq ($(BR2_arm)$(BR2_aarch64),y) +LIBRETRO_PPSSPP_CONF_OPTS += -DUSING_FBDEV=OFF + +ifeq ($(BR2_PACKAGE_HAS_LIBGL),y) +LIBRETRO_PPSSPP_DEPENDENCIES += libgl +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBGLES),y) +LIBRETRO_PPSSPP_DEPENDENCIES += libgles LIBRETRO_PPSSPP_CONF_OPTS += -DUSING_GLES2=ON +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBEGL),y) +LIBRETRO_PPSSPP_DEPENDENCIES += libegl LIBRETRO_PPSSPP_CONF_OPTS += -DUSING_EGL=ON endif -LIBRETRO_PPSSPP_CONF_OPTS += -DUSING_FBDEV=OFF -ifeq ($(BR2_PACKAGE_XORG7),y) + +ifeq ($(BR2_PACKAGE_RECALBOX_HAS_VULKAN),y) +LIBRETRO_PPSSPP_DEPENDENCIES += vulkan-headers +LIBRETRO_PPSSPP_CONF_OPTS += -DUSE_VULKAN_DISPLAY_KHR=ON + +ifeq ($(BR2_PACKAGE_WAYLAND),y) +LIBRETRO_PPSSPP_DEPENDENCIES += wayland +LIBRETRO_PPSSPP_CONF_OPTS += -DUSE_WAYLAND_WSI=ON +else ifeq ($(BR2_PACKAGE_XORG7),y) +LIBRETRO_PPSSPP_DEPENDENCIES += xserver_xorg-server LIBRETRO_PPSSPP_CONF_OPTS += -DUSING_X11_VULKAN=ON -else +endif + +endif + +# disable X11 if no xorg package +ifeq ($(BR2_PACKAGE_XORG7),) LIBRETRO_PPSSPP_CONF_OPTS += -DUSING_X11_VULKAN=OFF endif -- GitLab From c0e39978075de3d505cc834acd42be3d2d4a3f87 Mon Sep 17 00:00:00 2001 From: digitalLumberjack Date: Thu, 7 Sep 2023 09:41:34 +0200 Subject: [PATCH 9/9] feat(configgen): vulkan: bypass vulkan when on crt --- .../configgen/generators/libretro/crt/LibretroConfigCRT.py | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/configgen/configgen/generators/libretro/crt/LibretroConfigCRT.py b/projects/configgen/configgen/generators/libretro/crt/LibretroConfigCRT.py index 2452d8dce8..32a48ea746 100644 --- a/projects/configgen/configgen/generators/libretro/crt/LibretroConfigCRT.py +++ b/projects/configgen/configgen/generators/libretro/crt/LibretroConfigCRT.py @@ -243,6 +243,7 @@ class LibretroConfigCRT: "audio_driver": '"pulse"', "video_smooth": '"false"', "video_allow_rotate": '"true"', + "video_driver": '"gl"' } core: str = system.Core default: bool = True -- GitLab