From e415699bb353d0ff3995d617a7f9cb9f234f5ae0 Mon Sep 17 00:00:00 2001 From: srkizer Date: Fri, 30 May 2025 00:06:48 +0900 Subject: [PATCH] DrawListTextureWrap: use two textures (#2285) Making premultiplied pixel data into straight alpha in-place using UAV seems to be not working on older graphics cards. Now every instance of DrawListTextureWrap keeps two GPU textures, where one keeps a premultiplied data which will be written to using ImGui draw data and read from to calculate straight alpha pixel data. --- .../Internal/DrawListTextureWrap.cs | 44 +++++++++++++----- .../Renderer.DrawToPremul.hlsl | 7 ++- .../Renderer.DrawToPremul.ps.bin | Bin 16620 -> 4759 bytes .../Renderer.DrawToPremul.vs.bin | Bin 16972 -> 7328 bytes .../Renderer.MakeStraight.hlsl | 13 ++---- .../Renderer.MakeStraight.ps.bin | Bin 14596 -> 5372 bytes .../Renderer.MakeStraight.vs.bin | Bin 14360 -> 3094 bytes .../Internal/DrawListTextureWrap/Renderer.cs | 13 +++--- 8 files changed, 47 insertions(+), 30 deletions(-) diff --git a/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap.cs b/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap.cs index 4e82479b0..4901ca2e3 100644 --- a/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap.cs +++ b/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap.cs @@ -26,7 +26,10 @@ internal sealed unsafe partial class DrawListTextureWrap : IDrawListTextureWrap, private ComPtr tex; private ComPtr srv; private ComPtr rtv; - private ComPtr uav; + + private ComPtr texPremultiplied; + private ComPtr srvPremultiplied; + private ComPtr rtvPremultiplied; private int width; private int height; @@ -138,7 +141,9 @@ internal sealed unsafe partial class DrawListTextureWrap : IDrawListTextureWrap, this.srv.Reset(); this.tex.Reset(); this.rtv.Reset(); - this.uav.Reset(); + this.srvPremultiplied.Reset(); + this.texPremultiplied.Reset(); + this.rtvPremultiplied.Reset(); this.device.Reset(); this.deviceContext.Reset(); @@ -180,7 +185,7 @@ internal sealed unsafe partial class DrawListTextureWrap : IDrawListTextureWrap, // Clear the texture first, as the texture exists. var clearColor = this.ClearColor; - this.deviceContext.Get()->ClearRenderTargetView(this.rtv.Get(), (float*)&clearColor); + this.deviceContext.Get()->ClearRenderTargetView(this.rtvPremultiplied.Get(), (float*)&clearColor); // If there is nothing to draw, then stop. if (!drawData.Valid @@ -196,8 +201,8 @@ internal sealed unsafe partial class DrawListTextureWrap : IDrawListTextureWrap, using (new DeviceContextStateBackup(this.device.Get()->GetFeatureLevel(), this.deviceContext)) { - Service.Get().RenderDrawData(this.rtv.Get(), drawData); - Service.Get().MakeStraight(this.uav.Get()); + Service.Get().RenderDrawData(this.rtvPremultiplied.Get(), drawData); + Service.Get().MakeStraight(this.srvPremultiplied.Get(), this.rtv.Get()); } } @@ -217,7 +222,9 @@ internal sealed unsafe partial class DrawListTextureWrap : IDrawListTextureWrap, this.tex.Reset(); this.srv.Reset(); this.rtv.Reset(); - this.uav.Reset(); + this.texPremultiplied.Reset(); + this.srvPremultiplied.Reset(); + this.rtvPremultiplied.Reset(); this.width = newWidth; this.Height = newHeight; this.srv = new((ID3D11ShaderResourceView*)this.emptyTexture.ImGuiHandle); @@ -231,7 +238,9 @@ internal sealed unsafe partial class DrawListTextureWrap : IDrawListTextureWrap, using var tmptex = default(ComPtr); using var tmpsrv = default(ComPtr); using var tmprtv = default(ComPtr); - using var tmpuav = default(ComPtr); + using var tmptexPremultiplied = default(ComPtr); + using var tmpsrvPremultiplied = default(ComPtr); + using var tmprtvPremultiplied = default(ComPtr); var tmpTexDesc = new D3D11_TEXTURE2D_DESC { @@ -243,8 +252,7 @@ internal sealed unsafe partial class DrawListTextureWrap : IDrawListTextureWrap, SampleDesc = new(1, 0), Usage = D3D11_USAGE.D3D11_USAGE_DEFAULT, BindFlags = (uint)(D3D11_BIND_FLAG.D3D11_BIND_SHADER_RESOURCE | - D3D11_BIND_FLAG.D3D11_BIND_RENDER_TARGET | - D3D11_BIND_FLAG.D3D11_BIND_UNORDERED_ACCESS), + D3D11_BIND_FLAG.D3D11_BIND_RENDER_TARGET), CPUAccessFlags = 0u, MiscFlags = 0u, }; @@ -263,15 +271,27 @@ internal sealed unsafe partial class DrawListTextureWrap : IDrawListTextureWrap, if (hr.FAILED) return hr; - var uavDesc = new D3D11_UNORDERED_ACCESS_VIEW_DESC(tmptex, D3D11_UAV_DIMENSION.D3D11_UAV_DIMENSION_TEXTURE2D); - hr = this.device.Get()->CreateUnorderedAccessView(tmpres, &uavDesc, tmpuav.GetAddressOf()); + hr = this.device.Get()->CreateTexture2D(&tmpTexDesc, null, tmptexPremultiplied.GetAddressOf()); + if (hr.FAILED) + return hr; + + tmpres = (ID3D11Resource*)tmptexPremultiplied.Get(); + srvDesc = new(tmptexPremultiplied, D3D_SRV_DIMENSION.D3D11_SRV_DIMENSION_TEXTURE2D); + hr = this.device.Get()->CreateShaderResourceView(tmpres, &srvDesc, tmpsrvPremultiplied.GetAddressOf()); + if (hr.FAILED) + return hr; + + rtvDesc = new(tmptexPremultiplied, D3D11_RTV_DIMENSION.D3D11_RTV_DIMENSION_TEXTURE2D); + hr = this.device.Get()->CreateRenderTargetView(tmpres, &rtvDesc, tmprtvPremultiplied.GetAddressOf()); if (hr.FAILED) return hr; tmptex.Swap(ref this.tex); tmpsrv.Swap(ref this.srv); tmprtv.Swap(ref this.rtv); - tmpuav.Swap(ref this.uav); + tmptexPremultiplied.Swap(ref this.texPremultiplied); + tmpsrvPremultiplied.Swap(ref this.srvPremultiplied); + tmprtvPremultiplied.Swap(ref this.rtvPremultiplied); this.width = newWidth; this.height = newHeight; this.format = newFormat; diff --git a/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.DrawToPremul.hlsl b/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.DrawToPremul.hlsl index 171d3e73b..b1cdf2fd0 100644 --- a/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.DrawToPremul.hlsl +++ b/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.DrawToPremul.hlsl @@ -1,4 +1,4 @@ -#include "DrawListTexture.Renderer.Common.hlsl" +#include "Renderer.Common.hlsl" struct ImDrawVert { float2 position : POSITION; @@ -18,7 +18,6 @@ struct PsData { Texture2D s_texture : register(t0); SamplerState s_sampler : register(s0); -RWTexture2D s_output : register(u1); VsData vs_main(const ImDrawVert idv) { VsData result; @@ -34,7 +33,7 @@ float4 ps_main(const VsData vd) : SV_TARGET { /* -fxc /Zi /T vs_5_0 /E vs_main /Fo DrawListTexture.Renderer.DrawToPremul.vs.bin DrawListTexture.Renderer.DrawToPremul.hlsl -fxc /Zi /T ps_5_0 /E ps_main /Fo DrawListTexture.Renderer.DrawToPremul.ps.bin DrawListTexture.Renderer.DrawToPremul.hlsl +fxc /Zi /T vs_5_0 /E vs_main /Fo Renderer.DrawToPremul.vs.bin Renderer.DrawToPremul.hlsl +fxc /Zi /T ps_5_0 /E ps_main /Fo Renderer.DrawToPremul.ps.bin Renderer.DrawToPremul.hlsl */ diff --git a/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.DrawToPremul.ps.bin b/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.DrawToPremul.ps.bin index e3c68edf33f9766c259aa99b4ca284228754bec2..80c297ce6f1d8c1fbe3b09e71ddb27012a59a973 100644 GIT binary patch literal 4759 zcmcgwOK%%h6uzZT3~p0i>Y^%Fr3lY8!W-sj$#WKvqb zHuL!X@BjMY!RcS#T6pX(PdCd4lu}>6q|_0tm%xVrY=VCT*Pm1B4{)_qo_zwH5Fqs~ zH;11+I{>>cAy!KlE)Y8f*5DlY9QZ{r>0|K0P#XLJcSZgT%(#cahrrK3SVCPEtH0t~ z?XF{ckOF%%=y|rf(Q10G@2&?rR~^^a7itT-cF$U~Jw4;LyDb>&%lYEl`O6oJ`8Ny2 zqT1fxp0CZ_bP$iV90Mt&=B!Z55X1?D{N>y!FkaGfdjKQ25ER@WN81<{wxpEza)~=VAzk?C$<19ZorViX;%DZFO zDYbkGW9mloty@a1j;Vviv9T}*DkxXtSR-lKQw2INJi4 z^F0UV9pk%=E14wqaW7{f?<%7kI1BORyNI-#jnuK54eu9eHyi3m3A@lI`9t(cY*^k; z8_6v*kh2h+d%QPd8dcjUJa&YzpEi5RyPx&!C70AZ>MVHQ@rn!Q$asg11MfIral}ac z+kiw&-dV(-57Bg-&r6y;&p!=k+%%l;&NQ60rs1qL4QHQeIN$eaID2~moa~pjq%@rU zrs3>24QE`LD`!c65@ps(5}Z29lAki;k|@hL2rl;QizGOGD6<}t;L;;8))0Q@OrWWOtosWsKQLz0HmY_9A5XTIr?T!YdUm_#aOdzf|lFS(^@{1 z-Wf3H^`Vkar$SOUrJJtfdQgWSRMb5H$2ph$k`-73`KFTj65nRYutojTP5G1yk(1i(oVVqU+JdHnQcSX~z z*B?|wQ;2k-9INrs-ZAdL9`FRi%YnlhXhu3*8%O`~N3rze*OOu-G7gq&77aiW}2(L^>zGPqwZN9f8F)k79Xi=5tz7BtA+RqL=)be($NW< y!!UE-SP92-1Gl5qby~I;oy(l#u3C;Cox}9BTou{(`XWW%|MlN6W*{mWk@_2|BFY*7 literal 16620 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 literal 16972 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 diff --git a/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.MakeStraight.hlsl b/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.MakeStraight.hlsl index b8423697a..bce235d7f 100644 --- a/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.MakeStraight.hlsl +++ b/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.MakeStraight.hlsl @@ -1,22 +1,19 @@ -RWTexture2D s_output : register(u1); +Texture2D s_texture : register(t0); float4 vs_main(const float2 position : POSITION) : SV_POSITION { return float4(position, 0, 1); } float4 ps_main(const float4 position : SV_POSITION) : SV_TARGET { - const float4 src = s_output[position.xy]; - s_output[position.xy] = - src.a > 0 + const float4 src = s_texture[position.xy]; + return src.a > 0 ? float4(src.rgb / src.a, src.a) : float4(0, 0, 0, 0); - - return float4(0, 0, 0, 0); // unused } /* -fxc /Zi /T vs_5_0 /E vs_main /Fo DrawListTexture.Renderer.MakeStraight.vs.bin DrawListTexture.Renderer.MakeStraight.hlsl -fxc /Zi /T ps_5_0 /E ps_main /Fo DrawListTexture.Renderer.MakeStraight.ps.bin DrawListTexture.Renderer.MakeStraight.hlsl +fxc /Zi /T vs_5_0 /E vs_main /Fo Renderer.MakeStraight.vs.bin Renderer.MakeStraight.hlsl +fxc /Zi /T ps_5_0 /E ps_main /Fo Renderer.MakeStraight.ps.bin Renderer.MakeStraight.hlsl */ diff --git a/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.MakeStraight.ps.bin b/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.MakeStraight.ps.bin index 0b979f6b61f10856c82f9938e9bcf7c579d55b11..2892c7361ce6d9d0bf5dc81c9ad404ca6917386b 100644 GIT binary patch literal 5372 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 E14oeP;{X5v diff --git a/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.MakeStraight.vs.bin b/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.MakeStraight.vs.bin index 1baeecdaef844bc9a92a43d68fae190205dc126d..1bbe7e592793fcd9f271e3ba408563cd7629532f 100644 GIT binary patch literal 3094 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 E4`unISO5S3 diff --git a/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.cs b/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.cs index cc6cfd000..1243c8754 100644 --- a/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.cs +++ b/Dalamud/Interface/Textures/TextureWraps/Internal/DrawListTextureWrap/Renderer.cs @@ -259,15 +259,16 @@ internal sealed unsafe partial class DrawListTextureWrap } /// Renders draw data. - /// The pointer to a Texture2D UAV to make straight. - public void MakeStraight(ID3D11UnorderedAccessView* puav) + /// The pointer to a Texture2D SRV to read premultiplied data from. + /// The pointer to a Texture2D RTV to write straightened data. + public void MakeStraight(ID3D11ShaderResourceView* psrv, ID3D11RenderTargetView* prtv) { ThreadSafety.AssertMainThread(); D3D11_TEXTURE2D_DESC texDesc; using (var texRes = default(ComPtr)) { - puav->GetResource(texRes.GetAddressOf()); + prtv->GetResource(texRes.GetAddressOf()); using var tex = default(ComPtr); texRes.As(&tex).ThrowOnError(); @@ -292,10 +293,9 @@ internal sealed unsafe partial class DrawListTextureWrap var viewport = new D3D11_VIEWPORT(0, 0, texDesc.Width, texDesc.Height); this.deviceContext.Get()->RSSetViewports(1, &viewport); - this.deviceContext.Get()->OMSetBlendState(null, null, 0xFFFFFFFF); + this.deviceContext.Get()->OMSetBlendState(null, null, 0xffffffff); this.deviceContext.Get()->OMSetDepthStencilState(this.depthStencilState, 0); - var nullrtv = default(ID3D11RenderTargetView*); - this.deviceContext.Get()->OMSetRenderTargetsAndUnorderedAccessViews(1, &nullrtv, null, 1, 1, &puav, null); + this.deviceContext.Get()->OMSetRenderTargets(1, &prtv, null); this.deviceContext.Get()->VSSetShader(this.makeStraightVertexShader.Get(), null, 0); this.deviceContext.Get()->PSSetShader(this.makeStraightPixelShader.Get(), null, 0); @@ -304,6 +304,7 @@ internal sealed unsafe partial class DrawListTextureWrap this.deviceContext.Get()->DSSetShader(null, null, 0); this.deviceContext.Get()->CSSetShader(null, null, 0); + this.deviceContext.Get()->PSSetShaderResources(0, 1, &psrv); this.deviceContext.Get()->DrawIndexed(6, 0, 0); }