Intel HD 5500 芯片上的 DSA 支持

DSA Support on Intel HD 5500 Chips

我听说过 DSA 或 Direct_State_Access 扩展,我想尝试一下,我使用 GLAD 加载 OpenGL,我首先尝试了 GL_ARB_direct_state_access 扩展,并调用:

  if(!GLAD_GL_ARB_direct_state_access) appFatal("Direct State Access Extension Unsupported.\n");

没有任何问题,但我无法访问以下功能:

glProgramUniform...

出于某种原因,或其他...。然后我尝试 GL_EXT_direct_state_access,这确实让我可以访问这些功能,但是 GLAD_GL_ext_direct_state_access 失败了,我得到了一个错误...

另一方面,我的电脑最高支持 OpenGL 4.5 Core,这很奇怪,因为 DSA 从 4.5 开始就是核心,因此应该支持

Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Intel Open Source Technology Center (0x8086)
    Device: Mesa DRI Intel(R) HD Graphics 5500 (Broadwell GT2)  (0x1616)
    Version: 17.2.8
    Accelerated: yes
    Video memory: 3072MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 4.5
    Max compat profile version: 3.0
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.1
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 5500 (Broadwell GT2) 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 17.2.8
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

这里有什么问题?我怎样才能访问那些 DSA 功能,如果我能...

glProgramUniform 不属于 GL_ARB_direct_state_access but GL_ARB_separate_shader_objects。因此,您必须先检查 GLAD_GL_ARB_separate_shader_objects(或 GL 4.1),然后才能使用 glProgramUniform...() 系列函数。

由于您似乎已经为 3.3 内核生成了 GL 加载程序,因此在使用 GLAD 生成加载程序时,您还必须明确添加 GL_ARB_separate_shader_objects 扩展。

理论上,可以有 3.x 实现支持这些扩展。但实际上,GPU 供应商很少将此类新功能添加到真正的旧驱动程序中(并且 3.x 只有 GPU 已经 end-of-life 几年了,并且仅受各种供应商驱动程序的 "legacy" 分支支持。 ). GL_ARB_direct_state_access 通常在 MacOSX 上不可用,并且大多数 windows 驱动程序都将缺少它,无论如何都不支持 GL 4.5。唯一值得注意的例外可能是 mesa 本身,其中许多驱动程序后端使用相同的基础架构,并且在支持旧 GPU 方面也付出了很多努力。

因此,虽然使用 3.3 + 一些 4.x 中的核心扩展没有坏处,但潜在实现数量的增加(相对于直接使用 GL 4.x)可以运行 您的代码可能没有您希望的那么大。 YMMV.