Metal: Compute Shaders (#19)
* check for too bix texture bindings * implement lod query * print shader stage name * always have fragment input * resolve merge conflicts * fix: lod query * fix: casting texture coords * support non-array memories * use structure types for buffers * implement compute pipeline cache * compute dispatch * improve error message * rebind compute state * bind compute textures * pass local size as an argument to dispatch * implement texture buffers * hack: change vertex index to vertex id * pass support buffer as an argument to every function * return at the end of function * fix: certain missing compute bindings * implement texture base * improve texture binding system * remove useless exception * move texture handle to texture base * fix: segfault when using disposed textures --------- Co-authored-by: Samuliak <samuliak77@gmail.com> Co-authored-by: SamoZ256 <96914946+SamoZ256@users.noreply.github.com>
This commit is contained in:
parent
131ab75d55
commit
b064d76a4f
26 changed files with 718 additions and 224 deletions
59
src/Ryujinx.Graphics.Metal/TextureBase.cs
Normal file
59
src/Ryujinx.Graphics.Metal/TextureBase.cs
Normal file
|
@ -0,0 +1,59 @@
|
|||
using Ryujinx.Common.Logging;
|
||||
using Ryujinx.Graphics.GAL;
|
||||
using SharpMetal.Foundation;
|
||||
using SharpMetal.Metal;
|
||||
using System;
|
||||
using System.Buffers;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.Versioning;
|
||||
|
||||
namespace Ryujinx.Graphics.Metal
|
||||
{
|
||||
[SupportedOSPlatform("macos")]
|
||||
abstract class TextureBase : IDisposable
|
||||
{
|
||||
private bool _disposed;
|
||||
|
||||
protected readonly TextureCreateInfo _info;
|
||||
protected readonly Pipeline _pipeline;
|
||||
protected readonly MTLDevice _device;
|
||||
|
||||
protected MTLTexture _mtlTexture;
|
||||
|
||||
public TextureCreateInfo Info => _info;
|
||||
public int Width => Info.Width;
|
||||
public int Height => Info.Height;
|
||||
public int Depth => Info.Depth;
|
||||
|
||||
public TextureBase(MTLDevice device, Pipeline pipeline, TextureCreateInfo info)
|
||||
{
|
||||
_device = device;
|
||||
_pipeline = pipeline;
|
||||
_info = info;
|
||||
}
|
||||
|
||||
public MTLTexture GetHandle()
|
||||
{
|
||||
if (_disposed)
|
||||
{
|
||||
return new MTLTexture(IntPtr.Zero);
|
||||
}
|
||||
|
||||
return _mtlTexture;
|
||||
}
|
||||
|
||||
public void Release()
|
||||
{
|
||||
Dispose();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_mtlTexture != IntPtr.Zero)
|
||||
{
|
||||
_mtlTexture.Dispose();
|
||||
}
|
||||
_disposed = true;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue