Vulkan API (glNext) ពី Khronos Group ។ គម្រោង Vulkan: OpenGL នឹងបំពេញបន្ថែម API ថ្មី។

សេចក្តីផ្តើម

ប្រសិនបើអ្នកកំពុងប្រឈមមុខនឹងបញ្ហានៃ FPS ទាបនៅក្នុង DOOM ហើយចង់ជួសជុលវា នោះអ្នកបានមកដល់កន្លែងត្រឹមត្រូវហើយ។
រឿងវេទមន្ត Vulkan API បង្កើន FPS ដោយជាមធ្យម 15-25 ហ្វ្រេម (អាស្រ័យលើការកំណត់រចនាសម្ព័ន្ធកុំព្យូទ័ររបស់អ្នក) ប្រែទៅជាមិនស្រួល 20-30 FPS ទៅជា 50-60 ដែលអាចលេងបានទាំងស្រុង។

យកចិត្តទុកដាក់! មុនពេលអនុវត្តជំហានដែលបានពិពណ៌នានៅក្នុងសៀវភៅណែនាំ អ្នកត្រូវតែធ្វើឱ្យប្រាកដថាកុំព្យូទ័ររបស់អ្នកបំពេញតាមតម្រូវការប្រព័ន្ធអប្បបរមា!

តើ Vulkan API ជាអ្វី?

តើ​សត្វ​ប្រភេទ​នេះ​ជា​ប្រភេទ​អ្វី ហើយ​តើ​វា​គ្រប់គ្រង​ដោយ​របៀប​ណា​ដើម្បី​បង្កើន​ផលិតភាព​យ៉ាង​ខ្លាំង?

Vulkan API គឺជាចំណុចប្រទាក់កម្មវិធីក្រាហ្វិកដែលត្រូវបានរចនាឡើងដើម្បីបង្ហាញក្រាហ្វិក 3D និង 2D នៅលើម៉ូនីទ័ររបស់អ្នក។ និយាយឱ្យសាមញ្ញ ល្បិចនេះប្រើធនធានកុំព្យូទ័ររបស់អ្នកដើម្បីបង្កើតក្រាហ្វិកនៅក្នុងហ្គេម។ OpenGL និង DirectX គឺមកពីរឿងដូចគ្នា។

ហេតុអ្វីបានជាវាផ្តល់ឱ្យ FPS កើនឡើងបែបនេះ? ជាការពិតណាស់ ខ្ញុំអាចចាប់ផ្តើមប្រាប់អ្នកអំពីបច្ចេកវិទ្យាទំនើបដែលប្រើក្នុងវា ប៉ុន្តែសម្រាប់ភាពសាមញ្ញ ខ្ញុំនឹងនិយាយថាវាប្រើប្រាស់ផ្នែករឹងកុំព្យូទ័រយ៉ាងមានប្រសិទ្ធភាពជាង OpenGL ជំនាន់មុនរបស់វា។

តើខ្ញុំបើកវាដោយរបៀបណា?

វាសាមញ្ញណាស់ តោះចាប់ផ្តើមជាមួយជំហានដំបូង៖

ជំហានទីមួយ៖

ធ្វើបច្ចុប្បន្នភាពកម្មវិធីបញ្ជាកាតវីដេអូរបស់អ្នកទៅ ចុងក្រោយ កំណែដែលអាចធ្វើបាន. ប្រសិនបើអ្នកមិនដឹងពីរបៀបធ្វើវាទេ សូមសួរ ព្រោះការណែនាំសម្រាប់ការអាប់ដេតពួកវាមានរយៈពេលយូរណាស់ ហើយសៀវភៅណែនាំមិននិយាយអំពីវាទាល់តែសោះ។

ជំហានទីពីរ៖

តោះចាប់ផ្តើម DOOM ដោយខ្លួនឯង។ ចូលទៅកាន់ការកំណត់> កម្រិតខ្ពស់ ហើយនៅក្នុងធាតុ " API ក្រាហ្វិក" ជ្រើសរើស "Vulkan API" ជំនួសឱ្យ "OpenGL" ។ ចាប់ផ្តើមហ្គេមឡើងវិញ។

ជំហានទីបី៖

តោះចូលទៅក្នុងហ្គេម ហើយរីករាយជាមួយការបង្កើនប្រសិទ្ធភាព!

សំខាន់៖

ដំណើរការប្រសើរឡើងគឺអាស្រ័យយ៉ាងខ្លាំងទៅលើលក្ខណៈនៃកុំព្យូទ័ររបស់អ្នក។ នៅលើការកំណត់រចនាសម្ព័ន្ធរបស់ខ្ញុំ ការកើនឡើងគឺច្រើនរហូតដល់ 30 FPS សម្រាប់អ្នកខ្លះវាអាចតិចជាងច្រើន ខណៈពេលដែលអ្នកផ្សេងទៀតប្រហែលជាមិនមានអារម្មណ៍ខុសគ្នាទាល់តែសោះ។ ហើយជាទូទៅវាជាការឆោតល្ងង់ក្នុងការរំពឹងថានឹងមានយ៉ាងហោចណាស់ 30 FPS ពីឡដុតជាមួយ Vulkan ប្រសិនបើវាស្ទើរតែផលិតបាន 10 នៅការកំណត់អប្បបរមា។

ហ្គេមមិនចាប់ផ្តើមបន្ទាប់ពីបើក Vulcan API តើខ្ញុំគួរធ្វើអ្វី?

ហេតុផលទី ១៖

អ្នកមិនបានអាប់ដេតកម្មវិធីបញ្ជា ឬអ្នកទាញយកកំណែខុស។ កំពុងបង្ហោះកំណែថ្មី/មានស្ថេរភាព។

ហេតុផល​ទី​ពីរ៖

កាតវីដេអូរបស់អ្នកមិនអាចចូលប្រើ Vulkan API បានទេ។ នេះក៏អាចកើតឡើងដែរ ប៉ុន្តែប្រូបាប៊ីលីតេគឺតូចណាស់។ ប្រសិនបើកាតវីដេអូសម តម្រូវការអប្បបរមា- វាពិតជាអាចដំណើរការជាមួយ Vulkan API ។ បើមិនដូច្នោះទេ បង្វិលហ្គេមទៅការកំណត់លំនាំដើម ហើយរងទុក្ខជាមួយ OpenGL

តើធ្វើដូចម្តេចដើម្បីបង្វិលហ្គេមត្រឡប់ទៅ OpenGL ប្រសិនបើគ្មានអ្វីដំណើរការ?

ប្រសិនបើហ្គេមបដិសេធមិនដំណើរការបន្ទាប់ពីប្តូរទៅ Vulkan នេះជាវិធីមួយដើម្បីប្តូរទៅ OpenGL វិញ៖
ដំបូងអ្នកត្រូវចូលទៅកាន់ថតរក្សាទុក វាមានទីតាំងនៅផ្លូវនេះ៖
C:\Users\<имя_пользователя>\Saved Games\id Software\DOOM\base
បន្ទាប់យើងរកឃើញឯកសារនៅក្នុងវា។ DOOMConfig.localហើយបើកវាជាមួយ notepad ។
កំពុងរកមើលប៉ារ៉ាម៉ែត្រ r_renderapiនិងផ្លាស់ប្តូរអត្ថន័យរបស់វា។ 1 នៅលើ 0 (1 - VulkanAPI, 0 - OpenGL)
រក្សាទុកឯកសារហើយបិទវា។ ហ្គេមគួរតែចាប់ផ្តើមឥឡូវនេះ។

អរគុណច្រើនចំពោះអ្នកប្រើប្រាស់ arikuto សម្រាប់ការស្វែងរកការណែនាំ!

កុំភ្លេចវាយតម្លៃការណែនាំ ឬទុកការរិះគន់/ការណែនាំរបស់អ្នក!

ថ្មីៗនេះ Vulkan API ថ្មីត្រូវបានចេញផ្សាយ - អាចនិយាយបានថា អ្នកស្នងតំណែងរបស់ OpenGL ទោះបីជា Vulkan ផ្អែកលើ Mantle API ពី AMD ក៏ដោយ។
ជាការពិតណាស់ ការអភិវឌ្ឍន៍ និងការគាំទ្ររបស់ OpenGL មិនបានបញ្ឈប់នោះទេ ហើយ DirectX 12 ក៏ត្រូវបានចេញផ្សាយជាអកុសល (ឬប្រហែលជាសំណាងល្អ) ខ្ញុំមិនដឹងថាមានអ្វីកើតឡើងជាមួយ DirectX 12 ហើយហេតុអ្វីបានជាវាត្រូវបានដំឡើងនៅលើ Windows 10 ប៉ុណ្ណោះ។ ប៉ុន្តែ Vulkan ឆ្លងវេទិកាចាប់អារម្មណ៍ខ្ញុំ។ តើអ្វីទៅជាលក្ខណៈពិសេសរបស់ Vulkan និងរបៀបប្រើវាឱ្យបានត្រឹមត្រូវខ្ញុំនឹងព្យាយាមប្រាប់អ្នកនៅក្នុងអត្ថបទនេះ។

