Render Targets
This commit is contained in:
parent
64c95bd8d8
commit
b9c4a23f22
1 changed files with 28 additions and 2 deletions
|
@ -24,10 +24,11 @@ namespace Ryujinx.Graphics.Metal
|
||||||
|
|
||||||
private MTLCommandBuffer _commandBuffer;
|
private MTLCommandBuffer _commandBuffer;
|
||||||
private MTLCommandEncoder _currentEncoder;
|
private MTLCommandEncoder _currentEncoder;
|
||||||
|
private MTLTexture[] _renderTargets = Array.Empty<MTLTexture>();
|
||||||
|
|
||||||
private RenderEncoderState _renderEncoderState;
|
private RenderEncoderState _renderEncoderState;
|
||||||
private readonly MTLVertexDescriptor _vertexDescriptor = new();
|
private readonly MTLVertexDescriptor _vertexDescriptor = new();
|
||||||
private MTLBuffer[] _vertexBuffers;
|
private MTLBuffer[] _vertexBuffers = Array.Empty<MTLBuffer>();
|
||||||
|
|
||||||
private MTLBuffer _indexBuffer;
|
private MTLBuffer _indexBuffer;
|
||||||
private MTLIndexType _indexType;
|
private MTLIndexType _indexType;
|
||||||
|
@ -118,6 +119,15 @@ namespace Ryujinx.Graphics.Metal
|
||||||
EndCurrentPass();
|
EndCurrentPass();
|
||||||
|
|
||||||
var descriptor = new MTLRenderPassDescriptor();
|
var descriptor = new MTLRenderPassDescriptor();
|
||||||
|
for (int i = 0; i < _renderTargets.Length; i++)
|
||||||
|
{
|
||||||
|
if (_renderTargets[i] != null)
|
||||||
|
{
|
||||||
|
var attachment = descriptor.ColorAttachments.Object((ulong)i);
|
||||||
|
attachment.Texture = _renderTargets[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var renderCommandEncoder = _commandBuffer.RenderCommandEncoder(descriptor);
|
var renderCommandEncoder = _commandBuffer.RenderCommandEncoder(descriptor);
|
||||||
_renderEncoderState.SetEncoderState(renderCommandEncoder, _vertexDescriptor);
|
_renderEncoderState.SetEncoderState(renderCommandEncoder, _vertexDescriptor);
|
||||||
|
|
||||||
|
@ -457,7 +467,23 @@ namespace Ryujinx.Graphics.Metal
|
||||||
|
|
||||||
public void SetRenderTargets(ITexture[] colors, ITexture depthStencil)
|
public void SetRenderTargets(ITexture[] colors, ITexture depthStencil)
|
||||||
{
|
{
|
||||||
Logger.Warning?.Print(LogClass.Gpu, "Not Implemented!");
|
_renderTargets = new MTLTexture[colors.Length];
|
||||||
|
|
||||||
|
for (int i = 0; i < colors.Length; i++)
|
||||||
|
{
|
||||||
|
if (colors[i] is not Texture tex)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tex.MTLTexture != null)
|
||||||
|
{
|
||||||
|
_renderTargets[i] = tex.MTLTexture;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recreate Render Command Encoder
|
||||||
|
BeginRenderPass();
|
||||||
}
|
}
|
||||||
|
|
||||||
public unsafe void SetScissors(ReadOnlySpan<Rectangle<int>> regions)
|
public unsafe void SetScissors(ReadOnlySpan<Rectangle<int>> regions)
|
||||||
|
|
Loading…
Reference in a new issue