public static string TypeToCode(VFXValueType type)
        {
            switch (type)
            {
            case VFXValueType.Float: return("float");

            case VFXValueType.Float2: return("float2");

            case VFXValueType.Float3: return("float3");

            case VFXValueType.Float4: return("float4");

            case VFXValueType.Int32: return("int");

            case VFXValueType.Uint32: return("uint");

            case VFXValueType.Texture2D: return("Texture2D");

            case VFXValueType.Texture2DArray: return("Texture2DArray");

            case VFXValueType.Texture3D: return("Texture3D");

            case VFXValueType.TextureCube: return("TextureCube");

            case VFXValueType.TextureCubeArray: return("TextureCubeArray");

            case VFXValueType.Matrix4x4: return("float4x4");

            case VFXValueType.Boolean: return("bool");
            }
            throw new NotImplementedException(type.ToString());
        }
 public static bool IsFloatValueType(VFXValueType valueType)
 {
     return(valueType == VFXValueType.Float ||
            valueType == VFXValueType.Float2 ||
            valueType == VFXValueType.Float3 ||
            valueType == VFXValueType.Float4);
 }
Example #3
0
        public static string GetValueString(VFXValueType type, object value)
        {
            var format = "";

            switch (type)
            {
            case VFXValueType.Boolean:
            case VFXValueType.Int32:
            case VFXValueType.Uint32:
            case VFXValueType.Float:
                format = "({0}){1}";
                break;

            case VFXValueType.Float2:
            case VFXValueType.Float3:
            case VFXValueType.Float4:
            case VFXValueType.Matrix4x4:
                format = "{0}{1}";
                break;

            default: throw new Exception("GetValueString missing type: " + type);
            }
            // special cases of ToString
            switch (type)
            {
            case VFXValueType.Boolean:
                value = value.ToString().ToLower();
                break;

            case VFXValueType.Float:
                value = ((float)value).ToString("G9", CultureInfo.InvariantCulture);
                break;

            case VFXValueType.Float2:
                value = $"({((Vector2)value).x.ToString("G9", CultureInfo.InvariantCulture)}, {((Vector2)value).y.ToString("G9", CultureInfo.InvariantCulture)})";
                break;

            case VFXValueType.Float3:
                value = $"({((Vector3)value).x.ToString("G9", CultureInfo.InvariantCulture)}, {((Vector3)value).y.ToString("G9", CultureInfo.InvariantCulture)}, {((Vector3)value).z.ToString("G9", CultureInfo.InvariantCulture)})";
                break;

            case VFXValueType.Float4:
                value = $"({((Vector4)value).x.ToString("G9", CultureInfo.InvariantCulture)}, {((Vector4)value).y.ToString("G9", CultureInfo.InvariantCulture)}, {((Vector4)value).z.ToString("G9", CultureInfo.InvariantCulture)}, {((Vector4)value).w.ToString("G9", CultureInfo.InvariantCulture)})";
                break;

            case VFXValueType.Matrix4x4:
            {
                var matrix = ((Matrix4x4)value).transpose;
                value = "(";
                for (int i = 0; i < 16; ++i)
                {
                    value += string.Format(CultureInfo.InvariantCulture, i == 15 ? "{0}" : "{0},", matrix[i].ToString("G9", CultureInfo.InvariantCulture));
                }
                value += ")";
            }
            break;
            }
            return(string.Format(CultureInfo.InvariantCulture, format, VFXExpression.TypeToCode(type), value));
        }
 sealed protected override string GetUnaryOperationCode(string x, VFXValueType type)
 {
     if (type == VFXValueType.Uint32)
     {
         throw new NotImplementedException("Unexpected type for VFXExpressionSign");
     }
     return(string.Format("sign({0})", x));
 }
Example #5
0
        internal static void DataTypeLabel(Rect r, string Label, VFXValueType type, GUIStyle style)
        {
            Color backup = GUI.color;

            GUI.color = valueTypeColors[type];
            GUI.Label(r, Label, style);
            GUI.color = backup;
        }
