From 964b375ccdb10d0ed0627531f01cefc7a64a29d4 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 22 Nov 2022 09:05:56 +0800 Subject: [PATCH] Write to swapchain image without SHEDITOR defined WIP --- Assets/Fonts/ALGER.shfont | Bin 698700 -> 698700 bytes Assets/Fonts/SegoeUI.shfont | Bin 559876 -> 559876 bytes Assets/Shaders/ToSwapchain_FS.glsl | 9 ++---- Assets/Shaders/ToSwapchain_FS.shshaderb | Bin 0 -> 881 bytes .../Shaders/ToSwapchain_FS.shshaderb.shmeta | 3 ++ Assets/Shaders/ToSwapchain_VS.glsl | 8 +---- Assets/Shaders/ToSwapchain_VS.shshaderb | Bin 0 -> 1597 bytes .../Shaders/ToSwapchain_VS.shshaderb.shmeta | 3 ++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 10 +++++-- .../MiddleEnd/Interface/SHGraphicsSystem.h | 2 ++ .../SHRenderToSwapchainImageSystem.cpp | 28 ++++++++++++++++-- .../src/Graphics/RenderGraph/SHSubpass.cpp | 2 +- 12 files changed, 45 insertions(+), 20 deletions(-) create mode 100644 Assets/Shaders/ToSwapchain_FS.shshaderb create mode 100644 Assets/Shaders/ToSwapchain_FS.shshaderb.shmeta create mode 100644 Assets/Shaders/ToSwapchain_VS.shshaderb create mode 100644 Assets/Shaders/ToSwapchain_VS.shshaderb.shmeta diff --git a/Assets/Fonts/ALGER.shfont b/Assets/Fonts/ALGER.shfont index 1acab9da4e7191479536fae42fe4d0181cc87dae..738af82d86df84ae1df6bf24a46f82732e7c7bf1 100644 GIT binary patch delta 1272 zcmYk*KWNlY90%~;_0Oe$Y-=yIJrwOA9F#5&;)6?a2o;?!f`|pTr{gUmqyYzq7Hczz z5~MCUQ5-vXQ-f!66z;&GF4w^;MF&B;WGI3)P*A@wzj&|18$SHHLY6*eq-_R{wN{L2L0s1KAf*UOX-U{%j#Souij0ixB1 z>1=?xFhRS;0H4X1EuJ%6Hi4e)du93#0G^wqaePsEpi?CVEWVb`Hi^f!CY#g))VeQp z%2ZS~W~dS;m60H7J;Q9L#RQkbcBQJhHlQ{(0>|rWt`Eq3fN1e?n$Oh9d=mW62ax#y zGM_vuy?g+f4G8`5R3+cAHcZXpwXFEj7Fo)7ySSx zK7o-)+~_%H-(?6JezWiF-n|!o7lYr$;A>TBCdo&dB;za(6<6Xl&0Uq~WZLmU4|vG( zLbwE`$OvP=Wx1;{Gs0;&zzbi%BQl!^LV=x6+_S~Z3JAyuPryf-7Xm*^(mV)rV2;c- zGi5nm=*9{P;Rm1bJwg*ZfU7e@TxYo#n88jV@TIrN2<`ZpYcNCLGcPd19tb?`4jF;9 zb#PCU89rf%jIacH$OtO{j|-bSuEoqBc6g6acC-*~V+BEA^m2Bd{TSk1#AV z!g++-Wv1Nm!d00OK4S$z;Iny8n;92B^Mc(YSZxApLj`V+8D5G5{2HuHU@C7_sASD^8{cdUYG*BN0`N(AXsf3X5R5qW&|G1nQra`f#odm zdpl$%0e&XA7hZ9|2)|LmdLY<*j+n9e2-Y`&JwTyBu=yM_Q|@@ddLY<*gfHo8tOqB|*nHMt-vm~``3N?jQ)YNH=Ob8cg3U*;`J6Fh^AT)5g3U*;+Ir0J uAI$j(f0H<$&7C0dpLLNwyZ(#oSFoyBHLNYHZLB(01FMPE`gZ-D?%O}!iTsHG diff --git a/Assets/Fonts/SegoeUI.shfont b/Assets/Fonts/SegoeUI.shfont index 321f62c853e249cbb78261997b870b07c717f7fc..3f709c2ae0d358bca8aa02a837630d2b279423f4 100644 GIT binary patch delta 1238 zcmXZbYe-Z<6bEqDSF>uGX{(V$FO$OZTINo=clJv@5Tb_#K~IPtvJqD^D3U1JluQu1 zVXzgFQkJna6_%iTuh0Xmh$MShVlT@OV=sl|hqC@Vb3e?7ALpK#GiT2AH!tuvFW}!D zWOvRSlgy7{y5*pRpV-P0auiipqA1BdR>pF>$5mYe1|Pj*~diKgW8p}Hcmfd=%oInBz}Gpf#ku20!ULJn7T3m8ecp*H4~;G7srTw6vw4T}RF zT?2|!y=Ibo$fI)+$qfzeNyj-r-#_8VJv zIhd}*QL>`sy`2LLe*Gvv<3MrhIVL`{fH#5LGNMewZcTm(4QNsH!1$&{!+3*^=s z(AeK$=KvEglS750nV22mW{1-dgQU!$Wc@#vAtD;!-geR$Yj44uMj~E+h|KqUbPEV} z?o|60CgV+0u$z8FKD`F?wXHX1?@q+O05p7?kP!>;{=Ft6%FM`I&npz;q5%Wp+f3#F z(FtX&vek*&fWZExJpxK9CFe#HP0<|<$POrxzY*sE?x7}C<^Xq}RvR)W4Np?K&YQz~ zF>gRqZHFPiBawEqM^s<|L%dZUs?3T+en@CQRa=TFbAX9oz4m>8wKbV$IP@DmaA7Fs z8cd!8JeYpE=h^aZ^bM#eA7%m;Q1d)X6;RSq&ZRr{IY4=3mHdnY-Q#0L@_m5oEqTlr uT!nujgOXNfy!}2veqL8(DAZFtqn>9tu%fV{v0|`dvEs0%-RBu(Q}ut-FUd&& delta 1238 zcmYk)FK<*q6b10vcH2H+f!BZV1cEdO1Y$%*MfbfG6%`0X1)`#Y4{$^H0GqH0$R;mo zkSmenYFAbwkto65b8FBN!RDW8E^|s+dgg) zO&7w4t~X(cigkSwE>XEaMz|=5+suTrfe8!Xq3u(tpe-OHL{x5Z&XAcoupIX$aGbZu z2rJ+k86o&NJIrt#Ol?9gNb3q`6DnlRyFTu2W`uvppe?O|w!8)^agP~qGl8?!$Osbv zx03}9Iz*;ohJ()A-UP2CffvHrge$atM&=1K@5`Vj@Ov;$5^7YK5#E%x_>`GHrOku~ z&j@T|M&Jg#gJ;Z4JtO=AaEVFqtIC3J9Y@Se$_6I*1W7pca|E9{K4<0(75pwHjLHT{ zU>j!>9^dB$GaQs}D!lWI@U0*V{4M!CFPS+iuuUZ42IqXiIl>aSMy6)QD<<%tj z%z-H~g12QMc;<*1zRw65fo(t%c)ge)3w~%kX2xLx{{v=(1;C8(8#u*mubA8!0yF>s diff --git a/Assets/Shaders/ToSwapchain_FS.glsl b/Assets/Shaders/ToSwapchain_FS.glsl index 9a35d1c4..a68fa0c7 100644 --- a/Assets/Shaders/ToSwapchain_FS.glsl +++ b/Assets/Shaders/ToSwapchain_FS.glsl @@ -3,17 +3,12 @@ #extension GL_ARB_shading_language_420pack : enable #extension GL_EXT_nonuniform_qualifier : require -layout (input_attachment_index = 0, set = 4, binding = 0) uniform subpassInput vec4 sceneTexture; +layout (input_attachment_index = 0, set = 4, binding = 0) uniform subpassInput sceneTexture; -layout(location = 0) in struct -{ - vec2 uv; // location = 0 - -} In; layout(location = 0) out vec4 fragColor; void main() { - fragColor = vec4 (texture (sceneTexture, In.uv).rgb, 1.0f); + fragColor = vec4 (subpassLoad(sceneTexture).rgb, 1.0f); } \ No newline at end of file diff --git a/Assets/Shaders/ToSwapchain_FS.shshaderb b/Assets/Shaders/ToSwapchain_FS.shshaderb new file mode 100644 index 0000000000000000000000000000000000000000..b10a9d6cc18532c8501c040dbbba8899a7e9af1a GIT binary patch literal 881 zcmY+B-A~j|5XA?U0xklJ2#616(H9d4AqI_!QKN?RWs~)T2j6Z=_wG_H?b;8cZ~krm zRlb;be%)@ePBNXDbI(09ciOw|SYw^#M{8zF*0oK$KZ9(?mW5aoA1iLyYEy@UPlMC4 z8l9d$J%hSsGZDDk;;bm*H&K!)*e!Wa956Le){(N=Z(Uf?X*h6iKE8FOpGHMgc~@RX zBVV}u>Wh!7@_&wwl5FDAD4W#L#Jlq+XVWPDDxGz7E9Hz8nrV#}1T(!JT9GT8z8z)s23Ka_+tz_br&)pj}X2e`J6J{@g%(Te~F=pJ9Vqb5Z zHmd!oU9D|Ag>u#8V{n$Qvb;Vy`5z({bVI%2)Q^wrjn_`A+jaWU z$G~#}KlGfo-}73Lf9}B>%kccL6%5*0LQ#zDT}AbHMRy$bJU8-A25x(Gu)b?dQJ-<) z=Uy-JF5Vt#DsMi)KYW$u~Rw7%RoSe+Zm+$+58QU2v{oD#~}=o_m(^p395Z z^m++Zp*krUa2B~v-;exGD0DQ&(JRLNFgo==X$)=3gEynU_+?>m*w2Z@ zb1KVNWyQP-418Y9u^2aILAguX6DM_e879WyQ)^PbEThLt8c$_nYR<~IpFHt`j5VvO z*X6;v<0hb%jc>)#mwkKgwqp9B=lk;XVB-hc(*ynNDo>2gwlC^GmTB#;NpsFsWndVy z@`Hhgj`q%V?WwUS^qD+)uq91`&h`vBjNWSU%uAkLh?Cz~QkNb#Wi0sm3B-JAZK^l4 zrUw>vehVqeQ;WG*WXw*CucYywVroB>G5cr5=*>F=d!=e{iFZ;B*0kq03H~+3o@ft_ zKAhn`FzTb*mJIAfeDv5(F}WeOlVWJsRF};5LI#%{-!E&ttjuidEoq;vcSkYr8{F0_YY(2Sx2zc4)@!D^ P+!e-M(VS_DEFAULT); @@ -137,6 +138,8 @@ namespace SHADE static constexpr AssetID SSAO_BLUR = 39760835; ssaoBlurShader = SHResourceManager::LoadOrGet(SSAO_BLUR); static constexpr AssetID TEXT_VS = 39816727; textVS = SHResourceManager::LoadOrGet(TEXT_VS); static constexpr AssetID TEXT_FS = 38024754; textFS = SHResourceManager::LoadOrGet(TEXT_FS); + static constexpr AssetID RENDER_SC_VS = 48082949; renderToSwapchainVS = SHResourceManager::LoadOrGet(RENDER_SC_VS); + static constexpr AssetID RENDER_SC_FS = 36869006; renderToSwapchainFS = SHResourceManager::LoadOrGet(RENDER_SC_FS); } void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept @@ -300,6 +303,7 @@ namespace SHADE textRenderingSubSystem->Render(cmdBuffer, frameIndex); }); +#ifdef SHEDITOR { // Dummy Node to transition scene render graph resource auto dummyNode = screenRenderGraph->AddNode("Dummy Pass", { "Scene" }, { "Screen Space Pass" }); // no predecessors @@ -307,7 +311,9 @@ namespace SHADE dummySubpass->AddInput("Scene"); } - //screenRenderGraph->AddRenderToSwapchainNode ("Scene", "Present", ) +#else + screenRenderGraph->AddRenderToSwapchainNode("Scene", "Present", {"Screen Space Pass"}, {renderToSwapchainVS, renderToSwapchainFS}); +#endif screenRenderGraph->Generate(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index c201e9a5..8c65f233 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -444,6 +444,8 @@ namespace SHADE Handle ssaoBlurShader; Handle textVS; Handle textFS; + Handle renderToSwapchainVS; + Handle renderToSwapchainFS; // Fonts Handle testFont; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderToSwapchainImageSystem.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderToSwapchainImageSystem.cpp index e4f020e4..770217ee 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderToSwapchainImageSystem.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderToSwapchainImageSystem.cpp @@ -3,6 +3,8 @@ #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" #include "Graphics/RenderGraph/SHRenderGraphNode.h" +#include "Graphics/RenderGraph/SHSubpass.h" +#include "Graphics/SHVkUtil.h" namespace SHADE { @@ -25,14 +27,34 @@ namespace SHADE .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts(), }); - auto newPipeline = logicalDevice->CreateGraphicsPipeline(pipelineLayout, nullptr, renderGraphNode->GetRenderpass(), subpass); + pipeline = logicalDevice->CreateGraphicsPipeline(pipelineLayout, nullptr, renderGraphNode->GetRenderpass(), subpass); SHInputAssemblyState inputAssembly{}; inputAssembly.topology = vk::PrimitiveTopology::eTriangleFan; - newPipeline->GetPipelineState().SetInputAssemblyState(inputAssembly); + pipeline->GetPipelineState().SetInputAssemblyState(inputAssembly); - newPipeline->ConstructPipeline(); + SHColorBlendState colorBlendState{}; + colorBlendState.logic_op_enable = VK_FALSE; + colorBlendState.logic_op = vk::LogicOp::eCopy; + + auto const& subpassColorReference = subpass->GetColorAttachmentReferences()[0]; + colorBlendState.attachments.push_back(vk::PipelineColorBlendAttachmentState + { + .blendEnable = SHVkUtil::IsBlendCompatible(subpass->GetFormatFromAttachmentReference(subpassColorReference.attachment)), + .srcColorBlendFactor = vk::BlendFactor::eSrcAlpha, + .dstColorBlendFactor = vk::BlendFactor::eOneMinusSrcAlpha, + .colorBlendOp = vk::BlendOp::eAdd, + .srcAlphaBlendFactor = vk::BlendFactor::eOne, + .dstAlphaBlendFactor = vk::BlendFactor::eZero, + .alphaBlendOp = vk::BlendOp::eAdd, + .colorWriteMask = vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eA, + } + ); + + pipeline->GetPipelineState().SetColorBlenState(colorBlendState); + + pipeline->ConstructPipeline(); } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index 1eae9768..0900852c 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -281,7 +281,7 @@ namespace SHADE } //// maybe do this in handle resize? - //UpdateWriteDescriptors(); + UpdateWriteDescriptors(); } void SHSubpass::UpdateWriteDescriptors(void) noexcept