Implement DrawTexture functionality (#2747)
* Implement DrawTexture functionality * Non-NVIDIA support * Disable some features that should not affect draw texture (slow path) * Remove space from shader source * Match 2D engine names * Fix resolution scale and add missing XML docs * Disable transform feedback for draw texture fallback
This commit is contained in:
parent
bc00a251dd
commit
611bec6e44
14 changed files with 421 additions and 14 deletions
|
@ -143,6 +143,8 @@ namespace Ryujinx.Graphics.GAL.Multithreading
|
|||
DrawCommand.Run(ref GetCommand<DrawCommand>(memory), threaded, renderer);
|
||||
_lookup[(int)CommandType.DrawIndexed] = (Span<byte> memory, ThreadedRenderer threaded, IRenderer renderer) =>
|
||||
DrawIndexedCommand.Run(ref GetCommand<DrawIndexedCommand>(memory), threaded, renderer);
|
||||
_lookup[(int)CommandType.DrawTexture] = (Span<byte> memory, ThreadedRenderer threaded, IRenderer renderer) =>
|
||||
DrawTextureCommand.Run(ref GetCommand<DrawTextureCommand>(memory), threaded, renderer);
|
||||
_lookup[(int)CommandType.EndHostConditionalRendering] = (Span<byte> memory, ThreadedRenderer threaded, IRenderer renderer) =>
|
||||
EndHostConditionalRenderingCommand.Run(renderer);
|
||||
_lookup[(int)CommandType.EndTransformFeedback] = (Span<byte> memory, ThreadedRenderer threaded, IRenderer renderer) =>
|
||||
|
|
|
@ -53,6 +53,7 @@
|
|||
DispatchCompute,
|
||||
Draw,
|
||||
DrawIndexed,
|
||||
DrawTexture,
|
||||
EndHostConditionalRendering,
|
||||
EndTransformFeedback,
|
||||
MultiDrawIndirectCount,
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
using Ryujinx.Graphics.GAL.Multithreading.Model;
|
||||
using Ryujinx.Graphics.GAL.Multithreading.Resources;
|
||||
|
||||
namespace Ryujinx.Graphics.GAL.Multithreading.Commands
|
||||
{
|
||||
struct DrawTextureCommand : IGALCommand
|
||||
{
|
||||
public CommandType CommandType => CommandType.DrawTexture;
|
||||
private TableRef<ITexture> _texture;
|
||||
private TableRef<ISampler> _sampler;
|
||||
private Extents2DF _srcRegion;
|
||||
private Extents2DF _dstRegion;
|
||||
|
||||
public void Set(TableRef<ITexture> texture, TableRef<ISampler> sampler, Extents2DF srcRegion, Extents2DF dstRegion)
|
||||
{
|
||||
_texture = texture;
|
||||
_sampler = sampler;
|
||||
_srcRegion = srcRegion;
|
||||
_dstRegion = dstRegion;
|
||||
}
|
||||
|
||||
public static void Run(ref DrawTextureCommand command, ThreadedRenderer threaded, IRenderer renderer)
|
||||
{
|
||||
renderer.Pipeline.DrawTexture(
|
||||
command._texture.GetAs<ThreadedTexture>(threaded)?.Base,
|
||||
command._sampler.GetAs<ThreadedSampler>(threaded)?.Base,
|
||||
command._srcRegion,
|
||||
command._dstRegion);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -83,6 +83,12 @@ namespace Ryujinx.Graphics.GAL.Multithreading
|
|||
_renderer.QueueCommand();
|
||||
}
|
||||
|
||||
public void DrawTexture(ITexture texture, ISampler sampler, Extents2DF srcRegion, Extents2DF dstRegion)
|
||||
{
|
||||
_renderer.New<DrawTextureCommand>().Set(Ref(texture), Ref(sampler), srcRegion, dstRegion);
|
||||
_renderer.QueueCommand();
|
||||
}
|
||||
|
||||
public void EndHostConditionalRendering()
|
||||
{
|
||||
_renderer.New<EndHostConditionalRenderingCommand>();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue