Vulkan专栏
文章平均质量分 83
knowthyselfcn
桌面端、网站架构,会点opengl,会点Android
展开
-
Vulkan Specification(Vulkan规范):第十四章 14.6 内置变量
14.6. 内置变量带有BuiltIn修饰符修饰的变量是内置变量,可以在着色器内被访问。每个BuiltIn修饰的含义有如下几种: 此节的剩余部分,内置变量的名称与术语带有内置修饰符的变量等同。 内置变量中整数类型的可以被声明为有符号或者无符号整数。ClipDistanceDecorating a variable with theClipDistancebuilt-in decoration will make that variable contain the mechanism...翻译 2020-07-12 00:48:36 · 755 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十四章 14.4 片元着色器输入附件接口
当管线将要执行到片元阶段,片元着色器subpass输入与当前subpass的输入附件之间 形成了一个接口。 片元着色器subpass输入变量与输入附件之间通过InputAttachmentIndex修饰 匹配一致, 输入附件由VkSubpassDescription数据类型的数组name:pInputAttachments指定, 该数据结构描述了片元着色器执行时所在的subpass。带有UniformConstant描述类型,且带有被OpEntryPoint静态使用的一个OpEntryPoint的 ..翻译 2020-07-12 00:45:19 · 338 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十四章 14.3 片元输出接口
当管线中存在片元着色阶段,片元着色器输出与当前subpass的输出附件之间 形成了一个接口。 片元着色器输出变量通过Location和Component修饰,与颜色附件匹配, 颜色附件由VkSubpassDescription类型的数组指定, 该数据类型描述了片元着色器执行所在的subpass。通过Output存储类型修饰,被OpEntryPoint列举的 片元着色器输出变量 形成了 片元输出接口。 这些变量必须被不同的Location所修饰。 它们也可以被Component和Index联合唯...翻译 2020-07-12 00:43:49 · 244 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十四章 14.2 顶点输入接口
14.2. 顶点输入接口当管线有顶点阶段时,顶点着色器输入变量就顶点输入属性形成了一个接口, 顶点着色器输入变量通过Location和Component修饰符 来匹配 由VkGraphicsPipelineCreateInfo数据结构的成员pVertexInputState顶点输入属性。 带有Input存储class的修饰符 的OpEntryPoint列出的顶点着色器输入变量 形成了 顶点输入接口。 这些变量必须通过Location修饰符唯一确定,且可以通过Component修饰符唯一确定...翻译 2020-07-12 00:43:04 · 225 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十四章 14.1 着色器输入输出接口
14. 着色器接口当创建了一个管线,在对应的Vk*PipelineCreateInfo数据结构中指定的着色器集合被隐式的链接到一系列不同的接口。 着色器输入输出接口 顶点输入接口 片元输出接口 片元输入附件接口 着色器资源接口 接口定义使用下列SPIR-V 修饰符: DescriptorSet和Binding Location,Component, andIndex Flat,NoPerspective,Centr...翻译 2020-07-12 00:42:26 · 292 阅读 · 0 评论 -
Vulkan spec 中文版 翻译基础版本切换
断断续续两年时间里,还没有把Vulkan Spec翻译完成,眼瞧着标准都更新到1.2 版本,我这1.0 都还没有完成。真的是时间越来越少了,用来翻译的时间就更加零散了。之前翻译红宝书的时候,还能基本上做到每周晚上能有个五六个小时,周末有一天,现在是一个小时都很难找到。真的是年纪越大,时间就越快,时间越少。 现在版本的spec还剩下一小半,我不打算继续做下去了。 剩余的部分,我会基于 spec 1.2.146这个版本号翻译。还是希望有新的朋友加入翻译的队伍。虽然一些朋友能够直接阅读英文材料,...原创 2020-07-12 00:39:20 · 827 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十三章 13.1 描述符类型
13.1. 描述符类型如下几个小节简单讲解Vulkan支持的各种描述符类型。 每一小节定义了一种描述符类型,每一种类型在着色器语言和SPIR-V中都有详细讲解。 描述符类型和着色器语言中不透明类型的类别大多数情况下是一对一的,着色器语言中不透明类型必须指代 对应描述符类型的管线布局中的一个描述符。 但是,对于此规则,如下情形是一个例外Combined Image Sampler。13.1...翻译 2020-03-22 14:22:58 · 1458 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十三章 13 资源描述符
着色器通过使用特殊的着色器变量(通过API间接绑定到缓冲区或者图像视图)来访问缓冲区和图像资源。 这些变量被组织进入集合,每一个绑定的集合都通过API的一个描述符集合对象来表示,描述符集合只能被绑定一次。 一个描述符是一个不透明的数据类型,表示一个着色器资源,诸如缓冲区视图、图像视图、采样器或者被绑定的着色器资源。 每一个集合的内容由它自己的描述集合布局来决定,可以被管线内部的着色器资...翻译 2020-03-22 14:21:23 · 304 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十一章 11.7. 资源共享模式
11.7. 资源共享模式缓冲区和图像对象能以共享模式被创建,控制它们如何被队列访问。 受支持的共享模式如下:typedef enum VkSharingMode { VK_SHARING_MODE_EXCLUSIVE = 0, VK_SHARING_MODE_CONCURRENT = 1,} VkSharingMode; VK_SHARING_MODE_EXC...翻译 2020-03-21 20:24:10 · 522 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十二章 采样器
12. 采样器VkSampler对象代表着图像采样器的状态,图像采样器被Vulkan实现用来为着色器读取图像数据并进行过滤和其他变形操作。采样器通过VkSamplerhandle表示:VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler)可调用如下命令来创建采样器对象:VkResult vkCreateSampler( VkDe...翻译 2020-03-01 23:46:18 · 623 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十一章 11.8. 内存别名
11.8. 内存别名VkDeviceMemory内存的一段区间可以被称为aliased(被别名),若它通过vkBindImageMemory,vkBindBufferMemory,或者通过稀疏内存绑定,被同时绑定到多个资源上。 在两个图像或者两个缓冲区之间的 一段别名内存区间,其定义是:在绑定到两个资源上的内存的一段内存区间。 在两个资源之间(一个是缓冲区或者线性图像,另一个是优化图像)...翻译 2020-03-01 23:45:13 · 534 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十一章 11.6. 资源内存关联
11.6. 资源内存关联资源初始都是以_虚拟分配_ 的方式创建的,并不占内存。 设备内存被单独分配(参看设备内存),然后再和资源关联上。 这个关联操作对于稀疏、非稀疏资源来说是不同的。任何以稀疏标志创建资源都被认为是稀疏资源。 以这些标志之外的标志创建的资源被认为是非稀疏资源。 关于稀疏资源的内存关联在稀疏资源中有描述。在资源被当作参数传递到以下任何一个操作之前,非稀疏资源必须完全并...翻译 2020-03-01 23:43:15 · 604 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十一章 11.5. 图像视图
11.5. 图像视图图像对象不会被管线着色器直接读写访问。作为替代,图像视图,表示图像资源连续的一部分,带有附加的元信息,可用作上述目的。 视图必须以与图像兼容的类型来被创建,必须表示图像资源的一个有效子集合。图像视图通过VkImageView类型的handle表示:VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)可以被创建的 图像视...翻译 2020-03-01 23:42:22 · 916 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十一章
11.4. 图像布局图像被存储在依赖于Vulkan实现的不透明内存布局。Vulkan实现能能支持多种不透明布局,某个给定时刻使用的布局由 图像子资源的VkImageLayout状态决定。 每一个布局都有限制条件,如使用该布局可对图像子资源做何种操作。 Applications have control over which layout each image subresource uses...翻译 2020-03-01 23:41:15 · 556 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十一章 11.3. 图像
11.3. 图像图像表示多维(最多3维)的数组数据,可用于各种目的(比如:附件,纹理),通过描述符集合把它们绑定到一个图形或者计算管线, 或者直接当作参数直接传递个某些命令。图像通过VkImage类型的handle表示:VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage)可调用下列命令来创建图像:VkResult vkCreateImage(...翻译 2020-03-01 23:39:32 · 898 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十一章 11.2. 缓冲区视图
11.2. 缓冲区视图一个缓冲区视图代表 连续范围的一个缓冲区和用来解释数据的特定格式。 缓冲区视图被用来让着色器能访问按照某种格式解释的缓冲区内容。 为了创建一个有效的缓冲区视图,缓冲区必须已经被创建好了,且带有下面的至少一个使用方式标志位: VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT VK_BUFFER_USAGE_STORAGE_...翻译 2020-03-01 23:38:19 · 350 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十一章 11.1. 缓冲区
Vulkan支持两种主要的资源类型:缓冲区和图像。 资源是带有关联格式、维度信息的内存视图。 缓冲区是未格式化字节数组,图像包含格式化信息,可以是多维的,也能有关联的元数据。11.1. 缓冲区缓冲区表示线性数组数据,通过描述符集合或特定命令或直接指定它们作为特定命令的参数 绑定到图形或者计算管线被用于各种目的。缓冲区由VkBuffer类型handle表示:VK_DEFI...翻译 2020-03-01 23:37:21 · 373 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十章 10.2.2 延迟内存分配
10.2.2. 延迟内存分配若从堆中分配的内存带有VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT标志位, 这个对象对应的内存可能被Vulkan实现延迟分配。 内存真实的提交大小初始的时候可能最小为0(也可能可要求的一样大),当更多的内存被使用时不断的增长。A memory type with this flag set is only allowed to...翻译 2019-12-08 23:35:57 · 306 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十章 10.2.1
10.2.1. CPU访问设备内存对象通过vkAllocateMemory创建的内存对象不能被CPU端直接访问。创建时带有VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT属性的内存对象被认为是可映射的。 内存对象必须是可映射的,才能被映射到CPU端。可调用如下命令可以获取指向映射到可映射内存对象的指针:VkResult vkMapMemory( ...翻译 2019-12-08 23:35:13 · 658 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十章 10.2 设备内存
设备内存是设备可见的内存,例如可以被设备原生访问的不透明图片的内容,或者常驻设备内存的统一缓冲区对象。物理设备的内存属性描述了内存堆和可用的内存类型。可调用如下命令来查询内存属性:void vkGetPhysicalDeviceMemoryProperties( VkPhysicalDevice physicalDevic...翻译 2019-12-08 23:34:29 · 605 阅读 · 0 评论 -
Vulkan Specification(Vulkan规范):第十章 10.1 主机内存
Vulkan 内存分为两类:主机内存和设备内存。10.1. 主机内存主机内存是Vulkan实现需要的、设备不可见的内存。 这些内存可以用来存储软件内部数据。Vulkan给应用程序提供了代表Vulkan实现来操作主机内存分配的机会。 如果这个特征没有被使用,Vulkan实现将使用自己的内存分配函数。 因为大多数内存分配都不是在要求高性能代码区域的,这就不是一个提升性能的特征了。 ...翻译 2019-12-01 00:08:46 · 346 阅读 · 0 评论 -
Vulkan规范:第九章 9.8 管线的绑定
一旦管线被创建完成,可以使用一个命令把它绑定到命令缓冲区:void vkCmdBindPipeline( VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline...翻译 2019-11-30 16:52:51 · 787 阅读 · 0 评论 -
Vulkan 术语(待完善)
本节定义的术语在本文档中通篇使用,可能全小写或者大写字母开头。Accessible (Descriptor Binding) [可访问性]若着色器阶段被包含在绑定描述符的stageFlags中,一个绑定描述符对于该着色器阶段可访问。使用该绑定的描述符只能在能够访问它们的阶段中使用。Acquire Operation (Resource) [获取操作(资源)]一个操作,其获取图像子资...翻译 2019-11-25 23:55:57 · 923 阅读 · 0 评论 -
Vulkan规范 翻译招募
2017-09-14 其实,很早就开始翻译这份文档了,应该是二月份。但是,奈何时间总是不够的。本来也邀请了同学来做,也没有时间。我只能断断续续的做,速度太慢了,总共都没有完成七章,打算加把劲,完成十章。 在这里,也希望招募有兴趣的同学,加入到翻译的工作中,如果有五六个人,没人只有四章,每一章都是很短的,估计长一点三四天完成,短一点的两三天。 如果有意向,请加群QQ61640...原创 2017-11-01 20:33:08 · 657 阅读 · 0 评论 -
Vulkan Programming Guide 第一章 第一节
这是本书翻译的第一章,由wanghexu09008126 翻译,大家可以直接到该博客上查看。等所有的章节完成后,再合并。http://blog.csdn.net/wanghexu09008126/article/details/60649590转载 2017-03-07 11:57:02 · 651 阅读 · 0 评论 -
Vulkan简介
2016-02-24 偶尔发现一个刚发布的被传言很牛的东西:Vulkan,百度了一下(不要鄙视我,翻墙老掉下来才用的),发现关键字:秒杀、完爆、取代,这么牛,不是欺负我读书少吧。我一向不惮多怀疑一点,就想弄明白了到底是怎么一回事儿。wiki介绍 Vulkan:low Level rendering api。我们在讨论Vulkan的时候,不可避免的就要提到AMD在13年推出的Mant原创 2017-02-10 14:14:47 · 5254 阅读 · 0 评论 -
Qt集成Vulkan
2016-10-20Vulkan今年年初就发布了,虽然不大成熟,多数窗口系统都没有添加支持,但是,大家可以很方便的使用glfw这样的窗口系统来试验Vulkan的功能,如果说需要集成到Qt 中呢?我搜到一个开源的Qt module,这是Qt 开发者给出来的一个实验版本。据作者自己介绍,Vulkan集成到Qt中,至少是5.9版本或者以后了。现在整个Qt都是用OpenGL渲染,如果说Vulk原创 2017-02-16 17:31:37 · 3500 阅读 · 0 评论 -
关于这段时间翻译的一点感悟
这两周以来,我都在加紧速度翻译Vulkan编程指南,完成了1/3的内容,每天都忙到深夜,中午吃饭的时间都用上了,但是,显然我的速度还不够快。我对自己这种速度不满意,原来以为两三天就能够完成一章的,现在所蚝时间都加倍了。效率低啊。 我想,这种落差感来源于我对自己英语水平的误判。我这几年学习的教材大多是英文版的,读起来没有什么难度,我便以为我的英文和中文一样流利了。还颇以为满意。这里便暴露出了我原创 2017-02-28 13:36:25 · 1341 阅读 · 0 评论 -
Vulkan编程指南翻译 第四章 队列和命令 第5节 复制压缩图像数据
4.5 复制压缩图像数据如在第二章“内存和资源”中讨论过的,Vulkan支持多种压缩图像格式。所有目前定义的压缩格式都是基于固定大小的块的格式。对于其中的许多种,块大小是 4 × 4纹素。对于 ASTC格式,块大小是随图像变动的。当从缓冲区复制数据到图像时,只有整数大小的块能被复制。因此,每一个图像区域,以纹素为单位,必须是图像所用块大小的整数倍。还有,复制操作的源区域必须是块大小的整数翻译 2017-03-01 12:18:36 · 712 阅读 · 0 评论 -
Vulkan编程指南翻译 第四章 队列和命令 第4节 复制图像数据
4.4 复制图像数据在前一节,我们讨论了如何清空图像并通过一个简单的数据结构来填充数据。在很多情况下,你需要把纹理数据上传到图像或者复制图像数据到另一图像。Vulkan支持从缓冲区向图像复制数据,在图像之间复制数据,和从图像向缓冲区复制数据。调用vkCmdCopyBufferToImage(),可从缓冲区向图像的一个或者多个区域复制数据。其原型如下:void vkCmdCopyBuf翻译 2017-03-01 12:13:46 · 1299 阅读 · 0 评论 -
Vulkan编程指南翻译 第四章 队列和命令 第3节 清空和填充图像
4.3 清空和填充图像和缓冲区一样,也可以把数据直接复制到图像,或使用一个值填充。图像是更大、复杂、不透明的数据结构,所以原生的偏移量和数据通常对应用程序来说是不可见的。[2]2. Of course, it’s possible to map the memory that is used for backing an image. In particular, when linear翻译 2017-03-01 12:04:30 · 1022 阅读 · 0 评论 -
Vulkan编程指南翻译 第四章 队列和命令 第2节 清空和填充缓冲区
4.2 清空和填充缓冲区在第二章“内存和资源”中已经介绍过缓冲区对象了。一个缓冲区就是内存中一个连续的区域,包含数据。为了能够使用它,需要向里面填充数据。在某些情况下,清空整个缓冲区并设置为某一个值,是你仅需要做的事。这允许你,比如,初始化一个缓冲区,并最终在shader里或在其他的操作里向它写入数据。向缓冲区填入某个值,需要调用vkCmdFillBuffer(),其原型如下:voi翻译 2017-03-01 11:59:20 · 1090 阅读 · 0 评论 -
Vulkan编程指南翻译 第四章 队列和命令 第6节 展开图像
4.6 展开图像所有目前讲到的图片相关的命令,没有一个支持格式转换和改变复制区域的尺寸。你可以调用vkCmdBlitImage()实现这个功能,它可以接受不同格式的图像并展开或缩小需要复制的区域,当这些区域写入到目标图像时。术语blit是 block image transfer的缩写,指不仅需要复制图像数据,并且也可能需要在此过程中处理数据。vkCmdBlitImage()的原型如下:翻译 2017-03-01 12:26:24 · 1077 阅读 · 0 评论 -
Vulkan编程指南翻译 第五章 展现 第1节 拓展
你将在本章中学到:l 如何在屏幕上展现你的应用程序的结果l 如何决定系统的显示设备l 如何改变显示模式并和原生的窗口系统交流 Vulkan主要是一个图形API,它的大多数功能专注于生成和处理图片。绝大多数Vulkan应用程序被设计来给用户展现结果的。这就是常被称为“展现”的过程。然而,因为Vulkan所运行的平台各异,展示并不是它核心API,但被移交给一套拓展。本章翻译 2017-03-01 12:27:09 · 905 阅读 · 0 评论 -
Vulkan编程指南翻译 第五章 展现 第2节 展现表面
5.2 展现表面被渲染的图形数据以备展示的对象被被称为”表面“,由一个VkSurfaceKHR类型的handle表示。这种特殊的对象由VK_KHR_surface拓展引入。这个拓展提供了处理surface对象的功能,但是它在各平台基础上高度定制化,以提供surface与窗口的对接的功能。Interfaces are defined for Microsoft Windows, Mir and翻译 2017-03-01 12:28:01 · 1120 阅读 · 0 评论 -
Vulkan编程指南翻译 第二章 第二节 资源
第二章 内存与资源 第二节 资源Vulkan操纵数组。与之相比,其他东西重要性皆次之。数据被存储在resources中,resource存放在内存硬件中。Vulkan有两种基础的资源:buffers 与 images。Buffer是一块儿简单的、连续的数据,可以用来存储任何东西—数据结构,原生数组,甚至图像数据,你应当选择buffer。另一方面,Images,是结构化的,拥有类型信息,可以是多翻译 2017-02-20 22:46:44 · 2058 阅读 · 0 评论 -
Vulkan编程指南翻译 第二章 第三节 GPU设备内存管理
当Vulkan操纵数据,数据必须存储在设备内存。这是GPU设备可以访问的内存。Vulkan系统有四个级别的内存。某些系统或许只有其中的一个或几个。给定一个CPU(应用程序运行的处理器)设备和GPU设备(执行Vulkan命令的处理器),他们都有各自的物理存储器。另外,一个处理器附带的物理存储器的某部分区域可以被另外一个处理器访问到。某些情况下,共享内存的可见区域可能会相当的小,其他情况下,也许只翻译 2017-02-20 22:48:09 · 2383 阅读 · 2 评论 -
Vulkan编程指南翻译 第三章 队列和命令 第2节 创建命令缓冲区
第三章 队列和命令 第3节 创建命令缓冲区 创建命令缓冲区队列的意义就是在应用程序内处理任务。任务是通过一串的命令表示的,命令被记录到命令缓冲区(command buffer)中。你的应用将会创建包含任务的命令缓冲区进而提交到队列来执行。在你记录任何命令之前,你需要创建命令缓冲区。命令缓冲区并不被直接创建,需要从pool中分配。你可以调用vkCreateCommandPool()翻译 2017-02-20 22:56:54 · 729 阅读 · 0 评论 -
Vulkan编程指南翻译 第三章 队列和命令 第3节 记录命令
记录命令命令是通过使用Vulkan命令函数记录到命令缓冲区的,这些函数都接受一个命令缓冲区的handle作为第一个参数。对命令缓冲区的访问必须是同步的,意味着应用程序需负责保证没有两个线程同时记录命令到同一个命令缓冲区中。然而,下面的情形是可以接受的:l 一个线程可以通过调用命令缓冲区函数,依次的记录命令进入到多个命令缓冲区中。l 两个或多个线程可以参加建立一个命令缓冲区的过程,只要应翻译 2017-02-20 23:00:21 · 858 阅读 · 0 评论 -
Vulkan编程指南翻译 第四章 队列和命令 第1节 管理资源的状态
在本章,你将学到:l 如何管理资源被Vulkan使用时的状态l 如何在资源间复制数据,用已知数据填充缓冲区和图像l 如何进行位块操作以拉伸或缩放图像数据 图形和计算操作总体上是数据密集型的。Vulkan引入了几个对象,可以提供存储和操纵数据的途径。经常需要把数据移入或者转出这些对象,有几个命令可以用来做这个工作:复制数据,填充缓冲区和图像对象。进一步,在任何时刻,一个资源可能出原创 2017-02-22 22:35:26 · 1397 阅读 · 0 评论