aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Image
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2020-10-20 19:03:20 -0300
committerGitHub <noreply@github.com>2020-10-20 19:03:20 -0300
commit2dcc6333f8cbb959293832f52857bdaeab1918bf (patch)
tree1aefd3ff6abb23d1a4efc78ee14274283b9041a4 /Ryujinx.Graphics.Gpu/Image
parent08332bdc041a594d389b0b732b3c4b5f8573e3fb (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.cs13
-rw-r--r--Ryujinx.Graphics.Gpu/Image/TextureBindingInfo.cs20
-rw-r--r--Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs9
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);
}
}
}