Ejemplo n.º 1
0
        private static string GenerateGetOperandValue(Operand operand, NumberType numberType,
                                                      string contextName = "context", bool forUseInArrayIndex = false)
        {
            switch (operand.OperandType)
            {
            case OperandType.Immediate32:
            case OperandType.Immediate64:
                Number4 immediateValues;
                switch (operand.NumComponents)
                {
                case 1:
                    immediateValues = operand.ImmediateValues.Xxxx;
                    break;

                case 4:
                    immediateValues = operand.ImmediateValues;
                    break;

                default:
                    throw new NotImplementedException();
                }
                var value = OperandUtility.ApplyOperandModifier(immediateValues, numberType, operand.Modifier);
                return(string.Format("new Number4({0}f, {1}f, {2}f, {3}f)",
                                     value.Float0, value.Float1, value.Float2, value.Float3));

            case OperandType.ConstantBuffer:
            case OperandType.IndexableTemp:
            case OperandType.Input:
            case OperandType.Temp:
                var swizzled = ApplyOperandSelectionMode(GetRegister(operand, contextName), operand, forUseInArrayIndex);
                switch (operand.Modifier)
                {
                case OperandModifier.None:
                    return(swizzled);

                case OperandModifier.Neg:
                    return(string.Format("Number4.Negate{0}({1})", numberType, swizzled));

                case OperandModifier.Abs:
                    throw new NotImplementedException();

                case OperandModifier.AbsNeg:
                    throw new NotImplementedException();

                default:
                    throw new ArgumentOutOfRangeException();
                }

            default:
                throw new ArgumentException("Unsupported operand type: " + operand.OperandType);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets potentially-swizzled value for use on RHS of an operation.
        /// </summary>
        private static Number4 GetOperandValue(ExecutionContext context, Operand operand, NumberType numberType)
        {
            switch (operand.OperandType)
            {
            case OperandType.Immediate32:
            case OperandType.Immediate64:
                Number4 value;
                switch (operand.NumComponents)
                {
                case 1:
                    value = operand.ImmediateValues.Xxxx;
                    break;

                case 4:
                    value = operand.ImmediateValues;
                    break;

                default:
                    throw new NotImplementedException();
                }
                return(OperandUtility.ApplyOperandModifier(value, numberType, operand.Modifier));

            case OperandType.ConstantBuffer:
            case OperandType.IndexableTemp:
            case OperandType.Input:
            case OperandType.Temp:
                Number4[] register;
                int       index;
                GetRegister(context, operand, out register, out index);
                var swizzledNumber = OperandUtility.ApplyOperandSelectionMode(register[index], operand);
                return(OperandUtility.ApplyOperandModifier(swizzledNumber, numberType, operand.Modifier));

            default:
                throw new ArgumentException("Unsupported operand type: " + operand.OperandType);
            }
        }