Vulkan API (glNext) kutoka Khronos Group. Mradi wa Vulkan: OpenGL utakamilisha API mpya

Utangulizi

Ikiwa unakabiliwa na tatizo la FPS ya chini katika DOOM na unataka kurekebisha, basi umefika mahali pazuri.
Jambo la kichawi Vulkan API huinua FPS kwa wastani wa fremu 15-25 (kulingana na usanidi wa kompyuta yako), na kugeuza FPS 20-30 zisizofurahi kuwa 50-60 inayoweza kucheza kabisa.

TAZAMA! KABLA YA KUTEKELEZA HATUA ZILIZOELEZWA KATIKA MWONGOZO, LAZIMA UHAKIKISHE KWAMBA COMPUTER YAKO INAKIDHI ANGALAU MAHITAJI YA KIWANGO CHA MFUMO!

API ya Vulkan ni nini?

Huyu ni mnyama wa aina gani na anawezaje kuongeza tija kwa kiasi kikubwa?

Vulkan API ni kiolesura cha programu cha picha iliyoundwa ili kuonyesha michoro ya 3D na 2D kwenye vichunguzi vyako. Kuweka tu, ujinga huu hutumia rasilimali za kompyuta yako kuunda michoro kwenye michezo. OpenGL na DirectX ni kutoka kwa hadithi moja.

Kwa nini inatoa ongezeko hilo la FPS? Ninaweza, bila shaka, kuanza kukuambia kuhusu teknolojia za super-duper zinazotumiwa ndani yake, lakini kwa ajili ya unyenyekevu nitasema tu kwamba hutumia vifaa vya kompyuta kwa ufanisi zaidi kuliko mtangulizi wake OpenGL.

Je, ninaiwezeshaje?

Ni rahisi sana, wacha tuanze na hatua ya kwanza:

Hatua ya kwanza:

Sasisha viendesha kadi yako ya video hadi mwisho toleo linalowezekana. Ikiwa hujui jinsi ya kufanya hivyo, uulize, kwa sababu maagizo ya kusasisha ni ya muda mrefu sana, na mwongozo sio kuhusu hilo kabisa.

Hatua ya pili:

Hebu tuzindue DOOM yenyewe. Nenda kwa Mipangilio> Advanced na kwenye kipengee " Graphics API" chagua "Vulkan API" badala ya "OpenGL". Anzisha tena mchezo.

Hatua ya tatu:

Wacha tuingie kwenye mchezo na tufurahie utendaji ulioongezeka!

MUHIMU:

Utendaji ulioboreshwa unategemea sana sifa za kompyuta yako. Kwenye usanidi wangu, ongezeko lilikuwa kama FPS 30, kwa wengine inaweza kuwa kidogo sana, wakati wengine wanaweza wasihisi tofauti kabisa. Na kwa ujumla, ni ujinga kutarajia angalau FPS 30 kutoka kwa kibaniko kilicho na Vulkan ikiwa haitoi 10 kwa mipangilio ya chini.

Mchezo hauanzi baada ya kuwezesha API ya Vulcan, nifanye nini?

Sababu ya kwanza:

Hukusasisha viendeshaji, au ulipakua toleo lisilo sahihi. Inapakia toleo jipya/imara.

Sababu ya pili:

Kadi yako ya video haiwezi kufikia API ya Vulkan. Hii pia inaweza kutokea, lakini uwezekano ni mdogo sana. Ikiwa kadi ya video inafaa mahitaji ya chini- hakika inaweza kufanya kazi na API ya Vulkan. Ikiwa sivyo, rudisha mchezo kwa mipangilio chaguo-msingi na uteseke na OpenGL

Jinsi ya kurudisha mchezo nyuma kwa OpenGL ikiwa hakuna kitu kinachofanya kazi?

Ikiwa mchezo utakataa kuzindua baada ya kubadili Vulkan, hapa kuna njia ya kurudi kwenye OpenGL:
Kwanza kabisa, unahitaji kwenda kwenye folda ya kuokoa, iko kwenye njia hii:
C:\Watumiaji\<имя_пользователя>\Michezo Iliyohifadhiwa\id Programu\DOOM\msingi
Ifuatayo, tunapata faili ndani yake DOOMConfig.local na uifungue na notepad.
Inatafuta kigezo r_renderapi na kubadilisha maana yake 1 juu 0 (1 - VulkanAPI, 0 - OpenGL)
Hifadhi faili na uifunge. Mchezo unapaswa kuanza sasa.

Shukrani nyingi kwa mtumiaji arikuto kwa kupata maelekezo!

Usisahau kukadiria mwongozo au kuacha ukosoaji/mapendekezo yako!