ដូច្នេះតើ Vulkan សម្រាប់អ្វី ហើយតើវាអាចប្រើបាននៅឯណា? នៅក្នុងហ្គេម និងកម្មវិធីដែលដំណើរការជាមួយក្រាហ្វិក? ប្រាកដណាស់! គណនាដូច CUDA ឬ OpenCL ធ្វើ? គ្មានបញ្ហាទេ។ តើ​យើង​ពិត​ជា​ត្រូវ​ការ​បង្អួច ឬ​ការ​បង្ហាញ​សម្រាប់​វា​មែន​ទេ? ជាការពិតណាស់ មិនមែនទេ អ្នកអាចជ្រើសរើសកន្លែងដែលត្រូវចាក់ផ្សាយលទ្ធផលរបស់អ្នក ឬមិនចាក់ផ្សាយវាទាល់តែសោះ។ ប៉ុន្តែរឿងដំបូង។

ការរចនា API និងមូលដ្ឋាន

ប្រហែលជាយើងគួរតែចាប់ផ្តើមដោយសាមញ្ញបំផុត។ ចាប់តាំងពី Vulkan API ត្រូវបានបង្កើតឡើងដោយ Khronous Group វាក្យសម្ព័ន្ធគឺស្រដៀងទៅនឹង OpenGL ។ API ទាំងមូលមានបុព្វបទ vk ។ ឧទាហរណ៍ មុខងារ (ជួនកាលសូម្បីតែឈ្មោះវែងៗ) មើលទៅដូចនេះ៖ vkDoSomething(...) ឈ្មោះរចនាសម្ព័ន្ធ ឬចំណុចទាញ៖ VkSomething និងកន្សោមថេរទាំងអស់ (ម៉ាក្រូ ការហៅម៉ាក្រូ និងធាតុរាប់បញ្ចូល)៖ VK_SOMETHING។ ក៏មានប្រភេទមុខងារពិសេសមួយដែរ - ពាក្យបញ្ជា ដែលបុព្វបទ Cmd ត្រូវបានបន្ថែម៖ vkCmdJustDoIt(...)។

អ្នកអាចសរសេរជា Vulkan ទាំង C និង C++ ។ ប៉ុន្តែជាការពិតណាស់ជម្រើសទីពីរនឹងផ្តល់នូវភាពងាយស្រួលបន្ថែមទៀត។ មាន (ហើយនឹងត្រូវបានបង្កើត) ច្រកសម្រាប់ភាសាផ្សេងទៀត។ មាននរណាម្នាក់បានធ្វើច្រកទៅកាន់ Delphi រួចហើយ នរណាម្នាក់ចង់បាន (ហេតុអ្វី?) ច្រកទៅកាន់ Python ។

ដូច្នេះតើអ្នកបង្កើតបរិបទបង្ហាញដោយរបៀបណា? គ្មានផ្លូវទេ។ គាត់មិននៅទីនេះទេ។ ផ្ទុយទៅវិញ ពួកគេបានបង្កើតរបស់ផ្សេងទៀតជាមួយនឹងឈ្មោះផ្សេងគ្នា ដែលសូម្បីតែស្រដៀងនឹង DirectX ដែរ។

ការចាប់ផ្តើម និងគោលគំនិតជាមូលដ្ឋាន

Vulkan បំបែកគំនិតពីរ - វាគឺ ឧបករណ៍ (ឧបករណ៍) និង ម្ចាស់ផ្ទះ (ម្ចាស់ផ្ទះ) ឧបករណ៍នឹងប្រតិបត្តិពាក្យបញ្ជាទាំងអស់ដែលបានផ្ញើទៅវា ហើយម៉ាស៊ីននឹងបញ្ជូនពួកគេ។ តាមពិតកម្មវិធីរបស់យើងគឺជាម្ចាស់ផ្ទះ - Vulkan មានវាក្យស័ព្ទនេះ។

ដើម្បីធ្វើការជាមួយ Vulkan យើងត្រូវការចំណុចទាញសម្រាប់វា។ ចម្លង (ឧទាហរណ៍) ហើយប្រហែលជាច្រើនជាងមួយ ក៏ដូចជា ឧបករណ៍ (ឧបករណ៍), ជាថ្មីម្តងទៀត, មួយប្រហែលជាមិនតែងតែគ្រប់គ្រាន់ទេ។

Vulkan អាចត្រូវបានផ្ទុកដោយថាមវន្តយ៉ាងងាយស្រួល។ នៅក្នុង SDK (បង្កើតឡើងដោយ LunarG) ប្រសិនបើម៉ាក្រូ VK_NO_PROTOTYPES ត្រូវបានប្រកាស ហើយអ្នកផ្ទុកបណ្ណាល័យ Vulkan ដោយខ្លួនឯង (មិនមែនជាមួយ linker ទេ ប៉ុន្តែជាមួយនឹងមធ្យោបាយជាក់លាក់នៅក្នុងកូដ) បន្ទាប់មកជាដំបូង អ្នកនឹងត្រូវការមុខងារ vkGetInstanceProcAddr ដែល អ្នកអាចស្វែងរកអាសយដ្ឋាននៃអនុគមន៍ Vulkan សំខាន់ៗ ដែលធ្វើការដោយគ្មានឧទាហរណ៍ រួមទាំងមុខងារនៃការបង្កើតវា និងមុខងារដែលធ្វើការជាមួយ instance រួមទាំងមុខងារបំផ្លាញវា និងមុខងារបង្កើតឧបករណ៍។ បន្ទាប់ពីបង្កើតឧបករណ៍មួយ អ្នកអាចទទួលបានមុខងារដែលដំណើរការជាមួយវា (ក៏ដូចជាការដោះស្រាយកូនរបស់វា) តាមរយៈ vkGetDeviceProcAddr ។

ការពិតគួរឱ្យចាប់អារម្មណ៍: នៅក្នុង Vulkan អ្នកតែងតែត្រូវបំពេញរចនាសម្ព័ន្ធជាក់លាក់ជាមួយទិន្នន័យដើម្បីបង្កើតវត្ថុណាមួយ។ ហើយអ្វីគ្រប់យ៉ាងនៅក្នុង Vulkan ដំណើរការប្រហែលតាមវិធីនេះ: រៀបចំជាមុន - អាចប្រើបានញឹកញាប់និងជាមួយ ដំណើរការខ្ពស់។. ព័ត៌មានឧទាហរណ៍ក៏អាចរួមបញ្ចូលព័ត៌មានអំពីកម្មវិធីរបស់អ្នក កំណែម៉ាស៊ីន កំណែ API ដែលបានប្រើ និងព័ត៌មានផ្សេងទៀត។

ស្រទាប់និងផ្នែកបន្ថែម

នៅក្នុង Vulkan សុទ្ធមិនមានការត្រួតពិនិត្យខ្លាំងសម្រាប់ភាពត្រឹមត្រូវនៃទិន្នន័យចូលទេ។ គាត់ត្រូវបានគេប្រាប់ឱ្យធ្វើអ្វីមួយ - គាត់នឹងធ្វើវា។ ទោះបីជាវានាំឱ្យមានកំហុសកម្មវិធី កម្មវិធីបញ្ជា ឬកាតវីដេអូក៏ដោយ។ នេះត្រូវបានធ្វើសម្រាប់ជាប្រយោជន៍នៃការសម្តែង។ ទោះយ៉ាងណាក៏ដោយអ្នកអាចភ្ជាប់ដោយគ្មានបញ្ហា ស្រទាប់ផ្ទៀងផ្ទាត់, និងផងដែរ។ ផ្នែកបន្ថែមទៅកាន់ឧទាហរណ៍ និង/ឬឧបករណ៍ ប្រសិនបើចាំបាច់។

ស្រទាប់

