From 54ebe8c02ac4b4943b6a7028467167c471121334 Mon Sep 17 00:00:00 2001 From: Soreepeong Date: Sat, 2 Mar 2024 02:03:26 +0900 Subject: [PATCH] fixes --- .../Internal/TextureManager.FormatConvert.cs | 21 ++++++++++++++++--- Dalamud/Interface/Internal/TextureManager.cs | 3 ++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Dalamud/Interface/Internal/TextureManager.FormatConvert.cs b/Dalamud/Interface/Internal/TextureManager.FormatConvert.cs index a11cf6c53..f35688998 100644 --- a/Dalamud/Interface/Internal/TextureManager.FormatConvert.cs +++ b/Dalamud/Interface/Internal/TextureManager.FormatConvert.cs @@ -35,10 +35,24 @@ internal sealed partial class TextureManager scene = this.interfaceManager.Scene ?? throw new InvalidOperationException(); } + switch (dxgiFormat) + { + // https://learn.microsoft.com/en-us/windows/win32/api/dxgiformat/ne-dxgiformat-dxgi_format + // Video formats requiring use of another DXGI_FORMAT when using with CreateRenderTarget + case DXGI_FORMAT.DXGI_FORMAT_AYUV: + case DXGI_FORMAT.DXGI_FORMAT_NV12: + case DXGI_FORMAT.DXGI_FORMAT_P010: + case DXGI_FORMAT.DXGI_FORMAT_P016: + case DXGI_FORMAT.DXGI_FORMAT_NV11: + return false; + } + var format = (Format)dxgiFormat; var support = scene.Device.CheckFormatSupport(format); - return (support & FormatSupport.RenderTarget) != 0 - && (support & FormatSupport.Texture2D) != 0; + const FormatSupport required = + FormatSupport.RenderTarget | + FormatSupport.Texture2D; + return (support & required) == required; } /// @@ -72,7 +86,8 @@ internal sealed partial class TextureManager ct.ThrowIfCancellationRequested(); unsafe { - using var tex = new ComPtr( + using var tex = default(ComPtr); + tex.Attach( this.NoThrottleCreateFromExistingTextureCore( wrapCopy, uv0, diff --git a/Dalamud/Interface/Internal/TextureManager.cs b/Dalamud/Interface/Internal/TextureManager.cs index 52253ff3c..1041fc00c 100644 --- a/Dalamud/Interface/Internal/TextureManager.cs +++ b/Dalamud/Interface/Internal/TextureManager.cs @@ -321,7 +321,8 @@ internal sealed partial class TextureManager : IServiceType, IDisposable, ITextu var format = (Format)dxgiFormat; var support = scene.Device.CheckFormatSupport(format); - return (support & FormatSupport.Texture2D) != 0; + const FormatSupport required = FormatSupport.Texture2D; + return (support & required) == required; } ///