do memory barriers

This commit is contained in:
Samuliak 2024-05-24 18:37:31 +02:00 committed by Isaac Marovitz
parent 17334b2131
commit 1a0b928c35
2 changed files with 19 additions and 1 deletions

View file

@ -73,6 +73,9 @@ namespace Ryujinx.Graphics.Metal
_pipeline.SaveState(); _pipeline.SaveState();
_pipeline.SetProgram(_programColorBlit); _pipeline.SetProgram(_programColorBlit);
// Viewport and scissor needs to be set before render pass begin so as not to bind the old ones
//_pipeline.SetViewports([]);
//_pipeline.SetScissors([]);
_pipeline.SetRenderTargets([destination], null); _pipeline.SetRenderTargets([destination], null);
_pipeline.SetTextureAndSampler(ShaderStage.Fragment, 0, source, new Sampler(sampler)); _pipeline.SetTextureAndSampler(ShaderStage.Fragment, 0, source, new Sampler(sampler));
_pipeline.SetPrimitiveTopology(PrimitiveTopology.Triangles); _pipeline.SetPrimitiveTopology(PrimitiveTopology.Triangles);

View file

@ -191,7 +191,22 @@ namespace Ryujinx.Graphics.Metal
public void Barrier() public void Barrier()
{ {
Logger.Warning?.Print(LogClass.Gpu, "Not Implemented!");
if (_currentEncoderType == EncoderType.Render)
{
var renderCommandEncoder = GetOrCreateRenderEncoder();
var scope = MTLBarrierScope.Buffers | MTLBarrierScope.Textures | MTLBarrierScope.RenderTargets;
MTLRenderStages stages = MTLRenderStages.RenderStageVertex | MTLRenderStages.RenderStageFragment;
renderCommandEncoder.MemoryBarrier(scope, stages, stages);
} else if (_currentEncoderType == EncoderType.Compute)
{
var computeCommandEncoder = GetOrCreateComputeEncoder();
// TODO: Should there be a barrier on render targets?
var scope = MTLBarrierScope.Buffers | MTLBarrierScope.Textures;
computeCommandEncoder.MemoryBarrier(scope);
}
} }
public void ClearBuffer(BufferHandle destination, int offset, int size, uint value) public void ClearBuffer(BufferHandle destination, int offset, int size, uint value)