ជាមូលដ្ឋាន គោលបំណងនៃស្រទាប់គឺដើម្បីពិនិត្យមើលទិន្នន័យចូលសម្រាប់កំហុស និងតាមដានដំណើរការរបស់ Vulkan ។ ពួកវាដំណើរការយ៉ាងសាមញ្ញ៖ ចូរនិយាយថាយើងហៅមុខងារមួយ ហើយវាទៅស្រទាប់ខាងលើបំផុត ដែលបានបញ្ជាក់នៅពេលបង្កើតឧបករណ៍ ឬឧទាហរណ៍មុននេះ។ វាពិនិត្យអ្វីៗគ្រប់យ៉ាងសម្រាប់ភាពត្រឹមត្រូវ ហើយបន្ទាប់មកបញ្ជូនការហៅទៅលេខបន្ទាប់។ ហើយដូច្នេះវានឹងមានរហូតដល់វាមកដល់ស្នូល Vulkan ។ ជាការពិតណាស់អ្នកអាចបង្កើតស្រទាប់ផ្ទាល់ខ្លួនរបស់អ្នក។ ឧទាហរណ៍ Steam បានបញ្ចេញស្រទាប់ SteamOverlay (ទោះបីជាខ្ញុំមិនដឹងថាវាធ្វើយ៉ាងណា)។ ទោះយ៉ាងណាក៏ដោយ ស្រទាប់នឹងនៅស្ងៀម ប៉ុន្តែនឹងមិនគាំងកម្មវិធីនោះទេ។ តើអ្នកដឹងដោយរបៀបណាប្រសិនបើអ្វីៗគ្រប់យ៉ាងត្រូវបានធ្វើត្រឹមត្រូវ? មានការបន្ថែមពិសេសសម្រាប់រឿងនេះ!

ផ្នែកបន្ថែម

ដូចដែលឈ្មោះបានបង្ហាញពួកគេពង្រីកការងាររបស់ Vulkan មុខងារបន្ថែម. ឧទាហរណ៍ ផ្នែកបន្ថែមមួយ (របាយការណ៍បំបាត់កំហុស) នឹងបង្ហាញកំហុស (និងច្រើនទៀត) ពីគ្រប់ស្រទាប់ទាំងអស់។ ដើម្បីធ្វើដូចនេះអ្នកនឹងត្រូវបញ្ជាក់មុខងារ Callback ចាំបាច់ ហើយអ្វីដែលត្រូវធ្វើជាមួយព័ត៌មានដែលទទួលបានក្នុងមុខងារនេះគឺអាស្រ័យលើអ្នកក្នុងការសម្រេចចិត្ត។ សូមចំណាំថានេះគឺជាការហៅត្រលប់មកវិញ ហើយការពន្យារពេលអាចចំណាយអស់អ្នកយ៉ាងខ្លាំង ជាពិសេសប្រសិនបើអ្នកបញ្ចេញព័ត៌មានដែលទទួលបានទាំងអស់ដោយផ្ទាល់ទៅកុងសូល។ បន្ទាប់ពីដំណើរការសារ អ្នកអាចបញ្ជាក់ថាតើត្រូវឆ្លងកាត់ការហៅមុខងារបន្ថែម (ទៅស្រទាប់បន្ទាប់) ឬអត់ - វិធីនេះអ្នកអាចជៀសវាង កំហុសសំខាន់ប៉ុន្តែព្យាយាមបន្តធ្វើការជាមួយកំហុសដែលមិនសូវគ្រោះថ្នាក់។
វាក៏មានផ្នែកបន្ថែមផ្សេងទៀតផងដែរ ដែលមួយចំនួនដែលខ្ញុំនឹងនិយាយនៅពេលក្រោយនៅក្នុងអត្ថបទនេះ។

ឧបករណ៍

Vulkan បំបែកគំនិតនៃឧបករណ៍រូបវន្ត និងឡូជីខល។ ឧបករណ៍រាងកាយវាអាចជាកាតវីដេអូរបស់អ្នក (និងច្រើនជាងមួយ) ឬខួរក្បាលដែលគាំទ្រក្រាហ្វិក។ ឧបករណ៍ឡូជីខលត្រូវបានបង្កើតឡើងដោយផ្អែកលើរូបវន្តៈ ព័ត៌មានអំពីឧបករណ៍រូបវន្តត្រូវបានប្រមូល ចាំបាច់មួយត្រូវបានជ្រើសរើស មួយទៀតត្រូវបានរៀបចំ ព័ត៌មានចាំបាច់ហើយឧបករណ៍ត្រូវបានបង្កើតឡើង។ អាចមានច្រើន។ ឧបករណ៍ឡូជីខលផ្អែកលើរូបវន្តមួយ ប៉ុន្តែផ្សំសម្រាប់ ការងារបង្រួបបង្រួម ឧបករណ៍រាងកាយ(នៅឡើយទេ?) វាមិនអាចទៅរួចទេ។

ដូច្នេះតើយើងប្រមូលព័ត៌មានប្រភេទណា? ទាំងនេះគឺជាទម្រង់ដែលបានគាំទ្រ អង្គចងចាំ សមត្ថភាព និងជាការពិតណាស់ គ្រួសារជួរ។

ជួរ និងគ្រួសារជួរ

ឧបករណ៍អាច (ឬមិនអាច) ធ្វើកិច្ចការ 4 ខាងក្រោម៖ គូរក្រាហ្វិក ធ្វើការគណនាផ្សេងៗ ចម្លងទិន្នន័យ និងធ្វើការជាមួយអង្គចងចាំតូច (sparse ការគ្រប់គ្រងការចងចាំ) សមត្ថភាពទាំងនេះត្រូវបានតំណាងជាក្រុមគ្រួសារនៃជួរ៖ គ្រួសារនីមួយៗគាំទ្រសមត្ថភាពជាក់លាក់ (ប្រហែលជាទាំងអស់ក្នុងពេលតែមួយ)។ ហើយប្រសិនបើគ្រួសារដូចគ្នាត្រូវបានបំបែក នោះ Vulkan នឹងនៅតែបង្ហាញពួកគេជាគ្រួសារតែមួយ ដូច្នេះយើងមិនចាំបាច់តស៊ូច្រើនជាមួយលេខកូដ និងជ្រើសរើសគ្រួសារដែលត្រឹមត្រូវ។

បន្ទាប់ពីអ្នកបានជ្រើសរើសគ្រួសារដែលចង់បាន (ឬចង់បាន) អ្នកអាចទទួលបានជួរពីពួកគេ។ ជួរគឺជាកន្លែងដែលពាក្យបញ្ជាសម្រាប់ឧបករណ៍នឹងមកដល់ (បន្ទាប់មកឧបករណ៍នឹងយកវាចេញពីជួរ ហើយប្រតិបត្តិវា)។ ដោយវិធីនេះមិនមានជួរនិងគ្រួសារច្រើនទេ។ NVIDIA ជាធម្មតាមាន 1 គ្រួសារដែលមានសមត្ថភាពទាំងអស់សម្រាប់ 16 ជួរ។ នៅពេលអ្នករួចរាល់ជាមួយនឹងការជ្រើសរើសគ្រួសារ និងចំនួនជួរ អ្នកអាចបង្កើតឧបករណ៍។

ពាក្យបញ្ជា ការប្រតិបត្តិ និងការធ្វើសមកាលកម្មរបស់ពួកគេ។

ពាក្យបញ្ជាទាំងអស់សម្រាប់ឧបករណ៍ត្រូវបានដាក់ក្នុងធុងពិសេស - សតិបណ្ដោះអាសន្នពាក្យបញ្ជា។ ទាំងនោះ។ មិនមានមុខងារនៅក្នុង Vulkan ដែលប្រាប់ឧបករណ៍ឱ្យធ្វើអ្វីមួយភ្លាមៗ ហើយត្រឡប់ការគ្រប់គ្រងទៅកម្មវិធីវិញ នៅពេលប្រតិបត្តិការត្រូវបានបញ្ចប់។ មានតែមុខងារសម្រាប់បំពេញសតិបណ្ដោះអាសន្នជាមួយនឹងពាក្យបញ្ជាជាក់លាក់ប៉ុណ្ណោះ (ឧទាហរណ៍ គូរអ្វីមួយ ឬចម្លងរូបភាព)។ មានតែបន្ទាប់ពីការសរសេរសតិបណ្ដោះអាសន្នពាក្យបញ្ជានៅលើម៉ាស៊ីនយើងអាចផ្ញើវាទៅជួរដែលត្រូវបានគេស្គាល់ថាមាននៅក្នុងឧបករណ៍រួចហើយ។

សតិបណ្ដោះអាសន្នពាក្យបញ្ជាមានពីរប្រភេទ៖ បឋម និងអនុវិទ្យាល័យ។ បឋមត្រូវបានបញ្ជូនដោយផ្ទាល់ទៅជួរ។ អនុវិទ្យាល័យមិនអាចផ្ញើបានទេ - វាត្រូវបានចាប់ផ្តើមនៅក្នុងបឋម។ ពាក្យបញ្ជាត្រូវបានសរសេរតាមលំដាប់ដូចគ្នាដែលមុខងារត្រូវបានហៅ។ ពួកគេចូលជួរក្នុងលំដាប់ដូចគ្នា។ ប៉ុន្តែពួកគេអាចត្រូវបានបំពេញស្ទើរតែនៅក្នុងលំដាប់ "វឹកវរ" ។ ដើម្បីជៀសវាងភាពវឹកវរពេញលេញនៅក្នុងកម្មវិធី អ្នកអភិវឌ្ឍន៍ Vulkan បានផ្តល់ឧបករណ៍ធ្វើសមកាលកម្ម។

ឥឡូវនេះអ្វីដែលសំខាន់បំផុត: ម្ចាស់ផ្ទះ ទេ។រង់ចាំការបញ្ចប់ការប្រតិបត្តិពាក្យបញ្ជា និងសតិបណ្ដោះអាសន្នពាក្យបញ្ជា។ ដោយ យ៉ាងហោចណាស់រហូតដល់អ្នកធ្វើឱ្យវាច្បាស់លាស់។ បន្ទាប់ពីសតិបណ្ដោះអាសន្នពាក្យបញ្ជាត្រូវបានផ្ញើទៅជួរ ការគ្រប់គ្រងភ្លាមៗត្រឡប់ទៅកម្មវិធីវិញ។

មានបុព្វហេតុធ្វើសមកាលកម្មចំនួន ៤ គឺ៖ របង ស៊ីម៉ាហ្វ័រ ព្រឹត្តិការណ៍ និងរបាំង។

របងវិធីសាស្រ្តសាមញ្ញបំផុតនៃការធ្វើសមកាលកម្មគឺថាវាអនុញ្ញាតឱ្យម៉ាស៊ីនរង់ចាំសម្រាប់រឿងជាក់លាក់កើតឡើង។ ឧទាហរណ៍ ការបញ្ចប់ការប្រតិបត្តិនៃសតិបណ្ដោះអាសន្នពាក្យបញ្ជា។ ប៉ុន្តែរបងនេះកម្រប្រើណាស់។

សេម៉ាហ្វ័រ- វិធីសាស្រ្តនៃការធ្វើសមកាលកម្មនៅក្នុងឧបករណ៍។ មិនមានវិធីដើម្បីមើលស្ថានភាពរបស់វា ឬរង់ចាំវានៅលើម៉ាស៊ីននោះទេ ហើយក៏មិនអាចរង់ចាំវានៅក្នុងសតិបណ្ដោះអាសន្នពាក្យបញ្ជាបានដែរ ប៉ុន្តែយើងអាចបញ្ជាក់ថាតើ semaphore មួយណាគួរតែផ្តល់សញ្ញានៅពេលដែលការប្រតិបត្តិនៃពាក្យបញ្ជាទាំងអស់នៅក្នុងសតិបណ្ដោះអាសន្នត្រូវបានបញ្ចប់ ហើយ semaphore ដែលត្រូវរង់ចាំ មុនពេលចាប់ផ្តើមប្រតិបត្តិពាក្យបញ្ជានៅក្នុងសតិបណ្ដោះអាសន្ន។ មានតែ មិនមែនសតិបណ្ដោះអាសន្នទាំងមូលនឹងរង់ចាំនោះទេ ប៉ុន្តែដំណាក់កាលជាក់លាក់របស់វា។

ដំណាក់កាលបំពង់ និងភាពអាស្រ័យនៃការប្រតិបត្តិ

ដូចដែលបានបញ្ជាក់រួចមកហើយ ពាក្យបញ្ជានៅក្នុងជួរនឹងមិនចាំបាច់ត្រូវបានប្រតិបត្តិតាមលំដាប់លំដោយនោះទេ។ ដើម្បីឱ្យកាន់តែច្បាស់លាស់ ពាក្យបញ្ជាបន្តបន្ទាប់នឹងមិនរង់ចាំឱ្យពាក្យមុនបញ្ចប់នោះទេ។ ពួកវាអាចត្រូវបានប្រតិបត្តិស្របគ្នា ឬប្រតិបត្តិពាក្យបញ្ជាមុនអាចបំពេញបានច្រើនយឺតជាងពាក្យបញ្ជាបន្ទាប់។ ហើយវាជារឿងធម្មតាណាស់។ ប៉ុន្តែក្រុមខ្លះ អាស្រ័យពីការសម្តែងរបស់អ្នកដទៃ។ អ្នកអាចបែងចែកវាទៅជាច្រាំងពីរ៖ "មុន" និង "ក្រោយ" ហើយក៏ចង្អុលបង្ហាញថាដំណាក់កាលណានៃច្រាំង "មុន" ត្រូវតែចាំបាច់ត្រូវបានប្រតិបត្តិ (ពោលគឺពាក្យបញ្ជាអាចមិនពេញលេញឬមិនទាំងអស់) មុនពេលដំណាក់កាលដែលបានបញ្ជាក់ចាប់ផ្តើម។ ដើម្បីប្រតិបត្តិពាក្យបញ្ជា "បន្ទាប់ពី" ។ ជាឧទាហរណ៍ ការគូររូបភាពអាចផ្អាកដើម្បីធ្វើកិច្ចការមួយចំនួន ហើយបន្ទាប់មកបន្តការគូរម្តងទៀត។ វាក៏អាចមានខ្សែសង្វាក់អាស្រ័យផងដែរ ប៉ុន្តែកុំចូលទៅជ្រៅទៅក្នុងព្រៃនៃស៊ីបេរី វុលកាន។

ព្រឹត្តិការណ៍- ធាតុនៃការលៃតម្រូវ "ល្អ" ។ អ្នកអាចផ្ញើសញ្ញាទាំងពីម៉ាស៊ីន និងពីឧបករណ៍ ហើយអ្នកក៏អាចរង់ចាំនៅលើឧបករណ៍ និងនៅលើម៉ាស៊ីនផងដែរ។ ព្រឹត្តិការណ៍កំណត់ភាពអាស្រ័យនៃសំណុំពាក្យបញ្ជាពីរ (មុន និងក្រោយ) នៅក្នុងសតិបណ្ដោះអាសន្នពាក្យបញ្ជា។ ហើយ​សម្រាប់​ព្រឹត្តិការណ៍​នេះ​ក៏​មាន​វគ្គ​ពិសេស​មួយ​ដែល​អាច​ឱ្យ​អ្នក​រង់ចាំ​ម្ចាស់ផ្ទះ​បាន​។

របាំងម្តងទៀតអាចប្រើបានតែនៅក្នុងឧបករណ៍ ឬច្បាស់ជាងនេះទៅទៀត នៅក្នុងសតិបណ្ដោះអាសន្នពាក្យបញ្ជា ដោយប្រកាសពីភាពអាស្រ័យនៃសំណុំពាក្យបញ្ជាទីមួយ និងទីពីរ។ អ្នកក៏អាចបញ្ជាក់បន្ថែមអំពីរបាំងអង្គចងចាំផងដែរ ដែលអាចជា បីប្រភេទ: សកលរបាំង, របាំង សតិបណ្ដោះអាសន្ននិងរបាំង រូបភាព. ពួកគេនឹងមិនអនុញ្ញាតឱ្យអ្នកអានទិន្នន័យដែលចូលដោយអចេតនានោះទេ។ នៅពេលនេះត្រូវបានសរសេរ និង/ឬផ្ទុយមកវិញ អាស្រ័យលើប៉ារ៉ាម៉ែត្រដែលបានបញ្ជាក់។

អ្នកដឹកជញ្ជូន

ខាងក្រោមនេះគឺជាបំពង់ Vulkan ចំនួនពីរ៖

ទាំងនោះ។ Vulkan មានបំពង់ពីរ៖ ក្រាហ្វិកនិង គណនា. ដោយ​មាន​ជំនួយ​នៃ​ក្រាហ្វិក យើង​អាច​គូរ និង​ដោយ​ការ​គណនា... យើង​អាច​គណនា​បាន។ តើមានអ្វីទៀត? បន្ទាប់មកលទ្ធផលនៃការគណនាអាចត្រូវបានបញ្ជូនទៅបំពង់ក្រាហ្វិក។ វិធីនេះអ្នកអាចសន្សំសំចៃពេលវេលាយ៉ាងងាយស្រួលនៅលើប្រព័ន្ធភាគល្អិតឧទាហរណ៍។

អ្នកមិនអាចផ្លាស់ប្តូរលំដាប់ ឬផ្លាស់ប្តូរដំណាក់កាលនៃបំពង់បង្ហូរប្រេងដោយខ្លួនឯងបានទេ។ ករណីលើកលែងគឺដំណាក់កាលដែលអាចសរសេរកម្មវិធីបាន (ស្រមោល) ។ អ្នកក៏អាចផ្ញើប្រភេទផ្សេងៗនៃទិន្នន័យទៅកាន់ Shaderers (មិនត្រឹមតែប៉ុណ្ណោះ) តាមរយៈអ្នកពណ៌នា។