Hivi majuzi, API mpya ya Vulkan ilitolewa - mtu anaweza kusema, mrithi wa OpenGL, ingawa Vulkan inategemea API ya Mantle kutoka AMD.
Bila shaka, maendeleo na usaidizi wa OpenGL haukuacha, na DirectX 12 pia ilitolewa. Kwa bahati mbaya (au labda kwa bahati nzuri) sijui kinachoendelea na DirectX 12 na kwa nini imewekwa tu kwenye Windows 10. Lakini Vulkan ya jukwaa la msalaba ilinivutia. Ni sifa gani za Vulkan na jinsi ya kuitumia kwa usahihi nitajaribu kukuambia katika nakala hii.

Kwa hivyo, Vulkan ni ya nini na inaweza kutumika wapi? Katika michezo na programu zinazofanya kazi na michoro? Hakika! Hesabu kama CUDA au OpenCL inavyofanya? Hakuna shida. Je, tunahitaji dirisha au onyesho kwa hili? Bila shaka sivyo, unaweza kuchagua mahali pa kutangaza matokeo yako au usiyatangaze kabisa. Lakini mambo ya kwanza kwanza.

Muundo wa API na misingi

Labda tuanze na rahisi zaidi. Kwa kuwa API ya Vulkan ilitengenezwa na Kikundi cha Khronous, sintaksia inafanana kabisa na OpenGL. API nzima ina kiambishi awali cha vk. Kwa mfano, kazi (wakati mwingine hata kwa majina marefu sana) huonekana kama hii: vkDoSomething(...), majina ya miundo au vishikizo: VkSomething, na misemo yote ya mara kwa mara (makro, simu nyingi na vipengele vya kuhesabu): VK_SOMETHING. Pia, kuna aina maalum ya kazi - amri, ambayo kiambishi awali cha Cmd kinaongezwa: vkCmdJustDoIt(...).

Unaweza kuandika katika Vulkan katika C na C++. Lakini chaguo la pili, bila shaka, litatoa urahisi zaidi. Kuna (na zitaundwa) bandari katika lugha zingine. Mtu tayari amefanya bandari kwa Delphi, mtu anataka (kwa nini?) bandari ya Python.

Kwa hivyo unaundaje muktadha wa kutoa? Hapana. Hayupo hapa. Badala yake, walikuja na vitu vingine vilivyo na majina tofauti ambayo yangefanana na DirectX.

Kuanza na Dhana za Msingi

Vulkan hutenganisha dhana mbili - ni kifaa (kifaa) Na mwenyeji (mwenyeji) Kifaa kitatekeleza amri zote zilizotumwa kwake, na mpangishaji atazituma. Kwa kweli, maombi yetu ni mwenyeji - Vulkan ina istilahi hii.

Kufanya kazi na Vulkan tunahitaji vipini kwa ajili yake nakala (mfano), na labda hata zaidi ya moja, vile vile kifaa (kifaa), tena, mtu anaweza kuwa haitoshi kila wakati.

Vulkan inaweza kupakiwa kwa urahisi kwa urahisi. Katika SDK (iliyotengenezwa na LunarG), ikiwa jumla ya VK_NO_PROTOTYPES ilitangazwa na maktaba ya Vulkan ilipakiwa na mikono yako mwenyewe (sio na kiunganishi, lakini kwa njia fulani katika msimbo), basi kwanza kabisa utahitaji kazi ya vkGetInstanceProcAddr. , ambayo unaweza kujua anwani za kazi kuu za Vulkan - zile zinazofanya kazi bila mfano, pamoja na kazi ya kuunda, na kazi zinazofanya kazi na mfano, pamoja na kazi ya kuiharibu na kazi ya kuunda kifaa. . Baada ya kuunda kifaa, unaweza kupata kazi zinazofanya kazi nayo (pamoja na mtoto wake Hushughulikia) kupitia vkGetDeviceProcAddr.

Ukweli wa kuvutia: katika Vulkan daima unahitaji kujaza muundo fulani na data ili kuunda kitu chochote. Na kila kitu katika Vulkan hufanya kazi takriban kwa njia hii: iliyoandaliwa mapema - inaweza kutumika mara nyingi na kwa utendaji wa juu. Maelezo ya mfano yanaweza pia kujumuisha maelezo kuhusu programu yako, toleo la injini, toleo la API iliyotumiwa na maelezo mengine.

Tabaka na upanuzi

Katika Vulkan safi hakuna ukaguzi thabiti wa usahihi wa data inayoingia. Aliambiwa afanye kitu - atafanya. Hata kama hii itasababisha programu, kosa la dereva au kadi ya video. Hii ilifanyika kwa ajili ya utendaji. Hata hivyo, unaweza kuunganisha bila matatizo yoyote tabaka za uthibitishaji, na viendelezi kwa mfano na/au kifaa, ikiwa ni lazima.

Tabaka

Kimsingi, madhumuni ya tabaka ni kuangalia data inayoingia kwa makosa na kufuatilia utendaji wa Vulkan. Zinafanya kazi kwa urahisi sana: tuseme tunaita chaguo za kukokotoa, na huenda kwenye safu ya juu kabisa, iliyobainishwa wakati wa kuunda kifaa au mfano mapema. Anaangalia kila kitu kwa usahihi, kisha hupitisha simu kwa ijayo. Na hivyo itakuwa mpaka inakuja kwenye msingi wa Vulkan. Bila shaka, unaweza kuunda tabaka zako mwenyewe. Kwa mfano, Steam ilitoa safu ya SteamOverlay (ingawa sijui inafanya nini). Walakini, tabaka zitabaki kimya, lakini hazitavunja programu. Unajuaje ikiwa kila kitu kimefanywa kwa usahihi? Kuna ugani maalum kwa hili!

Viendelezi

Kama jina linavyopendekeza, wanapanua kazi ya Vulkan utendaji wa ziada. Kwa mfano, kiendelezi kimoja (ripoti ya utatuzi) kitaonyesha makosa (na zaidi) kutoka kwa tabaka zote. Ili kufanya hivyo, utahitaji kutaja kazi muhimu ya Kupiga simu, na nini cha kufanya na taarifa iliyopokelewa katika kazi hii ni juu yako kuamua. Tafadhali kumbuka kuwa hii ni Rudi nyuma na ucheleweshaji unaweza kukugharimu sana, haswa ikiwa utatoa taarifa zote zilizopokelewa moja kwa moja kwenye kiweko. Baada ya kusindika ujumbe, unaweza kutaja kama kupitisha simu ya kazi zaidi (kwa safu inayofuata) au la - kwa njia hii unaweza kuepuka. makosa muhimu, lakini jaribu kuendelea kufanya kazi na makosa hatari sana.
Pia kuna upanuzi mwingine, ambao baadhi yake nitazungumzia baadaye katika makala hii.

Kifaa

Vulkan hutenganisha dhana za vifaa vya kimwili na vya kimantiki. Kifaa cha kimwili Inaweza kuwa kadi yako ya video (na zaidi ya moja) au kichakataji kinachoauni michoro. Kifaa cha mantiki imeundwa kwa misingi ya kimwili: taarifa kuhusu vifaa vya kimwili hukusanywa, moja muhimu huchaguliwa, nyingine imeandaliwa taarifa muhimu na kifaa kinaundwa. Kunaweza kuwa na kadhaa vifaa vya mantiki kulingana na moja ya kimwili, lakini kuchanganya kwa kazi ya umoja vifaa vya kimwili(bado?) haiwezekani.

Kwa hivyo tunakusanya habari ya aina gani? Hizi ni, bila shaka, muundo unaoungwa mkono, kumbukumbu, uwezo na, bila shaka, familia za foleni.

Familia za foleni na foleni

Kifaa kinaweza (au hakiwezi) kufanya mambo 4 yafuatayo: kuchora michoro, kufanya mahesabu mbalimbali, kunakili data, na kufanya kazi kwa kumbukumbu ndogo (nadra). usimamizi wa kumbukumbu) Uwezo huu unawakilishwa kama familia za foleni: kila familia hutumia uwezo fulani (labda wote mara moja). Na ikiwa familia zinazofanana zilitenganishwa, Vulkan bado ataziwasilisha kama familia moja ili tusiwe na shida sana na kanuni na kuchagua familia inayofaa.

Baada ya kuchagua familia zinazohitajika (au zinazohitajika), unaweza kupata foleni kutoka kwao. Foleni ni mahali ambapo amri za kifaa zitafika (kisha kifaa kitaziondoa kwenye foleni na kuzitekeleza). Kwa njia, hakuna foleni nyingi na familia. NVIDIA huwa na familia 1 yenye uwezo wote wa foleni 16. Mara tu unapomaliza uteuzi wa familia na idadi ya foleni, unaweza kuunda kifaa.

Amri, utekelezaji wao na maingiliano

Amri zote za kifaa zimewekwa kwenye chombo maalum - buffer ya amri. Wale. Hakuna chaguo za kukokotoa katika Vulkan ambazo huambia kifaa kufanya jambo mara moja na kurudisha udhibiti kwenye programu operesheni inapokamilika. Kuna tu kazi za kujaza bafa ya amri na amri fulani (kwa mfano, kuchora kitu au kunakili picha). Ni baada tu ya kuandika bafa ya amri kwenye seva pangishi tunaweza kuituma kwenye foleni, ambayo tayari inajulikana kuwa iko kwenye kifaa.

Kuna aina mbili za bafa ya amri: msingi na sekondari. Cha msingi hutumwa moja kwa moja kwenye foleni. Sekondari haiwezi kutumwa - inazinduliwa katika msingi. Amri zimeandikwa kwa mpangilio sawa ambao kazi ziliitwa. Wanaingia kwenye foleni kwa utaratibu sawa. Lakini zinaweza kutimizwa karibu kwa utaratibu wa "machafuko". Ili kuzuia machafuko kamili katika programu, wasanidi programu wa Vulkan wametoa zana za kusawazisha.

