首页 > 其他分享 >【Vulkan入门】05-开启Vulkan的validation

【Vulkan入门】05-开启Vulkan的validation

时间:2024-12-05 09:56:59浏览次数:7  
标签:LAYER validation 05 VK layerCount Vulkan KHRONOS

目录

先叨叨

Vulkan为了尽量提高执行效率,因此所有API对传入的参数没有作任何校验。即使传错了参数也会继续执行,对错误参数会造成的后果不做任何定义。
不过Vulkan也提供了一个叫VK_LAYER_KHRONOS_validation的Layer如果开启这个Layer,Vulkan在执行API时就会校验参数的正确性,如果发现有错误参数传入就会通过DebugUtilsMessenger通知APP。
上篇我们已经开启了DebugUtilsMessenger。
本篇介绍如何启动VK_LAYER_KHRONOS_validation

关键函数和API

VulkanEnv::GetAllSupportedLayers()

想要开启一个Layer首先要判断当前平台的Vulkan实现是否支持这个Layer。
本函数的作用是调用vkEnumerateInstanceLayerProperties接口获取当前平台的Vulkan实现支持的所有Layer,并存放在m_supportedLayerNames中。

void VulkanEnv::GetAllSupportedLayers()
{
    uint32_t layerCount;
    //https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#vkEnumerateInstanceLayerProperties
    vkEnumerateInstanceLayerProperties(&layerCount, nullptr);

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

    for (uint32_t i = 0; i < layerCount; ++i)
    {
        m_supportedLayerNames.insert(std::string(availableLayers[i].layerName));
    }
}

VulkanEnv::CreateVkInstance()

在创建VkInstance时,先判断Vulkan是否支持VK_LAYER_KHRONOS_validation
如果支持便通过VkInstanceCreateInfoppEnabledLayerNames属性,通知VkInstance启动VK_LAYER_KHRONOS_validation

void VulkanEnv::CreateVkInstance()
{
...
	  std::vector<const char*> expectedLayerNames = {};
    if (true == m_enableDebug)
    {
    ...
        if (m_supportedLayerNames.end() != m_supportedLayerNames.find(std::string("VK_LAYER_KHRONOS_validation")))
        {
            expectedLayerNames.push_back("VK_LAYER_KHRONOS_validation");
        }
    }
    ...
    VkInstanceCreateInfo createInfo{};
    ...
    createInfo.enabledLayerCount = static_cast<uint32_t>(expectedLayerNames.size());
    createInfo.ppEnabledLayerNames = expectedLayerNames.data();
}

运行代码

结合上篇,在运行代码便可以看到Vulkan的Debug信息。如果你故意传错某个参数,也会收到VK_LAYER_KHRONOS_validation的提示。
在这里插入图片描述

标签:LAYER,validation,05,VK,layerCount,Vulkan,KHRONOS
From: https://blog.csdn.net/patronwa/article/details/144256733

相关文章

  • Python.拓展05
    Python.拓展051.缩进,用4个空格,不要用制表符。2.4个空格是小缩进(更深嵌套)和大缩进(更易阅读)之间的折中方案。制表符会引起混乱,最好别用。3.换行,一行不超过79个字符,这有助于在多种屏幕和设备上保持良好的可读性。4.这样换行的小屏阅读体验更好,还便于在大屏显示器上并排阅读......
  • Task05 && 拓展01
    Task05条件ConditionalsIF语句IFElse语句IF-ELIF-ELSE语句IF-ELSE推导式defabs7(n) returnnif(n>=0)else-ndefabs7(n):ifn>=0:returnnelse:return-nMATCH-CASE语句matchsubject: case<pattern_1> <action_1......
  • 20241204: 2056. 棋盘上有效移动组合的数目
    有一个 8x8 的棋盘,它包含 n 个棋子(棋子包括车,后和象三种)。给你一个长度为 n 的字符串数组 pieces ,其中 pieces[i] 表示第 i 个棋子的类型(车,后或象)。除此以外,还给你一个长度为 n 的二维整数数组 positions ,其中 positions[i]=[ri,ci] 表示第 i 个棋子现在......
  • #渗透测试#SRC漏洞挖掘#红蓝攻防#黑客工具之Burp Suite介绍05-网页端抓包与app小程序
    免责声明本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。                             ......
  • Task05&扩展01学习笔记
    Task05:条件Conditionalsif语句通过缩进上下对齐判断条件满足要执行的内容if条件:print()例:f(0)-->ABCDf(1)-->ADdeff(x):print("A",end="")ifx==0:print("B”,end="")print("C",end="")......
  • task05&&01拓展:Python 条件判断和代码风格随笔
    在Python编程中,遵循良好的代码规范至关重要。一、空格使用规范•采用空格表示缩进,切勿使用制表符(Tab)。•语法相关的每一层缩进用4个空格表示。•每行字符数最好不超过79个。若表达式过长需多行显示,除首行外,其余行应在正常缩进基础上再增加4个空格。•函数和类定......
  • Task05 :conditionals
    条件在Python中,条件语句用于根据不同的条件执行不同的代码块。常见的条件语句有if语句、if-else语句和if-elif-else语句。例如:a=int(input('请输入一个数字:'))#由于input()函数输入的数据默认为字符串,所以使用int()转换为整数ifa>=10:print(a)#如果a>=10......
  • Task 05&拓展 01
    拓展01代码风格与规范01.1代码风格各类标识符在Python中,标识符(identifier)是⽤于命名变量、函数、类、模块或其他对象的名称。选择合适的标识符名称有助于提⾼代码的可读性和可维护性。命名规则:必须以字⺟(a-z,A-Z)或下划线(_)开头只允许出现英⽂字⺟、数字、下划线对⼤......
  • 【054B】基于51单片机电子指南针(LCD12864)【Keil程序+报告+原理图】
    ☆、设计硬件组成:51单片机最小系统+HMC5883L罗盘传感器+LCD12864液晶显示+DS1302时钟芯片+按键设置+蜂鸣器。1、本设计采用STC89C52、AT89C52、AT89S52作为主控芯片,LCD12864实时显示信息,DS1302作为时钟来源;2、LCD12864实时显示方向角度,方位,时间,以及指针式罗盘等信息;3、......
  • 【LeetCode】每日一题 —— 2056. 棋盘上有效移动组合的数目
    一、题目2056.棋盘上有效移动组合的数目有一个8∗88*88∗8的棋盘,它包含n个棋子(棋子包括车,后和象三种)......