简单vulkan程序的API调用步骤总结
来源:互联网 发布:知豆电动汽车租赁宁波 编辑:程序博客网 时间:2024/04/26 02:47
本文根据vulkan triangle来总结一下简单vulkan sample的API调用步骤
一.创建instance & device
1.icd_init或者module_init :__attribute__((constructor))
wsi的构造函数,当wsi库被加载的时候执行,先于app的main函数而调用,设置 VK_ICD=libMali.so
2.vkEnumerateInstanceExtensionProperties
get extensions from all ICD,return to app in demo->extension_names= VK_KHR_surface,VK_KHR_wayland_surface,VK_KHR_swapchain,VK_EXT_debug_report
3.vkCreateInstance
instance类似于opengl中的context,It stores per-application state
当调用API创建Vulkan实例的时候,Vulkan SDK内部会经loader查找可用的GPU设备
4.vkEnumeratePhysicalDevices (loaderAndValidationLayer)
enumerate gpu device and choose one.
5.vkEnumerateDeviceExtensionProperties (loaderAndValidationLayer)
get all extensions from specific gpu device and choose one. get "VK_KHR_surface,VK_KHR_wayland_surface,VK_KHR_swapchain",
and choose VK_KHR_swapchain to app in demo->extension_names=VK_KHR_swapchain
5.vkCreateDevice vkGetDeviceQueue (loaderAndValidationLayer)
create logic device. 接下来就可以get queue了,queue是和device关联在一起的
二.创建command buffer & swapchain buffer & image
1.vkCreateCommandPool vkAllocateCommandBuffers (loaderAndValidationLayer)
--demo_prepare_buffers buffer都是通过vkCreateImageView来分配
--此处分配的buffer和image是color buffer 为vkCreateFramebuffer准备的
--in demo_prepare_framebuffers:attachments[0] = demo->buffers[i].view;
2.CreateSwapchainKHR --> vk_CreateSwapchainKHR
icd->create_presentable_image=vkCreateImageFromNativeBuffer
3.fpGetSwapchainImagesKHR --> vk_GetSwapchainImagesKHR
image 在vk_CreateSwapchainKHR:vk_icd_create_presentable_image中创建
4.vkCreateImageView -->dev_data->device_dispatch_table->CreateImageView(loader)-->vkCreateImageView_driver
三.创建depth buffer
--depth buffer也是通过vkCreateImageView来分配,为vkCreateFramebuffer准备的
--attachments[1] = demo->depth.view; in demo_prepare_framebuffers()
1.vkCreateImage
2.vkAllocateMemory
3.vkBindImageMemory
4.demo_set_image_layout
5.vkCreateImageView
四.创建 texture image
--texture也是通过vkCreateImageView来分配,在demo_prepare_descriptor_set中使用
--tex_descs[i].imageView = demo->textures[i].view;
1.vkCreateImage
2.vkAllocateMemory
3.vkBindImageMemory
4.demo_set_image_layout
5.vkCreateImageView
五.prepare vertices
1.vkCreateBuffer
2.vkAllocateMemory vkMapMemory
3.memcpy 把顶点数据拷贝的map的memory
4.vkBindBufferMemory
六.prepare_descriptor_layout
1.vkCreateDescriptorSetLayout demo->desc_layout
2.vkCreatePipelineLayout demo->pipeline_layout
七.create render pass
1.vkCreateRenderPass
八.create pipeline
1.demo_prepare_shader_module-->vkCreateShaderModule demo_prepare_vs
2.vkCreatePipelineCache vkCreateGraphicsPipelines
九.prepare descriptor pool and descriptor set
1.vkCreateDescriptorPool demo->desc_pool
2.vkAllocateDescriptorSets(demo->desc_pool) (in demo_prepare_descriptor_set)
3.vkUpdateDescriptorSets
十.create framebuffer
vkCreateFramebuffer 传入之前创建的depth image view和buffer image,renderpass
十一.demo_draw
1.vkAcquireNextImageKHR
2.demo_set_image_layout
3.demo_flush_init_cmd
4.demo_draw_build_cmd
5.vkQueueSubmit
6.vkQueuePresentKHR
一.创建instance & device
1.icd_init或者module_init :__attribute__((constructor))
wsi的构造函数,当wsi库被加载的时候执行,先于app的main函数而调用,设置 VK_ICD=libMali.so
2.vkEnumerateInstanceExtensionProperties
get extensions from all ICD,return to app in demo->extension_names= VK_KHR_surface,VK_KHR_wayland_surface,VK_KHR_swapchain,VK_EXT_debug_report
3.vkCreateInstance
instance类似于opengl中的context,It stores per-application state
当调用API创建Vulkan实例的时候,Vulkan SDK内部会经loader查找可用的GPU设备
4.vkEnumeratePhysicalDevices (loaderAndValidationLayer)
enumerate gpu device and choose one.
5.vkEnumerateDeviceExtensionProperties (loaderAndValidationLayer)
get all extensions from specific gpu device and choose one. get "VK_KHR_surface,VK_KHR_wayland_surface,VK_KHR_swapchain",
and choose VK_KHR_swapchain to app in demo->extension_names=VK_KHR_swapchain
5.vkCreateDevice vkGetDeviceQueue (loaderAndValidationLayer)
create logic device. 接下来就可以get queue了,queue是和device关联在一起的
二.创建command buffer & swapchain buffer & image
1.vkCreateCommandPool vkAllocateCommandBuffers (loaderAndValidationLayer)
--demo_prepare_buffers buffer都是通过vkCreateImageView来分配
--此处分配的buffer和image是color buffer 为vkCreateFramebuffer准备的
--in demo_prepare_framebuffers:attachments[0] = demo->buffers[i].view;
2.CreateSwapchainKHR --> vk_CreateSwapchainKHR
icd->create_presentable_image=vkCreateImageFromNativeBuffer
3.fpGetSwapchainImagesKHR --> vk_GetSwapchainImagesKHR
image 在vk_CreateSwapchainKHR:vk_icd_create_presentable_image中创建
4.vkCreateImageView -->dev_data->device_dispatch_table->CreateImageView(loader)-->vkCreateImageView_driver
三.创建depth buffer
--depth buffer也是通过vkCreateImageView来分配,为vkCreateFramebuffer准备的
--attachments[1] = demo->depth.view; in demo_prepare_framebuffers()
1.vkCreateImage
2.vkAllocateMemory
3.vkBindImageMemory
4.demo_set_image_layout
5.vkCreateImageView
四.创建 texture image
--texture也是通过vkCreateImageView来分配,在demo_prepare_descriptor_set中使用
--tex_descs[i].imageView = demo->textures[i].view;
1.vkCreateImage
2.vkAllocateMemory
3.vkBindImageMemory
4.demo_set_image_layout
5.vkCreateImageView
五.prepare vertices
1.vkCreateBuffer
2.vkAllocateMemory vkMapMemory
3.memcpy 把顶点数据拷贝的map的memory
4.vkBindBufferMemory
六.prepare_descriptor_layout
1.vkCreateDescriptorSetLayout demo->desc_layout
2.vkCreatePipelineLayout demo->pipeline_layout
七.create render pass
1.vkCreateRenderPass
八.create pipeline
1.demo_prepare_shader_module-->vkCreateShaderModule demo_prepare_vs
2.vkCreatePipelineCache vkCreateGraphicsPipelines
九.prepare descriptor pool and descriptor set
1.vkCreateDescriptorPool demo->desc_pool
2.vkAllocateDescriptorSets(demo->desc_pool) (in demo_prepare_descriptor_set)
3.vkUpdateDescriptorSets
十.create framebuffer
vkCreateFramebuffer 传入之前创建的depth image view和buffer image,renderpass
十一.demo_draw
1.vkAcquireNextImageKHR
2.demo_set_image_layout
3.demo_flush_init_cmd
4.demo_draw_build_cmd
5.vkQueueSubmit
6.vkQueuePresentKHR
阅读全文
0 0
- 简单vulkan程序的API调用步骤总结
- 简单的Hook Api 步骤
- Vulkan统一所有平台的API
- unity Vulkan API 发布设置的位置
- 淘宝api的简单调用
- 淘宝api的简单调用
- 淘宝api的简单调用
- 淘宝api的简单调用
- 淘宝api的简单调用
- Vulkan API基本概念
- [学习Vulkan之二] Vulkan API基本概念
- Google宣布支持Vulkan作为Android的底层图形API
- 阻塞IO与非阻塞IO简单程序书写的基本步骤总结
- 3行程序搞定SVM分类-用JAVA程序调用LibSVM API 最简单的示例
- 3行程序搞定SVM分类-用JAVA程序调用LibSVM API 最简单的示例
- 3行程序搞定SVM分类-用JAVA程序调用LibSVM API 最简单的示例
- 3行程序搞定SVM分类-用JAVA程序调用LibSVM API 最简单的示例
- 微信小程序,全程开发,全部api调用,真的好简单
- Struts2 3) package和action
- 数据分析(入门篇)-第二章-玩转数据分析-Part2(Excel数据分析工具库-描述性统计分析)
- Tengine的健康检查模块
- js表单提交方式与表单事件
- ACM CLUB晚会
- 简单vulkan程序的API调用步骤总结
- 图像质量评价
- java中的域,静态域,实例域
- c++11 atomic操作,在功能上能否和volatile相互替代
- Java中String类通过new创建和直接赋值字符串的区别
- C ++ Primer Plus 第六版 第六章编程练习答案
- tcc-transaction 执行流程源码分析
- HDU4267(线段树 +有规律的多个端点更新)
- IllegalArgumentException