parent
08332bdc04
commit
2dcc6333f8
14 changed files with 223 additions and 89 deletions
|
@ -897,19 +897,6 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|||
Info.SamplesInY == info.SamplesInY) ? result : TextureViewCompatibility.Incompatible;
|
||||
}
|
||||
|
||||
/// <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.
|
||||
|
|
|
@ -14,6 +14,11 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|||
/// </summary>
|
||||
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.
|
||||
|
@ -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;
|
||||
|
@ -62,6 +69,16 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|||
Flags = flags;
|
||||
}
|
||||
|
||||
/// <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>
|
||||
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue