Bind Textures & Samplers
This commit is contained in:
parent
80340c98d3
commit
ffb7423260
1 changed files with 33 additions and 1 deletions
|
@ -604,7 +604,39 @@ namespace Ryujinx.Graphics.Metal
|
|||
|
||||
public void SetTextureAndSampler(ShaderStage stage, int binding, ITexture texture, ISampler sampler)
|
||||
{
|
||||
Logger.Warning?.Print(LogClass.Gpu, "Not Implemented!");
|
||||
if (texture is Texture tex)
|
||||
{
|
||||
if (sampler is Sampler samp)
|
||||
{
|
||||
MTLRenderCommandEncoder renderCommandEncoder;
|
||||
MTLComputeCommandEncoder computeCommandEncoder;
|
||||
|
||||
var mtlTexture = tex.MTLTexture;
|
||||
var mtlSampler = samp.GetSampler();
|
||||
var index = (ulong)binding;
|
||||
|
||||
switch (stage)
|
||||
{
|
||||
case ShaderStage.Fragment:
|
||||
renderCommandEncoder = GetOrCreateRenderEncoder();
|
||||
renderCommandEncoder.SetFragmentTexture(mtlTexture, index);
|
||||
renderCommandEncoder.SetFragmentSamplerState(mtlSampler, index);
|
||||
break;
|
||||
case ShaderStage.Vertex:
|
||||
renderCommandEncoder = GetOrCreateRenderEncoder();
|
||||
renderCommandEncoder.SetVertexTexture(mtlTexture, index);
|
||||
renderCommandEncoder.SetVertexSamplerState(mtlSampler, index);
|
||||
break;
|
||||
case ShaderStage.Compute:
|
||||
computeCommandEncoder = GetOrCreateComputeEncoder();
|
||||
computeCommandEncoder.SetTexture(mtlTexture, index);
|
||||
computeCommandEncoder.SetSamplerState(mtlSampler, index);
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException(nameof(stage), stage, "Unsupported shader stage!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SetUniformBuffers(ReadOnlySpan<BufferAssignment> buffers)
|
||||
|
|
Loading…
Reference in a new issue