Render

VulkanExample 构造

  • vkCreateInstance
  • vkCreateDebugReportCallbackEXT
  • vkCreateDevice
  • vkGetDeviceQueue
  • vkCreateCommandPool
  • createBuffer: VBO
  • createBuffer: IBO
  • Create framebuffer attachments
    • vkCreateImage * 2
      • vkGetImageMemoryRequirements_vkAllocateMemory_vkBindImageMemory
    • vkCreateImageView
  • Create renderpass
    • vkCreateRenderPass
    • vkCreateFramebuffer
  • Prepare graphics pipeline
    • vkCreateDescriptorSetLayout
    • vkCreatePipelineLayout
    • vkCreatePipelineCache
    • vkCreateGraphicsPipelines
  • Command buffer creation
    • vkAllocateCommandBuffers
    • vkBeginCommandBuffer
    • vkCmdBeginRenderPass
    • vkCmdSetViewport
    • vkCmdBindPipeline
    • vkCmdBindVertexBuffers
    • vkCmdBindIndexBuffer
    • vkCmdPushConstants
    • vkCmdDrawIndexed
    • vkCmdEndRenderPass
    • vkEndCommandBuffer
    • submitWork: 提交到队列
      • vkCreateFence
      • vkQueueSubmit
      • vkWaitForFences
      • vkDestroyFence
    • vkDeviceWaitIdle
  • 保存渲染结果(Copy framebuffer image to host visible image)
    • vkCreateImage
    • vkGetImageMemoryRequirements_vkAllocateMemory_vkBindImageMemory
    • vkAllocateCommandBuffers
    • vkBeginCommandBuffer
    • insertImageMemoryBarrier
    • vkCmdCopyImage
    • insertImageMemoryBarrier
    • vkEndCommandBuffer
    • submitWork
    • vkGetImageSubresourceLayout
    • vkMapMemory
    • 将数据写入本地磁盘(imagedata)
    • vkUnmapMemory
    • vkFreeMemory
    • vkDestroyImage
  • vkQueueWaitIdle

VulkanExample析构

  • vkDestroyBuffer
  • vkFreeMemory
  • vkDestroyImageView
  • vkDestroyImage
  • vkDestroyRenderPass
  • vkDestroyFramebuffer
  • vkDestroyPipelineLayout
  • vkDestroyDescriptorSetLayout
  • vkDestroyPipeline
  • vkDestroyPipelineCache
  • vkDestroyCommandPool
  • vkDestroyShaderModule
  • vkDestroyDevice
  • vkDestroyDebugReportCallback
  • vkDestroyInstance

shader

  • VS: 正常渲染三角形
  • FS: 正常渲染

本节主要讲如何将渲染结果保存到本地硬盘. 即从GPU显存(framebuffer)复制数据到内存的教程. 主要还是使用MemoryBarrier. 没有新东西, 复习了一下vulkan管线.

Render

VulkanExample 构造

  • vkCreateInstance
  • vkCreateDebugReportCallbackEXT
  • vkCreateDevice
  • vkGetDeviceQueue
  • vkCreateCommandPool
  • Prepare storage buffers
    • 输入数据:std::vector<uint32_t> computeInput
    • 输出数据:std::vector<uint32_t> computeOutput
    • 没见过的std使用方法
      • std::generate(computeInput.begin(), computeInput.end(), [&n] { return n++; });
  • Copy input data to VRAM using a staging buffer
    • createBuffer
    • vkMapMemory
    • vkFlushMappedMemoryRanges
    • vkUnmapMemory
    • createBuffer
    • vkAllocateCommandBuffers
    • vkBeginCommandBuffer
    • vkCmdCopyBuffer
    • vkEndCommandBuffer
    • vkCreateFence
    • vkQueueSubmit
    • vkWaitForFences
    • vkDestroyFence
    • vkFreeCommandBuffers
  • Prepare compute pipeline
    • vkCreateDescriptorPool
    • vkCreateDescriptorSetLayout
    • vkAllocateDescriptorSets
    • writeDescriptorSet
    • vkUpdateDescriptorSets
    • vkCreatePipelineCache
    • vkCreateComputePipelines
    • vkAllocateCommandBuffers
    • vkCreateFence
  • Command buffer creation
    • vkBeginCommandBuffer
    • vkCmdPipelineBarrier
    • vkCmdBindPipeline
    • vkCmdBindDescriptorSets
    • vkCmdDispatch
    • vkCmdPipelineBarrier
    • Read back to host visible buffer
      • vkCmdCopyBuffer
      • vkCmdPipelineBarrier
    • vkEndCommandBuffer
    • vkResetFences
    • vkQueueSubmit
    • vkWaitForFences
    • Make device writes visible to the host
      • vkMapMemory
      • vkInvalidateMappedMemoryRanges
      • memcpy
      • vkUnmapMemory
    • vkQueueWaitIdle
    • LOG(“Compute output:\n”): 控制台输出
    • vkDestroyBuffer
    • vkFreeMemory

VulkanExample析构

  • vkDestroyPipelineLayout
  • vkDestroyDescriptorSetLayout
  • vkDestroyDescriptorPool
  • vkDestroyPipeline
  • vkDestroyPipelineCache
  • vkDestroyFence
  • vkDestroyCommandPool
  • vkDestroyShaderModule
  • vkDestroyDevice
  • vkDestroyDebugReportCallback
  • vkDestroyInstance

shader

  • comp: 将输入从新赋值再输出

