mirror of
https://github.com/GreemDev/Ryujinx
synced 2024-12-27 14:26:44 +01:00
cda659955c
* Initial test for texture sync * WIP new texture flushing setup * Improve rules for incompatible overlaps Fixes a lot of issues with Unreal Engine games. Still a few minor issues (some caused by dma fast path?) Needs docs and cleanup. * Cleanup, improvements Improve rules for fast DMA * Small tweak to group together flushes of overlapping handles. * Fixes, flush overlapping texture data for ASTC and BC4/5 compressed textures. Fixes the new Life is Strange game. * Flush overlaps before init data, fix 3d texture size/overlap stuff * Fix 3D Textures, faster single layer flush Note: nosy people can no longer merge this with Vulkan. (unless they are nosy enough to implement the new backend methods) * Remove unused method * Minor cleanup * More cleanup * Use the More Fun and Hopefully No Driver Bugs method for getting compressed tex too This one's for metro * Address feedback, ASTC+ETC to FormatClass * Change offset to use Span slice rather than IntPtr Add * Fix this too
30 lines
1.1 KiB
C#
30 lines
1.1 KiB
C#
using Ryujinx.Graphics.GAL.Multithreading.Model;
|
|
using Ryujinx.Graphics.GAL.Multithreading.Resources;
|
|
using System;
|
|
|
|
namespace Ryujinx.Graphics.GAL.Multithreading.Commands.Texture
|
|
{
|
|
struct TextureGetDataSliceCommand : IGALCommand
|
|
{
|
|
public CommandType CommandType => CommandType.TextureGetDataSlice;
|
|
private TableRef<ThreadedTexture> _texture;
|
|
private TableRef<ResultBox<PinnedSpan<byte>>> _result;
|
|
private int _layer;
|
|
private int _level;
|
|
|
|
public void Set(TableRef<ThreadedTexture> texture, TableRef<ResultBox<PinnedSpan<byte>>> result, int layer, int level)
|
|
{
|
|
_texture = texture;
|
|
_result = result;
|
|
_layer = layer;
|
|
_level = level;
|
|
}
|
|
|
|
public static void Run(ref TextureGetDataSliceCommand command, ThreadedRenderer threaded, IRenderer renderer)
|
|
{
|
|
ReadOnlySpan<byte> result = command._texture.Get(threaded).Base.GetData(command._layer, command._level);
|
|
|
|
command._result.Get(threaded).Result = new PinnedSpan<byte>(result);
|
|
}
|
|
}
|
|
}
|