Sasa, jambo muhimu zaidi: mwenyeji Sivyo inasubiri kukamilika kwa utekelezaji wa amri na bafa za amri. Na angalau mpaka uiweke wazi. Baada ya buffers za amri kutumwa kwenye foleni, udhibiti hurudi mara moja kwenye programu.

Kuna primitives 4 za maingiliano: uzio, semaphore, tukio na kizuizi.

Uzio Njia rahisi zaidi ya kusawazisha ni kwamba inaruhusu mwenyeji kusubiri mambo fulani kutokea. Kwa mfano, kukamilisha utekelezaji wa bafa ya amri. Lakini uzio hutumiwa mara chache.

Semaphore- njia ya maingiliano ndani ya kifaa. Hakuna njia ya kutazama hali yake au kuingojea kwa mwenyeji, na huwezi kuingojea ndani ya bafa ya amri, lakini tunaweza kutaja ni semaphore gani inapaswa kutoa ishara wakati utekelezaji wa amri zote kwenye bafa umekamilika, na. ambayo semaphore ya kusubiri kabla ya kuanza kutekeleza amri kwenye bafa. Tu, si bafa nzima itasubiri, lakini hatua fulani yake.

Hatua za bomba na tegemezi za utekelezaji

Kama ilivyoelezwa tayari, amri kwenye foleni hazitatekelezwa kwa utaratibu. Ili kuwa sahihi zaidi, amri zinazofuata hazitasubiri zile za awali zikamilike. Wanaweza kutekelezwa kwa sambamba, au utekelezaji wa amri ya awali inaweza kukamilisha baadaye zaidi kuliko zifuatazo. Na hiyo ni kawaida kabisa. Lakini baadhi ya timu hutegemea kutokana na utendaji wa wengine. Unaweza kuzigawanya katika mwambao mbili: "kabla" na "baada ya", na pia onyesha ni hatua gani za ufuo "kabla" lazima zitekelezwe (ambayo ni, amri haziwezi kukamilika kabisa au sio zote) kabla ya hatua zilizoainishwa kuanza. kutekelezwa amri za pwani "baada ya". Kwa mfano, kuchora picha kunaweza kusitisha ili kufanya mambo fulani, na kisha kuendelea kuchora tena. Kunaweza pia kuwa na mlolongo wa utegemezi, lakini hebu tusiingie ndani ya misitu ya Vulkan ya Siberia.

Matukio- kipengele cha kurekebisha "nzuri". Unaweza kutuma ishara kutoka kwa mwenyeji na kutoka kwa kifaa, na unaweza pia kusubiri kwenye kifaa na kwa mwenyeji. Tukio huamua utegemezi wa seti mbili za amri (kabla na baada) katika bafa ya amri. Na kwa tukio hilo pia kuna hatua maalum ya pseudo ambayo inakuwezesha kusubiri mwenyeji.

Kizuizi tena inaweza kutumika tu kwenye kifaa, au kwa usahihi zaidi, kwenye bafa ya amri, ikitangaza utegemezi wa seti ya kwanza na ya pili ya amri. Unaweza pia kuongeza vizuizi vya kumbukumbu, ambavyo vinaweza kuwa aina tatu: kimataifa kizuizi, kizuizi bafa na kizuizi Picha. Hawatakuruhusu kusoma bila kukusudia data iliyo ndani wakati huu zimeandikwa na/au kinyume chake, kulingana na vigezo vilivyoainishwa.

Wasafirishaji

Chini ni mabomba mawili ya Vulkan:

Wale. Vulkan ina mabomba mawili: mchoro Na ya kimahesabu. Kwa msaada wa graphics, tunaweza, bila shaka, kuchora, na kwa hesabu ... tunaweza kuhesabu. Nini kingine? Matokeo ya hesabu yanaweza kutumwa kwa bomba la michoro. Kwa njia hii unaweza kuokoa muda kwa urahisi kwenye mfumo wa chembe, kwa mfano.

Huwezi kubadilisha mpangilio au kubadilisha hatua za bomba yenyewe. Isipokuwa ni hatua zinazoweza kupangwa (vivuli). Unaweza pia kutuma aina mbalimbali za data kwa vivuli (na si tu) kupitia maelezo.

Unaweza kuunda kashe ya bomba ambayo inaweza kutumika (tena na tena) katika mabomba mengine na hata baada ya kuanzisha upya programu.

Lazima bomba liwekewe mipangilio na kuhusishwa na bafa ya amri kabla ya bomba kutumia amri za bomba.

Urithi wa bomba

Kwa kuwa bomba ni kweli taarifa zote kuhusu jinsi ya kufanya kazi na data zinazoingia, kubadilisha bomba (na hii ni habari kuhusu vivuli, maelezo, rasterization, nk) inaweza kuwa ghali kwa muda. Kwa hiyo, watengenezaji walitoa uwezo wa kurithi bomba. Wakati wa kubadilisha bomba kwa mtoto, mzazi, au kati ya watoto, kutakuwa na utendaji mdogo wa juu. Lakini pia ni rahisi kwa watengenezaji, kama vile OOP.

Toa pasi, bomba la michoro na fremu

Kwa hivyo, tunapata matryoshka ifuatayo:

Ili kutumia amri za utoaji, unahitaji bomba la michoro. Katika bomba la graphics unahitaji kutaja toa pasi (Kutoa Pass), ambayo ina habari kuhusu njia ndogo (njia ndogo), utegemezi wao kwa kila mmoja na viambatisho (kiambatisho) Kiambatisho - maelezo kuhusu picha ambayo itatumika katika vihifadhi fremu. Fremubuffer imeundwa mahususi kwa ajili ya pasi mahususi ya uwasilishaji. Ili kuanza pasi, unahitaji kubainisha pasi yenyewe (na, ikiwa ni lazima, pasi ndogo) na fremu buffer. Baada ya kuanza kwa kupita, unaweza kuchora .Unaweza pia kubadili kati ya njia ndogo.Baada ya kuchora kukamilika, unaweza kukamilisha kupita.

Usimamizi wa kumbukumbu na rasilimali

Kumbukumbu katika Vulkan imetolewa na mwenyeji na mwenyeji pekee (isipokuwa swapchain). Ikiwa picha (au data nyingine) inahitaji kuwekwa kwenye kifaa, kumbukumbu imetengwa. Kwanza, rasilimali ya ukubwa fulani imeundwa, basi mahitaji yake ya kumbukumbu yanaombwa, kumbukumbu imetengwa kwa ajili yake, basi rasilimali inahusishwa na sehemu ya kumbukumbu hii, na kisha tu data muhimu inaweza kunakiliwa kwa rasilimali hii. Pia, kuna kumbukumbu ambayo inaweza kubadilishwa moja kwa moja kutoka kwa mwenyeji (mwenyeji anayeonekana), kuna kumbukumbu ya ndani vifaa (kumbukumbu ya kadi ya video, kwa mfano) na pia aina nyingine za kumbukumbu, ambazo kwa njia yao wenyewe huathiri kasi ya upatikanaji wao.

Katika Vulkan, unaweza pia kuandika mgao wako wa kumbukumbu ya mwenyeji kwa kusanidi vitendaji vya Rudi nyuma. Lakini kumbuka kwamba mahitaji ya kumbukumbu sio tu ukubwa wake, bali pia kusawazisha (alignment).

Rasilimali zenyewe zinakuja katika aina mbili: vihifadhi (vihifadhi) Na Picha (Picha) Zote mbili zimetenganishwa kwa kusudi, lakini ikiwa bafa ni mkusanyiko wa data mbalimbali (vertex, index au bafa ya mara kwa mara), basi picha huwa na umbizo lake.

Ushauri kwa wale wanaoandika kwenye Vulkan

Tenga eneo la kumbukumbu ambalo unaweza kuweka rasilimali kadhaa mara moja. Idadi ya mgao ni mdogo na unaweza kukosa kutosha. Lakini idadi ya vyama sio mdogo.

Vivuli

Vulkan inasaidia aina 6 za vivuli: apical, udhibiti wa tessellation, uchambuzi wa tessellation, kijiometri, vipande vipande(aka pixel) Na ya kimahesabu. Unaweza kuziandika kwenye SPIR-V inayoweza kusomeka, na kisha kuikusanya kwenye msimbo wa byte, ambayo tutaifunga kwenye moduli katika programu, i.e. Wacha tuunde moduli ya shader kutoka kwa nambari hii. Bila shaka, tunaweza kuiandika katika GLSL ya kawaida na kisha kuibadilisha kuwa SPIR-V (tayari tunayo mtafsiri). Na, bila shaka, unaweza kuandika mtafsiri wako mwenyewe na hata mkusanyaji - vyanzo na vipimo vimewekwa katika OpenSource, hakuna kinachokuzuia kuandika mkusanyiko wa Kiwango chako cha Juu cha SPIR-V. Au labda mtu ameandika tayari.
Msimbo wa byte kisha hutafsiriwa kwa amri maalum kwa kila kadi ya video, lakini hii inafanywa kwa kasi zaidi kuliko kutoka kwa msimbo ghafi wa GLSL. Mazoezi sawa pia inatumika kwa DirectX - HLSL inabadilishwa kwanza kuwa msimbo wa byte, na msimbo huu wa byte unaweza kuhifadhiwa na kisha kutumika ili usijumuishe vivuli tena na tena.

