 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>
		
			
				
	
	
		
			68 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Diagnostics.CodeAnalysis;
 | |
| using System.Runtime.CompilerServices;
 | |
| 
 | |
| namespace Ryujinx.Common.Memory
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Represents a pointer to an unmanaged resource.
 | |
|     /// </summary>
 | |
|     /// <typeparam name="T">Type of the unmanaged resource</typeparam>
 | |
|     public unsafe struct Ptr<T> : IEquatable<Ptr<T>> where T : unmanaged
 | |
|     {
 | |
|         private IntPtr _ptr;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Null pointer.
 | |
|         /// </summary>
 | |
|         public static Ptr<T> Null => new Ptr<T>() { _ptr = IntPtr.Zero };
 | |
| 
 | |
|         /// <summary>
 | |
|         /// True if the pointer is null, false otherwise.
 | |
|         /// </summary>
 | |
|         public bool IsNull => _ptr == IntPtr.Zero;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets a reference to the value.
 | |
|         /// </summary>
 | |
|         public ref T Value => ref Unsafe.AsRef<T>((void*)_ptr);
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Creates a new pointer to an unmanaged resource.
 | |
|         /// </summary>
 | |
|         /// <remarks>
 | |
|         /// For data on the heap, proper pinning is necessary during
 | |
|         /// use. Failure to do so will result in memory corruption and crashes.
 | |
|         /// </remarks>
 | |
|         /// <param name="value">Reference to the unmanaged resource</param>
 | |
|         public Ptr(ref T value)
 | |
|         {
 | |
|             _ptr = (IntPtr)Unsafe.AsPointer(ref value);
 | |
|         }
 | |
| 
 | |
|         public override bool Equals(object obj)
 | |
|         {
 | |
|             return obj is Ptr<T> other && Equals(other);
 | |
|         }
 | |
| 
 | |
|         public bool Equals([AllowNull] Ptr<T> other)
 | |
|         {
 | |
|             return _ptr == other._ptr;
 | |
|         }
 | |
| 
 | |
|         public override int GetHashCode()
 | |
|         {
 | |
|             return _ptr.GetHashCode();
 | |
|         }
 | |
| 
 | |
|         public static bool operator ==(Ptr<T> left, Ptr<T> right)
 | |
|         {
 | |
|             return left.Equals(right);
 | |
|         }
 | |
| 
 | |
|         public static bool operator !=(Ptr<T> left, Ptr<T> right)
 | |
|         {
 | |
|             return !(left == right);
 | |
|         }
 | |
|     }
 | |
| }
 |