diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2021-11-10 15:37:49 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-10 15:37:49 -0300 |
| commit | 611bec6e44effa90554c95ed1fe4dd4812893947 (patch) | |
| tree | 679e67c1253f88c3ceef9a98a6109ebede39e352 /Ryujinx.Graphics.Gpu/Image | |
| parent | bc00a251dd14f7cce4023a42bb76d23165755006 (diff) | |
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
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Image')
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs | 16 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Image/TextureManager.cs | 10 |
2 files changed, 26 insertions, 0 deletions
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 @@ -202,6 +202,22 @@ namespace Ryujinx.Graphics.Gpu.Image } /// <summary> + /// Gets a texture and a sampler from their respective pools from a texture ID and a sampler ID. + /// </summary> + /// <param name="textureId">ID of the texture</param> + /// <param name="samplerId">ID of the sampler</param> + 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)); + } + + /// <summary> /// Updates the texture scale for a given texture or image. /// </summary> /// <param name="texture">Start GPU virtual address of the pool</param> 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 @@ -309,6 +309,16 @@ namespace Ryujinx.Graphics.Gpu.Image } /// <summary> + /// Gets a texture and a sampler from their respective pools from a texture ID and a sampler ID. + /// </summary> + /// <param name="textureId">ID of the texture</param> + /// <param name="samplerId">ID of the sampler</param> + public (Texture, Sampler) GetGraphicsTextureAndSampler(int textureId, int samplerId) + { + return _gpBindingsManager.GetTextureAndSampler(textureId, samplerId); + } + + /// <summary> /// Commits bindings on the compute pipeline. /// </summary> public void CommitComputeBindings() |