Windows na maonyesho

Na makala hii itaisha na hadithi kuhusu WSI (Ushirikiano wa Mfumo wa Dirisha) na mlolongo wa kubadili (swapchain). Ili kuonyesha kitu kwenye dirisha au kwenye skrini, upanuzi maalum unahitajika.

Kwa madirisha ni ugani msingi ndege na upanuzi wa ndege maalum kwa kila moja ya mifumo (win32, xlib, xcb, android, mir, wayland). Skrini (yaani FullScreen) inahitaji kiendelezi cha onyesho, lakini kwa jumla zote mbili hutumia kiendelezi cha kubadilishana.

Mlolongo wa kubadili haujaunganishwa kwenye bomba la michoro, kwa hivyo Skrini ya Wazi rahisi hufanya kazi bila kusanidi haya yote. Ni rahisi sana. Kuna injini fulani ya uwasilishaji, ambayo ina foleni ya picha. Picha moja inaonyeshwa kwenye skrini, wengine wanasubiri zamu yao. Tunaweza pia kutaja idadi ya picha. Pia kuna njia kadhaa zinazokuwezesha kusubiri ishara ya usawazishaji wima.

Jinsi inavyofanya kazi ni kitu kama hiki: tunaomba faharasa ya taswira isiyolipishwa, piga bafa ya amri ambayo itanakili matokeo kutoka kwa Framebuffer hadi kwenye picha hii, na kutuma amri kutuma picha kwenye foleni. Inaonekana rahisi, lakini kwa kuzingatia kwamba maingiliano inahitajika, kila kitu ni ngumu zaidi, kwani kitu pekee ambacho mwenyeji anatarajia ni faharisi ya picha ambayo. hivi karibuni itapatikana. Amri ya buffer inasubiri ishara ya semaphore, ambayo itaonyesha upatikanaji wa picha, na kisha yenyewe inatuma ishara kupitia semaphore kwamba utekelezaji wa buffer, na hivyo kunakili, umekamilika. Na picha itaingia kwenye foleni kwenye ishara ya mwisho ya semaphore. Kuna semaphores mbili tu: kuhusu upatikanaji wa picha kwa ajili ya kunakili na kuhusu upatikanaji wa picha kwa ajili ya kuonyesha (yaani, kuhusu kukamilika kwa kunakili).

Kwa njia, nilithibitisha kuwa bafa ya amri sawa ilitumwa kwenye foleni mara nyingi. Unaweza kufikiria mwenyewe hii inamaanisha nini.

Katika makala hii nilijaribu kuzungumza juu ya sehemu muhimu zaidi za API ya Vulkan, lakini mengi bado hayajafunikwa na unaweza kujua mwenyewe. Nakutakia FPS thabiti na usimbaji wa kupendeza.

Katika maendeleo ya maombi ya 3D, michezo ya video na mifumo ukweli halisi huja hatua mpya. Pamoja, watengenezaji walifanya hatua muhimu kwenye njia ya kuunganisha msimbo na zaidi matumizi bora rasilimali za vifaa. Kundi la Khronos, muungano wa makampuni zaidi ya mia moja, limezindua rasmi toleo la kwanza la API ya wazi, ya jukwaa-msingi inayoitwa Vulkan (zamani GLNext). Inatoa udhibiti wa moja kwa moja juu ya GPU na CPU, kuondoa vikwazo na kuboresha utendaji wa jumla.

Kwenye vikao mara nyingi unaweza kuona aina sawa ya maswali kuhusu kama kichakataji X kitafungua kadi ya video Y na ni usanidi gani ulio na bajeti sawa na utakaoleta tija zaidi katika maombi maalum. Inatokea kwa sababu GPU za kisasa zina utendakazi mkubwa kuliko CPU za kiwango sawa na kizazi. Katika michezo na programu zingine za 3D, kuna nyakati ambapo CPU inaweza kulazimika shinikizo kubwa, na GP hana kazi. Kwa mfano, processor huhesabu mwingiliano wa wachezaji na vitu, na kadi ya video inasubiri data kutoka kwake ili kuchora sura inayofuata. Kwa sababu ya usawa wa upakiaji, ucheleweshaji hufanyika, na mchezo unaobadilika unaweza kugeuka kuwa onyesho la slaidi la sura kwa sura, hata kwa kadi ya video yenye nguvu.

Matatizo haya ni ya kawaida kwa jukwaa la PC na haijulikani kwa wamiliki wa consoles za mchezo. Wasanidi wa mchezo wa Console daima wanajua ubainifu wa kina wa vidhibiti na wanaweza kutekeleza uboreshaji wa kina wa misimbo kwa kuzingatia vipengele vyao. Kompyuta, kompyuta za mkononi, vidonge ni zoo ya usanidi tofauti tu, lakini pia usanifu tofauti wa kimsingi. Wakati wa kuunda michezo kwa jukwaa tofauti kama hilo, kipaumbele kinakuwa umoja wa nambari, ambayo inathiri vibaya kasi ya utekelezaji wake.


