diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2020-10-20 19:03:20 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-20 19:03:20 -0300 |
| commit | 2dcc6333f8cbb959293832f52857bdaeab1918bf (patch) | |
| tree | 1aefd3ff6abb23d1a4efc78ee14274283b9041a4 /Ryujinx.Graphics.Gpu/Image | |
| parent | 08332bdc041a594d389b0b732b3c4b5f8573e3fb (diff) | |
Fix image binding format (#1625)
* Fix image binding format
* XML doc
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Image')
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Image/Texture.cs | 13 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Image/TextureBindingInfo.cs | 20 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs | 9 |
3 files changed, 27 insertions, 15 deletions
diff --git a/Ryujinx.Graphics.Gpu/Image/Texture.cs b/Ryujinx.Graphics.Gpu/Image/Texture.cs index e3c3a30a..6778567c 100644 --- a/Ryujinx.Graphics.Gpu/Image/Texture.cs +++ b/Ryujinx.Graphics.Gpu/Image/Texture.cs @@ -898,19 +898,6 @@ namespace Ryujinx.Graphics.Gpu.Image } /// <summary> - /// Checks if the view format is compatible with this texture format. - /// In general, the formats are considered compatible if the bytes per pixel values are equal, - /// but there are more complex rules for some formats, like compressed or depth-stencil formats. - /// This follows the host API copy compatibility rules. - /// </summary> - /// <param name="info">Texture information of the texture view</param> - /// <returns>True if the formats are compatible, false otherwise</returns> - private bool ViewFormatCompatible(TextureInfo info) - { - return TextureCompatibility.FormatCompatible(Info.FormatInfo, info.FormatInfo); - } - - /// <summary> /// Gets a texture of the specified target type from this texture. /// This can be used to get an array texture from a non-array texture and vice-versa. /// If this texture and the requested targets are equal, then this texture Host texture is returned directly. diff --git a/Ryujinx.Graphics.Gpu/Image/TextureBindingInfo.cs b/Ryujinx.Graphics.Gpu/Image/TextureBindingInfo.cs index 175f8863..422b66e2 100644 --- a/Ryujinx.Graphics.Gpu/Image/TextureBindingInfo.cs +++ b/Ryujinx.Graphics.Gpu/Image/TextureBindingInfo.cs @@ -15,6 +15,11 @@ namespace Ryujinx.Graphics.Gpu.Image public Target Target { get; } /// <summary> + /// For images, indicates the format specified on the shader. + /// </summary> + public Format Format { get; } + + /// <summary> /// Shader texture handle. /// This is an index into the texture constant buffer. /// </summary> @@ -47,11 +52,13 @@ namespace Ryujinx.Graphics.Gpu.Image /// Constructs the texture binding information structure. /// </summary> /// <param name="target">The shader sampler target type</param> + /// <param name="format">Format of the image as declared on the shader</param> /// <param name="handle">The shader texture handle (read index into the texture constant buffer)</param> /// <param name="flags">The texture's usage flags, indicating how it is used in the shader</param> - public TextureBindingInfo(Target target, int handle, TextureUsageFlags flags) + public TextureBindingInfo(Target target, Format format, int handle, TextureUsageFlags flags) { Target = target; + Format = format; Handle = handle; IsBindless = false; @@ -63,6 +70,16 @@ namespace Ryujinx.Graphics.Gpu.Image } /// <summary> + /// Constructs the texture binding information structure. + /// </summary> + /// <param name="target">The shader sampler target type</param> + /// <param name="handle">The shader texture handle (read index into the texture constant buffer)</param> + /// <param name="flags">The texture's usage flags, indicating how it is used in the shader</param> + public TextureBindingInfo(Target target, int handle, TextureUsageFlags flags) : this(target, (Format)0, handle, flags) + { + } + + /// <summary> /// Constructs the bindless texture binding information structure. /// </summary> /// <param name="target">The shader sampler target type</param> @@ -72,6 +89,7 @@ namespace Ryujinx.Graphics.Gpu.Image public TextureBindingInfo(Target target, int cbufSlot, int cbufOffset, TextureUsageFlags flags) { Target = target; + Format = 0; Handle = 0; IsBindless = true; diff --git a/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs b/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs index be78c827..e7800314 100644 --- a/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs +++ b/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs @@ -302,7 +302,14 @@ namespace Ryujinx.Graphics.Gpu.Image { _imageState[stageIndex][index].Texture = hostTexture; - _context.Renderer.Pipeline.SetImage(index, stage, hostTexture); + Format format = binding.Format; + + if (format == 0) + { + format = texture.Format; + } + + _context.Renderer.Pipeline.SetImage(index, stage, hostTexture, format); } } } |
