Skip to content

Commit 9946d5c

Browse files
april-roszkowskiEvergreen
authored andcommitted
[Port][6000.3][UUM-122106] Add "is HDR" option to texture shader properties
1 parent 2f9fd64 commit 9946d5c

30 files changed

Lines changed: 4408 additions & 93 deletions

Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ struct UnityTexture2D
2323
SAMPLER(samplerstate);
2424
float4 texelSize;
2525
float4 scaleTranslate;
26+
float4 hdrDecode;
2627

2728
// these functions allows users to convert code using Texture2D to UnityTexture2D by simply changing the type of the variable
2829
// the existing texture macros will call these functions, which will forward the call to the texture appropriately
@@ -61,35 +62,32 @@ float4 tex2D(UnityTexture2D tex, float2 uv) { return SAMPLE_TEXT
6162
float4 tex2Dlod(UnityTexture2D tex, float4 uv0l) { return SAMPLE_TEXTURE2D_LOD(tex.tex, tex.samplerstate, uv0l.xy, uv0l.w); }
6263
float4 tex2Dbias(UnityTexture2D tex, float4 uv0b) { return SAMPLE_TEXTURE2D_BIAS(tex.tex, tex.samplerstate, uv0b.xy, uv0b.w); }
6364

64-
#define UnityBuildTexture2DStruct(n) UnityBuildTexture2DStructInternal(TEXTURE2D_ARGS(n, sampler##n), n##_TexelSize, n##_ST)
65-
#define UnityBuildTexture2DStructNoScale(n) UnityBuildTexture2DStructInternal(TEXTURE2D_ARGS(n, sampler##n), n##_TexelSize, float4(1, 1, 0, 0))
66-
UnityTexture2D UnityBuildTexture2DStructInternal(TEXTURE2D_PARAM(tex, samplerstate), float4 texelSize, float4 scaleTranslate)
65+
#define UnityBuildTexture2DStruct(n) UnityBuildTexture2DStructInternal(TEXTURE2D_ARGS(n, sampler##n), n##_TexelSize, n##_ST, float4(0, 0, 0, 0))
66+
#define UnityBuildTexture2DStructNoScale(n) UnityBuildTexture2DStructInternal(TEXTURE2D_ARGS(n, sampler##n), n##_TexelSize, float4(1, 1, 0, 0), float4(0, 0, 0, 0))
67+
UnityTexture2D UnityBuildTexture2DStructInternal(TEXTURE2D_PARAM(tex, samplerstate), float4 texelSize, float4 scaleTranslate, float4 hdrDecode)
6768
{
6869
UnityTexture2D result;
6970
result.tex = tex;
7071
result.samplerstate = samplerstate;
7172
result.texelSize = texelSize;
7273
result.scaleTranslate = scaleTranslate;
74+
result.hdrDecode = hdrDecode;
7375
return result;
7476
}
7577

7678
#define UnityBuildTexture2DStructNoTexelSize(n) UnityBuildTexture2DStructNoTexelSizeInternal(TEXTURE2D_ARGS(n, sampler##n), n##_ST)
7779
#define UnityBuildTexture2DStructNoScaleNoTexelSize(n) UnityBuildTexture2DStructNoTexelSizeInternal(TEXTURE2D_ARGS(n, sampler##n), float4(1, 1, 0, 0))
7880
UnityTexture2D UnityBuildTexture2DStructNoTexelSizeInternal(TEXTURE2D_PARAM(tex, samplerstate), float4 scaleTranslate)
7981
{
80-
UnityTexture2D result;
81-
result.tex = tex;
82-
result.samplerstate = samplerstate;
83-
result.texelSize = float4(1, 1, 1, 1);
84-
result.scaleTranslate = scaleTranslate;
85-
return result;
82+
return UnityBuildTexture2DStructInternal(tex, samplerstate, float4(1, 1, 1, 1), scaleTranslate, float4(0, 0, 0, 0));
8683
}
8784

8885

8986
struct UnityTexture2DArray
9087
{
9188
TEXTURE2D_ARRAY(tex);
9289
SAMPLER(samplerstate);
90+
float4 hdrDecode;
9391

9492
// these functions allows users to convert code using Texture2DArray to UnityTexture2DArray by simply changing the type of the variable
9593
// the existing texture macros will call these functions, which will forward the call to the texture appropriately
@@ -106,12 +104,13 @@ struct UnityTexture2DArray
106104
float4 Load(int4 pixel) { return LOAD_TEXTURE2D_ARRAY(tex, pixel.xy, pixel.z); }
107105
};
108106

109-
#define UnityBuildTexture2DArrayStruct(n) UnityBuildTexture2DArrayStructInternal(TEXTURE2D_ARRAY_ARGS(n, sampler##n))
110-
UnityTexture2DArray UnityBuildTexture2DArrayStructInternal(TEXTURE2D_ARRAY_PARAM(tex, samplerstate))
107+
#define UnityBuildTexture2DArrayStruct(n) UnityBuildTexture2DArrayStructInternal(TEXTURE2D_ARRAY_ARGS(n, sampler##n), float4(0, 0, 0, 0))
108+
UnityTexture2DArray UnityBuildTexture2DArrayStructInternal(TEXTURE2D_ARRAY_PARAM(tex, samplerstate), float4 hdrDecode)
111109
{
112110
UnityTexture2DArray result;
113111
result.tex = tex;
114112
result.samplerstate = samplerstate;
113+
result.hdrDecode = hdrDecode;
115114
return result;
116115
}
117116

@@ -120,6 +119,7 @@ struct UnityTextureCube
120119
{
121120
TEXTURECUBE(tex);
122121
SAMPLER(samplerstate);
122+
float4 hdrDecode;
123123

124124
// these functions allows users to convert code using TextureCube to UnityTextureCube by simply changing the type of the variable
125125
// the existing texture macros will call these functions, which will forward the call to the texture appropriately
@@ -140,12 +140,13 @@ struct UnityTextureCube
140140
float4 texCUBE(UnityTextureCube tex, float3 dir) { return SAMPLE_TEXTURECUBE(tex.tex, tex.samplerstate, dir); }
141141
float4 texCUBEbias(UnityTextureCube tex, float4 dirBias) { return SAMPLE_TEXTURECUBE_BIAS(tex.tex, tex.samplerstate, dirBias.xyz, dirBias.w); }
142142

143-
#define UnityBuildTextureCubeStruct(n) UnityBuildTextureCubeStructInternal(TEXTURECUBE_ARGS(n, sampler##n))
144-
UnityTextureCube UnityBuildTextureCubeStructInternal(TEXTURECUBE_PARAM(tex, samplerstate))
143+
#define UnityBuildTextureCubeStruct(n) UnityBuildTextureCubeStructInternal(TEXTURECUBE_ARGS(n, sampler##n), float4(0, 0, 0, 0))
144+
UnityTextureCube UnityBuildTextureCubeStructInternal(TEXTURECUBE_PARAM(tex, samplerstate), float4 hdrDecode)
145145
{
146146
UnityTextureCube result;
147147
result.tex = tex;
148148
result.samplerstate = samplerstate;
149+
result.hdrDecode = hdrDecode;
149150
return result;
150151
}
151152

@@ -154,11 +155,6 @@ struct UnityTexture3D
154155
{
155156
TEXTURE3D(tex);
156157
SAMPLER(samplerstate);
157-
158-
// This dummy field is unused in Unity 6.4 and earlier. Here, the field is added strictly as a dummy to work around UUM-133088
159-
// Without this additional field, UnityTexture3D and sampler3D_f have the exact same structure, which will cause DXC to consider
160-
// them as the same type. This causes to compilation errors due to the corresponding overloads of tex3D being considered ambiguous
161-
// by DXC. Adding the field resolves this. Starting from Unity 6.5, the field is actually used in code.
162158
float4 hdrDecode;
163159

164160
// these functions allows users to convert code using Texture3D to UnityTexture3D by simply changing the type of the variable
@@ -173,12 +169,13 @@ struct UnityTexture3D
173169

174170
float4 tex3D(UnityTexture3D tex, float3 uvw) { return SAMPLE_TEXTURE3D(tex.tex, tex.samplerstate, uvw); }
175171

176-
#define UnityBuildTexture3DStruct(n) UnityBuildTexture3DStructInternal(TEXTURE3D_ARGS(n, sampler##n))
177-
UnityTexture3D UnityBuildTexture3DStructInternal(TEXTURE3D_PARAM(tex, samplerstate))
172+
#define UnityBuildTexture3DStruct(n) UnityBuildTexture3DStructInternal(TEXTURE3D_ARGS(n, sampler##n), float4(0, 0, 0, 0))
173+
UnityTexture3D UnityBuildTexture3DStructInternal(TEXTURE3D_PARAM(tex, samplerstate), float4 hdrDecode)
178174
{
179175
UnityTexture3D result;
180176
result.tex = tex;
181177
result.samplerstate = samplerstate;
178+
result.hdrDecode = hdrDecode;
182179
return result;
183180
}
184181

Packages/com.unity.render-pipelines.high-definition/Editor/Material/TerrainLit/ShaderGraph/ShaderPassDefine.template.hlsl

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,7 @@ SAMPLER(sampler_TerrainHolesTexture);
4646

4747
UnityTexture2D TerrainBuildUnityTexture2DStructInternal(Texture2D tex, SamplerState samplerstate, float4 texelSize, float4 scaleTranslate)
4848
{
49-
UnityTexture2D result;
50-
result.tex = tex;
51-
result.samplerstate = samplerstate;
52-
result.texelSize = texelSize;
53-
result.scaleTranslate = scaleTranslate;
54-
return result;
49+
return UnityBuildTexture2DStructInternal(tex, samplerstate, texelSize, scaleTranslate, float4(0, 0, 0, 0));
5550
}
5651

5752

Packages/com.unity.render-pipelines.universal/Editor/Terrain/TerrainPassDefine.template.hlsl

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,7 @@ half4 _BlackTex_ST = half4(1,1,0,0);
4848

4949
UnityTexture2D TerrainBuildUnityTexture2DStructInternal(Texture2D tex, SamplerState samplerstate, float4 texelSize, float4 scaleTranslate)
5050
{
51-
UnityTexture2D result;
52-
result.tex = tex;
53-
result.samplerstate = samplerstate;
54-
result.texelSize = texelSize;
55-
result.scaleTranslate = scaleTranslate;
56-
return result;
51+
return UnityBuildTexture2DStructInternal(tex, samplerstate, texelSize, scaleTranslate, float4(0, 0, 0, 0));
5752
}
5853

5954
#define DEF_TERRAIN_TEXTURE_LOAD(name, defaultName) UnityTexture2D TerrainBuildUnityTexture2DStructInternal##name(int index) \

Packages/com.unity.shadergraph/Editor/Data/Graphs/CubemapShaderProperty.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,14 @@ internal CubemapShaderProperty()
2323

2424
internal string modifiableTagString => modifiable ? "" : "[NonModifiableTextureData]";
2525

26+
[SerializeField]
27+
internal bool isHDR = false;
28+
29+
internal string isHDRString => isHDR ? "[HDR]" : "";
30+
2631
internal override string GetPropertyBlockString()
2732
{
28-
return $"{hideTagString}{modifiableTagString}[NoScaleOffset]{referenceName}(\"{displayName}\", CUBE) = \"\" {{}}";
33+
return $"{hideTagString}{modifiableTagString}[NoScaleOffset]{isHDRString}{referenceName}(\"{displayName}\", CUBE) = \"\" {{}}";
2934
}
3035

3136
internal override bool AllowHLSLDeclaration(HLSLDeclaration decl) => (decl != HLSLDeclaration.HybridPerInstance) && (decl != HLSLDeclaration.DoNotDeclare);
@@ -34,6 +39,8 @@ internal override void ForeachHLSLProperty(Action<HLSLProperty> action)
3439
{
3540
action(new HLSLProperty(HLSLType._TextureCube, referenceName, HLSLDeclaration.Global));
3641
action(new HLSLProperty(HLSLType._SamplerState, "sampler" + referenceName, HLSLDeclaration.Global));
42+
if (isHDR)
43+
action(new HLSLProperty(HLSLType._float4, referenceName + "_HDR", HLSLDeclaration.Global));
3744
}
3845

3946
internal override string GetPropertyAsArgumentString(string precisionString)
@@ -50,8 +57,11 @@ internal override string GetHLSLVariableName(bool isSubgraphProperty, Generation
5057
{
5158
if (isSubgraphProperty && !promoteToFinalShader)
5259
return referenceName;
53-
else
54-
return $"UnityBuildTextureCubeStruct({referenceName})";
60+
61+
string nameArg = referenceName;
62+
string samplerArg = $"sampler{referenceName}";
63+
string hdrDecodeArg = isHDR ? $"{referenceName}_HDR" : "float4(0, 0, 0, 0)";
64+
return $"UnityBuildTextureCubeStructInternal({nameArg}, {samplerArg}, {hdrDecodeArg})";
5565
}
5666

5767
[SerializeField]

Packages/com.unity.shadergraph/Editor/Data/Graphs/Texture2DArrayShaderProperty.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,14 @@ internal Texture2DArrayShaderProperty()
2121

2222
internal string modifiableTagString => modifiable ? "" : "[NonModifiableTextureData]";
2323

24+
[SerializeField]
25+
internal bool isHDR = false;
26+
27+
internal string isHDRString => isHDR ? "[HDR]" : "";
28+
2429
internal override string GetPropertyBlockString()
2530
{
26-
return $"{hideTagString}{modifiableTagString}[NoScaleOffset]{referenceName}(\"{displayName}\", 2DArray) = \"\" {{}}";
31+
return $"{hideTagString}{modifiableTagString}[NoScaleOffset]{isHDRString}{referenceName}(\"{displayName}\", 2DArray) = \"\" {{}}";
2732
}
2833

2934
internal override bool AllowHLSLDeclaration(HLSLDeclaration decl) => (decl != HLSLDeclaration.HybridPerInstance) && (decl != HLSLDeclaration.DoNotDeclare);
@@ -32,6 +37,8 @@ internal override void ForeachHLSLProperty(Action<HLSLProperty> action)
3237
{
3338
action(new HLSLProperty(HLSLType._Texture2DArray, referenceName, HLSLDeclaration.Global));
3439
action(new HLSLProperty(HLSLType._SamplerState, "sampler" + referenceName, HLSLDeclaration.Global));
40+
if (isHDR)
41+
action(new HLSLProperty(HLSLType._float4, referenceName + "_HDR", HLSLDeclaration.Global));
3542
}
3643

3744
internal override string GetPropertyAsArgumentString(string precisionString)
@@ -48,8 +55,11 @@ internal override string GetHLSLVariableName(bool isSubgraphProperty, Generation
4855
{
4956
if (isSubgraphProperty && !promoteToFinalShader)
5057
return referenceName;
51-
else
52-
return $"UnityBuildTexture2DArrayStruct({referenceName})";
58+
59+
string nameArg = referenceName;
60+
string samplerArg = $"sampler{referenceName}";
61+
string hdrDecodeArg = isHDR ? $"{referenceName}_HDR" : "float4(0, 0, 0, 0)";
62+
return $"UnityBuildTexture2DArrayStructInternal({nameArg}, {samplerArg}, {hdrDecodeArg})";
5363
}
5464

5565
[SerializeField]

Packages/com.unity.shadergraph/Editor/Data/Graphs/Texture2DShaderProperty.cs

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,18 @@ internal Texture2DShaderProperty()
5252
[SerializeField]
5353
internal bool useTexelSize = true;
5454

55+
[SerializeField]
56+
internal bool isHDR = false;
57+
5558
internal string useSTString => useTilingAndOffset ? "" : "[NoScaleOffset]";
5659
internal string useTexelSizeString => useTexelSize ? "" : "[NoTexelSize]";
60+
internal string isHDRString => isHDR ? "[HDR]" : "";
5761
internal string mainTextureString => isMainTexture ? "[MainTexture]" : "";
5862

5963
internal override string GetPropertyBlockString()
6064
{
6165
var normalTagString = (defaultType == DefaultType.NormalMap) ? "[Normal]" : "";
62-
return $"{hideTagString}{modifiableTagString}{normalTagString}{mainTextureString}{useSTString}{referenceName}(\"{displayName}\", 2D) = \"{ToShaderLabString(defaultType)}\" {{}}";
66+
return $"{hideTagString}{modifiableTagString}{normalTagString}{mainTextureString}{useSTString}{isHDRString}{referenceName}(\"{displayName}\", 2D) = \"{ToShaderLabString(defaultType)}\" {{}}";
6367
}
6468

6569
// Texture2D properties cannot be set via Hybrid path at the moment; disallow that choice
@@ -90,6 +94,10 @@ internal override void ForeachHLSLProperty(Action<HLSLProperty> action)
9094
{
9195
action(new HLSLProperty(HLSLType._float4, referenceName + "_ST", decl));
9296
}
97+
if (isHDR)
98+
{
99+
action(new HLSLProperty(HLSLType._float4, referenceName + "_HDR", decl));
100+
}
93101
}
94102

95103
internal override string GetPropertyAsArgumentString(string precisionString)
@@ -106,31 +114,13 @@ internal override string GetHLSLVariableName(bool isSubgraphProperty, Generation
106114
{
107115
if (isSubgraphProperty && !promoteToFinalShader)
108116
return referenceName;
109-
else
110-
{
111-
if (useTexelSize)
112-
{
113-
if (useTilingAndOffset)
114-
{
115-
return $"UnityBuildTexture2DStruct({referenceName})";
116-
}
117-
else
118-
{
119-
return $"UnityBuildTexture2DStructNoScale({referenceName})";
120-
}
121-
}
122-
else
123-
{
124-
if (useTilingAndOffset)
125-
{
126-
return $"UnityBuildTexture2DStructNoTexelSize({referenceName})";
127-
}
128-
else
129-
{
130-
return $"UnityBuildTexture2DStructNoScaleNoTexelSize({referenceName})";
131-
}
132-
}
133-
}
117+
118+
string nameArg = referenceName;
119+
string samplerArg = $"sampler{referenceName}";
120+
string texelSizeArg = useTexelSize ? $"{referenceName}_TexelSize" : "float4(1, 1, 1, 1)";
121+
string scaleTranslateArg = useTilingAndOffset ? $"{referenceName}_ST" : "float4(1, 1, 0, 0)";
122+
string hdrDecodeArg = isHDR ? $"{referenceName}_HDR" : "float4(0, 0, 0, 0)";
123+
return $"UnityBuildTexture2DStructInternal({nameArg}, {samplerArg}, {texelSizeArg}, {scaleTranslateArg}, {hdrDecodeArg})";
134124
}
135125

136126
[SerializeField]

Packages/com.unity.shadergraph/Editor/Data/Graphs/Texture3DShaderProperty.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,14 @@ internal Texture3DShaderProperty()
2121

2222
internal string modifiableTagString => modifiable ? "" : "[NonModifiableTextureData]";
2323

24+
[SerializeField]
25+
internal bool isHDR = false;
26+
27+
internal string isHDRString => isHDR ? "[HDR]" : "";
28+
2429
internal override string GetPropertyBlockString()
2530
{
26-
return $"{hideTagString}{modifiableTagString}[NoScaleOffset]{referenceName}(\"{displayName}\", 3D) = \"white\" {{}}";
31+
return $"{hideTagString}{modifiableTagString}[NoScaleOffset]{isHDRString}{referenceName}(\"{displayName}\", 3D) = \"white\" {{}}";
2732
}
2833

2934
internal override bool AllowHLSLDeclaration(HLSLDeclaration decl) => (decl != HLSLDeclaration.HybridPerInstance) && (decl != HLSLDeclaration.DoNotDeclare);
@@ -32,6 +37,8 @@ internal override void ForeachHLSLProperty(Action<HLSLProperty> action)
3237
{
3338
action(new HLSLProperty(HLSLType._Texture3D, referenceName, HLSLDeclaration.Global));
3439
action(new HLSLProperty(HLSLType._SamplerState, "sampler" + referenceName, HLSLDeclaration.Global));
40+
if (isHDR)
41+
action(new HLSLProperty(HLSLType._float4, referenceName + "_HDR", HLSLDeclaration.Global));
3542
}
3643

3744
internal override string GetPropertyAsArgumentString(string precisionString)
@@ -48,8 +55,11 @@ internal override string GetHLSLVariableName(bool isSubgraphProperty, Generation
4855
{
4956
if (isSubgraphProperty && !promoteToFinalShader)
5057
return referenceName;
51-
else
52-
return $"UnityBuildTexture3DStruct({referenceName})";
58+
59+
string nameArg = referenceName;
60+
string samplerArg = $"sampler{referenceName}";
61+
string hdrDecodeArg = isHDR ? $"{referenceName}_HDR" : "float4(0, 0, 0, 0)";
62+
return $"UnityBuildTexture3DStructInternal({referenceName}, {samplerArg}, {hdrDecodeArg})";
5363
}
5464

5565
[SerializeField]

Packages/com.unity.shadergraph/Editor/Data/Nodes/Input/Texture/SampleCubemapNode.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,26 @@ public sealed override void UpdateNodeAfterDeserialization()
4545
// Node generations
4646
public virtual void GenerateNodeCode(ShaderStringBuilder sb, GenerationMode generationMode)
4747
{
48+
string outputVectorVariableName = GetVariableNameForSlot(OutputSlotId);
49+
4850
//Sampler input slot
4951
var samplerSlot = FindInputSlot<MaterialSlot>(SamplerInputId);
5052
var edgesSampler = owner.GetEdges(samplerSlot.slotReference);
5153

54+
// Sample
5255
var id = GetSlotValue(CubemapInputId, generationMode);
5356
string result = string.Format("$precision4 {0} = SAMPLE_TEXTURECUBE_LOD({1}.tex, {2}.samplerstate, reflect(-{3}, {4}), {5});"
54-
, GetVariableNameForSlot(OutputSlotId)
57+
, outputVectorVariableName
5558
, id
5659
, edgesSampler.Any() ? GetSlotValue(SamplerInputId, generationMode) : id
5760
, GetSlotValue(ViewDirInputId, generationMode)
5861
, GetSlotValue(NormalInputId, generationMode)
5962
, GetSlotValue(LODInputId, generationMode));
6063

6164
sb.AppendLine(result);
65+
66+
// Decode HDR
67+
SampleTexture2DNode.AppendHDRDecodeOperation(sb, outputVectorVariableName, id);
6268
}
6369

6470
public NeededCoordinateSpace RequiresViewDirection(ShaderStageCapability stageCapability)

Packages/com.unity.shadergraph/Editor/Data/Nodes/Input/Texture/SampleRawCubemapNode.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,25 @@ public sealed override void UpdateNodeAfterDeserialization()
4141
// Node generations
4242
public virtual void GenerateNodeCode(ShaderStringBuilder sb, GenerationMode generationMode)
4343
{
44+
string outputVectorVariableName = GetVariableNameForSlot(OutputSlotId);
45+
4446
//Sampler input slot
4547
var samplerSlot = FindInputSlot<MaterialSlot>(SamplerInputId);
4648
var edgesSampler = owner.GetEdges(samplerSlot.slotReference);
4749

50+
// Sample
4851
var id = GetSlotValue(CubemapInputId, generationMode);
4952
string result = string.Format("$precision4 {0} = SAMPLE_TEXTURECUBE_LOD({1}.tex, {2}.samplerstate, {3}, {4});"
50-
, GetVariableNameForSlot(OutputSlotId)
53+
, outputVectorVariableName
5154
, id
5255
, edgesSampler.Any() ? GetSlotValue(SamplerInputId, generationMode) : id
5356
, GetSlotValue(NormalInputId, generationMode)
5457
, GetSlotValue(LODInputId, generationMode));
5558

5659
sb.AppendLine(result);
60+
61+
// Decode HDR
62+
SampleTexture2DNode.AppendHDRDecodeOperation(sb, outputVectorVariableName, id);
5763
}
5864

5965
public NeededCoordinateSpace RequiresNormal(ShaderStageCapability stageCapability)

0 commit comments

Comments
 (0)