 4d02a2d2c0
			
		
	
	
		4d02a2d2c0
		
			
		
	
	
	
	
		
			
			* Initial NVDEC and VIC implementation * Update FFmpeg.AutoGen to 4.3.0 * Add nvdec dependencies for Windows * Unify some VP9 structures * Rename VP9 structure fields * Improvements to Video API * XML docs for Common.Memory * Remove now unused or redundant overloads from MemoryAccessor * NVDEC UV surface read/write scalar paths * Add FIXME comments about hacky things/stuff that will need to be fixed in the future * Cleaned up VP9 memory allocation * Remove some debug logs * Rename some VP9 structs * Remove unused struct * No need to compile Ryujinx.Graphics.Host1x with unsafe anymore * Name AsyncWorkQueue threads to make debugging easier * Make Vp9PictureInfo a ref struct * LayoutConverter no longer needs the depth argument (broken by rebase) * Pooling of VP9 buffers, plus fix a memory leak on VP9 * Really wish VS could rename projects properly... * Address feedback * Remove using * Catch OperationCanceledException * Add licensing informations * Add THIRDPARTY.md to release too Co-authored-by: Thog <me@thog.eu>
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Reflection;
 | |
| 
 | |
| namespace Ryujinx.Graphics.Device
 | |
| {
 | |
|     static class SizeCalculator
 | |
|     {
 | |
|         public static int SizeOf(Type type)
 | |
|         {
 | |
|             // Is type a enum type?
 | |
|             if (type.IsEnum)
 | |
|             {
 | |
|                 type = type.GetEnumUnderlyingType();
 | |
|             }
 | |
| 
 | |
|             // Is type a pointer type?
 | |
|             if (type.IsPointer || type == typeof(IntPtr) || type == typeof(UIntPtr))
 | |
|             {
 | |
|                 return IntPtr.Size;
 | |
|             }
 | |
| 
 | |
|             // Is type a struct type?
 | |
|             if (type.IsValueType && !type.IsPrimitive)
 | |
|             {
 | |
|                 // Check if the struct has a explicit size, if so, return that.
 | |
|                 if (type.StructLayoutAttribute.Size != 0)
 | |
|                 {
 | |
|                     return type.StructLayoutAttribute.Size;
 | |
|                 }
 | |
| 
 | |
|                 // Otherwise we calculate the sum of the sizes of all fields.
 | |
|                 int size = 0;
 | |
|                 var fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
 | |
| 
 | |
|                 for (int fieldIndex = 0; fieldIndex < fields.Length; fieldIndex++)
 | |
|                 {
 | |
|                     size += SizeOf(fields[fieldIndex].FieldType);
 | |
|                 }
 | |
| 
 | |
|                 return size;
 | |
|             }
 | |
| 
 | |
|             // Primitive types.
 | |
|             return (Type.GetTypeCode(type)) switch
 | |
|             {
 | |
|                 TypeCode.SByte => sizeof(sbyte),
 | |
|                 TypeCode.Byte => sizeof(byte),
 | |
|                 TypeCode.Int16 => sizeof(short),
 | |
|                 TypeCode.UInt16 => sizeof(ushort),
 | |
|                 TypeCode.Int32 => sizeof(int),
 | |
|                 TypeCode.UInt32 => sizeof(uint),
 | |
|                 TypeCode.Int64 => sizeof(long),
 | |
|                 TypeCode.UInt64 => sizeof(ulong),
 | |
|                 TypeCode.Char => sizeof(char),
 | |
|                 TypeCode.Single => sizeof(float),
 | |
|                 TypeCode.Double => sizeof(double),
 | |
|                 TypeCode.Decimal => sizeof(decimal),
 | |
|                 TypeCode.Boolean => sizeof(bool),
 | |
|                 _ => throw new ArgumentException($"Length for type \"{type.Name}\" is unknown.")
 | |
|             };
 | |
|         }
 | |
|     }
 | |
| }
 |