Watengenezaji mifumo ya uendeshaji wanajaribu kutatua tatizo la ufanisi mdogo wa kanuni kwa njia tofauti maombi ya wahusika wengine. Microsoft ilianza kutafuta njia za kuongeza graphics kompyuta muda mrefu uliopita, lakini msaada halisi kwa ajili ya uendeshaji wa kiwango cha chini ulionekana tu katika DirectX 12. API hii inapatikana tu katika OS moja - Windows 10. Kwa upande wake, Msimamo wa Apple iligeuka kuwa karibu na ile ya watengenezaji wa koni ya mchezo. Wakati kampuni hiyo hiyo inazalisha wasindikaji wa simu na programu, ni rahisi zaidi kufikia kazi iliyoratibiwa. Walakini, Apple ina mbali na njia zilizochoka za kuongeza maendeleo ya michezo na programu. Ilionekana katika iOS 8 Metal API, pia ilizingatia matumizi ya shughuli za chini.

Pumzika makampuni makubwa wanapendelea kutenda kwa ushirikiano na ndani ya viwango vilivyo wazi. Muungano wa Kikundi cha Khronos, ambao ulionekana miaka 16 iliyopita, uliunganisha wazalishaji zaidi ya mia moja, ikiwa ni pamoja na marafiki wa damu kama AMD, Nvidia na Intel. Wakati mmoja, muungano huo ulifunuliwa viwango vya wazi OpenGL, OpenCL, OpenCV na wengine wengi.


Ikilinganishwa na OpenGL, Vulkan huwapa wasanidi programu uwezo wa kutumia utendakazi wa kiwango cha chini bila kuathiri ubebaji wa msimbo. Kutumia Vulkan juu majukwaa tofauti inawezekana kufikia karibu algorithm ya usawa kama ilivyo kwa wataalamu consoles za mchezo. API hii hukusaidia kutumia vyema uwezo wa maunzi kadi za video za kipekee na vichipu vya michoro vilivyojumuishwa katika hali za 2D na 3D.

Sawa na DirectX 12, Vulkan inasaidia ufikiaji wa moja kwa moja kwa kumbukumbu ya GPU. Zaidi ya hayo, Vulkan inapunguza utegemezi wa utoaji kasi juu ya ubora wa madereva. Kwa kutafsiri kanuni za programu za shader katika muundo wa kati wa binary, mkusanyiko wao unaweza kufanywa tayari katika hatua ya maendeleo, na si wakati wa uzinduzi wa programu ya 3D.

Vulkan imekuwa katika maendeleo tangu katikati ya 2014. Ilikuwa msingi maktaba za michoro API nyingine ya kiwango cha chini - AMD Mantle. AMD pia ilitumika kama mhariri wa maelezo rasmi. Kwa kuongezea, kikundi cha Khronos kilichapisha idadi ya majaribio yanayoonyesha faida za API mpya. Zote zinapatikana kwenye lango la GitHub.

"Vulkan ina uwezo mkubwa," anasema Dean Sekulic, mtayarishaji programu katika Croteam. - Ili kuiweka katika sentensi moja, ujio wa Vulkan ulimaliza mzozo wa muda mrefu kati ya wapiganaji kwa utendakazi wa kanuni na kubebeka. Sasa tunaiweka Kanuni ya Talos ili kuthibitisha dhana mpya ya maendeleo.

Valve inafadhili uundaji wa LunarG SDK kwa kutumia Usaidizi wa API Vulkan. Walakini, licha ya uainishaji wazi, zana zinazopatikana za ukuzaji, uwezo uboreshaji wa kina nambari na faida zingine, Vulkan itakuwa API ambayo haitumiki sana kwa muda. Watengenezaji wengi wa mchezo watabaki waaminifu kwa DirectX 11/12 na OpenGL. Ni rahisi zaidi kuongeza Mahitaji ya Mfumo au kupunguza ubora wa michoro badala ya mbinu mpya za ukuzaji. Kwa kuelewa hili, muungano wa Khronos Group unajitahidi kutoa msaada kwa Vulkan sio tu katika OS mpya na ufumbuzi wa picha, lakini pia kwenye mifumo ya kizamani.

Vulkan kwa sasa inatumika katika Mazingira ya Windows(kuanzia toleo la saba), Linux, SteamOS na Android. Msaada wa Tizen OS wa Samsung unatarajiwa kuongezwa hivi karibuni. Matoleo ya Beta ya viendeshi na usaidizi wa Vulkan API tayari yametolewa na AMD na Nvidia. Inayofuata ni Intel, Qualcomm, ARM na watengenezaji wengine ambao ni sehemu ya muungano wa Khronos Group. Onyesho la Vulkan kwenye chipu ya michoro ya ARM Mali inaweza kuonekana kwenye video hapa chini.

