C 创建启用了所有支持的扩展/功能的Vulkan实例/设备

C 创建启用了所有支持的扩展/功能的Vulkan实例/设备,c,gpu,vulkan,C,Gpu,Vulkan,在Vulkan中,在创建vkInstance或vkDevice时,必须指定在实例/设备创建期间启用将要使用的所有扩展。同样,在创建vkDevice时,必须指定所需的所有物理设备功能。因此,我的问题是,是否有任何真正的理由反对简单地启用所有可用的扩展/功能,就像在OpenGL中总是启用所有扩展/功能,并且应用程序只是查询它们的支持一样?我的意思是使用vkEnumerateInstanceExtensionProperties,vkEnumerateDeviceExtensionProperties

在Vulkan中,在创建
vkInstance
vkDevice
时,必须指定在实例/设备创建期间启用将要使用的所有扩展。同样,在创建
vkDevice
时,必须指定所需的所有物理设备功能。因此,我的问题是,是否有任何真正的理由反对简单地启用所有可用的扩展/功能,就像在OpenGL中总是启用所有扩展/功能,并且应用程序只是查询它们的支持一样?我的意思是使用
vkEnumerateInstanceExtensionProperties
vkEnumerateDeviceExtensionProperties
和类似程序返回的所有扩展

我这样问是因为我认为启用所有可用的扩展/功能比使用不同的方法更简单,我想知道它是否比只启用必需的(或可选使用的)功能/扩展更差,例如会导致一些性能开销

启用所有可用的扩展/功能比使用不同的方法更简单

有什么不同的方法?在实际使用指向它的函数指针之前,您仍然需要测试扩展是否存在,不是吗

是否有任何真正的理由反对简单地启用所有可用的扩展/功能,类似于[…]OpenGL

使用Vulkan的全部目的是,您可以很好地控制与GPU接口的每个细节。从扩展到是否创建深度缓冲区,再到显式的多线程和多设备同步,完全取决于您使用所需的内容,仅此而已


如果您喜欢更轻松的旅程,没有什么可以阻止您使用OpenGL,特别是如果您不想多走一英里(或者10英里,可以这样说)。在OpenGL中编写性能良好的应用程序要比编写性能适中的Vulkan应用程序容易得多

启用所有可用的扩展/功能比使用不同的方法更简单

有什么不同的方法?在实际使用指向它的函数指针之前,您仍然需要测试扩展是否存在,不是吗

是否有任何真正的理由反对简单地启用所有可用的扩展/功能,类似于[…]OpenGL

使用Vulkan的全部目的是,您可以很好地控制与GPU接口的每个细节。从扩展到是否创建深度缓冲区,再到显式的多线程和多设备同步,完全取决于您使用所需的内容,仅此而已


如果您喜欢更轻松的旅程,没有什么可以阻止您使用OpenGL,特别是如果您不想多走一英里(或者10英里,可以这样说)。在OpenGL中编写性能良好的应用程序要比编写性能适中的Vulkan应用程序容易得多。

首先,不允许您启用某些功能和扩展的组合


第二,即使只是启用一个特性也会导致某种程度的过度使用。值得注意的是,您不希望启用所有这些健壮的image\buffer功能。

首先,不允许启用某些功能和扩展的组合


第二,即使只是启用一个特性也会导致某种程度的过度使用。值得注意的是,您不希望启用所有这些健壮的图像缓冲区特性。

“在OpenGL中编写性能应用程序比编写中等性能的Vulkan应用程序要容易得多。”我没有考虑这一点。到目前为止,我认为Vulkan在性能上明显优于OpenGL。我想我必须重新考虑一下……通过“不同的方法”,我的意思是应用程序由许多模块组成,每个模块都可能需要不同的扩展/功能,它们的需求必须在实例/设备创建时得到整合。以后检查比较容易。我并不认为它更好。另一个要考虑的是,如果你仍然计划以后学习Vulkan,学习OpenGL不会浪费。虽然它在体系结构上更类似于DirectX,但大多数OpenGL机制都会移植,至少在概念上是如此。“它们的需求必须在实例/设备创建时得到整合”--你会在Vulkan中发现很多,例如需要完全定义的管道(使用纹理、着色器、光栅化选项、队列、阶段等)在渲染任何内容之前,以及参数中的任何更改都需要一个全新的管道。这只是它和GPU的工作原理。“在OpenGL中编写性能应用程序比编写中等性能的Vulkan应用程序要容易得多。”我没有考虑这一点。到目前为止,我认为Vulkan在性能上明显优于OpenGL。我想我必须重新考虑一下……通过“不同的方法”,我的意思是应用程序由许多模块组成,每个模块都可能需要不同的扩展/功能,它们的需求必须在实例/设备创建时得到整合。以后检查比较容易。我并不认为它更好。另一个要考虑的是,如果你仍然计划以后学习Vulkan,学习OpenGL不会浪费。虽然它在体系结构上更类似于DirectX,但大多数OpenGL机制都会移植,至少在概念上是如此。“它们的需求必须在实例/设备创建时得到整合”--你会在Vulkan中发现很多,例如需要完全定义的管道(使用纹理、着色器、光栅化选项、队列、阶段等)在渲染任何内容之前,以及参数中的任何更改都需要一个全新的管道。这就是它和GPU的工作原理。