ããã§ã¯ãVulkanAPIããã¥ã¢ã«ã®ç¿»èš³ãæçš¿ããŸãããœãŒã¹ãªã³ã¯-vulkan-tutorial.comãå¥ã®HabrãŠãŒã¶ãŒã§ããkiwhyïŒhttps://habr.com/ru/users/kiwhy/ïŒãåãããã¥ã¢ã«ã®ç¿»èš³ã«åŸäºããŠãããããç§
ãã¡ã¯èªåãã¡ã®éã§ã¬ãã¹ã³ãå ±æããããšã«åæããŸãããç§ã®åºçç©ã§ã¯ãkiwhyã«ãã£ãŠç¿»èš³ãããç« ãžã®ãªã³ã¯ãæäŸããŸãã
ã³ã³ãã³ã
1.ã¯ããã«
èè kiwhyã«ããèšäºãåç §ããŠãã ãã--habr.com/ru/post/462137
2.æŠèŠ
ãã«ã«ã³ã®èæ¯
äžè§åœ¢ã®æãæ¹ã¯ïŒ
- ã¹ããã1-ã€ã³ã¹ã¿ã³ã¹ãšç©çããã€ã¹
- ã¹ããã2-LUNããã³ãã¥ãŒãã¡ããª
- ã¹ããã3-ãŠã£ã³ããŠãµãŒãã§ã¹ãšã¹ã¯ãããã§ãŒã³
- ã¹ããã4-ç»åãã¥ãŒãšãã¬ãŒã ãããã¡
- ã¹ããã5-ãã¹ãã¬ã³ããªã³ã°ãã
- ã¹ããã6-ã°ã©ãã£ãã¯ãã€ãã©ã€ã³
- ã¹ããã7-ã³ãã³ãããŒã«ãšã³ãã³ããããã¡
- ã¹ããã8-ã¡ã€ã³ã«ãŒã
- çµè«
APIã®æŠå¿µ
ãã®ç« ã§ã¯ãVulkanã®äœ¿çšãéå§ããVulkanã§è§£æ±ºã§ããåé¡ã確èªããŸããæåã®äžè§åœ¢ãäœæããããã«å¿ èŠãªæé ã«ã€ããŠèª¬æããŸããããã«ãããæšæºã®æŠèŠãããããåŸç¶ã®ç« ã®ã¬ã€ã¢ãŠãã®èåŸã«ããããžãã¯ãçè§£ã§ããããã«ãªããŸããæåŸã«ãVulkanAPIã®æ§é ãšäžè¬çãªäœ¿çšäŸãèŠãŠãããŸãã
Vulkanã®åææ¡ä»¶
以åã®ã°ã©ãã£ãã¯ã¹APIãšåæ§ã«ãVulkanã¯GPUãä»ããã¯ãã¹ãã©ãããã©ãŒã ã®æœè±¡åãšããŠèããããŠããŸãããããã®APIã®ã»ãšãã©ã®äž»ãªåé¡ã¯ãéçºäžã«ã°ã©ãã£ãã¯ããŒããŠã§ã¢ã䜿çšãããåºå®æ©èœã«éå®ãããŠããããšã§ããéçºè ã¯é ç¹ããŒã¿ãæšæºåœ¢åŒã§æäŸããå¿ èŠããããç §æãšåœ±ã«ã€ããŠã¯GPUã¡ãŒã«ãŒã«å®å šã«äŸåããŠããŸããã
ãããªã«ãŒãã®ã¢ãŒããã¯ãã£ãçºå±ããã«ã€ããŠããŸããŸãå€ãã®ããã°ã©ã å¯èœãªæ©èœãããã«çŸãå§ããŸããããã¹ãŠã®æ°æ©èœã¯ãäœããã®æ¹æ³ã§æ¢åã®APIãšçµã¿åãããå¿ èŠããããŸãããããã¯ãäžå®å šãªæœè±¡åãšãããã°ã©ããŒã®æå³ãææ°ã®ã°ã©ãã£ãã¯ã¹ã¢ãŒããã¯ãã£ã«å€æããæ¹æ³ã«ã€ããŠã®ã°ã©ãã£ãã¯ã¹ãã©ã€ããŒåŽã®å€ãã®ä»®èª¬ã«ã€ãªãããŸããããã®ãããã²ãŒã ã®ããã©ãŒãã³ã¹ãåäžãããããã«ã倿°ã®ãã©ã€ããŒã¢ããããŒãããªãªãŒã¹ãããŠããŸãããã®ãããªãã©ã€ããŒã¯è€éã§ãããããããšãã°ã·ã§ãŒããŒã«æ¡çšãããŠããæ§æã§ã¯ããã³ããŒéã§äžäžèŽãçããããšããããããŸãã..ããããšã¯å¥ã«ãéå»10幎éã§ã匷åãªã°ã©ãã£ãã¯ããŒããŠã§ã¢ãåããã¢ãã€ã«ããã€ã¹ã®æµå ¥ãèŠãããŸããããããã®ã¢ãã€ã«GPUã®ã¢ãŒããã¯ãã£ã¯ããµã€ãºãšé»åèŠä»¶ã«ãã£ãŠå€§ããç°ãªããŸãããã®ãããªäŸã®1ã€ã¯ãã¿ã€ã«ã¬ã³ããªã³ã°ã§ããããã¯ãæ©èœãããé©åã«å¶åŸ¡ããããšã§ãããåªããããã©ãŒãã³ã¹ãæäŸã§ããŸãã APIã®å€ãã«ãããã1ã€ã®å¶éã¯ããã«ãã¹ã¬ããã®ãµããŒããå¶éãããŠããããšã§ããããã¯ãCPUåŽã®ããã«ããã¯ã«ã€ãªããå¯èœæ§ããããŸãã
Vulkanã¯ãææ°ã®ã°ã©ãã£ãã¯ã¢ãŒããã¯ãã£çšã«ãŒãããæ§ç¯ãããŠããããããããã®åé¡ã®è§£æ±ºã«åœ¹ç«ã¡ãŸããããã«ãããéçºè ã¯è©³çްãªAPIã䜿çšããŠç®æšãæç¢ºã«èª¬æã§ããããããã©ã€ããŒåŽã®ãªãŒããŒããããåæžãããŸããVulkanã䜿çšãããšãè€æ°ã®ã¹ã¬ããã§ã³ãã³ãã䞊è¡ããŠäœæããã³éä¿¡ã§ããŸãããŸããæšæºåããããã€ãã³ãŒã圢åŒã«ç§»è¡ããåäžã®ã³ã³ãã€ã©ã䜿çšããããšã§ãã·ã§ãŒãéã®ã³ã³ãã€ã«ã®äžäžèŽãæžãããŸããæåŸã«ãVulkanã¯ãã°ã©ãã£ãã¯ã¹ãšã³ã³ãã¥ãŒãã£ã³ã°æ©èœãåäžã®APIã«çµ±åããããšã«ããã仿¥ã®ã°ã©ãã£ãã¯ã¹ã«ãŒãã®ã³ã¢æ©èœãçµ±åããŸãã
äžè§åœ¢ãæãã«ã¯ã©ãããã°ããã§ããïŒ
äžè§åœ¢ãæãããã«å¿ èŠãªæé ãç°¡åã«èŠãŠãããŸããããã«ãããããã»ã¹ã®æŠèŠãããããŸããåæŠå¿µã®è©³çްã«ã€ããŠã¯ã次ã®ç« ã§èª¬æããŸãã
ã¹ããã1-ã€ã³ã¹ã¿ã³ã¹ãšç©çããã€ã¹
Vulkanã®æäœã¯ãVkInstanceïŒã€ã³ã¹ã¿ã³ã¹ïŒãä»ããŠVulkanAPIãæ§æããããšããå§ãŸããŸããã€ã³ã¹ã¿ã³ã¹ã¯ãããã°ã©ã ã®èª¬æãšäœ¿çšããæ¡åŒµæ©èœã䜿çšããŠäœæãããŸããã€ã³ã¹ã¿ã³ã¹ååŸãVulkanããµããŒãããããŒããŠã§ã¢ãç §äŒããæäœãå®è¡ãã1ã€ä»¥äžã®VkPhysicalDevicesãéžæã§ããŸããå°çšã®ã°ã©ãã£ãã¯ã«ãŒãã䜿çšãããå Žåã¯ãVRAMãµã€ãºãããã€ã¹æ©èœãªã©ã®ãã©ã¡ãŒã¿ãåãåãããŠãå¿ èŠãªããã€ã¹ãéžæã§ããŸãã
ã¹ããã2-ããžãã¯ããã€ã¹ãšãã¥ãŒãã¡ããª
䜿çšããé©åãªããŒããŠã§ã¢ããã€ã¹ãéžæããããVkDeviceïŒè«çããã€ã¹ïŒãäœæããå¿ èŠããããŸããããã§ã䜿çšããæ©èœïŒVkPhysicalDeviceFeaturesïŒã«ã€ããŠè©³ãã説æããŸããããšãã°ãè€æ°ã®ãã¥ãŒããŒãã«ã¬ã³ããªã³ã°ããŸãã sïŒãã«ããã¥ãŒããŒãã¬ã³ããªã³ã°ïŒããã³64ããããããŒãããŸãã䜿çšãããã¥ãŒãã¡ããªã確ç«ããå¿ èŠããããŸããæç»ã³ãã³ããã¡ã¢ãªå æäœãªã©ãVulkanã§å®è¡ãããæäœã®å€ãã¯ãVkQueueã«éä¿¡ãããåŸã«éåæã§å®è¡ãããŸãã..ããã¥ãŒã¯ãã¥ãŒã®ãã¡ããªãŒããå²ãåœãŠãããåãã¡ããªãŒã¯ç¹å®ã®æäœã®ã»ããããµããŒãããŸããããšãã°ãã°ã©ãã£ãã¯ã¹æäœãèšç®æäœãããã³ã¡ã¢ãªããŒã¿è»¢éçšã«åå¥ã®ãã¥ãŒãã¡ããªãååšããå ŽåããããŸããããã«ããããã®å¯çšæ§ã¯ãç©çããã€ã¹ãéžæããéã®éèŠãªãã©ã¡ãŒã¿ãŒãšããŠäœ¿çšã§ããŸããäžéšã®Vulkan察å¿ããã€ã¹ã¯ã°ã©ãã£ãã¯æ©èœãæäŸããŠããŸããããææ°ã®Vulkan察å¿ã°ã©ãã£ãã¯ã«ãŒãã¯ãã¹ãŠãéåžžãå¿ èŠãªãã¹ãŠã®ãã¥ãŒã€ã³ã°æäœããµããŒãããŠããŸãã
ã¹ããã3-ãŠã£ã³ããŠãµãŒãã§ã¹ãšã¹ã¯ãããã§ãŒã³
ãªãã¹ã¯ãªãŒã³ã¬ã³ããªã³ã°ä»¥äžã®ãã®ã«é¢å¿ãããå Žåã¯ãã¬ã³ããªã³ã°ãããç»åã衚瀺ããããã®ãŠã£ã³ããŠãäœæããå¿ èŠããããŸãã Windowsã¯ããã€ãã£ããã©ãããã©ãŒã APIãŸãã¯GLFWãSDLãªã©ã®ã©ã€ãã©ãªã䜿çšããŠäœæã§ããŸãããã®ãã¥ãŒããªã¢ã«ã§ã¯GLFWã䜿çšããŸããããã«ã€ããŠã¯ã次ã®ç« ã§è©³ãã説æããŸãã
ã¢ããªã±ãŒã·ã§ã³ãŠã£ã³ããŠã«ã¬ã³ããªã³ã°ããã«ã¯ããŠã£ã³ããŠãµãŒãã§ã¹ïŒ
VkSurfaceKHRïŒãšã·ã§ãŒãã§ãŒã³ïŒVkSwapchainKHRïŒã®2ã€ã®ã³ã³ããŒãã³ããå¿
èŠã§ããæ¥å°ŸèŸã«æ³šæããŠãã ããKHRããã¯ããããã®ãªããžã§ã¯ããVulkanæ¡åŒµæ©èœã®äžéšã§ããããšã瀺ããŠããŸãã Vulkan APIã¯å®å
šã«ãã©ãããã©ãŒã ã«äŸåããªããããæšæºåãããWSIïŒãŠã£ã³ããŠã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ïŒæ¡åŒµæ©èœã䜿çšããŠãŠã£ã³ããŠãããŒãžã£ãŒãšå¯Ÿè©±ããå¿
èŠããããŸãã Surfaceã¯ãã¬ã³ããªã³ã°çšã®ã¯ãã¹ãã©ãããã©ãŒã ãŠã£ã³ããŠæœè±¡åã§ãããéåžžãããšãã°HWNDWindowsã§ãã€ãã£ããŠã£ã³ããŠãã³ãã«ãåç
§ããããšã«ãã£ãŠäœæãããŸãã幞ããGLFWã©ã€ãã©ãªã«ã¯ããã©ãããã©ãŒã åºæã®è©³çްãæäœããããã®çµã¿èŸŒã¿é¢æ°ããããŸãã
ã·ã§ãŒãã§ãŒã³ã¯ãã¬ã³ããªã³ã°ã¿ãŒã²ããã®ã»ããã§ãããã®ã¿ã¹ã¯ã¯ãçŸåšã¬ã³ããªã³ã°ãããŠããç»åãç»é¢ã«è¡šç€ºãããŠããç»åãšç°ãªãããšã確èªããããšã§ããããã«ãããã¬ã³ããªã³ã°ãããç»åã®ã¿ã衚瀺ãããŠããããšã远跡ã§ããŸãããã¬ãŒã ãäœæããå¿ èŠããããã³ã«ãã¬ã³ããªã³ã°ããç»åãæäŸããããã«ã·ã§ãŒãã§ãŒã³ã«ãªã¯ãšã¹ãããå¿ èŠããããŸãããã¬ãŒã ãäœæãããåŸãç»åã¯ãã£ã¹ãã¬ã€ãã§ãŒã³ã«æ»ãããããæç¹ã§ç»é¢ã«è¡šç€ºãããŸãã宿ããç»åãç»é¢ã«è¡šç€ºããããã®ã¬ã³ããªã³ã°ã¿ãŒã²ãããšæ¡ä»¶ã®æ°ã¯ãçŸåšã®ã¢ãŒãã«ãã£ãŠç°ãªããŸãããããã®ã¢ãŒãã«ã¯ãããã«ãããã¡ãªã³ã°ïŒvsyncïŒãšããªãã«ãããã¡ãªã³ã°ãå«ãŸããŸããã·ã§ãŒãã§ãŒã³ã®äœæã«é¢ããç« ã§ãããã«ã€ããŠèª¬æããŸãã
äžéšã®ãã©ãããã©ãŒã ã§ã¯ãæ¡åŒµæ©èœ
VK_KHR_displayãä»ãVK_KHR_display_swapchainãŠããŠã£ã³ããŠãããŒãžã£ãæäœããã«ãç»é¢ã«çŽæ¥ã¬ã³ããªã³ã°ã§ããŸããããã«ãããç»é¢å
šäœã衚ããµãŒãã§ã¹ãäœæã§ããããšãã°ãç¬èªã®ãŠã£ã³ããŠãããŒãžã£ãŒãå®è£
ããããã«äœ¿çšã§ããŸãã
ã¹ããã4-ç»åãã¥ãŒãšãã¬ãŒã ãããã¡
衚瀺ãã§ãŒã³ããååŸããç»åã«æç»ããã«ã¯ãVkImageViewãšVkFramebufferã§ã©ããããå¿ èŠããããŸããã€ã¡ãŒãžãã¥ãŒã¯ã䜿çšãããã€ã¡ãŒãžã®ç¹å®ã®éšåãæãããã¬ãŒã ãããã¡ãŒã¯ãã«ã©ãŒã深床ãããã³ã¹ãã³ã·ã«ãããã¡ãŒãšããŠäœ¿çšãããã€ã¡ãŒãžãã¥ãŒãæããŸãããã£ã¹ãã¬ã€ãã§ãŒã³ã«ã¯ããŸããŸãªç»åãååšããå¯èœæ§ããããããäºåã«ç»åãã¥ãŒãšãã¬ãŒã ãããã¡ãäœæããæç»æã«å¿ èŠãªç»åãéžæããŸãã
ã¹ããã5-ã¬ã³ããªã³ã°
ãã¹Vulkanã®ã¬ã³ããªã³ã°ãã¹ã¯ãã¬ã³ããªã³ã°æäœäžã«äœ¿çšãããç»åã®ã¿ã€ãããããã®äœ¿ç𿹿³ãããã³ãããã®ã³ã³ãã³ãã®åŠçæ¹æ³ãèšè¿°ããŸããäžè§åœ¢ãæç»ããåã«ãåäžã®ç»åãã«ã©ãŒãããã¡ãŒãšããŠäœ¿çšããæç»ããåã«ãããã¯ãªã¢ããå¿ èŠãããããšãVulkanã«äŒããŸããã¬ã³ããŒãã¹ããããã¡ãŒãšããŠäœ¿çšãããã€ã¡ãŒãžã®ã¿ã€ãã®ã¿ãèšè¿°ããŠããå ŽåãVkFramebufferã¯å®éã«ç¹å®ã®ã€ã¡ãŒãžããããã®ã¹ãããã«é¢é£ä»ããŸãã
ã¹ããã6-
ã°ã©ãã£ãã¯ãã€ãã©ã€ã³Vulkanã®ã°ã©ãã£ãã¯ãã€ãã©ã€ã³ã¯ãVkPipelineãªããžã§ã¯ããäœæããããšã«ãã£ãŠæ§æãããŸãããã¥ãŒããŒããµã€ãºã深床ãããã¡æäœãªã©ã®ãããªã«ãŒãã®æ§æå¯èœãªç¶æ ãããã³VkShaderModuleãªããžã§ã¯ãã䜿çšããããã°ã©ã å¯èœãªç¶æ ã«ã€ããŠèª¬æããŸããVkShaderModuleãªããžã§ã¯ãã¯ãã·ã§ãŒããŒãã€ãã³ãŒãããäœæãããŸãããã©ã€ããŒã¯ããã€ãã©ã€ã³ã§äœ¿çšãããã¬ã³ããªã³ã°ã¿ãŒã²ãããæå®ããå¿ èŠããããŸããã¬ã³ããŒãã¹ãåç §ããŠèšå®ããŸãã
æ¢åã®APIãšæ¯èŒããVulkanã®æãéç«ã£ãæ©èœã®1ã€ã¯ãã°ã©ãã£ãã¯ãã€ãã©ã€ã³ã®ã»ãšãã©ãã¹ãŠã®ã·ã¹ãã èšå®ãäºåå®çŸ©ããå¿ èŠãããããšã§ããã€ãŸããå¥ã®ã·ã§ãŒããŒã«åãæ¿ããããé ç¹ã®ã¬ã€ã¢ãŠããå°ã倿Žãããããå Žåã¯ãã°ã©ãã£ãã¯ãã€ãã©ã€ã³ãå®å šã«åäœæããå¿ èŠããããŸãããããã£ãŠãã¬ã³ããªã³ã°æäœã«å¿ èŠãªãã¹ãŠã®çµã¿åããã«å¯ŸããŠãäºåã«å€ãã®VkPipelineãªããžã§ã¯ããäœæããå¿ èŠããããŸãããã¥ãŒããŒããµã€ãºãã¯ãªã¢ã«ã©ãŒãªã©ãäžéšã®åºæ¬èšå®ã®ã¿ãåçã«å€æŽã§ããŸãããã¹ãŠã®ç¶æ ãæç€ºçã«èšè¿°ããå¿ èŠããããŸãããããã£ãŠãããšãã°ãããã©ã«ãã®ã«ã©ãŒãã¬ã³ãç¶æ ã¯ãããŸããã
幞ããããã»ã¹ã¯ãªã³ã¶ãã©ã€ã§ã³ã³ãã€ã«ããã®ã§ã¯ãªããäºåã«ã³ã³ãã€ã«ãããããªãã®ã§ãããããå¥ã®ã°ã©ãã£ãã¯ãã€ãã©ã€ã³ãžã®åãæ¿ããªã©ã®éèŠãªç¶æ 倿Žãæç€ºçã«æå®ãããããããã©ã€ããŒã«ã¯æé©åã®æ©äŒãå¢ããããã©ãŒãã³ã¹ãããäºæž¬å¯èœã«ãªããŸãã
ã¹ããã7-ã³ãã³ãããŒã«ãšã³ãã³ããããã¡
åè¿°ã®ããã«ãæç»æäœãªã©ãVulkanã®å€ãã®æäœããã¥ãŒã«å ¥ããå¿ èŠããããŸããæäœãéä¿¡ããåã«ãããããVkCommandBufferã«æžã蟌ãå¿ èŠããããŸããã³ãã³ããããã¡ã¯ãç¹å®ã®ãã¥ãŒãã¡ããªã«é¢é£ä»ããããŠããVkCommandPoolããååŸãããŸããåçŽãªäžè§åœ¢ãæãã«ã¯ãæ¬¡ã®æäœã§ã³ãã³ããããã¡ãäœæããå¿ èŠããããŸãã
- ã¬ã³ããªã³ã°ãã¹ãéå§ããŸã
- ã°ã©ãã£ãã¯ãã€ãã©ã€ã³ããã€ã³ããã
- 3ã€ã®é ç¹ãæã
- ã¬ã³ããŒãã¹ã®çµäº
ãã¬ãŒã ãããã¡å ã®ç»åã®ã€ã³ã¹ã¿ã³ã¹ã¯ããã£ã¹ãã¬ã€ãã§ãŒã³ãæäŸããç»åã«äŸåãããããå¯èœãªç»åããšã«ã³ãã³ããããã¡ãèšè¿°ããæç»äžã«å¿ èŠãªãã®ãéžæããå¿ èŠããããŸãããã¬ãŒã ããšã«æ¯åã³ãã³ããããã¡ãæžã蟌ãããšãã§ããŸãããããã¯å¹çãæªããªããŸãã
ã¹ããã8-ã¡ã€ã³ã«ãŒã
æç»ã³ãã³ããã³ãã³ããããã¡ã«éä¿¡ããåŸãã¡ã€ã³ã«ãŒãã¯ååã«åçŽã«èŠããŸãããŸããã·ã§ãŒãã§ãŒã³ãã
vkAcquireNextImageKHRãã䜿çšããŠç»åãååŸããŸããæ¬¡ã«ããã®ã€ã¡ãŒãžã«é©åãªã³ãã³ããããã¡ãŒãéžæããvkQueueSubmitã䜿çšããŠå®è¡ã§ããŸããæåŸã«ãã䜿çšããŠè¡šç€ºããããã«ç»åããã£ã¹ãã¬ã€ãã§ãŒã³ã«æ»ããŸãvkQueuePresentKHRã
ãã¥ãŒã«éä¿¡ãããæäœã¯éåæã§å®è¡ãããŸãããããã£ãŠãåæãªããžã§ã¯ãïŒã»ããã©ïŒã䜿çšããŠãæ£ããèµ·åé åºã確ä¿ããå¿ èŠããããŸãã衚瀺ãã§ãŒã³ããç»åããã§ããããåŸã«ã®ã¿å®è¡ãããããã«æç»ã³ãã³ããããã¡ã®å®è¡ãèšå®ããå¿ èŠããããŸããããããªããšãç»é¢ã«è¡šç€ºããããã«ãŸã èªã¿åãããŠããç»åã®ã¬ã³ããªã³ã°ãéå§ãããšãã«ç¶æ³ãçºçããå¯èœæ§ããããŸããæ¬¡ã«ãåŒã³åºã
vkQueuePresentKHRã¯ã¬ã³ããªã³ã°ãå®äºããã®ãåŸ
ã€å¿
èŠããããŸãããã®ããã«ã2çªç®ã®ã»ããã©ã䜿çšããŸããã¬ã³ããªã³ã°ã®çµäºãéç¥ããŸãã
çµè«
ãã®ç°¡åãªæŠèŠã§ã¯ãæåã®äžè§åœ¢ãæãåã®äœæ¥ã®æŠèŠã説æããŸããå®éã«ã¯ãããã«å€ãã®ã¹ãããããããŸããããã«ã¯ãé ç¹ãããã¡ãŒã®å²ãåœãŠãåäžãããã¡ãŒã®äœæããã¯ã¹ãã£ã€ã¡ãŒãžã®ããŒããå«ãŸããŸãããããã¯ãã¹ãŠæ¬¡ã®ç« ã§èª¬æããŸãããããã§ã¯ç°¡åã«å§ããŸããããé ãã«ç§»åããã»ã©ãçŽ æã¯é£ãããªããŸããé ç¹ãããã¡ã䜿çšãã代ããã«ãæåã«é ç¹åº§æšãé ç¹ã·ã§ãŒããŒã«åã蟌ããšããããªãããŒãªæ¹æ³ãæ¡çšããããšã«ããããšã«æ³šæããŠãã ããããã®æ±ºå®ã¯ãé ç¹ãããã¡ãŒã管çããã«ã¯ãæåã«ã³ãã³ããããã¡ãŒã«ç²ŸéããŠããå¿ èŠããããšããäºå®ã«ãããã®ã§ãã
ç°¡åã«èŠçŽããŸããããæåã®äžè§åœ¢ãæãã«ã¯ã次ã®ãã®ãå¿ èŠã§ãã
- VkInstanceãäœæããŸã
- ãµããŒããããŠãããããªã«ãŒããéžæããŸãïŒVkPhysicalDeviceïŒ
- äœæVkDeviceãšVkQueueãæç»ããã³è¡šç€ºã®ããã«
- ãŠã£ã³ããŠããŠã£ã³ããŠãµãŒãã§ã¹ãäœæãããã§ãŒã³ã衚瀺ããŸã
- ãã£ã¹ãã¬ã€ãã§ãŒã³ã€ã¡ãŒãžãVkImageViewã§ã©ããããŸã
- ã¬ã³ããŒã¿ãŒã²ãããšãã®äœ¿çšæ³ãå®çŸ©ããã¬ã³ããŒãã¹ãäœæããŸã
- ã¬ã³ããŒãã¹çšã®ãã¬ãŒã ãããã¡ãŒãäœæãã
- ã°ã©ãã£ãã¯ãã€ãã©ã€ã³ãæ§æãã
- ãã£ã¹ãã¬ã€ãã§ãŒã³å ã®åç»åã®ãããã¡ã«æç»ã³ãã³ããé åžããŠæžã蟌ã¿ãŸã
- æ£ããã³ãã³ããããã¡ãéä¿¡ããç»åããã£ã¹ãã¬ã€ãã§ãŒã³ã«æ»ãããšã«ãããåä¿¡ããç»åã«ãã¬ãŒã ãæç»ããŸã
å€ãã®ã¹ãããããããšããäºå®ã«ããããããããããã®ããããã®æå³ã¯æ¬¡ã®ç« ã§æããã«ãªããŸããæé ãããããªãå Žåã¯ããã®ç« ã«æ»ã£ãŠãã ããã
APIã®æŠå¿µ
ãã®ç« ã§ã¯ãVulkanAPIãäžäœã¬ãã«ã§ã©ã®ããã«æ§æãããŠãããã«ã€ããŠç°¡åã«èª¬æããŸãã
ã³ãŒãã£ã³ã°æšæºã®
ãã¹ãŠã®ãã«ã«ã³æ©èœãåæããã³æ§é ã¯ãèŠåºãã®äžã«ã©ãã«ä»ããããŠãã
vulkan.hã«å«ãŸããŠãããã«ã«ã³SDK LunarGã«ãã£ãŠéçºãããŸããã SDKã®ã€ã³ã¹ããŒã«ã«ã€ããŠã¯ã次ã®ç« ã§èª¬æããŸãã
颿°ã«ã¯
vkå°æåã®æ¥é èŸãä»ããããåæåïŒenumïŒãšæ§é ã«ã¯æ¥é èŸãä»ãããVkãåæãããå€ã«ã¯æ¥é èŸãä»ãããVK_ãŸãã APIã¯ãæ§é ãåºç¯å²ã«äœ¿çšããŠã颿°ã«ãã©ã¡ãŒã¿ãŒãæäŸããŸããããšãã°ããªããžã§ã¯ãã¯éåžžãæ¬¡ã®ãã¿ãŒã³ã«åŸã£ãŠäœæãã
ãŸããVulkanã®å€ãã®æ§é ã§ã¯ãã¡ã³ããŒã§æ§é ã¿ã€ããæç€ºçã«æå®ããå¿ èŠããããŸã
sTypeãã¡ã³ããŒpNextã¯æ¡åŒµæ§é ãæãããšãã§ããåžžã«ã¿ã€ãã«ãªããŸãnullptr..ããªããžã§ã¯ããäœæãŸãã¯ç Žæ£ãã颿°ã«ã¯ãVkAllocationCallbacksãã©ã¡ãŒã¿ãŒããããŸããããã«ãããç¬èªã®ã¡ã¢ãªãŒã¢ãã±ãŒã¿ãŒã䜿çšã§ããããã¥ã¢ã«ã§ã¯ã¿ã€ããããnullptrãŸãã
ã»ãšãã©ãã¹ãŠã®é¢æ°ã¯ããšã©ãŒã³ãŒããŸãã¯ãšã©ãŒã³ãŒãã®ããããã§ããVkResultãè¿ã
VK_SUCCESSãŸãã仿§ã«ã¯ãå颿°ãè¿ãããšãã§ãããšã©ãŒã³ãŒããšãã®æå³ãèšèŒãããŠããŸãã
æ€èšŒã¬ã€ã€ãŒ
åè¿°ã®ããã«ãVulkanã¯ãäœããã©ã€ããŒè² è·ã§é«æ§èœãæäŸããããã«èšèšãããŠããŸãããããã£ãŠãéåžžã«éãããèªåãšã©ãŒæ€åºããã³ä¿®æ£æ©èœãå«ãŸããŠããŸããééãããšããã©ã€ããŒãã¯ã©ãã·ã¥ãããæªåããã°ã©ãã£ãã¯ã«ãŒãã§ã¯åŒãç¶ãæ©èœããŸãããä»ã®ã°ã©ãã£ãã¯ã«ãŒãã§ã¯å€±æããŸãã
ãããã£ãŠãVulkanã§ã¯ãæ€èšŒã¬ã€ã€ãŒãšåŒã°ããæ©èœã䜿çšããŠé«åºŠãªæ€èšŒãå®è¡ã§ããŸãã..ãæ€èšŒã¬ã€ã€ãŒã¯ãAPIãšã°ã©ãã£ãã¯ã¹ãã©ã€ããŒã®éã«æ¿å ¥ããŠã颿°ãã©ã¡ãŒã¿ãŒã®è¿œå ã®æ€èšŒãå®è¡ããã¡ã¢ãªç®¡çã®åé¡ã远跡ã§ããã³ãŒãã§ããããã¯ãéçºäžã«ããããéå§ãã远å è²»çšãªãã§ããã°ã©ã ãéå§ãããšãã«ããããå®å šã«ç¡å¹ã«ã§ãããšããç¹ã§äŸ¿å©ã§ãã誰ã§ãç¬èªã®æ€èšŒã¬ã€ã€ãŒãäœæã§ããŸãããLunarGã®Vulkan SDKã¯ããã¥ãŒããªã¢ã«å šäœã§äœ¿çšããæšæºã»ãããæäŸããŸãããŸããã¬ã€ã€ãŒãããããã°ã¡ãã»ãŒãžãåä¿¡ããã«ã¯ãã³ãŒã«ããã¯é¢æ°ãç»é²ããå¿ èŠããããŸãã
Vulkanã§ã®æäœã¯éåžžã«è©³çްã§ãããæ€èšŒã¬ã€ã€ãŒã¯éåžžã«åºç¯å²ã«ããããããOpenGLãDirect3Dãšæ¯èŒããŠãé»ãç»é¢ã®åå ãç¹å®ããã®ãã¯ããã«ç°¡åã«ãªããŸãã
ã³ãŒãã£ã³ã°ãéå§ããåã«æ®ã£ãŠããã¹ãããã¯1ã€ã ãã§ããããã¯ãéçºç°å¢ã®ã»ããã¢ããã§ãã