Hivi sasa, Vulkan inaweza kujaribiwa kwenye kadi za video na graphics chips Nvidia GeForce GT 630 na zaidi, AMD Radeon HD 7700 na baadaye. Vulkan API pia inasaidia mseto Wasindikaji wa AMD Na msingi wa michoro Radeon HD 8500 - 8900 na R2 - R9. Michoro iliyojengwa ndani ya eneo-kazi na wasindikaji wa simu Intel imesaidia Vulkan tangu wakati huo Familia ya msingi kizazi cha tano.

Uwezo kamili wa API mpya utafichuliwa kwa kuahidi taswira Wasindikaji wa Nvidia Pascal mfululizo na AMD na usanifu wa kizazi cha nne wa GCN. Kadi za video zinazolingana zitajumuishwa Mfululizo wa GTX 1xxx na Radeon Rx 400. Kulingana na data isiyo rasmi, mwanzo wa mauzo yao umepangwa kwa robo ya pili ya 2016.

Vulkan ni API mpya ya kuunda programu za 3D. Iliundwa na Kikundi cha Khronos, ambacho pia huendeleza OpenGL. Mchango mkubwa kwa Uundaji wa API imewekeza Kampuni ya AMD. Ingawa makampuni mengine mengi yalifanya kazi juu yake, kwa mfano Microsoft, Apple, Google, Sony. API hii inaungwa mkono na waundaji maunzi kama: NVidia, AMD, Intel, Qualcomm, Imagination Technologies, ARM.

Jinsi Vulkan inatofautiana na OpenGL

Nakala ya Wikipedia inaangazia tofauti 4 kuu:

  1. Hakuna majimbo ya kimataifa, majimbo yote yamefungwa kwa vitu.
  2. Majimbo yamefungwa kwa bafa ya amri, sio kwa muktadha kama katika OpenGL.
  3. Katika OpenGL, utunzaji wa kumbukumbu na ulandanishi haufanyiki kwa uwazi; katika Vulkan, msanidi atakuwa na uwezo wa kudhibiti hili.
  4. Ukosefu wa kosa kuangalia katika dereva ili kuharakisha kazi.

Kulingana na ukweli kwamba API mpya imeonekana leo na kwa muda wa miezi 18 Kikundi cha Khronos kimekuwa kikiiendeleza kwa mawasiliano ya karibu na makampuni ya ulimwengu ya IT, tunaweza kuhitimisha kuwa API hii inapaswa kuwa bora zaidi kwa ajili ya maombi ya kisasa ya 3D.

Hapo chini unaweza kuona jinsi Vulkan inavyofanya kazi:

Vulkan atakuja kwa Mac OS X?

Mara tu vipimo vya Vulkan vimechapishwa, pata viendeshaji vya kadi za video za kisasa si vigumu. Lakini hii ni kwa Windows na Linux tu. Kwa kuwa Vulcan ni API ya jukwaa la msalaba tu ambayo haihitaji msaada maalum kutoka kwa kadi za video, kwa kusasisha dereva, unaweza kuanza kuitumia (ikiwa, bila shaka, kadi yako ya video iko kwenye orodha ya wale wanaoungwa mkono).

Kwa Mac OS X, mambo ni magumu zaidi. Hakuna usaidizi wa Vulkan huko El Capitan, ningependa kungoja matoleo yanayofuata, hata hivyo, kuna moja "lakini". Apple imeongeza usaidizi kwa API yake - Metal - kwa El Capitan. Hapo awali, ilitumika tu kwa vifaa vya iOS. Kulingana na hili, na pia kutokana na ukweli kwamba Apple hutumiwa kudhibiti kila kitu kinachohusu vifaa vyao, tunaweza kuhitimisha kwamba Vulkan inaweza kutoonekana kwenye Mac OS X.

Nini kinafuata?

Kwa maoni yangu, kile kinachongojea Vulkan kwa kiasi kikubwa inategemea jinsi watengenezaji wanaanza kuitumia na kuiunga mkono kutoka kwa watengenezaji wa kadi ya video. Ikiwa ukuzaji wa OpenGL utasimama hapa, basi hakutakuwa na chaguo kwa programu mpya na italazimika kuendelezwa katika Vulkan. Lakini kuna maelfu ya programu za OpenGL ambazo hakuna mtu atakayekimbilia kuandika tena katika Vulkan. Suala la Mac OS X pia haliko wazi, kwani huu ni mfumo wa kawaida sana huko USA. Ikiwa kuna Metal kwa Mac OS X, DirectX kwa Windows, na Vulkan ya Linux, basi Vulkan haitawezesha kwa njia yoyote ukuzaji wa utumizi wa majukwaa mtambuka.