Example #6
0
        internal static void DataTypeLabel(string Label, VFXValueType type, GUIStyle style, params GUILayoutOption[] options)
        {
            Color backup = GUI.color;

            GUI.color = valueTypeColors[type];
            GUILayout.Label(Label, style, options);
            GUI.color = backup;
        }
 protected override string GetBinaryOperationCode(string left, string right, VFXValueType type)
 {
     if (type == VFXValueType.Uint32)
     {
         return(string.Format("{0} > {1} ? {0} : {1}", left, right));
     }
     return(string.Format("max({0}, {1})", left, right));
 }
        static public VFXExpression CastFloat(VFXExpression from, VFXValueType toValueType, float defaultValue = 0.0f)
        {
            if (!VFXExpressionNumericOperation.IsFloatValueType(from.valueType) || !VFXExpressionNumericOperation.IsFloatValueType(toValueType))
            {
                throw new ArgumentException(string.Format("Invalid CastFloat : {0} to {1}", from, toValueType));
            }

            if (from.valueType == toValueType)
            {
                return(from);
            }

            var fromValueType     = from.valueType;
            var fromValueTypeSize = VFXExpression.TypeToSize(fromValueType);
            var toValueTypeSize   = VFXExpression.TypeToSize(toValueType);

            var inputComponent  = new VFXExpression[fromValueTypeSize];
            var outputComponent = new VFXExpression[toValueTypeSize];

            if (inputComponent.Length == 1)
            {
                inputComponent[0] = from;
            }
            else
            {
                for (int iChannel = 0; iChannel < fromValueTypeSize; ++iChannel)
                {
                    inputComponent[iChannel] = from[iChannel];
                }
            }

            for (int iChannel = 0; iChannel < toValueTypeSize; ++iChannel)
            {
                if (iChannel < fromValueTypeSize)
                {
                    outputComponent[iChannel] = inputComponent[iChannel];
                }
                else if (fromValueTypeSize == 1)
                {
                    //Manage same logic behavior for float => floatN in HLSL
                    outputComponent[iChannel] = inputComponent[0];
                }
                else
                {
                    outputComponent[iChannel] = VFXValue.Constant(defaultValue);
                }
            }

            if (toValueTypeSize == 1)
            {
                return(outputComponent[0]);
            }

            var combine = new VFXExpressionCombine(outputComponent);

            return(combine);
        }
Example #9
0
        public void WriteDeclaration(VFXValueType type, string variableName)
        {
            if (!VFXExpression.IsTypeValidOnGPU(type))
            {
                throw new ArgumentException(string.Format("Invalid GPU Type: {0}", type));
            }

            WriteFormat("{0} {1};\n", VFXExpression.TypeToCode(type), variableName);
        }
Example #10
0
        sealed protected override string GetBinaryOperationCode(string x, string y, VFXValueType type)
        {
            if (!IsUIntValueType(type))
            {
                throw new InvalidOperationException("Invalid VFXExpressionBinaryUIntOperation");
            }

            return(GetBinaryOperationCode(x, y));
        }
Example #11
0
        public void WriteDeclaration(VFXValueType type, string variableName, string semantic)
        {
            if (!VFXExpression.IsTypeValidOnGPU(type))
            {
                throw new ArgumentException(string.Format("Invalid GPU Type: {0}", type));
            }

            WriteFormat("VFX_OPTIONAL_INTERPOLATION {0} {1} : {2};\n", VFXExpression.TypeToCode(type), variableName, semantic);
        }
Example #12
0
        private static string GetCompatTypeString(VFXValueType valueType)
        {
            if (!VFXExpression.IsUniform(valueType))
            {
                throw new InvalidOperationException("Trying to fetch an attribute of type: " + valueType);
            }

            return(VFXExpression.TypeToCode(valueType));
        }
Example #13
0
        sealed protected override string GetUnaryOperationCode(string x, VFXValueType type)
        {
            if (!IsUIntValueType(type))
            {
                throw new InvalidOperationException("VFXExpressionUnaryUIntOperation : Unexpected type");
            }

            return(GetUnaryOperationCode(x));
        }
Example #14
0
        public void WriteVariable(VFXValueType type, string variableName, string value)
        {
            if (!VFXExpression.IsTypeValidOnGPU(type))
            {
                throw new ArgumentException(string.Format("Invalid GPU Type: {0}", type));
            }

            WriteFormat("{0} ", VFXExpression.TypeToCode(type));
            WriteAssignement(type, variableName, value);
        }
