大量OpenGL glDebugOutput着色器统计信息/着色器编译器/其他/梅萨radeon的通知严重性消息

lnvxswe2  于 2022-11-04  发布在  Go
关注(0)|答案(1)|浏览(154)

我有一个opengl玩具代码,我用它来学习ogl和3d图形。我用glDebugMessageCallbackglDebugMessageControl来检查OGL错误,在windows上我没有任何消息。我现在在linux上测试我的代码,我得到了很多这样的消息:

Debug message (1): Shader Stats: SGPRS: 16 VGPRS: 12 Code Size: 88 LDS: 0 Scratch: 0 Max Waves: 8 Spilled SGPRs: 0 Spilled VGPRs: 0 PrivMem VGPRs: 0 DivergentLoop: 0, InlineUniforms: 0, ParamExports: 2, (VS, W64)
Source: Shader Compiler
Type: Other
Severity: notification

以下是有关我的环境的更多信息

[OpenGL] OpenGL version loaded: 4.6
[OpenGL] Vendor: AMD
[OpenGL] Renderer: AMD Radeon RX 570 Series (polaris10, LLVM 13.0.1, DRM 3.44, 5.17.3-302.fc36.x86_64)
[OpenGL] Version: 4.6 (Compatibility Profile) Mesa 22.0.1
[OpenGL] Version GLSL: 4.60

我的问题是为什么我在windows中没有得到这些消息,为什么即使我将回调从

glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE , 0, nullptr, GL_TRUE);

glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH_AMD , 0, nullptr, GL_TRUE);

?它们对我来说似乎是信息性的,以这种速度它们主要是噪音

1l5u6lss

1l5u6lss1#

我的问题是为什么我在windows中没有收到这些消息
调试消息完全是特定于实现的。在最坏的情况下,你可能根本得不到任何消息。不同驱动程序的冗长程度可能有很大差异,Linux上的梅萨开源驱动程序显然是在更冗长的一端。Nvidia Win/Linux在这方面也很好,但Windows上的AMD和INtel可能相当缺乏。
为什么我一直得到他们,即使我改变我的回调从[...]到

glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH_AMD , 0, nullptr, GL_TRUE);

因为glDebugMessageControl(..., GL_DEBUG_SEVERITY_HIGH_AMD, ..., GL_TRUE)只是 * 启用 * SEVERITY_HIGH消息(之前已经启用),所以它不会禁用SEVERITY_NOTIFICATIONSEVERITY_NOTIFICATION在默认情况下仍然是启用的,如GL_KHR_debug extension specification中所述(调试输出扩展的其他变体,如AMD扩展是类似的):
可以启用或禁用消息。将不会生成禁用的消息。所有消息最初都是启用的,除非为其分配的严重性为DEBUG_SEVERITY_LOW。可以使用命令DebugMessageControl更改消息的启用状态。

相关问题