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.
244 lines
8.2 KiB
244 lines
8.2 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine.Assertions;
|
|
using UnityEditor.ShaderGraph;
|
|
using UnityEditor.ShaderGraph.Internal;
|
|
|
|
namespace UnityEditor.Rendering.HighDefinition
|
|
{
|
|
class ShaderTokenUtil
|
|
{
|
|
static internal int GetTypeNumRows(ConcreteSlotValueType slotValue)
|
|
{
|
|
int ret = -1;
|
|
switch (slotValue)
|
|
{
|
|
case ConcreteSlotValueType.Matrix4:
|
|
ret = 4;
|
|
break;
|
|
case ConcreteSlotValueType.Matrix3:
|
|
ret = 3;
|
|
break;
|
|
case ConcreteSlotValueType.Matrix2:
|
|
ret = 2;
|
|
break;
|
|
case ConcreteSlotValueType.Vector4:
|
|
case ConcreteSlotValueType.Vector3:
|
|
case ConcreteSlotValueType.Vector2:
|
|
case ConcreteSlotValueType.Vector1:
|
|
case ConcreteSlotValueType.Boolean:
|
|
ret = 1;
|
|
break;
|
|
case ConcreteSlotValueType.SamplerState:
|
|
case ConcreteSlotValueType.Texture2D:
|
|
case ConcreteSlotValueType.Texture2DArray:
|
|
case ConcreteSlotValueType.Texture3D:
|
|
case ConcreteSlotValueType.Cubemap:
|
|
case ConcreteSlotValueType.Gradient:
|
|
case ConcreteSlotValueType.VirtualTexture:
|
|
case ConcreteSlotValueType.PropertyConnectionState:
|
|
ret = -1;
|
|
break;
|
|
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
static internal ConcreteSlotValueType GetVectorTypeFromNumCols(int numCols)
|
|
{
|
|
ConcreteSlotValueType ret = ConcreteSlotValueType.Vector1;
|
|
|
|
switch (numCols)
|
|
{
|
|
case 1:
|
|
ret = ConcreteSlotValueType.Vector1;
|
|
break;
|
|
case 2:
|
|
ret = ConcreteSlotValueType.Vector2;
|
|
break;
|
|
case 3:
|
|
ret = ConcreteSlotValueType.Vector3;
|
|
break;
|
|
case 4:
|
|
ret = ConcreteSlotValueType.Vector4;
|
|
break;
|
|
default:
|
|
HlslUtil.ParserAssert(false);
|
|
break;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
static internal int GetTypeNumCols(ConcreteSlotValueType slotValue)
|
|
{
|
|
int ret = -1;
|
|
switch (slotValue)
|
|
{
|
|
case ConcreteSlotValueType.Matrix4:
|
|
ret = 4;
|
|
break;
|
|
case ConcreteSlotValueType.Matrix3:
|
|
ret = 3;
|
|
break;
|
|
case ConcreteSlotValueType.Matrix2:
|
|
ret = 2;
|
|
break;
|
|
case ConcreteSlotValueType.Vector4:
|
|
ret = 4;
|
|
break;
|
|
case ConcreteSlotValueType.Vector3:
|
|
ret = 3;
|
|
break;
|
|
case ConcreteSlotValueType.Vector2:
|
|
ret = 2;
|
|
break;
|
|
case ConcreteSlotValueType.Vector1:
|
|
ret = 1;
|
|
break;
|
|
case ConcreteSlotValueType.Boolean:
|
|
ret = 1;
|
|
break;
|
|
case ConcreteSlotValueType.SamplerState:
|
|
case ConcreteSlotValueType.Texture2D:
|
|
case ConcreteSlotValueType.Texture2DArray:
|
|
case ConcreteSlotValueType.Texture3D:
|
|
case ConcreteSlotValueType.Cubemap:
|
|
case ConcreteSlotValueType.Gradient:
|
|
case ConcreteSlotValueType.VirtualTexture:
|
|
case ConcreteSlotValueType.PropertyConnectionState:
|
|
ret = -1;
|
|
break;
|
|
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
static internal int GetTypeNumElems(ConcreteSlotValueType slotValue)
|
|
{
|
|
int ret = -1;
|
|
int numRows = GetTypeNumRows(slotValue);
|
|
int numCols = GetTypeNumCols(slotValue);
|
|
if (numRows >= 1 && numCols >= 1)
|
|
{
|
|
ret = numRows * numCols;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
static internal bool IsVectorType(ConcreteSlotValueType slotValue)
|
|
{
|
|
bool ret;
|
|
|
|
switch (slotValue)
|
|
{
|
|
case ConcreteSlotValueType.Vector1:
|
|
case ConcreteSlotValueType.Vector2:
|
|
case ConcreteSlotValueType.Vector3:
|
|
case ConcreteSlotValueType.Vector4:
|
|
case ConcreteSlotValueType.Boolean: // bools are treated as scalars, more or less
|
|
ret = true;
|
|
break;
|
|
default:
|
|
ret = false;
|
|
break;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
static internal bool IsMatrixType(ConcreteSlotValueType slotValue)
|
|
{
|
|
bool ret;
|
|
|
|
switch (slotValue)
|
|
{
|
|
case ConcreteSlotValueType.Matrix2:
|
|
case ConcreteSlotValueType.Matrix3:
|
|
case ConcreteSlotValueType.Matrix4:
|
|
ret = true;
|
|
break;
|
|
default:
|
|
ret = false;
|
|
break;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
static internal int FindSlotWithId(MaterialSlot[] slots, int slotId)
|
|
{
|
|
int foundIndex = -1;
|
|
for (int i = 0; i < slots.Length; i++)
|
|
{
|
|
if (slots[i].id == slotId)
|
|
{
|
|
foundIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
return foundIndex;
|
|
}
|
|
|
|
static internal string SlotTypeToString(ConcreteSlotValueType slotType, ApdStatus apdStatus, ConcretePrecision precision)
|
|
{
|
|
string precLower = (precision == ConcretePrecision.Single) ? "float" : "half";
|
|
|
|
string ret = "";
|
|
switch (slotType)
|
|
{
|
|
case ConcreteSlotValueType.SamplerState:
|
|
ret = "UnitySamplerState";
|
|
break;
|
|
case ConcreteSlotValueType.Matrix4:
|
|
ret = precLower + "4x4";
|
|
break;
|
|
case ConcreteSlotValueType.Matrix3:
|
|
ret = precLower + "3x3";
|
|
break;
|
|
case ConcreteSlotValueType.Matrix2:
|
|
ret = precLower + "2x2";
|
|
break;
|
|
case ConcreteSlotValueType.Texture2D:
|
|
ret = "UnityTexture2D";
|
|
break;
|
|
case ConcreteSlotValueType.Texture2DArray:
|
|
ret = "UnityTexture2DArray";
|
|
break;
|
|
case ConcreteSlotValueType.Texture3D:
|
|
ret = "UnityTexture3D";
|
|
break;
|
|
case ConcreteSlotValueType.Cubemap:
|
|
ret = "UnityTextureCube";
|
|
break;
|
|
case ConcreteSlotValueType.Gradient:
|
|
ret = "<gradient>";
|
|
break;
|
|
case ConcreteSlotValueType.Vector4:
|
|
ret = PartialDerivUtilWriter.GetDeclName(3, apdStatus, precision);
|
|
break;
|
|
case ConcreteSlotValueType.Vector3:
|
|
ret = PartialDerivUtilWriter.GetDeclName(2, apdStatus, precision);
|
|
break;
|
|
case ConcreteSlotValueType.Vector2:
|
|
ret = PartialDerivUtilWriter.GetDeclName(1, apdStatus, precision);
|
|
break;
|
|
case ConcreteSlotValueType.Vector1:
|
|
ret = PartialDerivUtilWriter.GetDeclName(0, apdStatus, precision);
|
|
break;
|
|
case ConcreteSlotValueType.Boolean:
|
|
ret = precLower;
|
|
break;
|
|
case ConcreteSlotValueType.VirtualTexture:
|
|
ret = "<virtual texture>";
|
|
break;
|
|
case ConcreteSlotValueType.PropertyConnectionState:
|
|
ret = "<property connection>";
|
|
break;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
}
|
|
}
|