Skip to content

Commit d9929f1

Browse files
committed
[Mac OS X] Add KosmicKrisp builds (for evaluation/testing)
1 parent 275c2d4 commit d9929f1

9 files changed

Lines changed: 49 additions & 13 deletions

File tree

.ci/build-mac.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@ export HOMEBREW_NO_AUTO_UPDATE=1
1313
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
1414
export HOMEBREW_NO_ENV_HINTS=1
1515
export HOMEBREW_NO_INSTALL_CLEANUP=1
16+
if [ "$BUILD_MAC_KK" -eq 1 ]; then
17+
git clone https://gitlab.freedesktop.org/mesa/mesa.git kosmickrisp; cd kosmickrisp
18+
brew install meson libclc spirv-llvm-translator spirv-tools
19+
pip3 install mako packaging pyyaml --break-system-packages
20+
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
21+
meson setup build --prefix=/opt/homebrew --buildtype=release -Dplatforms=macos -Dvulkan-drivers=kosmickrisp -Dgallium-drivers= -Dopengl=false -Dzstd=disabled
22+
ninja -C build; cd ../
23+
fi
24+
1625
brew install -f --overwrite --quiet ccache "llvm@$LLVM_COMPILER_VER"
1726
brew link -f --overwrite --quiet "llvm@$LLVM_COMPILER_VER"
1827
brew install -f --overwrite --quiet googletest opencv@4 sdl3 vulkan-headers vulkan-loader molten-vk

.ci/deploy-mac.sh

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,19 @@ cd build || exit 1
55

66
cd bin
77
mkdir -p "rpcs3.app/Contents/Resources/vulkan/icd.d" || true
8-
wget https://github.com/KhronosGroup/MoltenVK/releases/download/v1.4.2-rc1/MoltenVK-macos-privateapi.tar
9-
tar -xvf MoltenVK-macos-privateapi.tar
10-
cp "MoltenVK/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib" "rpcs3.app/Contents/Frameworks/libMoltenVK.dylib"
11-
cp "MoltenVK/MoltenVK/dynamic/dylib/macOS/MoltenVK_icd.json" "rpcs3.app/Contents/Resources/vulkan/icd.d/MoltenVK_icd.json"
12-
sed -i '' "s/.\//..\/..\/..\/Frameworks\//g" "rpcs3.app/Contents/Resources/vulkan/icd.d/MoltenVK_icd.json"
8+
if [ "$BUILD_MAC_KK" -eq 1 ]; then
9+
cp "$WORKDIR/kosmickrisp/build/src/kosmickrisp/vulkan/libvulkan_kosmickrisp.dylib" "rpcs3.app/Contents/Frameworks/libvulkan_kosmickrisp.dylib"
10+
cp "$WORKDIR/kosmickrisp/build/src/kosmickrisp/vulkan/kosmickrisp_mesa_icd.aarch64.json" "rpcs3.app/Contents/Resources/vulkan/icd.d/kosmickrisp_mesa_icd.aarch64.json"
11+
cp "$(realpath /opt/homebrew/lib/libSPIRV-Tools.dylib)" "rpcs3.app/Contents/Frameworks/libSPIRV-Tools.dylib"
12+
install_name_tool -change "/opt/homebrew/opt/spirv-tools/lib/libSPIRV-Tools.dylib" "@rpath/libSPIRV-Tools.dylib" "rpcs3.app/Contents/Frameworks/libvulkan_kosmickrisp.dylib"
13+
sed -i '' "s/\/opt\/homebrew\/lib\//..\/..\/..\/Frameworks\//g" "rpcs3.app/Contents/Resources/vulkan/icd.d/kosmickrisp_mesa_icd.aarch64.json"
14+
else
15+
wget https://github.com/KhronosGroup/MoltenVK/releases/download/v1.4.2-rc1/MoltenVK-macos-privateapi.tar
16+
tar -xvf MoltenVK-macos-privateapi.tar
17+
cp "MoltenVK/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib" "rpcs3.app/Contents/Frameworks/libMoltenVK.dylib"
18+
cp "MoltenVK/MoltenVK/dynamic/dylib/macOS/MoltenVK_icd.json" "rpcs3.app/Contents/Resources/vulkan/icd.d/MoltenVK_icd.json"
19+
sed -i '' "s/.\//..\/..\/..\/Frameworks\//g" "rpcs3.app/Contents/Resources/vulkan/icd.d/MoltenVK_icd.json"
20+
fi
1321

1422
cp "$(realpath $BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++abi.1.0.dylib)" "rpcs3.app/Contents/Frameworks/libc++abi.1.dylib"
1523
cp "$(realpath $BREW_PATH/opt/gcc/lib/gcc/current/libgcc_s.1.1.dylib)" "rpcs3.app/Contents/Frameworks/libgcc_s.1.1.dylib"

