[Mac OS X] Add KosmicKrisp driver with arm64 builds

This commit is contained in:
schm1dtmac authored and GitHub committed 2026-10-23 16:13:39 +00:00
1 parent 8f6c6def34
commit 2a01c354c1
9 files changed
+54 -10

No files matched your search

+12 -3
View File
@@ -9,6 +9,18 @@ AVVER="${COMM_TAG}-${COMM_COUNT}"
export LVER="${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}"
echo "AVVER=$AVVER" >> .ci/ci-vars.env
# Due to issues with getting this running under MacPorts, I'm reluctantly going to let this depend on brew for now.
if [ "$(arch)" = "arm64" ]; then
git clone https://gitlab.freedesktop.org/mesa/mesa.git kosmickrisp; cd kosmickrisp
brew install meson spirv-llvm-translator spirv-tools
pip3 install mako packaging pyyaml --break-system-packages
export PATH_OLD="$PATH"
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
meson setup build --prefix=/opt/homebrew --buildtype=release -Dplatforms=macos -Dvulkan-drivers=kosmickrisp -Dgallium-drivers= -Dopengl=false -Dzstd=disabled
ninja -C build; cd ../
export PATH="$PATH_OLD"
fi
# Clang depends on LLVM_COMPILER_VER so it needs to be installed here.
sudo port install "clang-$LLVM_COMPILER_VER"
@@ -53,9 +65,6 @@ export LLVM_DIR="/opt/local/libexec/llvm-$LLVM_COMPILER_VER"
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/llvm/ && !/libsdl-org/ && !/feralinteractive/ && !/curl/ && !/zlib/ { print $3 }' .gitmodules)
mkdir build && cd build || exit 1
# The below should be uncommented once bugs with Qt 6 QListWidgets when using the OS 26 visual style are resolved.
# sudo xcode-select -switch /Applications/Xcode_26.3.app/Contents/Developer
cmake .. \
-DBUILD_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
-DRUN_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
+10
View File
@@ -5,11 +5,21 @@ cd build || exit 1
cd bin
mkdir -p "rpcs3.app/Contents/Resources/vulkan/icd.d" || true
# Install the MoltenVK ICD
wget https://github.com/KhronosGroup/MoltenVK/releases/download/v1.4.2/MoltenVK-macos-privateapi.tar
tar -xvf MoltenVK-macos-privateapi.tar
cp "MoltenVK/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib" "rpcs3.app/Contents/Frameworks/libMoltenVK.dylib"
cp "MoltenVK/MoltenVK/dynamic/dylib/macOS/MoltenVK_icd.json" "rpcs3.app/Contents/Resources/vulkan/icd.d/MoltenVK_icd.json"
sed -i '' "s/.\//..\/..\/..\/Frameworks\//g" "rpcs3.app/Contents/Resources/vulkan/icd.d/MoltenVK_icd.json"
# And now let's install the KosmicKrisp ICD on aarch64
if [ "$(arch)" = "arm64" ]; then
cp "$WORKDIR/kosmickrisp/build/src/kosmickrisp/vulkan/libvulkan_kosmickrisp.dylib" "rpcs3.app/Contents/Frameworks/libvulkan_kosmickrisp.dylib"
cp "$WORKDIR/kosmickrisp/build/src/kosmickrisp/vulkan/kosmickrisp_mesa_icd.aarch64.json" "rpcs3.app/Contents/Resources/vulkan/icd.d/kosmickrisp_mesa_icd.aarch64.json"
cp "$(realpath /opt/homebrew/lib/libSPIRV-Tools.dylib)" "rpcs3.app/Contents/Frameworks/libSPIRV-Tools.dylib"
install_name_tool -change "/opt/homebrew/opt/spirv-tools/lib/libSPIRV-Tools.dylib" "@rpath/libSPIRV-Tools.dylib" "rpcs3.app/Contents/Frameworks/libvulkan_kosmickrisp.dylib"
sed -i '' "s/\/opt\/homebrew\/lib\//..\/..\/..\/Frameworks\//g" "rpcs3.app/Contents/Resources/vulkan/icd.d/kosmickrisp_mesa_icd.aarch64.json"
fi
rm -rf "rpcs3.app/Contents/Frameworks/QtPdf.framework" \
"rpcs3.app/Contents/Frameworks/QtQml.framework" \
+1 -1
View File
@@ -193,7 +193,7 @@ jobs:
UPLOAD_COMMIT_HASH: 51ae32f468089a8169aaf1567de355ff4a3e0842
UPLOAD_REPO_FULL_NAME: rpcs3/rpcs3-binaries-mac
- name: Apple Silicon
runs-on: macos-15
runs-on: macos-26
UPLOAD_COMMIT_HASH: 8e21bdbc40711a3fccd18fbf17b742348b0f4281
UPLOAD_REPO_FULL_NAME: rpcs3/rpcs3-binaries-mac-arm64
name: RPCS3 Mac ${{ matrix.name }}
+1
View File
@@ -77,6 +77,7 @@ namespace vk
break;
case vk::driver_vendor::MVK:
case vk::driver_vendor::HONEYKRISP:
case vk::driver_vendor::KOSMICKRISP:
unroll_loops = true;
optimal_kernel_size = 1;
optimal_group_size = 256;
+3
View File
@@ -144,6 +144,9 @@ namespace vk
case driver_vendor::HONEYKRISP:
// Needs more testing
break;
case driver_vendor::KOSMICKRISP:
// Needs more testing
break;
case driver_vendor::PANVK:
// Needs more testing
break;
+1
View File
@@ -216,6 +216,7 @@ namespace vk
case driver_vendor::LAVAPIPE:
case driver_vendor::V3DV:
case driver_vendor::HONEYKRISP:
case driver_vendor::KOSMICKRISP:
case driver_vendor::PANVK:
case driver_vendor::ARM_MALI:
break;
+4
View File
@@ -40,6 +40,10 @@
constexpr VkDriverId VK_DRIVER_ID_MESA_HONEYKRISP = static_cast<VkDriverId>(26);
#endif
#if VK_HEADER_VERSION < 287
constexpr VkDriverId VK_DRIVER_ID_MESA_KOSMICKRISP = static_cast<VkDriverId>(28);
#endif
#if VK_HEADER_VERSION < 332
#define VK_EXT_shader_uniform_buffer_unsized_array 1
#define VK_EXT_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_SPEC_VERSION 1
+1
View File
@@ -56,6 +56,7 @@ namespace vk
NVK,
V3DV,
HONEYKRISP,
KOSMICKRISP,
PANVK,
ARM_MALI,
QUALCOMM,
+21 -6
View File
@@ -280,17 +280,24 @@ namespace vk
std::string physical_device::get_name() const
{
#ifdef __APPLE__
// Both Apple drivers fail to include their names anywhere in the device name string, so we need to append the driver names here.
switch (get_driver_vendor())
{
case driver_vendor::KOSMICKRISP:
return std::string(props.deviceName) + " (KosmicKrisp)";
case driver_vendor::MVK:
return std::string(props.deviceName) + " (MoltenVK)";
default:
break;
}
#endif
// Return the raw device name otherwise.
return props.deviceName;
}
driver_vendor physical_device::get_driver_vendor() const
{
#ifdef __APPLE__
// moltenVK currently returns DRIVER_ID_MOLTENVK (0).
// For now, assume the vendor is moltenVK on Apple devices.
return driver_vendor::MVK;
#endif
if (!driver_properties.driverID)
{
const auto gpu_name = get_name();
@@ -341,7 +348,11 @@ namespace vk
if (gpu_name.find("Apple") != umax)
{
#ifdef __APPLE__
return driver_vendor::KOSMICKRISP;
#else
return driver_vendor::HONEYKRISP;
#endif
}
if (gpu_name.find("Panfrost") != umax)
@@ -389,6 +400,8 @@ namespace vk
return driver_vendor::V3DV;
case VK_DRIVER_ID_MESA_HONEYKRISP:
return driver_vendor::HONEYKRISP;
case VK_DRIVER_ID_MESA_KOSMICKRISP:
return driver_vendor::KOSMICKRISP;
case VK_DRIVER_ID_MESA_PANVK:
return driver_vendor::PANVK;
case VK_DRIVER_ID_ARM_PROPRIETARY:
@@ -397,6 +410,8 @@ namespace vk
return driver_vendor::QUALCOMM;
case VK_DRIVER_ID_MESA_TURNIP:
return driver_vendor::TURNIP;
case VK_DRIVER_ID_MOLTENVK:
return driver_vendor::MVK;
default:
// Mobile?
return driver_vendor::unknown;