我对新的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.
Run Code Online (Sandbox Code Playgroud)
并进一步下来的东西
This extension interacts trivially with OpenGL 4.0 and ARB_sample_shading.
Run Code Online (Sandbox Code Playgroud)
这些东西意味着什么?使用此类扩展需要什么硬件和OpenGL版本?
这些东西意味着什么?
好吧,让我们一个接一个.
在我们开始之前,有一些基本信息.OpenGL规范,无论是核心还是扩展,都不关心运行什么硬件.他们对此并不感兴趣.他们没有定义硬件.您无法查看扩展规范并了解它将在何处运行的硬件.如果你想找到这些信息,你会找错地方.
此外,您必须了解有关扩展规范的内容.OpenGL扩展就像一个差异 ; 你不能孤立地阅读它.OpenGL扩展是修改OpenGL规范的文档.
此扩展是针对OpenGL 3.2规范(兼容性配置文件)编写的.
此扩展名是针对OpenGL着色语言规范的1.50版(修订版09)编写的.
除非你确切地知道要将其修补到哪个文件,否则diff文件是完全无用的,是吗?OpenGL也是如此.扩展规范将引用OpenGL规范中的节和段落编号.但是......有许多版本的OpenGL规范.它在谈论哪一个?
因此,每个扩展必须说明它所引用的物理文档.因此,当此扩展名为"在第2.14.5节",第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版本?
这些文件都不会告诉你.ARB_shader_image_load_store 可用于任何3.0或更高版本的实现.
找出哪些硬件支持哪些扩展使用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.
| 归档时间: |
|
| 查看次数: |
639 次 |
| 最近记录: |