Extract texture Target from Info for quick access (#1774)

This commit is contained in:
riperiperi 2020-12-03 19:34:27 +00:00 committed by GitHub
parent b479a43939
commit 24d316cc92
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 8 deletions

View file

@ -30,6 +30,11 @@ namespace Ryujinx.Graphics.Gpu.Image
/// </summary> /// </summary>
public Format Format => Info.FormatInfo.Format; public Format Format => Info.FormatInfo.Format;
/// <summary>
/// Texture target.
/// </summary>
public Target Target { get; private set; }
/// <summary> /// <summary>
/// Texture information. /// Texture information.
/// </summary> /// </summary>
@ -290,7 +295,7 @@ namespace Ryujinx.Graphics.Gpu.Image
width <<= _firstLevel; width <<= _firstLevel;
height <<= _firstLevel; height <<= _firstLevel;
if (Info.Target == Target.Texture3D) if (Target == Target.Texture3D)
{ {
depthOrLayers <<= _firstLevel; depthOrLayers <<= _firstLevel;
} }
@ -532,7 +537,7 @@ namespace Ryujinx.Graphics.Gpu.Image
/// </summary> /// </summary>
public void SynchronizeMemory() public void SynchronizeMemory()
{ {
if (Info.Target == Target.TextureBuffer) if (Target == Target.TextureBuffer)
{ {
return; return;
} }
@ -653,11 +658,11 @@ namespace Ryujinx.Graphics.Gpu.Image
data = decoded; data = decoded;
} }
else if (Info.Target == Target.Texture3D && Info.FormatInfo.Format.IsBc4()) else if (Target == Target.Texture3D && Info.FormatInfo.Format.IsBc4())
{ {
data = BCnDecoder.DecodeBC4(data, Info.Width, Info.Height, _depth, Info.Levels, _layers, Info.FormatInfo.Format == Format.Bc4Snorm); data = BCnDecoder.DecodeBC4(data, Info.Width, Info.Height, _depth, Info.Levels, _layers, Info.FormatInfo.Format == Format.Bc4Snorm);
} }
else if (Info.Target == Target.Texture3D && Info.FormatInfo.Format.IsBc5()) else if (Target == Target.Texture3D && Info.FormatInfo.Format.IsBc5())
{ {
data = BCnDecoder.DecodeBC5(data, Info.Width, Info.Height, _depth, Info.Levels, _layers, Info.FormatInfo.Format == Format.Bc5Snorm); data = BCnDecoder.DecodeBC5(data, Info.Width, Info.Height, _depth, Info.Levels, _layers, Info.FormatInfo.Format == Format.Bc5Snorm);
} }
@ -760,7 +765,7 @@ namespace Ryujinx.Graphics.Gpu.Image
} }
} }
if (Info.Target != Target.TextureBuffer) if (Target != Target.TextureBuffer)
{ {
if (Info.IsLinear) if (Info.IsLinear)
{ {
@ -903,7 +908,7 @@ namespace Ryujinx.Graphics.Gpu.Image
/// <returns>A view of this texture with the requested target, or null if the target is invalid for this texture</returns> /// <returns>A view of this texture with the requested target, or null if the target is invalid for this texture</returns>
public ITexture GetTargetTexture(Target target) public ITexture GetTargetTexture(Target target)
{ {
if (target == Info.Target) if (target == Target)
{ {
return HostTexture; return HostTexture;
} }
@ -1008,6 +1013,7 @@ namespace Ryujinx.Graphics.Gpu.Image
private void SetInfo(TextureInfo info) private void SetInfo(TextureInfo info)
{ {
Info = info; Info = info;
Target = info.Target;
_depth = info.GetDepth(); _depth = info.GetDepth();
_layers = info.GetLayers(); _layers = info.GetLayers();

View file

@ -298,7 +298,7 @@ namespace Ryujinx.Graphics.Gpu.Image
_context.Renderer.Pipeline.SetTexture(bindingInfo.Binding, hostTexture); _context.Renderer.Pipeline.SetTexture(bindingInfo.Binding, hostTexture);
} }
if (hostTexture != null && texture.Info.Target == Target.TextureBuffer) if (hostTexture != null && texture.Target == Target.TextureBuffer)
{ {
// Ensure that the buffer texture is using the correct buffer as storage. // Ensure that the buffer texture is using the correct buffer as storage.
// Buffers are frequently re-created to accomodate larger data, so we need to re-bind // Buffers are frequently re-created to accomodate larger data, so we need to re-bind
@ -349,7 +349,7 @@ namespace Ryujinx.Graphics.Gpu.Image
ITexture hostTexture = texture?.GetTargetTexture(bindingInfo.Target); ITexture hostTexture = texture?.GetTargetTexture(bindingInfo.Target);
if (hostTexture != null && texture.Info.Target == Target.TextureBuffer) if (hostTexture != null && texture.Target == Target.TextureBuffer)
{ {
// Ensure that the buffer texture is using the correct buffer as storage. // Ensure that the buffer texture is using the correct buffer as storage.
// Buffers are frequently re-created to accomodate larger data, so we need to re-bind // Buffers are frequently re-created to accomodate larger data, so we need to re-bind