5

我正在编写基于 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 驱动程序支持多重采样模式,这些模式在内部实现为多重采样和自动超级采样的组合,以获得比硬件直接支持的更高级别的抗锯齿。

4

2 回答 2

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_BIT或。VK_SAMPLE_COUNT_4_BITVK_SAMPLE_COUNT_8_BIT

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

于 2019-12-09T13:59:36.147 回答
1

我也遇到过类似的问题(不是 Vulkan,而是 OpenGL,还有 NVidia):在我的 NVidia GeForce GTX 750 Ti 上,Linux 驱动程序nvidia报告GL_MAX_SAMPLES=32,但是任何高于 8 个样本的结果都会导致包括文本在内的所有内容都变得难看模糊,即使glDisable(GL_MULTISAMPLING)用于所有渲染。

我记得当我全局启用 FXAA(通过nvidia-settings --assign=fxaa=1)并在此设置打开的情况下运行 KWin(KDE 的合成窗口管理器)时,我看到了同样的模糊问题。所以我怀疑这种行为samples>=9是因为驱动程序除了(或代替)MSAA 之外还启用了 FXAA。

于 2020-11-30T08:23:56.553 回答