Driver Sumber Terbuka AMD untuk Vulkan® adalah driver Vulkan sumber terbuka untuk adaptor grafis Radeon™ di Linux®. Itu dibangun di atas Platform Abstraksi Library (PAL) AMD, sebuah komponen bersama yang dirancang untuk merangkum detail pemrograman spesifik perangkat keras dan OS tertentu untuk banyak driver 3D dan komputasi AMD. Memanfaatkan PAL dapat membantu memberikan pengalaman yang konsisten di seluruh platform, termasuk dukungan untuk GPU yang baru dirilis dan kompatibilitas dengan alat pengembang AMD.
Shader yang menyusun objek VkPipeline
tertentu dikompilasi sebagai satu entitas menggunakan pustaka LLVM-Based Pipeline Compiler (LLPC). LLPC dibangun berdasarkan infrastruktur kompilasi shader LLVM yang sudah ada untuk GPU AMD guna menghasilkan objek kode yang kompatibel dengan pipeline ABI PAL. Khususnya, driver Vulkan sumber tertutup AMD saat ini menggunakan kompiler pipeline yang berbeda, yang merupakan perbedaan utama antara driver Vulkan sumber terbuka dan sumber tertutup AMD.
Driver AMD Open Source untuk Vulkan dirancang untuk mendukung GPU AMD berikut:
Catatan Untuk GPU Pra-GFX10, harap gunakan rilis v-2023.Q3.3 atau lebih lama.
Driver AMD Open Source untuk Vulkan dirancang untuk mendukung distro dan versi berikut pada tumpukan driver upstream AMDGPU dan tumpukan driver AMDGPU Pro:
Driver belum diuji dengan baik di distro dan versi lain. Anda dapat mencobanya di distro dan versi lain pilihan Anda.
Catatan Untuk menjalankan driver Vulkan dengan tumpukan driver upstream AMDGPU pada GPU generasi SI dan CI, amdgpu.si_support dan amdgpu.cik_support harus diaktifkan di kernel
Driver AMD Open Source untuk Vulkan dirancang untuk mendukung fitur-fitur berikut:
Fitur dan peningkatan berikut direncanakan pada rilis mendatang (Silakan lihat Catatan Rilis untuk pembaruan setiap rilis):
uname -r
uname -r
atau sudo mkinitcpio --generate /boot/initrd .img- uname -r
uname -r
)Anda dipersilakan untuk mengirimkan kontribusi kode ke Driver Sumber Terbuka AMD untuk Vulkan.
Driver dibuat dari kode sumber di lima repositori: LLVM, XGL, LLPC, GPURT dan PAL.
Untuk perubahan pada LLVM, Anda harus mengirimkan kontribusi ke trunk LLVM. Komit di sana akan dievaluasi untuk digabungkan ke cabang amd-gfx-gpuopen-master secara berkala.
Untuk perubahan pada XGL, LLPC, GPURT dan PAL, silakan buat permintaan tarik terhadap cabang dev . Setelah perubahan Anda ditinjau dan jika diterima, maka akan dievaluasi untuk digabungkan ke cabang master dalam promosi reguler berikutnya.
PENTING : Dengan membuat pull request, Anda setuju untuk mengizinkan kontribusi Anda dilisensikan oleh pemilik proyek berdasarkan ketentuan Lisensi MIT.
Saat berkontribusi pada XGL, LLPC, GPURT, dan PAL, kode Anda harus:
Harap berikan setiap kontribusi dalam jumlah yang cukup kecil. Jika Anda ingin memberikan kontribusi besar, seperti fitur atau ekstensi baru, harap ajukan masalah terlebih dahulu agar perencanaan dapat mengevaluasi dan meninjau pekerjaan Anda.
Catatan Karena PAL adalah komponen bersama yang harus mendukung API lain, sistem operasi lain, dan perangkat keras pra-produksi, Anda mungkin diminta untuk merevisi perubahan PAL karena alasan yang mungkin tidak jelas dari perspektif driver Linux Vulkan murni.
Disarankan untuk memasang setidaknya 16GB RAM di sistem build Anda.
sudo apt-get install build-essential cmake curl g++-multilib gcc-multilib git ninja-build pkg-config python3 python3-jinja2 python3-ruamel.yaml
sudo apt-get install libssl-dev libx11-dev libxcb1-dev x11proto-dri2-dev libxcb-dri3-dev libxcb-dri2-0-dev libxcb-present-dev libxshmfence-dev libxrandr-dev libwayland-dev
dpkg --add-architecture i386
sudo apt-get install libssl-dev:i386 libx11-dev:i386 libxcb1-dev:i386 libxcb-dri3-dev:i386 libxcb-dri2-0-dev:i386 libxcb-present-dev:i386 libxshmfence-dev:i386 libwayland-dev libwayland-dev:i386 libxrandr-dev:i386
sudo yum -y install openssl-devel gcc-c++ python3 python3-pip curl glibc-devel libstdc++-devel libxcb-devel libX11-devel libxshmfence-devel libXrandr-devel wayland-devel
pip3 install jinja2 ruamel.yaml
sudo yum -y install openssl-devel.i686 gcc-c++ python3 python3-pip curl glibc-devel.i686 libstdc++-devel.i686 libxcb-devel.i686 libX11-devel.i686 libxshmfence-devel.i686 libXrandr-devel.i686 wayland-devel.i686
pip3 install jinja2 ruamel.yaml
Alat kompiler shader seperti DirectXShaderCompiler dan glslang perlu diinstal untuk membangun dukungan raytracing.
Disarankan untuk menginstalnya dari VulkanSDK 1.3.290 atau lebih tinggi.
Ubuntu 22.04 (Jammy)
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list
sudo apt update
sudo apt install vulkan-sdk
Dapatkan DirectXShaderCompiler dan kode sumber glslang dan buat alat di lokal.
#!/bin/bash
if [ ! -d DirectXShaderCompiler ]; then
git clone --depth=1 -b release-1.8.2403 https://github.com/microsoft/DirectXShaderCompiler.git
fi
if [ ! -d glslang ]; then
git clone --depth=1 -b vulkan-sdk-1.3.290.0 https://github.com/KhronosGroup/glslang.git
fi
cd DirectXShaderCompiler
git submodule init
git submodule update
cmake -H. -Bbuilds -GNinja -DCMAKE_BUILD_TYPE=Release -C ./cmake/caches/PredefinedParams.cmake
cmake --build builds
cd ..
cd glslang
cmake -H. -Bbuilds -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX='builds/install'
cd builds
make -j8 install
cd ../../
Setel env PATH dan LD_LIBRARY_PATH sebelum pembuatan driver amdvlk.
export PATH=/builds/bin:/install/bin:$PATH
export LD_LIBRARY_PATH=/builds/lib:$LD_LIBRARY_PATH
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:"$PATH"
mkdir vulkandriver
cd vulkandriver
repo init -u https://github.com/GPUOpen-Drivers/AMDVLK.git -b master
repo sync
Catatan Kode sumber di cabang dev dapat diperoleh dengan menggunakan "-b dev" pada perintah "repo init".
cmake -G Ninja -S xgl -B builds/Release64
cmake --build builds/Release64
cmake -G Ninja -S xgl -B builds/Release32 -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32
cmake --build builds/Release32
Catatan
- Untuk debug build, gunakan
-DCMAKE_BUILD_TYPE=Debug -DLLVM_PARALLEL_LINK_JOBS=2
(Menautkan build debug llvm sangat memakan memori, jadi kami hanya menggunakan dua pekerjaan paralel).- Jika Anda ingin membuat alat (seperti amdllpc) bersama dengan driver, tambahkan
-m build_with_tools.xml
di repo init dan tambahkan opsi build-DXGL_BUILD_TOOLS=ON
.
Anda dapat mengunduh dan menginstal paket SDK di sini.
sudo apt install libssl3
sudo yum install openssl-libs
sudo cmake --install builds/Release64 --component icd
sudo cmake --install builds/Release32 --component icd
Jika Anda ingin menginstal driver ke direktori khusus, Anda dapat menambahkan "-DCMAKE_INSTALL_PREFIX={direktori instalasi}" di perintah cmake build. File JSON akan diinstal ke /etc/vulkan/icd.d sementara file lain akan diinstal ke direktori instalasi yang Anda tentukan.
Jika RADV juga diinstal pada sistem, driver AMDVLK akan diaktifkan secara default setelah instalasi. Anda dapat mengganti driver antara AMDVLK dan RADV dengan variabel lingkungan AMD_VULKAN_ICD = AMDVLK atau RADV.
Catatan: Langkah selanjutnya hanya diperlukan saat menjalankan tumpukan driver upstream AMDGPU.
Tambahkan baris berikut di /usr/share/X11/xorg.conf.d/10-amdgpu.conf:
Section "Device"
Identifier "AMDgpu"
Option "DRI" "3"
EndSection
Dan pastikan baris berikut TIDAK termasuk dalam bagian:
Driver "modesetting"
Pada tumpukan driver upstream AMDGPU dengan versi libdrm lebih rendah dari 2.4.92, jumlah maksimal IB per pengiriman HARUS dibatasi hingga 4 (pengaturan default pada driver AMD Open Source untuk Vulkan adalah 16). Hal ini dapat dicapai melalui mekanisme Runtime Settings dengan menambahkan baris berikut ke amdPalSettings.cfg:
MaxNumCmdStreamsPerSubmit,4
CommandBufferCombineDePreambles,1
Anda dapat membuat paket instalasi dengan perintah di bawah ini sambil membuat driver:
cmake -G Ninja -S xgl -B builds/Release64 [-DPACKAGE_VERSION=package version]
cmake --build builds/Release64 --target makePackage
cmake -G Ninja -S xgl -B builds/Release64 [-DPACKAGE_VERSION=package version]
cmake --build builds/Release64 --target makePackage
Anda juga dapat mengunduh paket bawaan dari https://github.com/GPUOpen-Drivers/AMDVLK/releases untuk setiap promosi kode di cabang master.
Di bawah ini adalah instruksi instalasi:
sudo dpkg -r amdvlk # If old version is installed on the machine, remove it first
sudo dpkg -i amdvlk_x.x.x_amd64.deb
sudo apt-get -f install
sudo rpm -e amdvlk # If old version is installed on the machine, remove it first
sudo rpm -i amdvlk-x.x.x.x86_64.rpm
Untuk Ubuntu, Anda juga dapat menginstal driver terbaru dari https://repo.radeon.com:
sudo wget -qO - http://repo.radeon.com/amdvlk/apt/debian/amdvlk.gpg.key | sudo apt-key add -
sudo sh -c 'echo deb [arch=amd64,i386] http://repo.radeon.com/amdvlk/apt/debian/ bionic main > /etc/apt/sources.list.d/amdvlk.list'
sudo apt-get remove amdvlk # If old version is installed on the machine, remove it first
sudo apt update
sudo apt-get install amdvlk
Pengemudi memperlihatkan banyak pengaturan yang dapat menyesuaikan perilaku pengemudi dan memfasilitasi proses debug. Anda dapat menambahkan/mengedit pengaturan di file amdVulkanSettings.cfg atau amdPalSettings.cfg di bawah salah satu jalur di bawah ini, diformat dengan satu name,value
per baris:
Beberapa contoh pengaturan tercantum di bawah ini:
Nama Pengaturan | Nilai yang Valid | Komentar |
---|---|---|
AllowVkPipelineCachingToDisk | 0: tidak mengizinkan 1: bawaan | 1 adalah nilai default yang mengaktifkan caching berbasis file arsip Pal. File arsip disimpan di ~/.cache/AMD/VkCache. |
ShaderCacheMode | 0: nonaktifkan tembolok 1: cache waktu proses 2: cache ke disk | Cache runtime adalah mode default. Untuk "cache ke disk", file cache dibuat di bawah $AMD_SHADER_DISK_CACHE_PATH/AMD/LlpcCache atau $XDG_CACHE_HOME/AMD/LlpcCache atau $HOME/.cache/AMD/LlpcCache |
IFH | 0: bawaan 1: batalkan semua kiriman | Perangkat Keras yang Sangat Cepat. Kirim panggilan dibatalkan sebelum dikirim ke perangkat keras. Berguna untuk mengukur kinerja terbatas CPU. |
EnableVmAlwaysValid | 0: nonaktifkan 1: bawaan 2: aktifkan secara paksa | 1 adalah pengaturan default yang mengaktifkan fitur VM-selalu-valid untuk kernel 4.16 dan yang lebih baru. Fitur ini dapat mengurangi overhead pengiriman buffer perintah yang terkait dengan manajemen memori virtual. |
IdleAfterSubmitGpuMask | Bitmask GPU (yaitu, bit 0 adalah GPU0, dll.) | Memaksa CPU untuk segera menunggu setiap pengiriman GPU selesai pada kumpulan GPU yang ditentukan. |
Semua pengaturan yang tersedia dapat ditentukan dengan memeriksa file sumber di bawah yang mendefinisikannya.
Pengaturan runtime hanya dibaca saat inisialisasi perangkat, dan tidak dapat diubah tanpa memulai ulang aplikasi. Jika dijalankan pada sistem dengan banyak GPU, pengaturan yang sama akan berlaku untuk semuanya. Baris dalam file pengaturan yang dimulai dengan ;
akan diperlakukan sebagai komentar.
Ekstensi yang sedang dikembangkan tidak diaktifkan secara default di driver. Anda dapat mengaktifkannya melalui variabel lingkungan:
export AMDVLK_ENABLE_DEVELOPING_EXT=" [...]"
atau
export AMDVLK_ENABLE_DEVELOPING_EXT="all"
Nama ekstensi tidak peka huruf besar-kecil.
GpuProfiler adalah lapisan opsional yang dirancang untuk mencegat antarmuka PAL untuk memberikan dukungan pembuatan profil GPU dasar. Saat ini, lapisan ini dikontrol secara eksklusif melalui pengaturan runtime dan mengeluarkan hasilnya ke file.
Anda dapat menggunakan Pengaturan Waktu Proses berikut untuk menghasilkan file .csv dengan pengaturan waktu kerja GPU yang dilakukan selama frame yang ditentukan pada aplikasi (satu file untuk setiap frame):
Nama Pengaturan | Nilai | Komentar |
---|---|---|
GpuProfilerMode | 0: nonaktifkan 1: aktifkan dengan sqtt mati 2: aktifkan dengan sqtt untuk pelacakan utas 3: aktifkan dengan sqtt untuk RGP | Mengaktifkan dan menyetel mode SQTT untuk lapisan profiler kinerja GPU. Pengambilan data kinerja yang sebenarnya harus ditentukan melalui nomor bingkai dengan GpuProfilerConfig_StartFrame atau dengan menekan shift-F11. |
GpuProfilerConfig.LogDirectory | | Jalur direktori relatif terhadap $AMD_DEBUG_DIR atau $TMPDIR atau /var/tmp/, nilai defaultnya adalah "amdpal/". Aplikasi Anda harus memiliki izin menulis ke direktori. Log pembuatan profil dikeluarkan ke subdirektori yang diberi nama dalam format seperti |
GpuProfilerConfig.Granularity | 0: per undian 1: per-cmdbuf | Mendefinisikan apa yang diukur/diprofilkan. Per-draw kali perintah individual (seperti draw, pengiriman, dll.) di dalam buffer perintah, sedangkan per-cmdbuf hanya memprofilkan seluruh buffer perintah secara agregat. |
GpuProfilerConfig.StartFrame | Bilangan bulat positif | Bingkai pertama untuk mengambil data. Jika StartFrame dan FrameCount tidak disetel, semua frame akan diprofilkan. |
GpuProfilerConfig.FrameCount | Bilangan bulat positif | Jumlah frame untuk mengambil data. |
GpuProfilerConfig.RecordPipelineStats | 0, 1 | Mengumpulkan data kueri statistik saluran per entri jika diaktifkan. |
Anda dapat menggunakan skrip timingReport.py untuk menganalisis log profil:
python timingReport.py
Output dari timeReport.py mencakup informasi saluran pipa teratas seperti di bawah ini:
Top Pipelines (>= 1%)
Compiler Hash | Type | Avg. Call Count | Avg. GPU Time [us] | Avg. Frame %
1. 0xd91d15e42d62dcbb | VsPs | 43 | 11,203.15 | 10.20 %
2. 0x724e9af55f2adf1b | Cs | 1 | 9,347.50 | 8.51 %
3. 0x396e5ad6f7a789f7 | VsHsDsPs | 468 | 8,401.35 | 7.65 %
Anda dapat menambahkan pengaturan berikut ke amdPalSettings.cfg untuk membuang informasi setiap alur:
EnablePipelineDump,1
PipelineDumpDir,
PipelineDumpDir adalah sub-jalur yang berhubungan dengan $AMD_DEBUG_DIR atau $TMPDIR atau /var/tmp/, nilai defaultnya adalah "spvPipeline/". File dump pipa diberi nama dalam format seperti Pipeline
Debug overlay PAL dapat diaktifkan untuk menampilkan statistik dan informasi waktu nyata di atas aplikasi yang sedang berjalan. Ini termasuk rata-rata FPS bergulir, waktu frame CPU dan GPU, dan buku besar yang melacak berapa banyak memori video yang telah dialokasikan dari setiap heap yang tersedia. Pembandingan (yaitu, "Benchmark (F11)") saat ini tidak didukung.
Nama Pengaturan | Nilai | Komentar |
---|---|---|
DebugOverlayEnabled | 0, 1 | Mengaktifkan hamparan debug. |
DebugOverlayConfig.DebugOverlayLocation | 0: kiri atas 1: kanan atas 2: kiri bawah 3: kanan bawah | Menentukan di mana teks overlay harus ditampilkan. Dapat digunakan untuk menghindari tabrakan dengan rendering penting oleh aplikasi. |
DebugOverlayConfig.PrintFrameNumber | 0, 1 | Melaporkan nomor bingkai saat ini. Berguna saat menentukan rentang frame yang baik untuk pembuatan profil dengan lapisan GpuProfiler. |
DebugOverlayConfig.TimeGraphEnable | 0, 1 | Memungkinkan rendering grafik waktu frame CPU dan GPU terkini. |
Driver AMD Open Source untuk Vulkan berisi kode yang ditulis oleh pihak ketiga.
Informasi yang terkandung di sini hanya untuk tujuan informasi saja, dan dapat berubah tanpa pemberitahuan. Dokumen ini mungkin mengandung ketidakakuratan teknis, kelalaian dan kesalahan ketik, dan AMD tidak berkewajiban untuk memperbarui atau memperbaiki informasi ini. Advanced Micro Devices, Inc. tidak membuat pernyataan atau jaminan sehubungan dengan keakuratan atau kelengkapan isi dokumen ini, dan tidak bertanggung jawab dalam bentuk apa pun, termasuk jaminan tersirat atas tidak adanya pelanggaran, dapat diperjualbelikan, atau kesesuaian untuk tujuan tertentu, sehubungan dengan pengoperasian atau penggunaan perangkat keras, perangkat lunak, atau produk AMD lainnya yang dijelaskan di sini. Tidak ada lisensi, termasuk tersirat atau timbul berdasarkan estoppel, atas hak kekayaan intelektual apa pun yang diberikan oleh dokumen ini. Syarat dan batasan yang berlaku pada pembelian atau penggunaan produk AMD adalah sebagaimana tercantum dalam perjanjian yang ditandatangani antara para pihak atau dalam Syarat dan Ketentuan Penjualan Standar AMD.
AMD, logo AMD Arrow, Radeon, FirePro, dan kombinasinya adalah merek dagang dari Advanced Micro Devices, Inc. Nama produk lain yang digunakan dalam publikasi ini hanya untuk tujuan identifikasi dan mungkin merupakan merek dagang dari perusahaannya masing-masing.
Vega adalah nama kode untuk arsitektur AMD, dan bukan merupakan nama produk.
Linux adalah merek dagang terdaftar Linus Torvalds di AS dan negara lain.
Vulkan dan logo Vulkan adalah merek dagang terdaftar dari Khronos Group, Inc.