初识Vulkun(3):验证层

本文介绍了Vulkan中的验证层,包括其作用、如何检测支持的验证层、启动验证层以及创建和销毁消息回调的过程。通过验证层,可以检查参数合法性、防止资源泄露、确保线程安全,并跟踪Vulkan调用。文章提供了详细的实践步骤,帮助读者理解Vulkan验证层的使用。
摘要由CSDN通过智能技术生成

08/06/2020

扩展或者层

Vulkan API的设计核心是尽量最小化驱动程序的额外开销,所谓额外开销更多的是指向渲染以外的运算。
扩展和层是有区别的。

验证层

验证层是一个可选的层,可以在VkInstance或者VkDevice中启动。实例层上的扩展验证与全局VkInstance有关的调用,VkDevice层知识验证与特定GPU相关的调用,但是VkDevice层的已经被丢弃,所以现在VkInstance引用所有的Vulkan的调用。
如何挂在到Vulkan vkCreateInstance函数中去?下面是一段伪代码

VkResult vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo,
				const VkAllocationCallbacks* pAllocator,
				Vkinstance* instance)
{
   
	//挂在部分
	//验证层 多出来的检测
	if(pCreateInfo == nullptr ||instance == nullptr)
	{
   
		log("NUll pointer passed to required parameter!");
		return VK_ERROR_INITIALIZATION_FAILED;
	}
}

作用

  • 检查参数的值是否违反标准和使用情况
  • 跟踪创建和销毁实例来检测资源泄露
  • 检查线程安全
  • 输出每一个调用
  • 追踪Vulkan调用

实践

检测是否支持的验证层

uint32_t layerCount;
vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
std::vector<VkLayerProperties> availableLayers(layerCount);
vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.data());

std::cout << "Support Validation Layor: \n";
for (const auto& layerProperties : availableLayers)
{
   
	std::cout << "\t" << layerProperties.layerName << "\t" << layerProperties.description << "\n";
}

Validation Layer Support

启动验证层

在VkInstance中有一个layer属性,可以启动全局的验证层扩展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值