អ្នកអាចបង្កើតឃ្លាំងសម្ងាត់សម្រាប់បំពង់បង្ហូរប្រេងដែលអាចប្រើបាន (ម្តងហើយម្តងទៀត) នៅក្នុងបំពង់ផ្សេងទៀត និងសូម្បីតែបន្ទាប់ពីចាប់ផ្តើមកម្មវិធីឡើងវិញ។

បំពង់ត្រូវតែត្រូវបានកំណត់រចនាសម្ព័ន្ធ និងភ្ជាប់ជាមួយសតិបណ្ដោះអាសន្នពាក្យបញ្ជា មុនពេលដែលក្រោយមកអាចប្រើពាក្យបញ្ជាបំពង់។

មរតកបំពង់

ដោយសារបំពង់បង្ហូរប្រេងគឺពិតជាព័ត៌មានទាំងអស់អំពីរបៀបធ្វើការជាមួយទិន្នន័យចូល ការផ្លាស់ប្តូរបំពង់បង្ហូរប្រេង (ហើយនេះគឺជាព័ត៌មានអំពី shaders, descriptors, rasterization ។ល។) អាចមានតម្លៃថ្លៃក្នុងលក្ខខណ្ឌនៃពេលវេលា។ ដូច្នេះអ្នកអភិវឌ្ឍន៍បានផ្តល់លទ្ធភាពក្នុងការទទួលមរតកនៃបំពង់បង្ហូរប្រេង។ នៅពេលផ្លាស់ប្តូរបំពង់ទៅកូន ឪពុកម្តាយ ឬរវាងកុមារ នឹងមានដំណើរការតិចជាងមុន។ ប៉ុន្តែវាក៏ជាភាពងាយស្រួលសម្រាប់អ្នកអភិវឌ្ឍន៍ដូចជា OOP ជាដើម។

បង្ហាញការឆ្លងកាត់ បំពង់ក្រាហ្វិក និងស៊ុមសតិបណ្ដោះអាសន្ន

ដូច្នេះយើងទទួលបាន matryoshka ដូចខាងក្រោម:

ដើម្បី​អាច​ប្រើ​ពាក្យ​បញ្ជា​បង្ហាញ​បាន ត្រូវការ​បំពង់​ក្រាហ្វិក។ នៅក្នុងបំពង់ក្រាហ្វិកអ្នកត្រូវបញ្ជាក់ render pass (Render Pass) ដែលមានព័ត៌មានអំពី subaisles (ឆ្លងកាត់) ភាពអាស្រ័យរបស់ពួកគេលើគ្នាទៅវិញទៅមក និង ឯកសារភ្ជាប់ (ឯកសារភ្ជាប់) ឯកសារភ្ជាប់ - ព័ត៌មានអំពីរូបភាពដែលនឹងត្រូវប្រើក្នុង framebuffer មួយ framebuffer ត្រូវបានបង្កើតជាពិសេសសម្រាប់ passing rendering ជាក់លាក់ ដើម្បីចាប់ផ្តើម pass អ្នកត្រូវបញ្ជាក់ទាំង pass ដោយខ្លួនឯង (ហើយបើចាំបាច់ subpass) និង framebuffer។ បន្ទាប់​ពី​ការ​ចាប់​ផ្តើ​ម​នៃ​ការ​អនុម័ត​, អ្នក​អាច​គូរ​អ្នក​ក៏​អាច​ផ្លាស់​ប្តូ​រ​រវាង subpasses នៅ​ពេល​ដែល​ការ​គូរ​បាន​បញ្ចប់​, អ្នក​អាច​បញ្ចប់​ការ​ឆ្លង​។

ការគ្រប់គ្រងការចងចាំ និងធនធាន

អង្គចងចាំនៅក្នុង Vulkan ត្រូវបានបែងចែកដោយម៉ាស៊ីន ហើយមានតែម៉ាស៊ីន (លើកលែងតែ swapchain) ។ ប្រសិនបើរូបភាព (ឬទិន្នន័យផ្សេងទៀត) ត្រូវការដាក់ក្នុងឧបករណ៍ អង្គចងចាំត្រូវបានបែងចែក។ ដំបូង ធនធាននៃទំហំជាក់លាក់មួយត្រូវបានបង្កើត បន្ទាប់មកតម្រូវការអង្គចងចាំរបស់វាត្រូវបានស្នើសុំ អង្គចងចាំត្រូវបានបម្រុងទុកសម្រាប់វា បន្ទាប់មកធនធានត្រូវបានភ្ជាប់ជាមួយផ្នែកនៃអង្គចងចាំនេះ ហើយមានតែទិន្នន័យចាំបាច់ប៉ុណ្ណោះដែលអាចចម្លងទៅកាន់ធនធាននេះ។ ដូចគ្នានេះផងដែរមានអង្គចងចាំដែលអាចផ្លាស់ប្តូរដោយផ្ទាល់ពីម៉ាស៊ីន (ម៉ាស៊ីនដែលអាចមើលឃើញ) មាន ការចងចាំក្នុងស្រុកឧបករណ៍ (ឧទាហរណ៍អង្គចងចាំកាតវីដេអូ) និងប្រភេទអង្គចងចាំផ្សេងទៀត ដែលតាមវិធីផ្ទាល់ខ្លួនរបស់វាប៉ះពាល់ដល់ល្បឿននៃការចូលប្រើពួកវា។

នៅក្នុង Vulkan អ្នកក៏អាចសរសេរការបែងចែកអង្គចងចាំម៉ាស៊ីនផ្ទាល់ខ្លួនរបស់អ្នកដោយរៀបចំមុខងារ Callback ។ ប៉ុន្តែសូមចងចាំថាតម្រូវការអង្គចងចាំមិនត្រឹមតែមានទំហំរបស់វាប៉ុណ្ណោះទេថែមទាំងផងដែរ។ កម្រិត (ការតម្រឹម).

ធនធានខ្លួនឯងមានពីរប្រភេទ៖ សតិបណ្ដោះអាសន្ន (សតិបណ្ដោះអាសន្ន) និង រូបភាព (រូបភាព) ទាំងពីរត្រូវបានបំបែកដោយគោលបំណង ប៉ុន្តែប្រសិនបើសតិបណ្ដោះអាសន្នគ្រាន់តែជាបណ្តុំនៃទិន្នន័យផ្សេងៗ (ចំនុចកំពូល សន្ទស្សន៍ ឬសតិបណ្ដោះអាសន្នថេរ) នោះរូបភាពតែងតែមានទម្រង់របស់វា។

ដំបូន្មានដល់អ្នកដែលសរសេរនៅលើ Vulkan

បែងចែកតំបន់អង្គចងចាំ ដែលអ្នកអាចដាក់ធនធានជាច្រើនក្នុងពេលតែមួយ។ ចំនួននៃការបែងចែកមានកំណត់ ហើយអ្នកប្រហែលជាមិនមានគ្រប់គ្រាន់ទេ។ ប៉ុន្តែចំនួនសមាគមមិនត្រូវបានកំណត់ទេ។

ស្រមោល

Vulkan គាំទ្រ 6 ប្រភេទ Shaderers: apical, ការត្រួតពិនិត្យ tessellation, ការវិភាគ Tessellation, ធរណីមាត្រ, បែកខ្ញែក(អា ភីកសែល) និង គណនា. អ្នកអាចសរសេរពួកវានៅលើ SPIR-V ដែលអាចអានបាន ហើយបន្ទាប់មកប្រមូលផ្តុំវាទៅជាកូដបៃ ដែលយើងនឹងបិទភ្ជាប់ទៅក្នុងម៉ូឌុលនៅក្នុងកម្មវិធី ពោលគឺឧ។ ចូរយើងបង្កើត Module Shader ពីកូដនេះ។ ជាការពិតណាស់ យើងអាចសរសេរវានៅក្នុង GLSL ធម្មតា ហើយបន្ទាប់មកបម្លែងវាទៅជា SPIR-V (យើងមានអ្នកបកប្រែរួចហើយ)។ ហើយជាការពិតណាស់ អ្នកអាចសរសេរអ្នកបកប្រែផ្ទាល់ខ្លួនរបស់អ្នក និងសូម្បីតែអ្នកប្រមូលផ្តុំ - ប្រភព និងលក្ខណៈជាក់លាក់ត្រូវបានបង្ហោះនៅក្នុង OpenSource គ្មានអ្វីរារាំងអ្នកពីការសរសេរឧបករណ៍ដំឡើងសម្រាប់កម្រិតខ្ពស់ SPIR-V របស់អ្នកទេ។ ឬប្រហែលជាមាននរណាម្នាក់បានសរសេរវារួចហើយ។
បន្ទាប់មកលេខកូដបៃត្រូវបានបកប្រែទៅជាពាក្យបញ្ជាជាក់លាក់ចំពោះកាតវីដេអូនីមួយៗ ប៉ុន្តែវាត្រូវបានធ្វើលឿនជាងកូដ GLSL ឆៅ។ ការអនុវត្តស្រដៀងគ្នាអនុវត្តផងដែរចំពោះ DirectX - HLSL ត្រូវបានបំប្លែងជាលើកដំបូងទៅជាកូដបៃ ហើយកូដបៃនេះអាចត្រូវបានរក្សាទុក ហើយបន្ទាប់មកប្រើ ដើម្បីកុំឱ្យចងក្រងកម្មវិធីស្រមោលម្តងហើយម្តងទៀត។

