我通常一次可以绑定多少个纹理?


23

我正在开发一个游戏引擎,并且只能在现代(Shader Model 4+)硬件上工作。我认为,当我完成此工作时,这将不是一个不合理的要求。

我的问题是:现代图形卡上一次可以绑定多少个纹理?16就足够了。我可以期望大多数现代图形卡支持这种数量的纹理吗?

我的GTX 460似乎支持32,但是我不知道这是否代表大多数现代视频卡。


您正在使用哪个渲染API?
亚当

2
OpenGL当然是:)
Avi 2012年

Answers:


53

可以绑定到OpenGL的纹理数量不是3216。这不是你得到的glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);。该函数检索片段着色器可以访问的纹理数量。

看到,每个着色器对可以使用的纹理数量都有自己的限制。但是,也可以使用一定数量的纹理。由定义(在OpenGL中)GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS

因此,存在两个限制:每阶段纹理和总绑定纹理。

OpenGL 3.x将每级限制的最小数量定义为16,因此硬件每级不能少于16个纹理。它可以有一个更高的限制,但是您知道至少可以得到16。3.x定义了纹理总数的最小数量为48。又名:16 * 3个阶段。类似地,GL 4.x将数字定义为每阶段16个纹理,总数为96个纹理(即:16 * 6个阶段,包括计算着色器)。

同样,这些是最小数量。硬件可以(并且确实)有所不同。

对于特定的硬件,您可以期望任何DX10级的硬件都可以匹配这些数字。DX11类硬件有一些差异。NVIDIA(GeForce 4xx +)和更高端的AMD芯片(又名:GCN内核)可能每阶段超过16个。


2
我希望这是公认的答案。它将为我节省5分钟的毫无意义的阅读。
鹅卵石

3

我相信32是当前可以绑定的最大纹理数量。据我所知,即使8800系列也有32个纹理单元。

据我所知,要获得openGL 4.x支持,您将需要一张Fermi或更新的nvidia卡(或相应的amd卡),高端型号似乎都具有32个单元,而最低端型号(例如GT 430) )有16个。但是,在查看AMD规格表时,它们列出了80或128个纹理单元之类的编号,但列出了32色ROP单元,这些代数似乎一直保持不变。

另一方面,GTX 480列出了60个纹理单元和48个ROP单元,而据报道,像430这样的低端卡仅具有16个纹理单元和4个ROP初始化。因此,总的来说,我并不确定所有这些都是您真正想要的数字。

但是,您可以使用来检查可用于非固定功能管道渲染的纹理单元的数量glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);,因此,如果您可以使用某些硬件,则可以进行检查。

编辑:此站点使您可以比较报告的各种视频卡的openGL功能,这应该为您提供所需的数字:http : //feedback.wildfiregames.com/report/opengl/device/GeForce%20GTX%20580

PS:AMD和nvidia最近推出了“无边界纹理”(amd的名称不同),它允许您使用大量纹理而不将其绑定到textutre单元,目前仅在openGL中可用。


1
之后,真正的答案就是“您所拥有的硬件所能提供的一切”。或者,用不同的措词,所有内容应尽可能快地运行。(在OpenGL中几乎涵盖了每个领域)。
Darkwings 2012年

@Darkwings我想是的,绑定的纹理多于硬件可以处理的数量,通常会导致错误或驱动程序超时。我也看错了,他说着色器模型4+不是opengl 4+。看第一批DX10卡(X2900和8800系列卡),它们似乎都至少具有16个纹理单元。

我只是强调了一个事实,因为可以对其进行参数化,所以应该如此。即使游戏是在较旧的卡片上爬行,也不应该是硬编码的东西,而是“建议的要求”。
Darkwings 2012年

4
-1:这个答案是错误的。请参阅我的回答以了解原因(此处解释太久了)。
Nicol Bolas 2012年

1
可能不是立即显而易见的。几乎没有人使用GL_TEXTURE n GLenums。而是使用GL_TEXTURE0 + n,其中n是要绑定的插槽。GLenums最多可以增加32个插槽,但这并不意味着OpenGL会将您限制为32个。规范保证它们将是连续的。另外,如果您不使用DSA,则可能希望为绑定到创建/修改保留一个插槽,以便用于创建/修改的状态与用于绘制的状态的交互较少。
Maximus Minimus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.