本节主要讲如何将CS计算结果保存到本地硬盘. 与上一节差不多,复习一下CS管线的代码。

目录RenderVulkanExample 构造VulkanExample析构shader小结RenderVulkanExample 构造VulkanExample析构shader小结RenderVulkanExample 构造vkCreateInstancevkCreateDebugReportCallbackEXTvkCreateDevicevkGetDeviceQueuevkCreateCommandPoolcreateBuffer: VBOcreateBuffer: IBOCr
本部分使用间接绘制命令在一个绘制调用中为不同的模型发布多个实例化绘制。 一、间接绘制原理 本示例演示了间接绘制命令的用法。除了诸如vkCmdDraw和vkCmdDrawIndexed指定绘制内容的参数直接传递到函数(“直接绘制”)的绘制函数外, vulkan 还存在间接绘制命令。 vkCmdDrawIndirect和vkCmdDrawIndexedIndirect从包含要发布的绘制命令的描述的缓冲区对象中获取绘制命令,包括实例和索引计数,顶点偏移等。这还允许使用单个绘制命令绘制多个几何图形,只要它们支持通过相同
6.2  SPIR-V 概述 SPIR-V着色器嵌入在module里。每一个module都可以包含一个或多个着色器。每一个着色器都有一个固定名字入口点和着色器类型,这用来定义着色器在哪个着色阶段来使用。入口点之着色器开始运行时的起始位置。一个SPIR-Vmodule都随着一些附带信息传递 给 Vulkan Vulkan 返回一个对象来表示这个module。此module可以用来构造一个管线
### 回答1: 如果计算机中丢失了 vulkan -1.dll文件,那么可能会导致某些程序无法正常运行。解决这个问题的方法是重新安装 Vulkan 运行库,或者从互联网上下载 vulkan -1.dll文件并将其放置在正确的文件夹中。但是需要注意的是,从非官方网站下载dll文件可能存在安全风险,因此建议从官方渠道下载或者使用系统自带的修复工具来解决该问题。 ### 回答2: vulkan -1.dll是 Vulkan 图形API的一部分,它是一个动态链接库文件,它包含了一些重要的函数和库,这些函数和库是让程序能够使用 Vulkan API的核心部分。如果出现了丢失 vulkan -1.dll的情况,那么一些程序可能会无法正常运行。 首先,我们需要知道 Vulkan 是一个跨平台的图形API,它是针对游戏开发和图形处理的应用程序接口。 Vulkan API设计的目标是高效的使用GPU硬件资源,并能够发挥多核CPU的强大处理能力,以实现更高质量的游戏渲染效果。 当我们遇到计算机中丢失 vulkan -1.dll的情况时,我们可以做一些以下的动作来解决这个问题: 1. 重新安装 Vulkan 驱动程序 首先,我们需要确认 Vulkan 图形API已经安装在计算机上。如果没有安装 Vulkan 驱动程序,我们需要下载并安装它。在安装 Vulkan 图形API的过程中,它会帮我们安装 vulkan -1.dll文件并把它放在正确的位置。 2. 从互联网上下载 vulkan -1.dll文件 如果我们已经安装了 Vulkan 驱动程序,但 vulkan -1.dll文件被意外删除或丢失了,我们可以尝试从互联网上下载相应的 vulkan -1.dll文件,并将其放置在正确的系统目录下。但要注意,我们只能从可靠和信任的网站上下载 vulkan -1.dll文件,以避免下载恶意文件。 3. 使用系统还原工具 如果我们在操作系统中启用了系统还原功能,在计算机中丢失 vulkan -1.dll之前我们需要备份我们的系统。我们可以利用系统还原工具将计算机恢复到之前的状态,以恢复我们的 vulkan -1.dll文件。但要注意,使用系统还原工具还原系统时,我们可能会丢失一些最近改动的文件,所以在使用之前一定要进行备份。 总之,如果出现计算机中丢失 vulkan -1.dll的情况,我们可以尝试上述的解决方法来解决这个问题。但要注意,我们需要保证我们的计算机安全,并且只从可靠的渠道下载文件。同时,我们需要定期备份我们的系统和重要文件以避免意外丢失。 ### 回答3: Vulkan -1.dll是 Vulkan 图形API的核心动态链接库文件,负责管理计算机上安装并使用了 Vulkan 的所有应用程序和游戏。如果计算机中丢失了 Vulkan -1.dll,那么就会导致无法运行 Vulkan 相关的应用程序或游戏,从而影响计算机的正常使用。 为了解决这个问题,首先需要确定 Vulkan -1.dll是否真的丢失。可以通过在Windows系统的文件管理器中搜索 Vulkan -1.dll文件来确认。如果文件确实不存在,那么需要下载最新版本的 Vulkan 运行时库并安装,这个库可以从官方的 Vulkan 网站中免费下载。 然后将下载的 Vulkan 运行时库解压缩,并将解压得到的文件夹中的所有文件复制到计算机的系统文件夹中。可以通过Start菜单和搜索栏寻找系统文件夹的位置。 另外,在将 Vulkan 运行时库添加到计算机上之前,需要确保已经安装了最新版本的显卡驱动程序。这是因为 Vulkan 建立在显卡驱动程序基础上,如果显卡驱动程序过旧,则可能无法支持 Vulkan 运行时库的运行。 最后,如果以上措施都无法解决问题,那么可能需要运行Windows的系统文件检查程序,并重新安装操作系统,以确保计算机上的所有组件正常工作。