初识Vulkan(26):描述符资源基础

08/13/2020

描述符资源

描述符是一个数据结构用来表示着色器的资源,例如缓冲区,图像视图,采样器或者组合图像采样器。这些描述符都被组合进描述符集合中去,和它们由描述符集合布局决定,最后描述符集合被用于管道布局。

基本创建流程

  • 创建描述符集合布局
  • 创建管道布局
  • 创建描述符
  • 创建描述符池
  • 分配描述符集合
  • 写入并更新描述符集合

描述符类型

  • STOREAGE_IMAGE
  • SAMPLER
  • SAMPLED_IMAGE
  • COMBINED_IMAGE_SAMPLER: 组合了SAMPLER和SAMPLED_IMAGE
  • UNIFORM_TEXEL_BUFFER
  • STORAGE_TEXEL_BUFFER
  • STOREAGE_BUFFER
  • UNIFORM_BUFFER
  • UNIFORM_BUFFER_DYNAMIC
  • STORAGE_BUFFER_DYNAMIC
  • INLINE_UNIFORM_BLOCK_EXT
  • INPUT_ATTACHMENT
  • ACCELERATION_STRUCTURE_KHR

描述符集合布局:决定着色器关键字binding

描述符集合是一个容器存放描述符,类型和数量由描述符集合布局确定。

创建布局信息DescriptorLayoutCreateInfo

// Provided by VK_VERSION_1_0 
typedef struct VkDescriptorSetLayoutCreateInfo {
   
	VkStructureType                        sType;     //VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
	const void*                            pNext;   //0
	VkDescriptorSetLayoutCreateFlags       flags;     //
	uint32_t                               bindingCount;    //VkDescriptorSetLayoutBinding 的数量
	const VkDescriptorSetLayoutBinding*    pBindings; //可以是数组,数据
} VkDescriptorSetLayoutCreateInfo;

类型和数量 VkDescriptorSetLayoutBinding

// Provided by VK_VERSION_1_0 
typedef struct VkDescriptorSetLayoutBinding {
   
	uint32_t              binding;				//决定着色器关键字binding
	VkDescriptorType      descriptorType;		//描述符类型
	uint32_t              descriptorCount; 		//数量
	VkShaderStageFlags    stageFlags;			//在哪一个管道
	const VkSampler*      pImmutableSamplers;
} VkDescriptorSetLayoutBinding;

例子:描述符集合布局

顶点着色器

#version 450
//声明阶段
layout (binding = 0) uniform UBOMatrices {
   
	mat4 projection;
} uboMatrices;
layout (set = 0, binding = 1) uniform sampler2D samplerColorMap;

C++ 代码 描述VkDescriptorSetLayoutBinding:

std::array<VkDescriptorSetLayoutBinding,2> setLayoutBindings{
   };

setLayoutBindings[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;	//Uniform Buffer类型
setLayoutBindings[0].binding = 0;				//对应binding关键字 0
setLayoutBindings[0].stageFlags = VK_SHADER_STAGE_VERTEX_BIT;	//顶点着色器阶段
setLayoutBindings[0].descriptorCount = 1
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值