.github/workflows/rpcs3.yml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ jobs:
130130
runs-on: macos-15
131131
UPLOAD_COMMIT_HASH: 8e21bdbc40711a3fccd18fbf17b742348b0f4281
132132
UPLOAD_REPO_FULL_NAME: rpcs3/rpcs3-binaries-mac-arm64
133+
- name: Apple Silicon (KosmicKrisp)
134+
runs-on: macos-26
135+
BUILD_MAC_KK: 1
136+
UPLOAD_COMMIT_HASH: ""
137+
UPLOAD_REPO_FULL_NAME: ""
133138
name: RPCS3 Mac ${{ matrix.name }}
134139
runs-on: ${{ matrix.runs-on }}
135140
env:
@@ -140,6 +145,7 @@ jobs:
140145
RELEASE_MESSAGE: ../GitHubReleaseMessage.txt
141146
UPLOAD_COMMIT_HASH: ${{ matrix.UPLOAD_COMMIT_HASH }}
142147
UPLOAD_REPO_FULL_NAME: ${{ matrix.UPLOAD_REPO_FULL_NAME }}
148+
BUILD_MAC_KK: ${{ matrix.BUILD_MAC_KK }}
143149
RUN_UNIT_TESTS: ${{ matrix.name == 'Apple Silicon' && (github.event_name == 'pull_request' && 'ON') || 'OFF' }}
144150
steps:
145151
- name: Checkout repository
@@ -183,6 +189,7 @@ jobs:
183189
184190
- name: Deploy master build to GitHub Releases
185191
if: |
192+
env.BUILD_MAC_KK == 0 &&
186193
github.event_name != 'pull_request' &&
187194
github.repository == 'RPCS3/rpcs3' &&
188195
github.ref == 'refs/heads/master'
@@ -191,14 +198,14 @@ jobs:
191198
run: .ci/github-upload.sh
192199

193200
- name: Save Build Ccache
194-
if: github.ref == 'refs/heads/master'
201+
if: env.BUILD_MAC_KK == 0 && github.ref == 'refs/heads/master'
195202
uses: actions/cache/save@main
196203
with:
197204
path: ${{ env.CCACHE_DIR }}
198205
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
199206

200207
- name: Save Qt Cache
201-
if: github.ref == 'refs/heads/master'
208+
if: env.BUILD_MAC_KK == 0 && github.ref == 'refs/heads/master'
202209
uses: actions/cache/save@main
203210
with:
204211
path: /tmp/Qt

rpcs3/Emu/RSX/VK/VKCompute.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ namespace vk
7777
break;
7878
case vk::driver_vendor::MVK:
7979
case vk::driver_vendor::HONEYKRISP:
80+
case vk::driver_vendor::KOSMICKRISP:
8081
unroll_loops = true;
8182
optimal_kernel_size = 1;
8283
optimal_group_size = 256;

rpcs3/Emu/RSX/VK/VKHelpers.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@ namespace vk
143143
case driver_vendor::HONEYKRISP:
144144
// Needs more testing
145145
break;
146+
case driver_vendor::KOSMICKRISP:
147+
// Needs more testing
148+
break;
146149
case driver_vendor::PANVK:
147150
// Needs more testing
148151
break;

rpcs3/Emu/RSX/VK/VKRenderTargets.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ namespace vk
209209
case driver_vendor::LAVAPIPE:
210210
case driver_vendor::V3DV:
211211
case driver_vendor::HONEYKRISP:
212+
case driver_vendor::KOSMICKRISP:
212213
case driver_vendor::PANVK:
213214
case driver_vendor::ARM_MALI:
214215
break;

rpcs3/Emu/RSX/VK/VulkanAPI.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@
4040
constexpr VkDriverId VK_DRIVER_ID_MESA_HONEYKRISP = static_cast<VkDriverId>(26);
4141
#endif
4242

43+
#if VK_HEADER_VERSION < 287
44+
constexpr VkDriverId VK_DRIVER_ID_MESA_KOSMICKRISP = static_cast<VkDriverId>(28);
45+
#endif
46+
4347
#if VK_HEADER_VERSION < 332
4448
#define VK_EXT_shader_uniform_buffer_unsized_array 1
4549
#define VK_EXT_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_SPEC_VERSION 1

rpcs3/Emu/RSX/VK/vkutils/chip_class.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ namespace vk
5656
NVK,
5757
V3DV,
5858
HONEYKRISP,
59+
KOSMICKRISP,
5960
PANVK,
6061
ARM_MALI
6162
};

rpcs3/Emu/RSX/VK/vkutils/device.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,6 @@ namespace vk
285285

286286
driver_vendor physical_device::get_driver_vendor() const
287287
{
288-
#ifdef __APPLE__
289-
// moltenVK currently returns DRIVER_ID_MOLTENVK (0).
290-
// For now, assume the vendor is moltenVK on Apple devices.
291-
return driver_vendor::MVK;
292-
#endif
293-
294288
if (!driver_properties.driverID)
295289
{
296290
const auto gpu_name = get_name();
@@ -341,7 +335,11 @@ namespace vk
341335

342336
if (gpu_name.find("Apple") != umax)
343337
{
338+
#ifdef __APPLE__
339+
return driver_vendor::KOSMICKRISP;
340+
#else
344341
return driver_vendor::HONEYKRISP;
342+
#endif
345343
}
346344

347345
if (gpu_name.find("Panfrost") != umax)
@@ -380,10 +378,14 @@ namespace vk
380378
return driver_vendor::V3DV;
381379
case VK_DRIVER_ID_MESA_HONEYKRISP:
382380
return driver_vendor::HONEYKRISP;
381+
case VK_DRIVER_ID_MESA_KOSMICKRISP:
382+
return driver_vendor::KOSMICKRISP;
383383
case VK_DRIVER_ID_MESA_PANVK:
384384
return driver_vendor::PANVK;
385385
case VK_DRIVER_ID_ARM_PROPRIETARY:
386386
return driver_vendor::ARM_MALI;
387+
case VK_DRIVER_ID_MOLTENVK:
388+
return driver_vendor::MVK;
387389
default:
388390
// Mobile?
389391
return driver_vendor::unknown;

0 commit comments

Comments
 (0)