英特尔HD 5500芯片的DSA支持

时间:2018-03-31 18:17:11

标签: opengl intel opengl-3 opengl-4

我一直听说过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,这是奇怪的,因为自4.5以来DSA是核心,因此应该有支持

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功能......

1 个答案:

答案 0 :(得分:2)

glProgramUniform不是GL_ARB_direct_state_access的一部分,而是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供应商很少将这些新功能添加到真正的旧驱动程序中(而且只有几年后,只有GPU才能使用,并且只有#34;传统"各种供应商驱动程序的分支支持)。 GL_ARB_direct_state_access一般在MacOSX上无法使用,而且大多数不支持GL 4.5的Windows驱动程序都缺少它。唯一值得注意的例外可能是台面本身,其中许多驱动程序后端使用相同的基础架构,并且还需要付出很多努力来支持旧的GPU。

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