我对新的OpenGL扩展,他们需要什么硬件以及他们需要什么样的OpenGL版本感到困惑。
特别是它现在关于ARB_shader_image_load_store。 http://www.opengl.org/registry/specs/ARB/shader_image_load_store.txt
据我所知,这是OpenGL 4.2的一个功能,但在OpenGL依赖项中,它是写的:
This extension is written against the OpenGL 3.2 specification
(Compatibility Profile).
This extension is written against version 1.50 (revision 09) of the OpenGL
Shading Language Specification.
OpenGL 3.0 and GLSL 1.30 are required.
并进一步了解
等内容This extension interacts trivially with OpenGL 4.0 and ARB_sample_shading.
这些是什么意思?使用此类扩展需要什么硬件和OpenGL版本?
答案 0 :(得分:6)
这些是什么意思?
好吧,让我们一个接一个。
在我们开始之前,先了解一些基本信息。 OpenGL规范,无论是核心还是扩展,不关心关于运行什么硬件。他们对此并不感兴趣。他们没有定义硬件。您无法查看扩展规范并了解它将在哪个硬件上运行。如果你想找到这些信息,你就会在错误的地方寻找。
此外,您必须了解有关扩展规范的内容。 OpenGL扩展就像 diff ;你不能孤立地阅读它。 OpenGL扩展是修改OpenGL规范的文档。
此扩展是针对OpenGL 3.2规范编写的 (兼容性配置文件)。
此扩展名是针对OpenGL的1.50版(修订版09)编写的 着色语言规范。
除非你确切地知道要将其修补到哪个文件,否则diff文件是完全无用的,是吗?这对OpenGL来说是一回事。扩展规范将引用OpenGL规范中的节和段落编号。但是......还有许多版本的OpenGL规范。它在谈论哪一个?
因此,每个扩展必须说明它所引用的物理文档。因此,当这个扩展说明时,"在第2.14.5节“采样器”之后添加一个新的小节,p。 106",它表示OpenGL 3.2规范的第106页,第2.14.5节,兼容性配置文件。
GLSL语言规范也是如此。
需要OpenGL 3.0和GLSL 1.30。
现在,仅仅因为针对编写了一个特定版本的扩展,并不意味着这是可以支持扩展的最低版本。理论上,实现可以在早期版本中支持它。
此声明说明可能支持它的最低版本是什么。
这不是硬件的问题;这是语言的问题。 3.0是最小的原因是因为此扩展指的是2.1中根本不可用的概念。例如整数图像格式等。我们将在下一部分中详细讨论这个问题。
此扩展与X互动。
"与"互动声明说明了规范的可选部分。这意味着,如果" X"并且此扩展名支持,然后此规范中的某些段落也存在。
例如,ARB_shader_image_load_store状态,"此扩展与ARB_separate_shader_objects"交互。如果你向下看,你会发现一个标题为" ARB_separate_shader_objects"的依赖关系的部分。这列出了当ARB_separate_shader_objects可用时更改的特定语言。
"与X"琐事互动声明只是意味着交互通常是"删除对X"的引用。声明。例如,关于ARB_tessellation_shader / 4.0依赖关系状态的部分,"如果不支持OpenGL 4.0和ARB_tessellation_shader,则应删除对曲面细分控制和评估着色器的引用。"
"琐事"语言只是扩展的说法,"如果X不被支持,那么显然应该忽略对X实现的东西的任何引用。"
与ARB_separate_shader_objects的互动并不简单,因为它涉及重新定义早期深度测试的工作原理。
"与"互动是"是必需的"措辞。 ARB可以简单地将其写入4.1并坚定地声明4.1是必需的。然后,几乎没有"与"相互作用。条款,因为这些都不是可选的。
然而,ARB希望允许硬件支持GL 3.0概念而不支持其他概念。例如,在移动空间中,shader_image_load_store支持可以在tessellation_shaders之前。这就是为什么这个扩展有很多"与"互动的原因。条款和相当低的要求" GL版。尽管在桌面上,您将找不到与版本号小于4.0配对的ARB_shader_image_load_store的任何实现。
使用此类扩展程序需要什么硬件和OpenGL版本?
这些文件都不会告诉你。任何版本3.0或更高版本的ARB_shader_image_load_store 都可以。
找出哪些硬件支持哪些扩展程序use the OpenGL Viewer的最简单最简单的方法。它有一个非常新的数据库。
或者,您可以使用一些常识。 ARB_separate_shader_objects允许您动态混合和匹配程序。这是D3D自Direct3D 8以来一直在做的事情。显然硬件可以做它,因为着色器应运而生; OpenGL根本就没有让你。到现在为止。
显然,ARB_separate_shader_objects不是基于硬件的。
同样地,ARB_shading_language_pack420包含D3D从未有过的许多功能。再说一遍,那里显然没有什么需要专门的硬件支持。
ARB_tessellation_shader显然是 需要专门硬件支持的东西。它引入了两个新的着色器阶段。 ARB_shader_image_load_store的方式相同:它引入了一种基本的新硬件能力。现在,早期的硬件肯定可以做到这一点。但这似乎不太可能。
对于每个扩展,情况并非总是如此。但这基本上是正确的。
你应该知道的另一件事是OpenGL版本号。自3.0以来,ARB一直很好地遵守严格的版本编号方案。
主要版本代表基本的硬件更改。 3.x到4.x直接相当于D3D10到D3D11。次要版本要么使API更好(请参阅ARB_texture_storage,我们长过期)或暴露以前未暴露的硬件功能用于相同的硬件级别(ARB_shader_image_load_store 可以已实施在任何4.0实现上,但ARB只需要4.2来编写扩展名。)
因此,如果你有可以运行3.0的硬件,它也可以运行3.3;如果它没有驱动程序,那么你的驱动程序制造商就没有做好自己的工作。同样适用于4.0到4.2。
答案 1 :(得分:0)
这些意味着如何正确阅读扩展规范。要阅读规范,您必须知道扩展如何与其他OpenGL功能交互。通过说“扩展与OpenGL 4.0交互”,这意味着你必须拥有核心OpenGL 4.0特性ARB_sample_shading,以及这个扩展如何改变它的行为。
因为它在OpenGL Core 4.2规范中,所有Shader Model 5 / Direct3D11硬件(Radeon HD5xxx及更高版本,GeForce 400及更高版本)都应支持ARB_shader_image_load_store。
因此,您可以检查您的OpenGL版本是否>> 4.2或检查ARB_shader_image_load_store扩展名。