为什么着色器阶段输入变量不可写

Why are shader-stage input variables not writable

GLSLangSpec.3.30 说:

Values from the previous pipeline stage are copied into input variables at the beginning of shader execution. Variables declared as in or centroid in may not be written to during shader execution.

如果复制进来,原值不变,为什么输入变量不可写?

该标准描述的是行为,而不是实施。因此,关于被“复制进来”的说法只是描述了表面效果,而不是实际硬件的作用。

事实上,这两个特定要求的全部意义在于允许实现而不是将输入复制到特定变量中。或者更确切地说,允许 VS 实现避免在不需要时为变量分配存储空间。如果一个实现想要使用直接从缓冲区(或缓存)读取的 shader-stage 输入变量,它可以这样做。

现在是的,您仍然可以使用能够修改 in 变量的实现。但是编译器必须检查着色器 是否 修改了它们。因此,如果编译器不必检查您是否正在做您 不应该 做的事情,那么实现此类优化(相关的地方)会容易得多。