| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- using Ryujinx.Graphics.Shader.Translation;
- using System;
- namespace Ryujinx.Graphics.Shader
- {
- public enum AttributeType : byte
- {
- // Generic types.
- Float,
- Sint,
- Uint,
- Sscaled,
- Uscaled,
- Packed = 1 << 6,
- PackedRgb10A2Signed = 1 << 7,
- AnyPacked = Packed | PackedRgb10A2Signed,
- }
- static class AttributeTypeExtensions
- {
- public static AggregateType ToAggregateType(this AttributeType type)
- {
- return (type & ~AttributeType.AnyPacked) switch
- {
- AttributeType.Float => AggregateType.FP32,
- AttributeType.Sint => AggregateType.S32,
- AttributeType.Uint => AggregateType.U32,
- _ => throw new ArgumentException($"Invalid attribute type \"{type}\"."),
- };
- }
- public static AggregateType ToAggregateType(this AttributeType type, bool supportsScaledFormats)
- {
- return (type & ~AttributeType.AnyPacked) switch
- {
- AttributeType.Float => AggregateType.FP32,
- AttributeType.Sint => AggregateType.S32,
- AttributeType.Uint => AggregateType.U32,
- AttributeType.Sscaled => supportsScaledFormats ? AggregateType.FP32 : AggregateType.S32,
- AttributeType.Uscaled => supportsScaledFormats ? AggregateType.FP32 : AggregateType.U32,
- _ => throw new ArgumentException($"Invalid attribute type \"{type}\"."),
- };
- }
- }
- }
|