 86fd0643c2
			
		
	
	
		86fd0643c2
		
			
		
	
	
	
	
		
			
			* Implement support for page sizes > 4KB * Check and work around more alignment issues * Was not meant to change this * Use MemoryBlock.GetPageSize() value for signal handler code * Do not take the path for private allocations if host supports 4KB pages * Add Flags attribute on MemoryMapFlags * Fix dirty region size with 16kb pages Would accidentally report a size that was too high (generally 16k instead of 4k, uploading 4x as much data) Co-authored-by: riperiperi <rhy3756547@hotmail.com>
		
			
				
	
	
		
			41 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Ryujinx.Memory;
 | |
| using System;
 | |
| 
 | |
| namespace Ryujinx.Cpu
 | |
| {
 | |
|     struct PrivateMemoryAllocation : IDisposable
 | |
|     {
 | |
|         private readonly PrivateMemoryAllocator _owner;
 | |
|         private readonly PrivateMemoryAllocator.Block _block;
 | |
| 
 | |
|         public bool IsValid => _owner != null;
 | |
|         public MemoryBlock Memory => _block?.Memory;
 | |
|         public ulong Offset { get; }
 | |
|         public ulong Size { get; }
 | |
| 
 | |
|         public PrivateMemoryAllocation(
 | |
|             PrivateMemoryAllocator owner,
 | |
|             PrivateMemoryAllocator.Block block,
 | |
|             ulong offset,
 | |
|             ulong size)
 | |
|         {
 | |
|             _owner = owner;
 | |
|             _block = block;
 | |
|             Offset = offset;
 | |
|             Size = size;
 | |
|         }
 | |
| 
 | |
|         public (PrivateMemoryAllocation, PrivateMemoryAllocation) Split(ulong splitOffset)
 | |
|         {
 | |
|             PrivateMemoryAllocation left = new PrivateMemoryAllocation(_owner, _block, Offset, splitOffset);
 | |
|             PrivateMemoryAllocation right = new PrivateMemoryAllocation(_owner, _block, Offset + splitOffset, Size - splitOffset);
 | |
| 
 | |
|             return (left, right);
 | |
|         }
 | |
| 
 | |
|         public void Dispose()
 | |
|         {
 | |
|             _owner.Free(_block, Offset, Size);
 | |
|         }
 | |
|     }
 | |
| }
 |