From 611bec6e44effa90554c95ed1fe4dd4812893947 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Wed, 10 Nov 2021 15:37:49 -0300 Subject: 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 --- Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs | 16 ++++++++++++++++ Ryujinx.Graphics.Gpu/Image/TextureManager.cs | 10 ++++++++++ 2 files changed, 26 insertions(+) (limited to 'Ryujinx.Graphics.Gpu/Image') diff --git a/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs b/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs index 5862ea71..621dc2e7 100644 --- a/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs +++ b/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs @@ -201,6 +201,22 @@ namespace Ryujinx.Graphics.Gpu.Image } } + /// + /// Gets a texture and a sampler from their respective pools from a texture ID and a sampler ID. + /// + /// ID of the texture + /// ID of the sampler + public (Texture, Sampler) GetTextureAndSampler(int textureId, int samplerId) + { + ulong texturePoolAddress = _texturePoolAddress; + + TexturePool texturePool = texturePoolAddress != 0 + ? _texturePoolCache.FindOrCreate(_channel, texturePoolAddress, _texturePoolMaximumId) + : null; + + return (texturePool.Get(textureId), _samplerPool.Get(samplerId)); + } + /// /// Updates the texture scale for a given texture or image. /// diff --git a/Ryujinx.Graphics.Gpu/Image/TextureManager.cs b/Ryujinx.Graphics.Gpu/Image/TextureManager.cs index a6373872..70cb57d0 100644 --- a/Ryujinx.Graphics.Gpu/Image/TextureManager.cs +++ b/Ryujinx.Graphics.Gpu/Image/TextureManager.cs @@ -308,6 +308,16 @@ namespace Ryujinx.Graphics.Gpu.Image RenderTargetScale = targetScale; } + /// + /// Gets a texture and a sampler from their respective pools from a texture ID and a sampler ID. + /// + /// ID of the texture + /// ID of the sampler + public (Texture, Sampler) GetGraphicsTextureAndSampler(int textureId, int samplerId) + { + return _gpBindingsManager.GetTextureAndSampler(textureId, samplerId); + } + /// /// Commits bindings on the compute pipeline. /// -- cgit v1.2.3