OpenGL 2+中顶点着色器或片段着色器的代码限制大小是多少?

3
我计划编写一个程序,该程序将接受一些参数作为输入,并生成自己的片段着色器字符串,然后编译、链接并用作片段着色器(仅在程序开始时执行一次)。由于我不是计算机图形学专家,因此不知道这是否是标准实践,但我肯定认为它具有一些有趣应用的潜力,不一定是图形应用,也可能是计算应用。
我的问题是OpenGL着色器的代码大小限制,即OpenGL在图形处理器上可以合理分配多少内存给程序?

我很确定这是实现定义的,但你为什么要使用如此大的“代码”呢? - Bartek Banachewicz
3
在OpenGL 2.x中,您有512个保证的指令插槽和一个最大保证值为65536的执行指令数。详情请参见我的这里更详细的回答。请注意,“保证的最大值”并不意味着您的卡不能有更多,只是不保证超过这个数量,其他所有情况您必须先查询以确保。 - Damon
1个回答

3

没有代码大小限制。但是:

  1. OpenGL没有提供一种查询方式,因为:
  2. 这样的数字是没有意义的,因为它不能直接转换为GLSL中可以直接控制的任何内容。

一个很长的GLSL着色器可能会编译通过,而一个很短的着色器却不行。为什么?因为编译器可能已经能够将长着色器优化到合适的大小,而短着色器则扩展到了许多操作码。简而言之,GLSL过于高级,无法有效地量化这些限制。

在任何情况下,鉴于GL 2.x级别的硬件的限制,你可能不会遇到任何长度限制,除非你试图这样做或者正在进行GPGPU工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接