vulkan

09VulKan——图像视图 采样器 组合图像取样器

别等时光非礼了梦想. 提交于 2020-08-18 05:31:50
整体思想: 使用一个纹理贴图到应用程序的流程: 注意: 在交换链和帧缓冲区中,图像不是直接访问,而是通过图像视图。这里借助图像视图来访问纹理图像 顶点着色器 #version 450 #extension GL_ARB_separate_shader_objects : enable layout(binding = 0) uniform UniformBufferObject { mat4 ModelMatrix; mat4 ViewMatrix; mat4 ProjectiveMatrix; } UBO; layout(location = 0) in vec2 inPosition; layout(location = 1) in vec3 inColor; layout(location = 2) in vec2 inTexCoord; layout(location = 0) out vec3 fragColor; layout(location = 1) out vec2 fragTexCoord; out gl_PerVertex { vec4 gl_Position; }; void main() { gl_Position = UBO.ProjectiveMatrix * UBO.ViewMatrix * UBO.ModelMatrix * vec4

23Vulkan Buffer与内存

蓝咒 提交于 2020-08-17 16:32:22
Buffer 在Vulkan里面,所有需要存储的资源都视为Buffer。其实这个不难理解,因为无论是Texture、VertexBuffer、IndexBuffer或者UniformBuffer等等,其实都最终都是一段内存,因此Vulkan将这些资源都视为Buffer。创建Buffer时就需要指定Buffer的大小、用途、共享模式等等。如下所示: 1 2 3 4 5 VkBufferCreateInfo vertexBufferInfo; ZeroVulkanStruct(vertexBufferInfo, VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO); vertexBufferInfo.size = vertices.size() * sizeof (Vertex); vertexBufferInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; VERIFYVULKANRESULT(vkCreateBuffer(m_Device, &vertexBufferInfo, VULKAN_CPU_ALLOCATOR, &tempVertexBuffer.buffer)); 内存 但是Buffer并不会自己分配内存,需要手动分配一端内存出来并与之绑定。由于在GPU中需要内存对齐

What is the purpose of `binding` from `VkVertexInputBindingDescription`?

大城市里の小女人 提交于 2020-08-17 05:00:36
问题 https://www.khronos.org/registry/vulkan/specs/1.0/man/html/VkVertexInputBindingDescription.html binding is the binding number that this structure describes. I am not sure what this means for example from https://github.com/SaschaWillems/Vulkan/blob/master/triangle/triangle.cpp #define VERTEX_BUFFER_BIND_ID 0 .... vertices.inputAttributes[0].binding = VERTEX_BUFFER_BIND_ID; vertices.inputAttributes[0].location = 0; vertices.inputAttributes[0].format = VK_FORMAT_R32G32B32_SFLOAT; vertices

22VulKan——内存管理

牧云@^-^@ 提交于 2020-08-15 15:24:49
1.内存 VulKan将内存分为两类: Host Memo ry 和 Device Memory. Host是运行应用程序的处理器,在PC端上就是指 CPU ;Device是执行VulKan命令的处理器,也就是 GPU. Host memory指的是对Host可见的内存,Device memory指的是对Device可见的内存。 在 使用Host Memory 时, 一定要注意内存对齐 。不允许简单的直接把malloc hook到Vulkan的内存分配函数上! 更详细的,Vulkan系统中的内存有四种类型: Host Local Memory ,只对Host可见的内存,通常称之为 普通内存 Device Local Memory, 只对Device可见的内存,通常称之为 显存 Host Local Device Memory ,由Host管理的,对Device看见的内存 Device Local Host Memory ,由Device管理的,对Host可见的内存 其中,不同内存类型适用不同场景: Device Local Memory 适合 优先级最高 的资源,通常是 纹理 等频繁被使用的渲染数据。当内存空间不够时我们才会考虑是否将这些内存数据放到CPU端。 Device Local Host Memory 适合 CPU 到 GPU的数据传递 , 一些顶点数据等

17Vulkan——缓冲区资源和RenderPass

本秂侑毒 提交于 2020-08-14 18:04:03
1.缓冲区资源 缓冲区资源以 线性方式 表示连续的数据阵列。 缓冲区资源通常用来存储属性数据信息,如顶点坐标,纹理坐标,关联颜色等。 Vulkan 中的缓冲区资源由 VkBuffer 对象表示,与视图形式(图像视图,VkImageView)表示的图像资源(VkImage)不同,缓冲区资源可以 直接用作顶点数据的源 ,或者可以通过着 色器利用描述符进行访问 。 需要把它们 显式转换 为缓冲区视图(VkBufferView)以允许着色器以格式化的格式使用缓冲区数据的内容。 使用 Vulkan API 创建缓冲区资源(VkBuffer)的步骤说明 : 创建缓冲区对象 :使用 vkCreateBuffer()API 创建缓冲区对象(VkBuffer)。 此 API 会用到 VkCreateBufferInfo 结构对象,该对象指定了用于创建缓冲区对象的一些重要缓冲区元数据。 缓冲对象的 VkCreateBufferInfo 包含必要的内存信息,例如格式,用法,大小,创建标志等。 这个信息用于从设备分配物理内存。 您可以认为在此初始阶段的缓冲区对象没有后端的内存支持,即没有分配实际的物理存储。 创建缓冲区对象并不意味着物理分配在幕后自动完成;必须手动完成,这会在下一步中介绍。 Allocating buffer memory 分配缓冲内存 : 获取内存需求:使用