Π ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠΏΡΡΠΊΠ° Mesa 20.2, ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ RADV, Vulkan-Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π΄Π»Ρ ΡΠΈΠΏΠΎΠ² AMD, Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±ΡΠΊΠ΅Π½Π΄Π° Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² ««, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Valve Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² LLVM. Π£ΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ³Ρ ΠΈ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°. ΠΠ»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΡΠ°ΡΠΎΠ³ΠΎ Π±ΡΠΊΠ΅Π½Π΄Π° ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Β«RADV_DEBUG=llvmΒ».
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° RADV Π½Π° Π½ΠΎΠ²ΡΠΉ Π±ΡΠΊΠ΅Π½Π΄ ΡΡΠ°Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ Π² ACO ΠΏΠ°ΡΠΈΡΠ΅ΡΠ° ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΎ ΡΡΠ°ΡΡΠΌ Π±ΡΠΊΠ΅Π½Π΄ΠΎΠΌ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΌ AMD Π΄Π»Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° AMDGPU, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π² OpenGL-Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ΅ RadeonSI. ΠΡΠΎΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Valve ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ , ΡΡΠΎ ACO ΠΏΠΎΡΡΠΈ Π² Π΄Π²Π° ΡΠ°Π·Π° ΠΏΡΠ΅Π²ΠΎΡΡ
ΠΎΠ΄ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² AMDGPU ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ FPS Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΈΠ³ΡΠ°Ρ
, ΠΏΡΠΈ ΠΈΡ
ΡΠ°Π±ΠΎΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠΌ RADV.
ΠΡΠΊΠ΅Π½Π΄ ACO Π½Π°ΡΠ΅Π»Π΅Π½ Π½Π° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π°, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² ΠΈΠ³ΡΠΎΠ²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π° Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ACO Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘++, ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Ρ ΠΎΠ³Π»ΡΠ΄ΠΊΠΎΠΉ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π»Ρ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΡΡΡΡΡΠ΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΈΠ·Π±Π΅Π³Π°Ρ ΡΡΡΡΠΊΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ. ΠΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° SSA (Static Single Assignment) ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ², ΡΠΎΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΡΡ ΡΠ΅Π³ΠΈΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠ°.
ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ACO ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Vulkan-Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Mesa RADV. ΠΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ACO , ΡΡΠΎ ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π½Π°ΡΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ACO Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ OpenGL-Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° RadeonSI, ΡΡΠΎΠ±Ρ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° ACO ΡΠΌΠΎΠ³ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΡΠΉΠ΄Π΅ΡΠΎΠ² LLVM.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
