gpt4 book ai didi

opengl - 禁用 GLSL 编译器优化

转载 作者:行者123 更新时间:2023-12-04 18:08:23 26 4
gpt4 key购买 nike

我将 OpenGL 4.2 与 GLSL 420 一起使用。我需要防止 GLSL 编译器优化未使用的制服,因为这些制服用于偶尔的测试。
我试图把:

#version 420
#pragma optimize (off)
...
......

但它似乎没有效果。编译器仍然清理所有未使用的制服。我在带有 GeForce 680GTX 的 Linux 上运行 NVidia 驱动程序 v319

最佳答案

非事件统一确定为 不是 一个优化。这是未扩展的 GLSL 程序如何工作的结果,它们被编译然后链接在一起,并且因为这个实现知道哪些路径有助于实际管道输出。一些实现在这方面比其他实现更聪明,并且如果它在片段着色器/转换反馈中没有产生输出,则会消除程序每个阶段的代码路径(包括统一)。
OpenGL 4.4 Core Profile Specification - 7.6 统一变量 - 第 117 页

7.6 Uniform Variables

Shaders can declare named uniform variables, as described in the OpenGL Shading Language Specification . A uniform is considered an active uniform if the compiler and linker determine that the uniform will actually be accessed when the executable code is executed. In cases where the compiler and linker cannot make a conclusive determination, the uniform will be considered active.



实现对主动制服的这种定义在多大程度上可以被认为是一种优化......但这样做的实际过程不是。我解释了 NV 对 GLSL 的实现如何有效地进行主动统一确定 here .
我提到了未扩展的 GLSL 程序,因为分离着色器对象真的很麻烦。使用该扩展,每个程序可能正好代表流水线的 1 个阶段,并且无法确定在一个阶段使用的制服是否实际上对最终输出有影响。按照 的正式定义事件 统一,当使用 SSO 时,实现必须假设如果它在一个阶段使用,它是事件的。
最重要的是,改变优化级别不会改变这种行为。

关于opengl - 禁用 GLSL 编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21016310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com