mirror of
https://github.com/GreemDev/Ryujinx
synced 2024-11-22 17:56:59 +01:00
80b4972139
* Add Post Processing Effects * fix events and shader issues * fix gtk upscale slider value * fix bgra games * don't swap swizzle if already swapped * restore opengl texture state after effects run * addressed review * use single pipeline for smaa and fsr * call finish on all pipelines * addressed review * attempt fix file case * attempt fixing file case * fix filter level tick frequency * adjust filter slider margins * replace fxaa shaders with original shader * addressed review
48 lines
1.1 KiB
C#
48 lines
1.1 KiB
C#
using System;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Ryujinx.Graphics.Vulkan
|
|
{
|
|
unsafe class NativeArray<T> : IDisposable where T : unmanaged
|
|
{
|
|
public T* Pointer { get; private set; }
|
|
public int Length { get; }
|
|
|
|
public ref T this[int index]
|
|
{
|
|
get => ref Pointer[Checked(index)];
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
private int Checked(int index)
|
|
{
|
|
if ((uint)index >= (uint)Length)
|
|
{
|
|
throw new IndexOutOfRangeException();
|
|
}
|
|
|
|
return index;
|
|
}
|
|
|
|
public NativeArray(int length)
|
|
{
|
|
Pointer = (T*)Marshal.AllocHGlobal(checked(length * Unsafe.SizeOf<T>()));
|
|
Length = length;
|
|
}
|
|
|
|
public Span<T> AsSpan()
|
|
{
|
|
return new Span<T>(Pointer, Length);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (Pointer != null)
|
|
{
|
|
Marshal.FreeHGlobal((IntPtr)Pointer);
|
|
Pointer = null;
|
|
}
|
|
}
|
|
}
|
|
}
|