វីនដូនិងអេក្រង់

ហើយអត្ថបទនេះនឹងបញ្ចប់ដោយរឿងរ៉ាវអំពី WSI (ការរួមបញ្ចូលប្រព័ន្ធវីនដូ) និងខ្សែសង្វាក់ប្តូរ (swapchain) ។ ដើម្បីបង្ហាញអ្វីមួយនៅក្នុងបង្អួច ឬនៅលើអេក្រង់ ត្រូវការផ្នែកបន្ថែមពិសេស។

សម្រាប់បង្អួចវាគឺ ការពង្រីកមូលដ្ឋានយន្តហោះ និងការពង្រីកយន្តហោះជាក់លាក់ចំពោះប្រព័ន្ធនីមួយៗ (win32, xlib, xcb, android, mir, wayland)។ ការបង្ហាញ (ឧ. FullScreen) ទាមទារផ្នែកបន្ថែមបង្ហាញ ប៉ុន្តែជាទូទៅទាំងពីរប្រើផ្នែកបន្ថែម swapchain ។

ខ្សែសង្វាក់ប្តូរមិនត្រូវបានភ្ជាប់ទៅបំពង់ក្រាហ្វិចទេ ដូច្នេះអេក្រង់ច្បាស់ធម្មតាដំណើរការដោយមិនចាំបាច់កំណត់រចនាសម្ព័ន្ធទាំងអស់នេះទេ។ វាសាមញ្ញណាស់។ មានម៉ាស៊ីនបង្ហាញជាក់លាក់មួយ ដែលមានជួររូបភាព។ រូបភាពមួយត្រូវបានបង្ហាញនៅលើអេក្រង់ ហើយអ្នកផ្សេងទៀតរង់ចាំវេនរបស់ពួកគេ។ យើងក៏អាចបញ្ជាក់ចំនួនរូបភាពផងដែរ។ វាក៏មានរបៀបជាច្រើនដែលអនុញ្ញាតឱ្យអ្នករង់ចាំសញ្ញាសមកាលកម្មបញ្ឈរ។

របៀបដែលវាដំណើរការគឺដូចនេះ៖ យើងស្នើសុំលិបិក្រមនៃរូបភាពឥតគិតថ្លៃ ហៅសតិបណ្ដោះអាសន្នពាក្យបញ្ជាដែលនឹងចម្លងលទ្ធផលពី Framebuffer មករូបភាពនេះ ហើយផ្ញើពាក្យបញ្ជាដើម្បីផ្ញើរូបភាពទៅជួរ។ ស្តាប់ទៅដូចជាងាយស្រួល ប៉ុន្តែដោយសារតម្រូវឱ្យធ្វើសមកាលកម្ម អ្វីគ្រប់យ៉ាងគឺស្មុគស្មាញបន្តិច ដោយសាររឿងតែមួយគត់ដែលម្ចាស់ផ្ទះរំពឹងគឺសន្ទស្សន៍នៃរូបភាពដែល ឆាប់ៗនេះនឹងមាន។ សតិបណ្ដោះអាសន្នពាក្យបញ្ជារង់ចាំសញ្ញា semaphore ដែលនឹងបង្ហាញពីភាពអាចរកបាននៃរូបភាព ហើយបន្ទាប់មកខ្លួនវាបញ្ជូនសញ្ញាតាមរយៈ semaphore ដែលការប្រតិបត្តិនៃសតិបណ្ដោះអាសន្ន ហើយជាលទ្ធផលការចម្លងត្រូវបានបញ្ចប់។ ហើយរូបភាពពិតជានឹងចូលទៅក្នុងជួរនៅសញ្ញា semaphore ចុងក្រោយ។ មានតែ semaphores ពីរប៉ុណ្ណោះ៖ អំពីភាពអាចរកបាននៃរូបភាពសម្រាប់ការចម្លង និងអំពីភាពអាចរកបាននៃរូបភាពសម្រាប់បង្ហាញ (ឧ. អំពីការបញ្ចប់នៃការចម្លង)។

ដោយវិធីនេះ ខ្ញុំបានផ្ទៀងផ្ទាត់ថា សតិបណ្ដោះអាសន្នពាក្យបញ្ជាដូចគ្នានេះពិតជាត្រូវបានបញ្ជូនទៅជួរជាច្រើនដង។ អ្នកអាចគិតដោយខ្លួនឯងថាតើនេះមានន័យយ៉ាងណា។

នៅក្នុងអត្ថបទនេះខ្ញុំបានព្យាយាមនិយាយអំពីផ្នែកសំខាន់បំផុតនៃ Vulkan API ប៉ុន្តែជាច្រើននៅតែមិនត្រូវបានគ្របដណ្តប់ ហើយអ្នកអាចស្វែងរកដោយខ្លួនឯងបាន។ ខ្ញុំសូមជូនពរឱ្យអ្នកមានស្ថេរភាព FPS និងការសរសេរកូដរីករាយ។

នៅក្នុងការអភិវឌ្ឍន៍កម្មវិធី 3D ហ្គេមវីដេអូ និងប្រព័ន្ធ ការពិតនិម្មិតមក ដំណាក់កាលថ្មី។. រួមគ្នាអ្នកអភិវឌ្ឍន៍បានបង្កើត ជំហានសំខាន់នៅលើផ្លូវទៅកាន់ការបង្រួបបង្រួមកូដ និងច្រើនទៀត ការប្រើប្រាស់ប្រកបដោយប្រសិទ្ធភាពធនធានផ្នែករឹង។ Khronos Group ដែលជាសម្ព័ន្ធក្រុមហ៊ុនជាងមួយរយ បានបង្ហាញជាផ្លូវការនូវកំណែដំបូងនៃ API ឆ្លងវេទិកាដែលបើកចំហហៅថា Vulkan (អតីត GLNext)។ វាផ្តល់នូវការគ្រប់គ្រងដោយផ្ទាល់លើ GPU និង CPU ដោយលុបបំបាត់ការស្ទះ និងធ្វើអោយប្រសើរឡើងនូវដំណើរការទាំងមូល។

នៅលើវេទិកា អ្នកអាចមើលឃើញសំណួរប្រភេទដូចគ្នាអំពីថាតើ processor X នឹងបើកកាតវីដេអូ Y ហើយការកំណត់រចនាសម្ព័ន្ធណាដែលមានថវិកាដូចគ្នានឹងមានប្រសិទ្ធភាពជាងនៅក្នុង កម្មវិធីជាក់លាក់. វាកើតឡើងដោយសារតែ GPUs ទំនើបមានដំណើរការល្អជាង CPU ដែលមានកម្រិត និងជំនាន់ដូចគ្នា។ នៅក្នុងហ្គេម និងកម្មវិធី 3D ផ្សេងទៀត មានពេលខ្លះដែលស៊ីភីយូអាចនឹងត្រូវ បន្ទុកធ្ងន់ហើយ GP គឺនៅទំនេរ។ ឧទាហរណ៍ ខួរក្បាលគណនាអន្តរកម្មរបស់អ្នកលេង និងវត្ថុ ហើយកាតវីដេអូរង់ចាំទិន្នន័យពីវា ដើម្បីគូរស៊ុមបន្ទាប់។ ដោយសារភាពមិនស្មើគ្នានៃការផ្ទុក ការពន្យាពេលកើតឡើង ហើយហ្គេមថាមវន្តអាចប្រែទៅជាការបញ្ចាំងស្លាយពីស៊ុមមួយ សូម្បីតែកាតវីដេអូដ៏មានឥទ្ធិពលក៏ដោយ។

បញ្ហាទាំងនេះគឺជាតួយ៉ាងសម្រាប់វេទិកាកុំព្យូទ័រ ហើយជាទូទៅមិនស្គាល់ម្ចាស់កុងសូលហ្គេមទេ។ អ្នកបង្កើតហ្គេម Console តែងតែដឹងពីលក្ខណៈលម្អិតនៃកុងសូល ហើយអាចធ្វើការបង្កើនប្រសិទ្ធភាពកូដស៊ីជម្រៅដោយគិតគូរពីលក្ខណៈពិសេសរបស់វា។ កុំព្យូទ័រ កុំព្យូទ័រយួរដៃ ថេប្លេត គឺជាសួនសត្វដែលមិនត្រឹមតែមានការកំណត់រចនាសម្ព័ន្ធខុសៗគ្នាប៉ុណ្ណោះទេ ប៉ុន្តែក៏មានស្ថាបត្យកម្មផ្សេងៗគ្នាជាមូលដ្ឋានផងដែរ។ នៅពេលបង្កើតហ្គេមសម្រាប់វេទិកាចម្រុះបែបនេះ អាទិភាពក្លាយជាសកលនៃកូដ ដែលជះឥទ្ធិពលអវិជ្ជមានដល់ល្បឿននៃការប្រតិបត្តិរបស់វា។


