Vulkan API:支持的最大 MSAA 样本为 VK_SAMPLE_COUNT_8_BIT

Mic*_* IV 6 nvidia msaa vulkan

我正在编写基于 Vulkan API 的渲染器。目前我正在尝试为颜色附件添加 MSAA。我很确定我可以使用VK_SAMPLE_COUNT_16_BIT ,但 limits.framebufferColorSampleCounts返回允许 MSAA 级别高达VK_SAMPLE_COUNT_8_BIT(含)的位标志

我在全新的 NVIDIA QUADRO RTX 3000 卡上运行。我还使用最新的 NVIDIA 驱动程序:441.28 我检查了 OpenGL 和 GPU 上限查看器显示中的限制

GL_MAX_FRAMEBUFFER_SAMPLES = 32

这有什么意义呢?该限制仅由 Vulkan API 规定吗?如果硬件不支持超过 x8,那么这是否意味着 OpenGL 驱动程序在 CPU 上模拟它,例如通过超级采样之类的东西?这就是 khronosdev.slack 的几位渲染开发人员对我所说的话?是否有意义?供应商是否必须按照标准进行编译,然后要么以正确的方式实施 MSAA,要么根本不实施?

有没有可能 OpenGL 并不“真正”支持超过 x8 MSAA,但驱动程序通过超级采样之类的东西来模拟它?

更新

本页解释了 OpenGL 的 MSAA 实现的整个状态,实际上,从中可以清楚地了解为什么 Vulkan 不在我的卡上提供超过 x8 的样本。这是妙语:

一些 NVIDIA 驱动程序支持多重采样模式,这些模式在内部实现为多重采样和自动超级采样的组合,以获得比硬件直接支持的更高级别的抗锯齿效果。

Col*_*mbo 3

framebufferColorSampleCounts是标志,而不是计数。请参阅此枚举的值:https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkSampleCountFlagBits.html

15 个优惠VK_SAMPLE_COUNT_1_BITVK_SAMPLE_COUNT_2_BITVK_SAMPLE_COUNT_4_BITVK_SAMPLE_COUNT_8_BIT

这回答了为什么你得到 15,而不是 2 的幂,但它仍然引出了一个问题,为什么 NVidia 驱动程序比 OpenGL 驱动程序对你的限制更多。也许是 NVidia 论坛的问题。您应该仔细检查您的驱动程序是否是最新的,并且您实际上选择的是 NVidia 卡而不是集成卡。