Example #15
0
 public static bool IsTypeConstantFoldable(VFXValueType type)
 {
     switch (type)
     {
     //Mesh API can modify the vertex count & layout.
     //Thus, all mesh related expression should never been constant folded while generating code.
     case VFXValueType.Mesh:
         return(false);
     }
     return(true);
 }
        public static bool IsTexture(VFXValueType type)
        {
            switch (type)
            {
            case VFXValueType.Texture2D:
            case VFXValueType.Texture2DArray:
            case VFXValueType.Texture3D:
            case VFXValueType.TextureCube:
            case VFXValueType.TextureCubeArray:
                return(true);
            }

            return(false);
        }
        static private VFXExpression BaseToConstant(Base _base, VFXValueType type)
        {
            switch (_base)
            {
            case Base.Base2:    return(TwoExpression[type]);

            case Base.Base10:   return(TenExpression[type]);

            case Base.BaseE:    return(E_NapierConstantExpression[type]);

            default:
                throw new NotImplementedException();
            }
        }
        public VFXExpressionCondition(VFXValueType type, VFXCondition cond, VFXExpression left, VFXExpression right) : base(VFXExpression.Flags.None, new VFXExpression[] { left, right })
        {
            if (type != left.valueType || type != right.valueType)
            {
                throw new InvalidOperationException(string.Format("Unexpected value type in condition expression : {0}/{1} (expected {2})", left.valueType, right.valueType, type));
            }

            if (type != VFXValueType.Float && type != VFXValueType.Uint32 && type != VFXValueType.Int32)
            {
                throw new NotImplementedException("This type is not handled by condition expression: " + type);
            }

            condition = cond;
            this.type = type;
        }
 public static bool IsUniform(VFXValueType type)
 {
     switch (type)
     {
     case VFXValueType.Float:
     case VFXValueType.Float2:
     case VFXValueType.Float3:
     case VFXValueType.Float4:
     case VFXValueType.Int32:
     case VFXValueType.Uint32:
     case VFXValueType.Matrix4x4:
     case VFXValueType.Boolean:
         return(true);
     }
     return(false);
 }
        public static VFXValueType GetMatchingScalar(VFXValueType type)
        {
            if (IsFloatValueType(type))
            {
                return(VFXValueType.Float);
            }
            if (IsUIntValueType(type))
            {
                return(VFXValueType.Uint32);
            }
            if (IsIntValueType(type))
            {
                return(VFXValueType.Int32);
            }

            return(VFXValueType.None);
        }
        private static string GetFunctionParameterType(VFXValueType type)
        {
            switch (type)
            {
            case VFXValueType.Texture2D: return("VFXSampler2D");

            case VFXValueType.Texture2DArray: return("VFXSampler2DArray");

            case VFXValueType.Texture3D: return("VFXSampler3D");

            case VFXValueType.TextureCube: return("VFXSamplerCube");

            case VFXValueType.TextureCubeArray: return("VFXSamplerCubeArray");

            default:
                return(VFXExpression.TypeToCode(type));
            }
        }
Example #22
0
 public static bool IsTypeConstantFoldable(VFXValueType type)
 {
     switch (type)
     {
     //Mesh API can modify the vertex count & layout.
     //Thus, all mesh related expression should never been constant folded while generating code.
     // The same goes for textures
     case VFXValueType.Texture2D:
     case VFXValueType.Texture2DArray:
     case VFXValueType.Texture3D:
     case VFXValueType.TextureCube:
     case VFXValueType.TextureCubeArray:
     case VFXValueType.CameraBuffer:
     case VFXValueType.Mesh:
         return(false);
     }
     return(true);
 }
        static private VFXValue GetValueFromType(VFXValueType type)
        {
            switch (type)
            {
            case VFXValueType.Boolean: return(VFXValue.Constant <bool>());

            case VFXValueType.Uint32: return(VFXValue.Constant <uint>());

            case VFXValueType.Int32: return(VFXValue.Constant <int>());

            case VFXValueType.Float: return(VFXValue.Constant <float>());

            case VFXValueType.Float2: return(VFXValue.Constant <Vector2>());

            case VFXValueType.Float3: return(VFXValue.Constant <Vector3>());

            case VFXValueType.Float4: return(VFXValue.Constant <Vector4>());

            default: throw new InvalidOperationException(string.Format("Unexpected attribute type: {0}", type));
            }
        }