អ្នកអភិវឌ្ឍន៍ ប្រព័ន្ធប្រតិបត្តិការពួកគេកំពុងព្យាយាមដោះស្រាយបញ្ហានៃប្រសិទ្ធភាពកូដទាបតាមវិធីផ្សេងៗគ្នា កម្មវិធីភាគីទីបី. ក្រុមហ៊ុន Microsoft បានចាប់ផ្តើមស្វែងរកវិធីដើម្បីបង្កើនប្រសិទ្ធភាពកុំព្យូទ័រក្រាហ្វិកតាំងពីយូរយារណាស់មកហើយ ប៉ុន្តែការគាំទ្រពិតប្រាកដសម្រាប់ប្រតិបត្តិការកម្រិតទាបបានបង្ហាញខ្លួនតែនៅក្នុង DirectX 12។ API នេះអាចប្រើបានតែក្នុងប្រព័ន្ធប្រតិបត្តិការមួយប៉ុណ្ណោះ - Windows 10 ។ ទីតាំង Appleវាបានប្រែក្លាយកាន់តែជិតស្និទ្ធទៅនឹងក្រុមហ៊ុនផលិតកុងសូលហ្គេម។ នៅពេលដែលក្រុមហ៊ុនដូចគ្នាផលិតប្រព័ន្ធដំណើរការ និងកម្មវិធីចល័ត វាកាន់តែងាយស្រួលក្នុងការសម្រេចបាននូវការងារសម្របសម្រួល។ ទោះជាយ៉ាងណាក៏ដោយ Apple នៅឆ្ងាយពីវិធីហត់នឿយក្នុងការបង្កើនប្រសិទ្ធភាពនៃការអភិវឌ្ឍន៍ហ្គេម និងកម្មវិធី។ បង្ហាញខ្លួននៅក្នុង iOS 8 API ដែកផ្តោតលើការប្រើប្រាស់ប្រតិបត្តិការកម្រិតទាបផងដែរ។

សម្រាក ក្រុមហ៊ុនធំៗចូលចិត្តធ្វើសកម្មភាពរួមគ្នា និងក្នុងស្តង់ដារបើកចំហ។ សម្ព័ន្ធ Khronos Group ដែលបានបង្ហាញខ្លួនកាលពី 16 ឆ្នាំមុនបានប្រមូលផ្តុំក្រុមហ៊ុនផលិតជាងមួយរយនាក់ រួមទាំងមិត្តរួមឈាមដូចជា AMD, Nvidia និង Intel ។ នៅពេលមួយ សម្ព័ន្ធបានបំភ្លឺ ស្តង់ដារបើកចំហ OpenGL, OpenCL, OpenCV និងផ្សេងៗទៀត។


បើប្រៀបធៀបទៅនឹង OpenGL Vulkan ផ្តល់ឱ្យអ្នកអភិវឌ្ឍន៍នូវលទ្ធភាពប្រើប្រាស់ប្រតិបត្តិការកម្រិតទាបដោយមិនធ្វើឱ្យខូចដល់ការចល័តកូដ។ ការប្រើប្រាស់ Vulkan នៅលើ វេទិកាផ្សេងគ្នាវាគឺអាចធ្វើទៅបានដើម្បីសម្រេចបាននូវក្បួនដោះស្រាយតុល្យភាពស្ទើរតែដូចគ្នាជាមួយនឹងឯកទេស កុងសូលហ្គេម. API នេះជួយអ្នកឱ្យប្រើប្រាស់សមត្ថភាពផ្នែករឹងកាន់តែប្រសើរឡើង កាតវីដេអូដាច់ដោយឡែកនិងបន្ទះឈីបក្រាហ្វិករួមបញ្ចូលគ្នានៅក្នុងរបៀប 2D និង 3D ។

ស្រដៀងទៅនឹង DirectX 12 ដែរ Vulkan គាំទ្រការចូលប្រើអង្គចងចាំ GPU ដោយផ្ទាល់។ លើសពីនេះទៀត Vulkan កាត់បន្ថយការពឹងផ្អែកនៃល្បឿនបង្ហាញលើគុណភាពនៃអ្នកបើកបរ។ ដោយការបកប្រែកូដនៃកម្មវិធី Shader ទៅជាទម្រង់ប្រព័ន្ធគោលពីរកម្រិតមធ្យម ការចងក្រងរបស់ពួកគេអាចត្រូវបានអនុវត្តរួចហើយនៅដំណាក់កាលអភិវឌ្ឍន៍ ហើយមិនមែនអំឡុងពេលចាប់ផ្តើមកម្មវិធី 3D នោះទេ។

Vulkan បានស្ថិតក្នុងការអភិវឌ្ឍន៍តាំងពីពាក់កណ្តាលឆ្នាំ 2014 ។ វាត្រូវបានផ្អែកលើ បណ្ណាល័យក្រាហ្វិក API កម្រិតទាបមួយទៀតគឺ AMD Mantle ។ AMD ក៏បានបម្រើការជាអ្នកកែសម្រួលលក្ខណៈផ្លូវការផងដែរ។ បន្ថែមពីលើពួកគេ ក្រុម Khronos បានបោះពុម្ពការធ្វើតេស្តមួយចំនួនដែលបង្ហាញពីគុណសម្បត្តិនៃ API ថ្មី។ ពួកវាទាំងអស់មាននៅលើវិបផតថល GitHub ។

Dean Sekulic អ្នកសរសេរកម្មវិធីនៅ Croteam មានប្រសាសន៍ថា "Vulkan មានសក្តានុពលដ៏ធំ" ។ - ដើម្បីដាក់វានៅក្នុងប្រយោគមួយ ការមកដល់នៃ Vulkan បានបញ្ចប់ការប្រឈមមុខគ្នាដ៏យូរអង្វែងរវាងអ្នកប្រយុទ្ធសម្រាប់ការអនុវត្តកូដ និងការចល័ត។ ឥឡូវនេះយើងកំពុងបញ្ជូនគោលការណ៍ Talos ទៅវាដើម្បីបញ្ជាក់ពីគំនិតនៃការអភិវឌ្ឍន៍ថ្មី។

Valve ឧបត្ថម្ភការបង្កើត LunarG SDK ជាមួយ ការគាំទ្រ APIវុលកាន។ ទោះយ៉ាងណាក៏ដោយទោះបីជាមានការបញ្ជាក់ជាក់លាក់ក៏ដោយក៏ឧបករណ៍អភិវឌ្ឍន៍ដែលអាចរកបានសមត្ថភាព ការបង្កើនប្រសិទ្ធភាពស៊ីជម្រៅកូដ និងគុណសម្បត្តិផ្សេងទៀត Vulkan នឹងក្លាយជា API ដែលកម្រប្រើសម្រាប់ពេលខ្លះ។ អ្នកបង្កើតហ្គេមភាគច្រើននឹងនៅតែស្មោះត្រង់ចំពោះ DirectX 11/12 និង OpenGL ។ វាកាន់តែងាយស្រួលក្នុងការកើនឡើង តម្រូវការប្រព័ន្ធឬកាត់បន្ថយគុណភាពនៃក្រាហ្វិកជាជាងធ្វើជាម្ចាស់នៃវិធីសាស្ត្រអភិវឌ្ឍន៍ថ្មី។ ដោយយល់ពីរឿងនេះ សម្ព័ន្ធ Khronos Group ខិតខំផ្តល់ការគាំទ្រដល់ Vulkan មិនត្រឹមតែនៅក្នុង OS ថ្មី និង ដំណោះស្រាយក្រាហ្វិកប៉ុន្តែក៏មាននៅលើប្រព័ន្ធដែលលែងប្រើផងដែរ។

បច្ចុប្បន្ន Vulkan ត្រូវបានគាំទ្រនៅក្នុង បរិស្ថានវីនដូ(ចាប់ផ្តើមពីកំណែទីប្រាំពីរ), Linux, SteamOS និង Android ។ ការគាំទ្រ Tizen OS របស់ Samsung ត្រូវបានគេរំពឹងថានឹងត្រូវបានបន្ថែមក្នុងពេលឆាប់ៗនេះ។ កំណែបែតានៃកម្មវិធីបញ្ជាដែលមានការគាំទ្រសម្រាប់ Vulkan API ត្រូវបានចេញផ្សាយរួចហើយដោយ AMD និង Nvidia ។ បន្ទាប់គឺ Intel, Qualcomm, ARM និងក្រុមហ៊ុនផលិតផ្សេងទៀតដែលជាផ្នែកមួយនៃសម្ព័ន្ធ Khronos Group ។ ការបង្ហាញនៃ Vulkan នៅលើបន្ទះឈីបក្រាហ្វិក ARM Mali អាចមើលឃើញនៅក្នុងវីដេអូខាងក្រោម។

