You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
730 lines
53 KiB
730 lines
53 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Assertions;
|
|
|
|
namespace UnityEditor.Rendering.HighDefinition
|
|
{
|
|
internal class HlslUnityReserved
|
|
{
|
|
internal Dictionary<string, HlslParser.TypeInfo> allGlobals;
|
|
internal HlslUtil.ParsedFuncStructData allReservedData;
|
|
|
|
// The HlslUnityReserved class will build a list of all valid prototypes once, and since it can be pretty huge
|
|
// we only want to store it once. Then each compiled shader will use this struct to keep track of which ones
|
|
// actually used.
|
|
internal struct PrototypeActiveSet
|
|
{
|
|
// for each prototype, an int of the id which we gave to the caller
|
|
int[] reversePrototypeLookup;
|
|
|
|
// given the id, fetch the index of allPrototypes.
|
|
Dictionary<int, int> activePrototypeIdMapping;
|
|
|
|
// for each struct, an int of the id we gave to the caller
|
|
int[] reverseStructLookup;
|
|
|
|
// given the id, fetch the index of allPrototypes.
|
|
Dictionary<int, int> allStructs;
|
|
}
|
|
|
|
struct UnityMacroTypeDecl
|
|
{
|
|
static internal UnityMacroTypeDecl Make(HlslParser.TypeInfo baseTypeInfo, HlslParser.TypeInfo subTypeInfo)
|
|
{
|
|
UnityMacroTypeDecl ret = new UnityMacroTypeDecl();
|
|
ret.baseTypeInfo = baseTypeInfo;
|
|
ret.subTypeInfo = subTypeInfo;
|
|
return ret;
|
|
}
|
|
|
|
internal HlslParser.TypeInfo baseTypeInfo;
|
|
internal HlslParser.TypeInfo subTypeInfo;
|
|
}
|
|
|
|
internal HlslUnityReserved()
|
|
{
|
|
{
|
|
allGlobals = new Dictionary<string, HlslParser.TypeInfo>();
|
|
|
|
HlslParser.TypeInfo topLevelFloat1 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float1, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo topLevelFloat2 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo topLevelFloat3 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float3, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo topLevelFloat4 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float4, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo topLevelFloat4x4 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float4x4, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
allGlobals.Add("PI", topLevelFloat1);
|
|
allGlobals.Add("HALF_PI", topLevelFloat1);
|
|
|
|
allGlobals.Add("unity_OrthoParams", topLevelFloat4);
|
|
allGlobals.Add("unity_DeltaTime", topLevelFloat4);
|
|
allGlobals.Add("_ProjectionParams", topLevelFloat4);
|
|
allGlobals.Add("_ScreenParams", topLevelFloat4);
|
|
|
|
allGlobals.Add("SHADERGRAPH_OBJECT_POSITION", topLevelFloat3);
|
|
|
|
allGlobals.Add("UNITY_MATRIX_M", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_MATRIX_I_M", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_MATRIX_V", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_MATRIX_I_V", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_MATRIX_P", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_MATRIX_I_P", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_MATRIX_VP", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_MATRIX_I_VP", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_MATRIX_MV", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_MATRIX_T_MV", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_MATRIX_IT_MV", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_MATRIX_MVP", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_PREV_MATRIX_M", topLevelFloat4x4);
|
|
allGlobals.Add("UNITY_PREV_MATRIX_I_M", topLevelFloat4x4);
|
|
}
|
|
|
|
{
|
|
macroTypeDecl = new Dictionary<string, UnityMacroTypeDecl>();
|
|
|
|
HlslParser.TypeInfo nativeTex2d = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._Texture2D, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo nativeTex2dArray = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._Texture2DArray, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo nativeTexCube = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._TextureCUBE, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo nativeTexCubeArray = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._TextureCUBEArray, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo nativeTex3d = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._Texture3D, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo nativeRwTex2d = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._RWTexture2D, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo nativeRwTex2dArray = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._RWTexture2DArray, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo nativeRwTex3d = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._RWTexture3D, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
|
|
HlslParser.TypeInfo nativeSamplerState = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._SamplerState, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo nativeSamplerComparisonState = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._SamplerComparisonState, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
// any for these?
|
|
HlslParser.TypeInfo nativeFloat4 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float4, 0, ApdAllowedState.Any);
|
|
HlslParser.TypeInfo nativeHalf4 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._half4, 0, ApdAllowedState.Any);
|
|
HlslParser.TypeInfo nativeUnknown = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._unknown, 0, ApdAllowedState.Any);
|
|
HlslParser.TypeInfo nativeInvalid = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._invalid, 0, ApdAllowedState.Any);
|
|
|
|
macroTypeDecl.Add("TEXTURE2D", UnityMacroTypeDecl.Make(nativeTex2d, nativeUnknown));
|
|
macroTypeDecl.Add("TEXTURE2D_ARRAY", UnityMacroTypeDecl.Make(nativeTex2dArray, nativeUnknown));
|
|
macroTypeDecl.Add("TEXTURECUBE", UnityMacroTypeDecl.Make(nativeTexCube, nativeUnknown));
|
|
macroTypeDecl.Add("TEXTURECUBE_ARRAY", UnityMacroTypeDecl.Make(nativeTexCubeArray, nativeUnknown));
|
|
macroTypeDecl.Add("TEXTURE3D", UnityMacroTypeDecl.Make(nativeTex3d, nativeUnknown));
|
|
|
|
macroTypeDecl.Add("TEXTURE2D_FLOAT", UnityMacroTypeDecl.Make(nativeTex2d, nativeFloat4));
|
|
macroTypeDecl.Add("TEXTURE2D_ARRAY_FLOAT", UnityMacroTypeDecl.Make(nativeTex2dArray, nativeFloat4));
|
|
macroTypeDecl.Add("TEXTURECUBE_FLOAT", UnityMacroTypeDecl.Make(nativeTexCube, nativeFloat4));
|
|
macroTypeDecl.Add("TEXTURECUBE_ARRAY_FLOAT", UnityMacroTypeDecl.Make(nativeTexCubeArray, nativeFloat4));
|
|
macroTypeDecl.Add("TEXTURE3D_FLOAT", UnityMacroTypeDecl.Make(nativeTex3d, nativeFloat4));
|
|
|
|
macroTypeDecl.Add("TEXTURE2D_HALF", UnityMacroTypeDecl.Make(nativeTex2d, nativeHalf4));
|
|
macroTypeDecl.Add("TEXTURE2D_ARRAY_HALF", UnityMacroTypeDecl.Make(nativeTex2dArray, nativeHalf4));
|
|
macroTypeDecl.Add("TEXTURECUBE_HALF", UnityMacroTypeDecl.Make(nativeTexCube, nativeHalf4));
|
|
macroTypeDecl.Add("TEXTURECUBE_ARRAY_HALF", UnityMacroTypeDecl.Make(nativeTexCubeArray, nativeHalf4));
|
|
macroTypeDecl.Add("TEXTURE3D_HALF", UnityMacroTypeDecl.Make(nativeTex3d, nativeHalf4));
|
|
|
|
macroTypeDecl.Add("TEXTURE2D_SHADOW", UnityMacroTypeDecl.Make(nativeTex2d, nativeUnknown));
|
|
macroTypeDecl.Add("TEXTURE2D_ARRAY_SHADOW", UnityMacroTypeDecl.Make(nativeTex2dArray, nativeUnknown));
|
|
macroTypeDecl.Add("TEXTURECUBE_SHADOW", UnityMacroTypeDecl.Make(nativeTexCube, nativeUnknown));
|
|
macroTypeDecl.Add("TEXTURECUBE_ARRAY_SHADOW", UnityMacroTypeDecl.Make(nativeTexCubeArray, nativeUnknown));
|
|
|
|
// this is a little janky, but we'll use invalid to denote that the user needs to specify a type, and thus
|
|
// these three macros require 2 params instead of one.
|
|
macroTypeDecl.Add("RW_TEXTURE2D", UnityMacroTypeDecl.Make(nativeRwTex2d, nativeInvalid));
|
|
macroTypeDecl.Add("RW_TEXTURE2D_ARRAY", UnityMacroTypeDecl.Make(nativeRwTex2d, nativeInvalid));
|
|
macroTypeDecl.Add("RW_TEXTURE3D", UnityMacroTypeDecl.Make(nativeRwTex3d, nativeInvalid));
|
|
|
|
macroTypeDecl.Add("SAMPLER", UnityMacroTypeDecl.Make(nativeSamplerState, nativeUnknown));
|
|
macroTypeDecl.Add("SAMPLER_CMP", UnityMacroTypeDecl.Make(nativeSamplerComparisonState, nativeUnknown));
|
|
}
|
|
|
|
parsedFuncStructData = new HlslUtil.ParsedFuncStructData();
|
|
|
|
// SamplerState
|
|
{
|
|
HlslUtil.StructInfo sampler2dInfo = new HlslUtil.StructInfo();
|
|
sampler2dInfo.identifier = "UnitySampler2D";
|
|
|
|
{
|
|
// fields for the struct
|
|
List<HlslUtil.FieldInfo> fields = new List<HlslUtil.FieldInfo>();
|
|
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._SamplerState, "samplerstate", 0, ApdAllowedState.OnlyFpd));
|
|
|
|
sampler2dInfo.fields = fields.ToArray();
|
|
}
|
|
|
|
parsedFuncStructData.AddStruct(sampler2dInfo);
|
|
}
|
|
|
|
// Texture2D
|
|
{
|
|
HlslUtil.StructInfo texture2dInfo = new HlslUtil.StructInfo();
|
|
texture2dInfo.identifier = "UnityTexture2D";
|
|
|
|
{
|
|
// fields for the struct
|
|
List<HlslUtil.FieldInfo> fields = new List<HlslUtil.FieldInfo>();
|
|
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._Texture2D, "tex", 0, ApdAllowedState.OnlyFpd));
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._SamplerState, "samplerstate", 0, ApdAllowedState.OnlyFpd));
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._float4, "texelSize", 0, ApdAllowedState.OnlyFpd));
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._float4, "scaleTranslate", 0, ApdAllowedState.OnlyFpd));
|
|
|
|
texture2dInfo.fields = fields.ToArray();
|
|
}
|
|
|
|
{
|
|
HlslParser.TypeInfo unity_s = HlslParser.TypeInfo.MakeStruct("UnitySamplerState", 0);
|
|
HlslParser.TypeInfo unity_sc = HlslParser.TypeInfo.MakeStruct("UnitySamplerComparisonState", 0);
|
|
|
|
HlslParser.TypeInfo native_s = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._SamplerState, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo native_sc = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._SamplerComparisonState, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo uv = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.OnlyApd);
|
|
HlslParser.TypeInfo lod = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo bias = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo dpdx = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo dpdy = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo cmp = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo pixel = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._int3, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
|
|
HlslParser.TypeInfo retFloat4 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float4, 0, ApdAllowedState.AllowApdVariation);
|
|
HlslParser.TypeInfo retFloat = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.AllowApdVariation);
|
|
HlslParser.TypeInfo retUv2 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.OnlyApd);
|
|
|
|
int ignoredId = -1;
|
|
List<HlslUtil.PrototypeInfo> protoInfo = new List<HlslUtil.PrototypeInfo>();
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Sample", new HlslParser.TypeInfo[] { unity_s, uv }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleLevel", new HlslParser.TypeInfo[] { unity_s, uv, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleBias", new HlslParser.TypeInfo[] { unity_s, uv, bias }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleGrad", new HlslParser.TypeInfo[] { unity_s, uv, dpdx, dpdy }, ignoredId));
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retUv2, "GetTransformedUV", new HlslParser.TypeInfo[] { uv }, ignoredId));
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "CalculateLevelOfDetail", new HlslParser.TypeInfo[] { unity_s, uv }, ignoredId));
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Sample", new HlslParser.TypeInfo[] { native_s, uv }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleLevel", new HlslParser.TypeInfo[] { native_s, uv, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleBias", new HlslParser.TypeInfo[] { native_s, uv, bias }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleGrad", new HlslParser.TypeInfo[] { native_s, uv, dpdx, dpdy }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleCmpLevelZero", new HlslParser.TypeInfo[] { native_s, uv, cmp }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Load", new HlslParser.TypeInfo[] { pixel }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "CalculateLevelOfDetail", new HlslParser.TypeInfo[] { native_s, uv }, ignoredId));
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Gather", new HlslParser.TypeInfo[] { unity_s, uv }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "GatherRed", new HlslParser.TypeInfo[] { unity_s, uv }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "GatherGreen", new HlslParser.TypeInfo[] { unity_s, uv }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "GatherBlue", new HlslParser.TypeInfo[] { unity_s, uv }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "GatherAlpha", new HlslParser.TypeInfo[] { unity_s, uv }, ignoredId));
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Gather", new HlslParser.TypeInfo[] { native_s, uv }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "GatherRed", new HlslParser.TypeInfo[] { native_s, uv }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "GatherGreen", new HlslParser.TypeInfo[] { native_s, uv }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "GatherBlue", new HlslParser.TypeInfo[] { native_s, uv }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "GatherAlpha", new HlslParser.TypeInfo[] { native_s, uv }, ignoredId));
|
|
|
|
texture2dInfo.prototypes = protoInfo.ToArray();
|
|
}
|
|
|
|
parsedFuncStructData.AddStruct(texture2dInfo);
|
|
}
|
|
|
|
// TextureCube
|
|
{
|
|
HlslUtil.StructInfo textureCubeInfo = new HlslUtil.StructInfo();
|
|
textureCubeInfo.identifier = "UnityTextureCube";
|
|
|
|
{
|
|
// fields for the struct
|
|
List<HlslUtil.FieldInfo> fields = new List<HlslUtil.FieldInfo>();
|
|
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._TextureCUBE, "tex", 0, ApdAllowedState.OnlyFpd));
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._SamplerState, "samplerstate", 0, ApdAllowedState.OnlyFpd));
|
|
|
|
textureCubeInfo.fields = fields.ToArray();
|
|
}
|
|
|
|
{
|
|
HlslParser.TypeInfo unity_s = HlslParser.TypeInfo.MakeStruct("UnitySamplerState", 0);
|
|
HlslParser.TypeInfo unity_sc = HlslParser.TypeInfo.MakeStruct("UnitySamplerComparisonState", 0);
|
|
|
|
HlslParser.TypeInfo native_s = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._SamplerState, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo dir = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float3, 0, ApdAllowedState.OnlyApd);
|
|
HlslParser.TypeInfo lod = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo bias = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo retFloat4 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float4, 0, ApdAllowedState.AllowApdVariation);
|
|
|
|
int ignoredId = -1;
|
|
List<HlslUtil.PrototypeInfo> protoInfo = new List<HlslUtil.PrototypeInfo>();
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Sample", new HlslParser.TypeInfo[] { unity_s, dir }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleLevel", new HlslParser.TypeInfo[] { unity_s, dir, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleBias", new HlslParser.TypeInfo[] { unity_s, dir, bias }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Sample", new HlslParser.TypeInfo[] { native_s, dir }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleLevel", new HlslParser.TypeInfo[] { native_s, dir, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleBias", new HlslParser.TypeInfo[] { native_s, dir, bias }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Gather", new HlslParser.TypeInfo[] { unity_s, dir }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Gather", new HlslParser.TypeInfo[] { native_s, dir }, ignoredId));
|
|
|
|
textureCubeInfo.prototypes = protoInfo.ToArray();
|
|
}
|
|
|
|
parsedFuncStructData.AddStruct(textureCubeInfo);
|
|
}
|
|
|
|
// Texture2DArray
|
|
{
|
|
HlslUtil.StructInfo textureCubeInfo = new HlslUtil.StructInfo();
|
|
textureCubeInfo.identifier = "UnityTexture2DArray";
|
|
|
|
{
|
|
// fields for the struct
|
|
List<HlslUtil.FieldInfo> fields = new List<HlslUtil.FieldInfo>();
|
|
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._TextureCUBE, "tex", 0, ApdAllowedState.OnlyFpd));
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._SamplerState, "samplerstate", 0, ApdAllowedState.OnlyFpd));
|
|
|
|
textureCubeInfo.fields = fields.ToArray();
|
|
}
|
|
|
|
{
|
|
HlslParser.TypeInfo unity_s = HlslParser.TypeInfo.MakeStruct("UnitySamplerState", 0);
|
|
HlslParser.TypeInfo unity_sc = HlslParser.TypeInfo.MakeStruct("UnitySamplerComparisonState", 0);
|
|
|
|
HlslParser.TypeInfo native_s = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._SamplerState, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo uv = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float3, 0, ApdAllowedState.OnlyApd);
|
|
HlslParser.TypeInfo lod = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo bias = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo dpdx = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo dpdy = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo retFloat4 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float4, 0, ApdAllowedState.AllowApdVariation);
|
|
HlslParser.TypeInfo cmp = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo pixel = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._int3, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
int ignoredId = -1;
|
|
List<HlslUtil.PrototypeInfo> protoInfo = new List<HlslUtil.PrototypeInfo>();
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Sample", new HlslParser.TypeInfo[] { unity_s, uv }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleLevel", new HlslParser.TypeInfo[] { unity_s, uv, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleBias", new HlslParser.TypeInfo[] { unity_s, uv, bias }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleGrad", new HlslParser.TypeInfo[] { unity_s, uv, dpdx, dpdy }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Sample", new HlslParser.TypeInfo[] { native_s, uv }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleLevel", new HlslParser.TypeInfo[] { native_s, uv, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleBias", new HlslParser.TypeInfo[] { native_s, uv, bias }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleGrad", new HlslParser.TypeInfo[] { native_s, uv, dpdx, dpdy }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleCmpLevelZero", new HlslParser.TypeInfo[] { native_s, uv, cmp }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Load", new HlslParser.TypeInfo[] { pixel }, ignoredId));
|
|
|
|
textureCubeInfo.prototypes = protoInfo.ToArray();
|
|
}
|
|
|
|
parsedFuncStructData.AddStruct(textureCubeInfo);
|
|
}
|
|
|
|
// Texture3d
|
|
{
|
|
HlslUtil.StructInfo texture3dInfo = new HlslUtil.StructInfo();
|
|
texture3dInfo.identifier = "UnityTexture3D";
|
|
|
|
{
|
|
// fields for the struct
|
|
List<HlslUtil.FieldInfo> fields = new List<HlslUtil.FieldInfo>();
|
|
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._Texture3D, "tex", 0, ApdAllowedState.OnlyFpd));
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._SamplerState, "samplerstate", 0, ApdAllowedState.OnlyFpd));
|
|
|
|
texture3dInfo.fields = fields.ToArray();
|
|
}
|
|
|
|
{
|
|
HlslParser.TypeInfo unity_s = HlslParser.TypeInfo.MakeStruct("UnitySamplerState", 0);
|
|
|
|
HlslParser.TypeInfo native_s = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._SamplerState, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo uvw = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float3, 0, ApdAllowedState.OnlyApd);
|
|
HlslParser.TypeInfo lod = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo bias = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo pixel = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._int4, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo retFloat4 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float4, 0, ApdAllowedState.AllowApdVariation);
|
|
|
|
int ignoredId = -1;
|
|
List<HlslUtil.PrototypeInfo> protoInfo = new List<HlslUtil.PrototypeInfo>();
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Sample", new HlslParser.TypeInfo[] { unity_s, uvw }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleLevel", new HlslParser.TypeInfo[] { unity_s, uvw, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Sample", new HlslParser.TypeInfo[] { native_s, uvw }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "SampleLevel", new HlslParser.TypeInfo[] { native_s, uvw, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, "Load", new HlslParser.TypeInfo[] { pixel }, ignoredId));
|
|
|
|
texture3dInfo.prototypes = protoInfo.ToArray();
|
|
}
|
|
|
|
parsedFuncStructData.AddStruct(texture3dInfo);
|
|
}
|
|
|
|
// UnitySamplerState
|
|
{
|
|
HlslUtil.StructInfo samplerStateInfo = new HlslUtil.StructInfo();
|
|
samplerStateInfo.identifier = "UnitySamplerState";
|
|
|
|
{
|
|
// fields for the struct
|
|
List<HlslUtil.FieldInfo> fields = new List<HlslUtil.FieldInfo>();
|
|
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._SamplerState, "samplerstate", 0, ApdAllowedState.OnlyFpd));
|
|
samplerStateInfo.fields = fields.ToArray();
|
|
}
|
|
|
|
samplerStateInfo.prototypes = new HlslUtil.PrototypeInfo[0];
|
|
|
|
parsedFuncStructData.AddStruct(samplerStateInfo);
|
|
}
|
|
|
|
// Gradient
|
|
{
|
|
|
|
HlslUtil.StructInfo gradientInfo = new HlslUtil.StructInfo();
|
|
gradientInfo.identifier = "Gradient";
|
|
|
|
{
|
|
HlslParser.TypeInfo int1 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._int, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo vec2 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo vec4 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float4, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
// fields for the struct
|
|
List<HlslUtil.FieldInfo> fields = new List<HlslUtil.FieldInfo>();
|
|
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._int, "type", 0, ApdAllowedState.OnlyFpd));
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._int, "colorsLength", 0, ApdAllowedState.OnlyFpd));
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._int, "alphasLength", 0, ApdAllowedState.OnlyFpd));
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._float2, "colors", 1, ApdAllowedState.OnlyFpd));
|
|
fields.Add(HlslUtil.FieldInfo.MakeNativeType(HlslNativeType._float4, "alphas", 1, ApdAllowedState.OnlyFpd));
|
|
gradientInfo.fields = fields.ToArray();
|
|
}
|
|
|
|
gradientInfo.prototypes = new HlslUtil.PrototypeInfo[0];
|
|
parsedFuncStructData.AddStruct(gradientInfo);
|
|
}
|
|
|
|
{
|
|
HlslParser.TypeInfo tex2d = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._Texture2D, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo tex2dArray = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._Texture2DArray, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo texCube = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._TextureCUBE, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo texCubeArray = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._TextureCUBE, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo tex3d = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._Texture3D, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo native_s = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._SamplerState, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo native_sc = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._SamplerComparisonState, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo lod = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo bias = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo dpdx = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo dpdy = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo cmp = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo pixel = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._int3, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo index = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._int, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo sampleIndex = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._int, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo coord2Apd = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.OnlyApd);
|
|
HlslParser.TypeInfo coord3Apd = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float3, 0, ApdAllowedState.OnlyApd);
|
|
HlslParser.TypeInfo coord4Apd = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float4, 0, ApdAllowedState.OnlyApd);
|
|
|
|
HlslParser.TypeInfo coord2Fpd = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo coord3Fpd = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float3, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo coord4Fpd = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float4, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo retFloat4 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float4, 0, ApdAllowedState.Any);
|
|
HlslParser.TypeInfo retFloat = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.Any);
|
|
HlslParser.TypeInfo retFloat2 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float2, 0, ApdAllowedState.Any);
|
|
|
|
List<HlslUtil.PrototypeInfo> protoInfo = new List<HlslUtil.PrototypeInfo>();
|
|
|
|
int ignoredId = -1;
|
|
|
|
for (int prefixIter = 0; prefixIter < 2; prefixIter++)
|
|
{
|
|
string prefix = (prefixIter == 0) ? "" : "PLATFORM_";
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURE2D", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Apd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURE2D_LOD", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Fpd, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURE2D_BIAS", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Apd, bias }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURE2D_GRAD", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Fpd, dpdx, dpdy }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURE2D_ARRAY", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Apd, index }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURE2D_ARRAY_LOD", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Fpd, index, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURE2D_ARRAY_BIAS", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Apd, bias }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURE2D_ARRAY_GRAD", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Fpd, dpdx, dpdy }, ignoredId));
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURECUBE", new HlslParser.TypeInfo[] { tex2d, native_s, coord3Apd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURECUBE_LOD", new HlslParser.TypeInfo[] { tex2d, native_s, coord3Fpd, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURECUBE_BIAS", new HlslParser.TypeInfo[] { tex2d, native_s, coord3Apd, bias }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURECUBE_ARRAY", new HlslParser.TypeInfo[] { tex2d, native_s, coord3Fpd, index }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURECUBE_ARRAY_LOD", new HlslParser.TypeInfo[] { tex2d, native_s, coord3Apd, index, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURECUBE_ARRAY_BIAS", new HlslParser.TypeInfo[] { tex2d, native_s, coord3Fpd, index, bias }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURE3D", new HlslParser.TypeInfo[] { tex2d, native_s, coord3Apd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat4, prefix + "SAMPLE_TEXTURE3D_LOD", new HlslParser.TypeInfo[] { tex2d, native_s, coord3Fpd, lod }, ignoredId));
|
|
}
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "SAMPLE_TEXTURE2D_SHADOW", new HlslParser.TypeInfo[] { tex2d, native_sc, coord3Fpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "SAMPLE_TEXTURE2D_ARRAY_SHADOW", new HlslParser.TypeInfo[] { tex2d, native_sc, coord3Fpd, index }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "SAMPLE_TEXTURECUBE_SHADOW", new HlslParser.TypeInfo[] { tex2d, native_sc, coord4Fpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "SAMPLE_TEXTURECUBE_ARRAY_SHADOW", new HlslParser.TypeInfo[] { tex2d, native_sc, coord4Fpd, index }, ignoredId));
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "SAMPLE_DEPTH_TEXTURE", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Fpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "SAMPLE_DEPTH_TEXTURE_LOD", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Fpd, lod }, ignoredId));
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "LOAD_TEXTURE2D", new HlslParser.TypeInfo[] { tex2d, coord2Fpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "LOAD_TEXTURE2D_LOD", new HlslParser.TypeInfo[] { tex2d, coord2Fpd, lod }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "LOAD_TEXTURE2D_MSAA", new HlslParser.TypeInfo[] { tex2d, coord2Fpd, sampleIndex }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "LOAD_TEXTURE2D_ARRAY", new HlslParser.TypeInfo[] { tex2d, coord2Fpd, index }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "LOAD_TEXTURE2D_ARRAY_MSAA", new HlslParser.TypeInfo[] { tex2d, coord2Fpd, index, sampleIndex }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "LOAD_TEXTURE2D_ARRAY_LOD", new HlslParser.TypeInfo[] { tex2d, coord2Fpd, lod, index }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "LOAD_TEXTURE3D", new HlslParser.TypeInfo[] { tex2d, coord3Fpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "LOAD_TEXTURE3D_LOD", new HlslParser.TypeInfo[] { tex2d, coord3Fpd, lod }, ignoredId));
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "GATHER_TEXTURE2D", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Fpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "GATHER_TEXTURE2D_ARRAY", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Fpd, index }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "GATHER_TEXTURECUBE", new HlslParser.TypeInfo[] { tex2d, native_s, coord3Fpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "GATHER_TEXTURECUBE_ARRAY", new HlslParser.TypeInfo[] { tex2d, native_s, coord3Fpd, index }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "GATHER_RED_TEXTURE2D", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Fpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "GATHER_GREEN_TEXTURE2D", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Fpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "GATHER_BLUE_TEXTURE2D", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Fpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(retFloat, "GATHER_ALPHA_TEXTURE2D", new HlslParser.TypeInfo[] { tex2d, native_s, coord2Fpd }, ignoredId));
|
|
|
|
for (int i = 0; i < protoInfo.Count; i++)
|
|
{
|
|
HlslUtil.PrototypeInfo currProto = protoInfo[i];
|
|
parsedFuncStructData.AddPrototype(currProto);
|
|
}
|
|
}
|
|
|
|
int prec = 0;
|
|
{
|
|
HlslParser.TypeInfo vec1 = HlslParser.TypeInfo.MakeNativeType(prec == 0 ? HlslNativeType._float : HlslNativeType._half, 0, ApdAllowedState.AllowApdVariation);
|
|
HlslParser.TypeInfo vec2 = HlslParser.TypeInfo.MakeNativeType(prec == 0 ? HlslNativeType._float2 : HlslNativeType._half2, 0, ApdAllowedState.AllowApdVariation);
|
|
HlslParser.TypeInfo vec3 = HlslParser.TypeInfo.MakeNativeType(prec == 0 ? HlslNativeType._float3 : HlslNativeType._half3, 0, ApdAllowedState.AllowApdVariation);
|
|
HlslParser.TypeInfo vec4 = HlslParser.TypeInfo.MakeNativeType(prec == 0 ? HlslNativeType._float4 : HlslNativeType._half4, 0, ApdAllowedState.AllowApdVariation);
|
|
|
|
HlslParser.TypeInfo[] vecInOrder = new HlslParser.TypeInfo[4] { vec1, vec2, vec3, vec4 };
|
|
|
|
List<HlslUtil.PrototypeInfo> protoInfo = new List<HlslUtil.PrototypeInfo>();
|
|
|
|
int ignoredId = -1;
|
|
|
|
for (int iter = 0; iter < 4; iter++)
|
|
{
|
|
HlslParser.TypeInfo baseVec = vecInOrder[iter];
|
|
HlslParser.TypeInfo baseVecFpd = vecInOrder[iter];
|
|
baseVecFpd.allowedState = ApdAllowedState.OnlyFpd;
|
|
HlslParser.TypeInfo baseVecApd = vecInOrder[iter];
|
|
baseVecApd.allowedState = ApdAllowedState.OnlyApd;
|
|
|
|
// BinaryFunc, these are valid with any vec1/2/3/4, but require the same to be passed to both sides
|
|
//min,
|
|
//max,
|
|
//pow,
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "min", new HlslParser.TypeInfo[] { baseVec, baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "max", new HlslParser.TypeInfo[] { baseVec, baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "pow", new HlslParser.TypeInfo[] { baseVec, baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "reflect", new HlslParser.TypeInfo[] { baseVec, baseVec }, ignoredId));
|
|
|
|
// SingleFunc, these are valid with any vec1/2/3/4
|
|
//saturate,
|
|
//rcp,
|
|
//log,
|
|
//log2,
|
|
//log10
|
|
//exp,
|
|
//exp2,
|
|
//sqrt,
|
|
//rsqrt,
|
|
//normalize,
|
|
//frac,
|
|
//cos,
|
|
//sin,
|
|
//abs,
|
|
//ddx
|
|
//ddy
|
|
//floor
|
|
//ceil
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "saturate", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "rcp", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "log", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "log2", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "log10", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "exp", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "exp2", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "sqrt", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "rsqrt", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "normalize", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "frac", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "cos", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "sin", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "tan", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "cosh", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "sinh", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "tanh", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "abs", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVecFpd, "ddx", new HlslParser.TypeInfo[] { baseVecApd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVecFpd, "ddy", new HlslParser.TypeInfo[] { baseVecApd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "floor", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "ceil", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
|
|
// Func1, in this case valid for every type, but always returns a vec1
|
|
// length
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(vec1, "length", new HlslParser.TypeInfo[] { baseVec }, ignoredId));
|
|
|
|
// Func2, a few cases
|
|
// dot, valid for all 4, but returns 1
|
|
// cross, only valid for vec3
|
|
// reflect, only valid for vec3
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(vec1, "dot", new HlslParser.TypeInfo[] { baseVec, baseVec }, ignoredId));
|
|
if (iter == 2)
|
|
{
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(vec3, "cross", new HlslParser.TypeInfo[] { vec3, vec3 }, ignoredId));
|
|
}
|
|
|
|
// Func3
|
|
// lerp, valid for all 4
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVec, "lerp", new HlslParser.TypeInfo[] { baseVec, baseVec, baseVec }, ignoredId));
|
|
|
|
// these functions don't have an apd version, so are only legal for fpd
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVecFpd, "fmod", new HlslParser.TypeInfo[] { baseVecFpd, baseVecFpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVecFpd, "step", new HlslParser.TypeInfo[] { baseVecFpd, baseVecFpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVecFpd, "clamp", new HlslParser.TypeInfo[] { baseVecFpd, baseVecFpd, baseVecFpd }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVecFpd, "round", new HlslParser.TypeInfo[] { baseVecFpd }, ignoredId));
|
|
|
|
{
|
|
string safePosPowName = "SafePositivePow_" + (prec == 0 ? "float" : "half");
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(baseVecFpd, safePosPowName, new HlslParser.TypeInfo[] { baseVecFpd, baseVecFpd }, ignoredId));
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < protoInfo.Count; i++)
|
|
{
|
|
HlslUtil.PrototypeInfo currProto = protoInfo[i];
|
|
parsedFuncStructData.AddPrototype(currProto);
|
|
}
|
|
}
|
|
|
|
// add the helper function prototyps
|
|
{
|
|
List<HlslUtil.PrototypeInfo> protoInfo = new List<HlslUtil.PrototypeInfo>();
|
|
|
|
HlslParser.TypeInfo unityTexture2D = HlslParser.TypeInfo.MakeStruct("UnityTexture2D", 0);
|
|
HlslParser.TypeInfo unityTextureCube = HlslParser.TypeInfo.MakeStruct("UnityTextureCube", 0);
|
|
HlslParser.TypeInfo unityTexture3D = HlslParser.TypeInfo.MakeStruct("UnityTexture3D", 0);
|
|
HlslParser.TypeInfo unityTexture2DArray = HlslParser.TypeInfo.MakeStruct("UnityTexture2DArray", 0);
|
|
|
|
HlslParser.TypeInfo tex2d = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._Texture2D, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo texCube = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._TextureCUBE, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo tex3d = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._Texture3D, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo unitySamplerState = HlslParser.TypeInfo.MakeStruct("UnitySamplerState", 0);
|
|
HlslParser.TypeInfo samplerState = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._SamplerState, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
HlslParser.TypeInfo float1 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._float, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo half1 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._half, 0, ApdAllowedState.OnlyFpd);
|
|
HlslParser.TypeInfo bool1 = HlslParser.TypeInfo.MakeNativeType(HlslNativeType._bool, 0, ApdAllowedState.OnlyFpd);
|
|
|
|
int ignoredId = -1;
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(unityTexture2D, "UnityBuildTexture2DStructNoScale", new HlslParser.TypeInfo[] { tex2d }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(unityTexture2D, "UnityBuildTexture2DStruct", new HlslParser.TypeInfo[] { tex2d }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(unityTexture2DArray, "UnityBuildTexture2DArrayStruct", new HlslParser.TypeInfo[] { tex2d }, ignoredId));
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(unityTextureCube, "UnityBuildTextureCubeStruct", new HlslParser.TypeInfo[] { texCube }, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(unityTexture3D, "UnityBuildTexture3DStruct", new HlslParser.TypeInfo[] { tex3d }, ignoredId));
|
|
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(unitySamplerState, "UnityBuildSamplerStateStruct", new HlslParser.TypeInfo[] { samplerState }, ignoredId));
|
|
|
|
// epsilon funcs and consts
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(float1, "Eps_float", new HlslParser.TypeInfo[] {}, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(float1, "Min_float", new HlslParser.TypeInfo[] {}, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(float1, "Max_float", new HlslParser.TypeInfo[] {}, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(half1, "Eps_half", new HlslParser.TypeInfo[] {}, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(half1, "Min_half", new HlslParser.TypeInfo[] {}, ignoredId));
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(half1, "Max_half", new HlslParser.TypeInfo[] { }, ignoredId));
|
|
|
|
// color space
|
|
protoInfo.Add(HlslUtil.PrototypeInfo.MakePrototypeInfo(bool1, "IsGammaSpace", new HlslParser.TypeInfo[] { }, ignoredId));
|
|
|
|
|
|
for (int i = 0; i < protoInfo.Count; i++)
|
|
{
|
|
HlslUtil.PrototypeInfo currProto = protoInfo[i];
|
|
parsedFuncStructData.AddPrototype(currProto);
|
|
}
|
|
}
|
|
}
|
|
|
|
internal bool IsIdentifierMacroDecl(string name)
|
|
{
|
|
return macroTypeDecl.ContainsKey(name);
|
|
}
|
|
|
|
internal void GetMacroDeclBaseAndSubType(out HlslParser.TypeInfo baseType, out HlslParser.TypeInfo subType, string name)
|
|
{
|
|
UnityMacroTypeDecl decl = macroTypeDecl[name];
|
|
baseType = decl.baseTypeInfo;
|
|
subType = decl.subTypeInfo;
|
|
}
|
|
|
|
internal bool IsIdentifierUnityStruct(string name)
|
|
{
|
|
return parsedFuncStructData.structFromIdentifer.ContainsKey(name);
|
|
}
|
|
|
|
internal bool IsIdentifierUnityFunction(string name)
|
|
{
|
|
return parsedFuncStructData.overloadFromIdentifer.ContainsKey(name);
|
|
}
|
|
|
|
internal bool FindUnityGlobal(out HlslParser.TypeInfo typeInfo, string name)
|
|
{
|
|
bool ret = false;
|
|
typeInfo = new HlslParser.TypeInfo();
|
|
if (allGlobals.ContainsKey(name))
|
|
{
|
|
ret = true;
|
|
typeInfo = allGlobals[name];
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
// these ids are the index in parsedFuncStructData.allPrototypes
|
|
internal int[] GetPrototypeIdsForFunction(string name)
|
|
{
|
|
int overloadGroup = parsedFuncStructData.overloadFromIdentifer[name];
|
|
HlslUtil.OverloadInfo info = parsedFuncStructData.allOverloads[overloadGroup];
|
|
return info.prototypeList.ToArray();
|
|
}
|
|
|
|
internal PrototypeActiveSet MakeEmptyActiveSet()
|
|
{
|
|
PrototypeActiveSet activeSet = new PrototypeActiveSet();
|
|
return activeSet;
|
|
|
|
}
|
|
|
|
internal int FindOrAddPrototype(ref HlslUtil.ParsedFuncStructData parsedData, ref PrototypeActiveSet activeSet)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
internal int AddPrototype(ref HlslUtil.ParsedFuncStructData parsedData, ref PrototypeActiveSet activeSet, string identifier, HlslParser.TypeInfo[] paramInfoVec)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
Dictionary<string, UnityMacroTypeDecl> macroTypeDecl;
|
|
|
|
// Ideally we would preprocess only the macros that change code paths, but since that isn't
|
|
// feasible just hardcode a few macros here during the tokenizing step.
|
|
internal HlslUtil.ParsedFuncStructData parsedFuncStructData;
|
|
|
|
}
|
|
|
|
}
|