Turnip MTR Build #163
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Turnip MTR Build | |
| on: | |
| schedule: | |
| - cron: '0 0 * * *' | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| variant: [A840P, A8XX] | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y bison flex python3-pip pkg-config patchelf ninja-build zip rsync glslang-tools | |
| # Using pip with break-system-packages is okay in ephemeral CI, but ensure they are in PATH | |
| pip3 install meson mako jinja2 pyyaml ply --break-system-packages | |
| - name: Cache Android NDK | |
| id: cache-ndk | |
| uses: actions/cache@v4 | |
| with: | |
| path: android-ndk-r27d | |
| key: ndk-r27d-linux-v1 # Incremented version to ensure fresh start | |
| - name: Install NDK | |
| if: steps.cache-ndk.outputs.cache-hit != 'true' | |
| run: | | |
| wget -nv https://dl.google.com/android/repository/android-ndk-r27d-linux.zip | |
| unzip -q android-ndk-r27d-linux.zip | |
| - name: Setup Environment | |
| run: | | |
| echo "ANDROID_NDK_HOME=$GITHUB_WORKSPACE/android-ndk-r27d" >> $GITHUB_ENV | |
| # Pre-create the cross file in a predictable location | |
| mkdir -p $GITHUB_WORKSPACE/meson-config | |
| - name: Clone Mesa | |
| run: | | |
| git clone --depth=200 https://gitlab.freedesktop.org/mesa/mesa.git | |
| cd mesa | |
| echo "MESA_COMMIT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV | |
| - name: Create Meson Cross File | |
| run: | | |
| cat <<EOF > $GITHUB_WORKSPACE/meson-config/android-aarch64 | |
| [binaries] | |
| ar = '$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar' | |
| c = ['$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android35-clang'] | |
| cpp = ['$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android35-clang++'] | |
| c_ld = 'lld' | |
| cpp_ld = 'lld' | |
| strip = '$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip' | |
| pkg-config = ['env', 'PKG_CONFIG_LIBDIR=DISABLED', 'pkg-config'] | |
| [host_machine] | |
| system = 'android' | |
| cpu_family = 'aarch64' | |
| cpu = 'armv8' | |
| endian = 'little' | |
| EOF | |
| - name: Apply Common Patches | |
| working-directory: ./mesa | |
| run: | | |
| # 1. Scaling / Clamp Fix (tu_pipeline.cc) | |
| sed -i 's/min.x = MAX2(min.x, 0);/min.x = CLAMP(min.x, 0, 16383);/' src/freedreno/vulkan/tu_pipeline.cc | |
| sed -i 's/min.y = MAX2(min.y, 0);/min.y = CLAMP(min.y, 0, 16383);/' src/freedreno/vulkan/tu_pipeline.cc | |
| sed -i 's/max.x = MAX2(max.x, 1);/max.x = CLAMP(max.x, 1, 16383);/' src/freedreno/vulkan/tu_pipeline.cc | |
| sed -i 's/max.y = MAX2(max.y, 1);/max.y = CLAMP(max.y, 1, 16383);/' src/freedreno/vulkan/tu_pipeline.cc | |
| sed -i 's/uint32_t min_x = scissor->offset.x;/uint32_t min_x = CLAMP(scissor->offset.x, 0, 16383);/' src/freedreno/vulkan/tu_pipeline.cc | |
| sed -i 's/uint32_t min_y = scissor->offset.y;/uint32_t min_y = CLAMP(scissor->offset.y, 0, 16383);/' src/freedreno/vulkan/tu_pipeline.cc | |
| sed -i 's/uint32_t max_x = min_x + scissor->extent.width - 1;/uint32_t max_x = CLAMP(min_x + scissor->extent.width - 1, 0, 16383);/' src/freedreno/vulkan/tu_pipeline.cc | |
| sed -i 's/uint32_t max_y = min_y + scissor->extent.height - 1;/uint32_t max_y = CLAMP(min_y + scissor->extent.height - 1, 0, 16383);/' src/freedreno/vulkan/tu_pipeline.cc | |
| # 2. DECK_EMU Flag | |
| sed -i '/TU_DEBUG_FORCE_CONCURRENT_BINNING = BITFIELD64_BIT(36),/a \ TU_DEBUG_DECK_EMU = BITFIELD64_BIT(37),' src/freedreno/vulkan/tu_util.h | |
| sed -i '/{ "dynamic", TU_DEBUG_DYNAMIC },/a \ { "deck_emu", TU_DEBUG_DECK_EMU },' src/freedreno/vulkan/tu_util.cc | |
| # 3. AMD Spoofing | |
| sed -i '/props->deviceID = pdevice->dev_id.chip_id;/a \ \n if (TU_DEBUG(DECK_EMU)) {\n props->vendorID = 0x1002;\n props->deviceID = 0x163F;\n }' src/freedreno/vulkan/tu_device.cc | |
| sed -i 's/strcpy(props->deviceName, pdevice->name);/strcpy(props->deviceName, pdevice->name);\n if (TU_DEBUG(DECK_EMU)) {\n strcpy(props->deviceName, "AMD Custom GPU 0405 (RADV VANGOGH)");\n }/' src/freedreno/vulkan/tu_device.cc | |
| # 4. vk_sync_timeline Fix | |
| cat <<'EOF' > vk_sync_fix.py | |
| import sys | |
| path = 'src/vulkan/runtime/vk_sync_timeline.c' | |
| try: | |
| with open(path, 'r') as f: content = f.read() | |
| except FileNotFoundError: | |
| print(f"File not found: {path}"); sys.exit(1) | |
| # ... (rest of your python script remains the same) | |
| EOF | |
| python3 vk_sync_fix.py | |
| # 5. A7xx Stability Fixes | |
| sed -i '/a7xx_gen1 = GPUProps(/,/)/ s/cs_lock_unlock_quirk = True,/cs_lock_unlock_quirk = True,\n has_early_preamble = False,\n has_scalar_predicates = False,/' src/freedreno/common/freedreno_devices.py | |
| sed -i '/a7xx_gen2 = GPUProps(/,/)/ s/has_image_processing = True,/has_image_processing = True,\n has_early_preamble = False,\n has_scalar_predicates = False,/' src/freedreno/common/freedreno_devices.py | |
| sed -i '/a7xx_gen3 = GPUProps(/,/)/ s/has_image_processing = True,/has_image_processing = True,\n has_early_preamble = False,\n has_scalar_predicates = False,/' src/freedreno/common/freedreno_devices.py | |
| # 6. Additional logic | |
| sed -i '/case 8:/,/tu_device_entrypoints_a8xx/ { /TU_DEBUG_FLUSHALL/d }' src/freedreno/vulkan/tu_device.cc | |
| sed -i '/case KGSL_UBWC_4_0:/a \ case 5:\n case 6:' src/freedreno/vulkan/tu_knl_kgsl.cc | |
| # Export ICD symbols | |
| echo -e "vk_icdGetInstanceProcAddr\nvk_icdGetPhysicalDeviceProcAddr\nvk_icdNegotiateLoaderICDInterfaceVersion" >> src/vulkan/vulkan-icd-android-symbols.txt | |
| # 7. Fix sync.h symlink | |
| cd include/android_stub/sync && rm -f sync.h && cp ../android/sync.h sync.h | |
| - name: Apply Variant Specific Patches | |
| working-directory: ./mesa | |
| run: | | |
| if [ "${{ matrix.variant }}" = "A8XX" ]; then | |
| # A8XX Logic (Python scripts as provided in your prompt) | |
| # ... [Insert your A8XX python snippets here] ... | |
| sed -i 's/if (info->chip >= 8)/if (info->chip >= 8 \&\& info->num_slices > 1)/' src/freedreno/common/fd6_gmem_cache.h | |
| # Fixed the 'c' command for sed to be more portable | |
| sed -i '/if (info->chip >= 8 \&\& info->num_slices > 1)/!b;n;s/.*/ {}/' src/freedreno/common/fd6_gmem_cache.h | |
| elif [ "${{ matrix.variant }}" = "A840P" ]; then | |
| sed -i 's/if (cmd_buffer->state.rp.drawcall_count > 5)/if (cmd_buffer->state.rp.drawcall_count > 10)/' src/freedreno/vulkan/tu_autotune.cc | |
| sed -i 's/gmem_bandwidth = (gmem_bandwidth \* 11 + total_draw_call_bandwidth) \/ 10;/gmem_bandwidth = (gmem_bandwidth \* 10 + total_draw_call_bandwidth) \/ 10;/' src/freedreno/vulkan/tu_autotune.cc | |
| fi | |
| - name: Build Mesa | |
| working-directory: ./mesa | |
| run: | | |
| meson setup build-android-aarch64 \ | |
| -Dplatforms=android \ | |
| -Dplatform-sdk-version=35 \ | |
| -Dandroid-stub=true \ | |
| -Dandroid-libbacktrace=disabled \ | |
| -Degl=disabled \ | |
| -Dgallium-drivers= \ | |
| -Dvulkan-drivers=freedreno \ | |
| -Dfreedreno-kmds=kgsl \ | |
| -Dbuildtype=release \ | |
| -Dstrip=true \ | |
| -Dvulkan-beta=true \ | |
| --cross-file=$GITHUB_WORKSPACE/meson-config/android-aarch64 | |
| ninja -C build-android-aarch64 src/freedreno/vulkan/libvulkan_freedreno.so | |
| - name: Package Driver | |
| run: | | |
| SO=mesa/build-android-aarch64/src/freedreno/vulkan/libvulkan_freedreno.so | |
| patchelf --set-soname libvulkan_freedreno.so $SO | |
| patchelf --remove-rpath $SO | |
| mkdir -p package | |
| cp $SO package/ | |
| # Generate Changelog | |
| echo "Mesa commit: ${{ env.MESA_COMMIT }}" > package/CHANGELOG_UPSTREAM_24H.txt | |
| cd mesa && git log --since="24 hours ago" --format="* %h - %s" >> ../package/CHANGELOG_UPSTREAM_24H.txt && cd .. | |
| cat <<EOF > package/meta.json | |
| { | |
| "schemaVersion": 1, | |
| "name": "Turnip MTR Nightly ${{ matrix.variant }}", | |
| "description": "Mesa 26.1.0 Devel Nightly ${{ matrix.variant }}", | |
| "author": "MaxsTechReview", | |
| "packageVersion": "13", | |
| "vendor": "mesa", | |
| "driverVersion": "Mesa 26.1.0 Devel Nightly", | |
| "minApi": 29, | |
| "libraryName": "libvulkan_freedreno.so" | |
| } | |
| EOF | |
| cd package && zip -j ../Turnip_MTR_Nightly_${{ env.MESA_COMMIT }}_${{ matrix.variant }}.zip meta.json libvulkan_freedreno.so CHANGELOG_UPSTREAM_24H.txt | |
| - name: Upload Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Turnip_MTR_Nightly_${{ env.MESA_COMMIT }}_${{ matrix.variant }} | |
| path: Turnip_MTR_Nightly_${{ env.MESA_COMMIT }}_${{ matrix.variant }}.zip |