បច្ចុប្បន្ននេះ Vulkan អាចត្រូវបានសាកល្បងនៅលើកាតវីដេអូជាមួយ បន្ទះសៀគ្វីក្រាហ្វិក Nvidia GeForce GT 630 និងខ្ពស់ជាងនេះ, AMD Radeon HD 7700 និងក្រោយ។ Vulkan API ក៏គាំទ្រកូនកាត់ផងដែរ។ ដំណើរការ AMDជាមួយ ស្នូលក្រាហ្វិក Radeon HD 8500 – 8900 និង R2 – R9 ។ ក្រាហ្វិកដែលភ្ជាប់មកជាមួយសម្រាប់ផ្ទៃតុ និង ឧបករណ៍ដំណើរការចល័ត Intel បានគាំទ្រ Vulkan តាំងពីពេលនោះមក គ្រួសារស្នូលជំនាន់ទីប្រាំ។

សមត្ថភាពពេញលេញនៃ API ថ្មីនឹងត្រូវបានបង្ហាញដោយការសន្យាក្រាហ្វិក ឧបករណ៍ដំណើរការ Nvidiaស៊េរី Pascal និង AMD ជាមួយស្ថាបត្យកម្ម GCN ជំនាន់ទីបួន។ កាតវីដេអូដែលត្រូវគ្នានឹងសន្មតថាត្រូវបានរួមបញ្ចូលនៅក្នុង ស៊េរី GTX 1xxx និង Radeon Rx 400. យោងតាមទិន្នន័យមិនផ្លូវការការចាប់ផ្តើមនៃការលក់របស់ពួកគេត្រូវបានគ្រោងទុកសម្រាប់ត្រីមាសទីពីរនៃឆ្នាំ 2016 ។

Vulkan គឺជា API ថ្មីសម្រាប់បង្កើតកម្មវិធី 3D ។ វាត្រូវបានបង្កើតឡើងដោយ Khronos Group ដែលក៏អភិវឌ្ឍ OpenGL ផងដែរ។ ការរួមចំណែកដ៏អស្ចារ្យដល់ ការបង្កើត APIបានបណ្តាក់ទុន ក្រុមហ៊ុន AMD. ទោះបីជាក្រុមហ៊ុនជាច្រើនផ្សេងទៀតបានធ្វើការលើវាក៏ដោយ ឧទាហរណ៍ Microsoft, Apple, Google, Sony ។ API នេះត្រូវបានគាំទ្រដោយអ្នកបង្កើតផ្នែករឹងដូចជា៖ NVidia, AMD, Intel, Qualcomm, Imagination Technologies, ARM ។

របៀបដែល Vulkan ខុសគ្នាពី OpenGL

អត្ថបទ​វិគីភីឌា​លើក​ឡើង​ពី​ភាព​ខុស​គ្នា​សំខាន់ៗ​ចំនួន ៤៖

  1. មិនមានរដ្ឋសកលទេរដ្ឋទាំងអស់ត្រូវបានចងភ្ជាប់ទៅនឹងវត្ថុ។
  2. រដ្ឋ​ត្រូវ​បាន​ចង​ភ្ជាប់​ទៅ​នឹង​សតិបណ្ដោះ​អាសន្ន​ពាក្យ​បញ្ជា មិនមែន​ទៅ​នឹង​បរិបទ​ដូច​ក្នុង OpenGL ទេ។
  3. នៅក្នុង OpenGL ការគ្រប់គ្រងអង្គចងចាំ និងការធ្វើសមកាលកម្មមិនត្រូវបានធ្វើឡើងយ៉ាងច្បាស់នៅក្នុង Vulkan ទេ អ្នកអភិវឌ្ឍន៍នឹងមានសមត្ថភាពគ្រប់គ្រងវា។
  4. កង្វះនៃការត្រួតពិនិត្យកំហុសនៅក្នុងអ្នកបើកបរដើម្បីបង្កើនល្បឿនការងារ។

ដោយផ្អែកលើការពិតដែលថា API ថ្មីបានបង្ហាញខ្លួននៅថ្ងៃនេះ និងក្នុងរយៈពេល 18 ខែ ក្រុមហ៊ុន Khronos Group បាននិងកំពុងបង្កើតវាដោយទំនាក់ទំនងជិតស្និទ្ធជាមួយក្រុមហ៊ុន IT ឈានមុខគេរបស់ពិភពលោក យើងអាចសន្និដ្ឋានបានថា API នេះគួរតែសមស្របជាងសម្រាប់កម្មវិធី 3D ទំនើប។

ខាងក្រោមនេះអ្នកអាចមើលពីរបៀបដែល Vulkan ដំណើរការ៖

តើ Vulkan នឹងមក Mac OS X ទេ?

នៅពេលដែលការបញ្ជាក់របស់ Vulkan ត្រូវបានបោះពុម្ព សូមស្វែងរកកម្មវិធីបញ្ជាសម្រាប់ កាតវីដេអូទំនើបមិនពិបាកទេ។ ប៉ុន្តែនេះគឺសម្រាប់តែ Windows និង Linux ប៉ុណ្ណោះ។ ដោយសារ Vulcan គ្រាន់តែជា API ឆ្លងវេទិកាដែលមិនត្រូវការការគាំទ្រពិសេសពីកាតវីដេអូ ដោយការអាប់ដេតកម្មវិធីបញ្ជា អ្នកអាចចាប់ផ្តើមប្រើវា (ប្រសិនបើជាការពិត កាតវីដេអូរបស់អ្នកស្ថិតនៅក្នុងបញ្ជីដែលគាំទ្រ)។

សម្រាប់ Mac OS X អ្វីៗកាន់តែស្មុគស្មាញ។ មិនមានការគាំទ្រ Vulkan នៅ El Capitan ទេខ្ញុំចង់រង់ចាំ កំណែបន្ទាប់ទោះយ៉ាងណាក៏ដោយមានមួយ "ប៉ុន្តែ" ។ Apple បានបន្ថែមការគាំទ្រសម្រាប់ API របស់ខ្លួន - Metal - ទៅ El Capitan ។ ពីមុនវាប្រើសម្រាប់តែឧបករណ៍ iOS ប៉ុណ្ណោះ។ ដោយផ្អែកលើរឿងនេះ និងបានផ្តល់ឱ្យការពិតដែលថា Apple ត្រូវបានប្រើដើម្បីគ្រប់គ្រងអ្វីគ្រប់យ៉ាងដែលទាក់ទងនឹងឧបករណ៍របស់ពួកគេ យើងអាចសន្និដ្ឋានថា Vulkan ប្រហែលជាមិនលេចឡើងនៅលើ Mac OS X ទេ។

តើមានអ្វីបន្ទាប់?

តាមគំនិតរបស់ខ្ញុំ អ្វីដែលរង់ចាំ Vulkan ភាគច្រើនអាស្រ័យទៅលើរបៀបដែលអ្នកអភិវឌ្ឍន៍ចាប់ផ្តើមប្រើប្រាស់វាយ៉ាងសកម្ម និងគាំទ្រវាពីក្រុមហ៊ុនផលិតកាតវីដេអូ។ ប្រសិនបើការអភិវឌ្ឍន៍ OpenGL ឈប់នៅទីនេះ នោះវានឹងមិនមានជម្រើសសម្រាប់កម្មវិធីថ្មីទេ ហើយពួកវានឹងត្រូវបង្កើតនៅក្នុង Vulkan ។ ប៉ុន្តែមានកម្មវិធី OpenGL រាប់ពាន់ដែលគ្មាននរណាម្នាក់នឹងប្រញាប់ដើម្បីសរសេរឡើងវិញនៅក្នុង Vulkan នោះទេ។ បញ្ហាជាមួយ Mac OS X ក៏មិនច្បាស់ដែរ ព្រោះនេះគឺជាប្រព័ន្ធទូទៅមួយនៅក្នុងសហរដ្ឋអាមេរិក។ ប្រសិនបើមាន Metal សម្រាប់ Mac OS X, DirectX សម្រាប់ Windows និង Vulkan សម្រាប់ Linux នោះ Vulkan នឹងមិនជួយសម្រួលដល់ការអភិវឌ្ឍន៍កម្មវិធីឆ្លងវេទិកានោះទេ។