Vulkan大闷锅之Pipeline

吸取了前几代Api设计的教训,Vulkan采用了Monolith结构的PSO(Pipeline State Objects),是不是有当年Linux内核的既視感。这段时间疯狂发展的微服务,不知道在未来会不会也走回头路。

敢说Monolith,当然是包含的巨量的状态信息:

  • Dynamic State
  • Vertex Input State
  • Input Assembly State
  • Rasterization State
  • Color Blend State
  • Viewport State
  • Depth Stencil State
  • Multisample State

Continue reading Vulkan大闷锅之Pipeline

Vulkan大闷锅之着色器

着色器(Shader)这个概念应该很熟悉。Vulkan采用用一种低层的着色器语言——SPIRV。通常我们还是先写出GLSL,再编译成SPIRV,官方的源码包已经提供了多种编译工具。

编译出的字节码首先会传递给Shader Module。但在创建Shader Module之前,先演示一下如何编译。 Continue reading Vulkan大闷锅之着色器

Vulkan大闷锅之RenderPass

Render Pass(渲染通道?),提供渲染过程所需的信息。手动配置一堆静态数据(减少动态开销?)。Render Pass由一系列Subpass聚合而成,每个Subpass携带特定的Attachment——笼统地分为Color Attachment或Depth Attachment。这些信息将决定后续Buffer中的数据如何被对待。 Continue reading Vulkan大闷锅之RenderPass

Vulkan大闷锅之Descriptor

上一章,我们创建了Uniform Buffer,不过着色器并不能直接访问它。这时我们需要一个Descriptor,类似于不透明的句柄。试想,是否可以绑定多个Buffer给分别的Descriptor。Vulkan已经提供了相当的机制Descriptor Set。这里也可以创建多个Set为不同的用途,比如Uniform和Texture。

Continue reading Vulkan大闷锅之Descriptor

Vulkan大闷锅之Swapchain

简述

当前的图形渲染过程并不是画好每帧画面,就立即输出,而是一个Swapchain结构,其主要目的是解决画面撕裂。现在会有多张画面缓存在Swapchan,然后依次输出最上层的一张,每一次的输出操作被称为Present。每个Present动作会将当前帧输出到Surface(上一章已经创建好)。

游戏视效设置中的多重缓冲选项,本质就是在调整Swapchain队列尺寸。
Continue reading Vulkan大闷锅之Swapchain

Vulkan大闷锅之核心机制

到此,队列(Queue)的信息已经准备好,但这里仍需验证物理设备和GUI组建。

创建Surface

这里可选的组建非常多,以下只演示XCB的创建方式。你可能需要一个宏定义:

#define VK_USE_PLATFORM_XCB_KHR

以下是XCB Surface的信息结构:

typedef struct VkXcbSurfaceCreateInfoKHR {
    VkStructureType               sType;
    const void*                   pNext;
    VkXcbSurfaceCreateFlagsKHR    flags;
    xcb_connection_t*             connection;
    xcb_window_t                  window;
} VkXcbSurfaceCreateInfoKHR;

Continue reading Vulkan大闷锅之核心机制

Vulkan大闷锅之启程

事出有因

现在回想起来,那已经是几周前的事了。这是个干燥的上午,我正迷失在信息流中,角落的一行文字引起了注意,“OpenGL已经过时了”。过时了?不等我收拾心神,赶紧Google。霎时间,屏幕上迸出几个大字——V-u-l-k-a-n

Vulkan?干什么用的?能吃么?

就在那时,空气中弥漫着对无知的恐惧。吓得我赶紧学习了一下。

简述

Vulkan算是后继OpenGL的图形接口(不过Vulkan正式发布后,OpenGL居然还更新了…)。为保证准确性,本系列文不打算延伸,其核心的目标是,让程序跑起来。由于Vulkan诞生时间尚短,而且热度不高,仅凭网上几篇文档,让程序正常运行真的是有点难度。

本系列文是一个教程,而是一个参考。如果你和之前的我一样,花了大量时间,结果程序都跑不起来先。那么,欢迎阅读以下内容。 Continue reading Vulkan大闷锅之启程