具有相同操作数参数化的非结构类型(标量、向量、数组等)不能是类型别名。对于非结构,两个 type
<id>
匹配 if-and-only-if 类型匹配。
这到底是什么意思?
#version 400
void main()
{
uint a = 4;
uint b = 5;
}
使用 glslang 编译此着色器会导致
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 1
; Bound: 12
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %main "main"
OpSource GLSL 400
OpName %main "main"
OpName %a "a"
OpName %b "b"
%void = OpTypeVoid
%3 = OpTypeFunction %void
%uint = OpTypeInt 32 0
%_ptr_Function_uint = OpTypePointer Function %uint
%uint_4 = OpConstant %uint 4
%uint_5 = OpConstant %uint 5
%main = OpFunction %void None %3
%5 = OpLabel
%a = OpVariable %_ptr_Function_uint Function
%b = OpVariable %_ptr_Function_uint Function
OpStore %a %uint_4
OpStore %b %uint_5
OpReturn
OpFunctionEnd
这里%uint = OpTypeInt 32 0
用了几次,%_ptr_Function_uint
也用了两次。
这条规则甚至适用于什么地方?