Example #24
0
        public static Type TypeToType(VFXValueType type)
        {
            switch (type)
            {
            case VFXValueType.Float: return(typeof(float));

            case VFXValueType.Float2: return(typeof(Vector2));

            case VFXValueType.Float3: return(typeof(Vector3));

            case VFXValueType.Float4: return(typeof(Vector4));

            case VFXValueType.Int32: return(typeof(int));

            case VFXValueType.Uint32: return(typeof(uint));

            case VFXValueType.Texture2D: return(typeof(Texture));

            case VFXValueType.Texture2DArray: return(typeof(Texture));

            case VFXValueType.Texture3D: return(typeof(Texture));

            case VFXValueType.TextureCube: return(typeof(Texture));

            case VFXValueType.TextureCubeArray: return(typeof(Texture));

            case VFXValueType.CameraBuffer: return(typeof(CameraBuffer));

            case VFXValueType.Matrix4x4: return(typeof(Matrix4x4));

            case VFXValueType.Mesh: return(typeof(Mesh));

            case VFXValueType.Curve: return(typeof(AnimationCurve));

            case VFXValueType.ColorGradient: return(typeof(Gradient));

            case VFXValueType.Boolean: return(typeof(bool));
            }
            throw new NotImplementedException(type.ToString());
        }
Example #25
0
        public static string TypeToCode(VFXValueType type)
        {
            switch (type)
            {
            case VFXValueType.Float: return("float");

            case VFXValueType.Float2: return("float2");

            case VFXValueType.Float3: return("float3");

            case VFXValueType.Float4: return("float4");

            case VFXValueType.Int32: return("int");

            case VFXValueType.Uint32: return("uint");

            case VFXValueType.Texture2D: return("Texture2D");

            case VFXValueType.Texture2DArray: return("Texture2DArray");

            case VFXValueType.Texture3D: return("Texture3D");

            case VFXValueType.TextureCube: return("TextureCube");

            case VFXValueType.TextureCubeArray: return("TextureCubeArray");

            case VFXValueType.CameraBuffer: return("CameraBuffer");

            case VFXValueType.Matrix4x4: return("float4x4");

            case VFXValueType.Mesh:
            case VFXValueType.SkinnedMeshRenderer:
            case VFXValueType.Buffer: return("ByteAddressBuffer");

            case VFXValueType.Boolean: return("bool");
            }

            throw new NotImplementedException(type.ToString());
        }
        public static bool IsTypeValidOnGPU(VFXValueType type)
        {
            switch (type)
            {
            case VFXValueType.Float:
            case VFXValueType.Float2:
            case VFXValueType.Float3:
            case VFXValueType.Float4:
            case VFXValueType.Int32:
            case VFXValueType.Uint32:
            case VFXValueType.Texture2D:
            case VFXValueType.Texture2DArray:
            case VFXValueType.Texture3D:
            case VFXValueType.TextureCube:
            case VFXValueType.TextureCubeArray:
            case VFXValueType.Matrix4x4:
            case VFXValueType.Boolean:
                return(true);
            }

            return(false);
        }
        // As certain type of uniforms are not handled in material, we need to use floats instead
        public static string TypeToUniformCode(VFXValueType type)
        {
            switch (type)
            {
            case VFXValueType.Float: return("float");

            case VFXValueType.Float2: return("float2");

            case VFXValueType.Float3: return("float3");

            case VFXValueType.Float4: return("float4");

            case VFXValueType.Int32: return("float");

            case VFXValueType.Uint32: return("float");

            case VFXValueType.Matrix4x4: return("float4x4");

            case VFXValueType.Boolean: return("float");
            }
            throw new NotImplementedException(type.ToString());
        }
Example #28
0
        public void WriteAssignement(VFXValueType type, string variableName, string value)
        {
            var format = value == "0" ? "{1} = ({0}){2};" : "{1} = {2};";

            WriteFormat(format, VFXExpression.TypeToCode(type), variableName, value);
        }
 sealed protected override string GetBinaryOperationCode(string left, string right, VFXValueType type)
 {
     return(string.Format("{0} - {1}", left, right));
 }
 public VFXAttribute(string name, VFXValueType type, VFXVariadic variadic = VFXVariadic.False, SpaceableType space = SpaceableType.None)
     : this(name, GetValueFromType(type), variadic, space)
 {
 }