diff --git a/code/renderer/crp_dof_accum.cpp b/code/renderer/crp_dof_accum.cpp index e10f8a3..00bc246 100644 --- a/code/renderer/crp_dof_accum.cpp +++ b/code/renderer/crp_dof_accum.cpp @@ -22,21 +22,10 @@ along with Challenge Quake 3. If not, see . #include "crp_local.h" -namespace dof_accum -{ -#include "compshaders/crp/accumdof_accum_vs.h" -#include "compshaders/crp/accumdof_accum_ps.h" -} -namespace dof_norm -{ -#include "compshaders/crp/accumdof_norm_vs.h" -#include "compshaders/crp/accumdof_norm_ps.h" -} -namespace dof_debug -{ -#include "compshaders/crp/accumdof_debug_vs.h" -#include "compshaders/crp/accumdof_debug_ps.h" -} +#include "compshaders/crp/fullscreen.h" +#include "compshaders/crp/accumdof_accum.h" +#include "compshaders/crp/accumdof_norm.h" +#include "compshaders/crp/accumdof_debug.h" #pragma pack(push, 4) @@ -140,8 +129,8 @@ void AccumDepthOfField::Init() { GraphicsPipelineDesc desc("DOF Accumulate"); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(dof_accum::g_vs); - desc.pixelShader = ShaderByteCode(dof_accum::g_ps); + desc.vertexShader = ShaderByteCode(g_fullscreen_vs); + desc.pixelShader = ShaderByteCode(g_accum_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_TWO_SIDED; desc.AddRenderTarget(GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE, crp.renderTargetFormat); @@ -151,8 +140,8 @@ void AccumDepthOfField::Init() { GraphicsPipelineDesc desc("DOF Normalize"); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(dof_norm::g_vs); - desc.pixelShader = ShaderByteCode(dof_norm::g_ps); + desc.vertexShader = ShaderByteCode(g_fullscreen_vs); + desc.pixelShader = ShaderByteCode(g_norm_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_TWO_SIDED; desc.AddRenderTarget(0, crp.renderTargetFormat); @@ -162,8 +151,8 @@ void AccumDepthOfField::Init() { GraphicsPipelineDesc desc("DOF Debug"); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(dof_debug::g_vs); - desc.pixelShader = ShaderByteCode(dof_debug::g_ps); + desc.vertexShader = ShaderByteCode(g_fullscreen_vs); + desc.pixelShader = ShaderByteCode(g_debug_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_TWO_SIDED; desc.AddRenderTarget(0, crp.renderTargetFormat); diff --git a/code/renderer/crp_dof_gather.cpp b/code/renderer/crp_dof_gather.cpp index 5edf6b6..65f9d0a 100644 --- a/code/renderer/crp_dof_gather.cpp +++ b/code/renderer/crp_dof_gather.cpp @@ -22,36 +22,14 @@ along with Challenge Quake 3. If not, see . #include "crp_local.h" -namespace debug -{ -#include "compshaders/crp/gatherdof_debug_vs.h" -#include "compshaders/crp/gatherdof_debug_ps.h" -} -namespace split -{ +#include "compshaders/crp/fullscreen.h" +#include "compshaders/crp/gatherdof_debug.h" #include "compshaders/crp/gatherdof_split.h" -} -namespace near_coc_tile_gen -{ #include "compshaders/crp/gatherdof_coc_tile_gen.h" -} -namespace near_coc_tile_max -{ #include "compshaders/crp/gatherdof_coc_tile_max.h" -} -namespace blur -{ #include "compshaders/crp/gatherdof_blur.h" -} -namespace fill -{ #include "compshaders/crp/gatherdof_fill.h" -} -namespace combine -{ -#include "compshaders/crp/gatherdof_combine_vs.h" -#include "compshaders/crp/gatherdof_combine_ps.h" -} +#include "compshaders/crp/gatherdof_combine.h" #pragma pack(push, 4) @@ -168,43 +146,43 @@ void GatherDepthOfField::Init() { ComputePipelineDesc desc("DOF split"); desc.shortLifeTime = true; - desc.shader = ShaderByteCode(split::g_cs); + desc.shader = ShaderByteCode(g_split_cs); splitPipeline = CreateComputePipeline(desc); } { ComputePipelineDesc desc("DOF near CoC tile generation"); desc.shortLifeTime = true; - desc.shader = ShaderByteCode(near_coc_tile_gen::g_cs); + desc.shader = ShaderByteCode(g_coc_tile_gen_cs); nearCocTileGenPipeline = CreateComputePipeline(desc); } { ComputePipelineDesc desc("DOF near CoC tile dilation"); desc.shortLifeTime = true; - desc.shader = ShaderByteCode(near_coc_tile_max::g_cs); + desc.shader = ShaderByteCode(g_coc_tile_max_cs); nearCocTileMaxPipeline = CreateComputePipeline(desc); } { ComputePipelineDesc desc("DOF blur"); desc.shortLifeTime = true; - desc.shader = ShaderByteCode(blur::g_cs); + desc.shader = ShaderByteCode(g_blur_cs); blurPipeline = CreateComputePipeline(desc); } { ComputePipelineDesc desc("DOF fill"); desc.shortLifeTime = true; - desc.shader = ShaderByteCode(fill::g_cs); + desc.shader = ShaderByteCode(g_fill_cs); fillPipeline = CreateComputePipeline(desc); } { GraphicsPipelineDesc desc("DOF combine"); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(combine::g_vs); - desc.pixelShader = ShaderByteCode(combine::g_ps); + desc.vertexShader = ShaderByteCode(g_fullscreen_vs); + desc.pixelShader = ShaderByteCode(g_combine_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_TWO_SIDED; desc.AddRenderTarget(0, renderTargetFormat); @@ -214,8 +192,8 @@ void GatherDepthOfField::Init() { GraphicsPipelineDesc desc("DOF viz"); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(debug::g_vs); - desc.pixelShader = ShaderByteCode(debug::g_ps); + desc.vertexShader = ShaderByteCode(g_fullscreen_vs); + desc.pixelShader = ShaderByteCode(g_debug_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_TWO_SIDED; desc.AddRenderTarget(0, renderTargetFormat); diff --git a/code/renderer/crp_fog.cpp b/code/renderer/crp_fog.cpp index a067d1b..e88eacb 100644 --- a/code/renderer/crp_fog.cpp +++ b/code/renderer/crp_fog.cpp @@ -22,16 +22,8 @@ along with Challenge Quake 3. If not, see . #include "crp_local.h" -namespace fog_outside -{ -#include "compshaders/crp/fog_outside_vs.h" -#include "compshaders/crp/fog_outside_ps.h" -} -namespace fog_inside -{ -#include "compshaders/crp/fog_inside_vs.h" -#include "compshaders/crp/fog_inside_ps.h" -} +#include "compshaders/crp/fog_outside.h" +#include "compshaders/crp/fog_inside.h" #pragma pack(push, 4) @@ -95,8 +87,8 @@ void Fog::Init() { GraphicsPipelineDesc desc("fog outside"); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(fog_outside::g_vs); - desc.pixelShader = ShaderByteCode(fog_outside::g_ps); + desc.vertexShader = ShaderByteCode(g_outside_vs); + desc.pixelShader = ShaderByteCode(g_outside_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_BACK_SIDED; desc.rasterizer.polygonOffset = false; @@ -108,8 +100,8 @@ void Fog::Init() { GraphicsPipelineDesc desc("fog inside"); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(fog_inside::g_vs); - desc.pixelShader = ShaderByteCode(fog_inside::g_ps); + desc.vertexShader = ShaderByteCode(g_inside_vs); + desc.pixelShader = ShaderByteCode(g_inside_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_FRONT_SIDED; desc.rasterizer.polygonOffset = false; diff --git a/code/renderer/crp_main.cpp b/code/renderer/crp_main.cpp index 1aaa241..7983bb0 100644 --- a/code/renderer/crp_main.cpp +++ b/code/renderer/crp_main.cpp @@ -24,38 +24,14 @@ along with Challenge Quake 3. If not, see . #include "crp_local.h" #include "../client/cl_imgui.h" #include "shaders/crp/oit.h.hlsli" -namespace blit -{ -#include "compshaders/crp/blit_vs.h" -#include "compshaders/crp/blit_ps.h" -} -namespace ui -{ -#include "compshaders/crp/ui_vs.h" -#include "compshaders/crp/ui_ps.h" -} -namespace imgui -{ -#include "compshaders/crp/imgui_vs.h" -#include "compshaders/crp/imgui_ps.h" -} -namespace nuklear -{ -#include "compshaders/crp/nuklear_vs.h" -#include "compshaders/crp/nuklear_ps.h" -} -namespace mip_1 -{ -#include "compshaders/crp/mip_1_cs.h" -} -namespace mip_2 -{ -#include "compshaders/crp/mip_2_cs.h" -} -namespace mip_3 -{ -#include "compshaders/crp/mip_3_cs.h" -} +#include "compshaders/crp/fullscreen.h" +#include "compshaders/crp/blit.h" +#include "compshaders/crp/ui.h" +#include "compshaders/crp/imgui.h" +#include "compshaders/crp/nuklear.h" +#include "compshaders/crp/mip_1.h" +#include "compshaders/crp/mip_2.h" +#include "compshaders/crp/mip_3.h" CRP crp; @@ -331,8 +307,8 @@ void CRP::Init() { GraphicsPipelineDesc desc("blit LDR"); - desc.vertexShader = ShaderByteCode(blit::g_vs); - desc.pixelShader = ShaderByteCode(blit::g_ps); + desc.vertexShader = ShaderByteCode(g_fullscreen_vs); + desc.pixelShader = ShaderByteCode(g_blit_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_TWO_SIDED; desc.AddRenderTarget(0, TextureFormat::RGBA32_UNorm); @@ -342,10 +318,10 @@ void CRP::Init() blitPipelineHDR = CreateGraphicsPipeline(desc); } - ui.Init(true, ShaderByteCode(ui::g_vs), ShaderByteCode(ui::g_ps), renderTargetFormat, RHI_MAKE_NULL_HANDLE(), NULL); - imgui.Init(true, ShaderByteCode(imgui::g_vs), ShaderByteCode(imgui::g_ps), renderTargetFormat, RHI_MAKE_NULL_HANDLE(), NULL); - nuklear.Init(true, ShaderByteCode(nuklear::g_vs), ShaderByteCode(nuklear::g_ps), renderTargetFormat, RHI_MAKE_NULL_HANDLE(), NULL); - mipMapGen.Init(true, ShaderByteCode(mip_1::g_cs), ShaderByteCode(mip_2::g_cs), ShaderByteCode(mip_3::g_cs)); + ui.Init(true, ShaderByteCode(g_ui_vs), ShaderByteCode(g_ui_ps), renderTargetFormat, RHI_MAKE_NULL_HANDLE(), NULL); + imgui.Init(true, ShaderByteCode(g_imgui_vs), ShaderByteCode(g_imgui_ps), renderTargetFormat, RHI_MAKE_NULL_HANDLE(), NULL); + nuklear.Init(true, ShaderByteCode(g_nuklear_vs), ShaderByteCode(g_nuklear_ps), renderTargetFormat, RHI_MAKE_NULL_HANDLE(), NULL); + mipMapGen.Init(true, ShaderByteCode(g_mip_1_cs), ShaderByteCode(g_mip_2_cs), ShaderByteCode(g_mip_3_cs)); opaque.Init(); transp.Init(); transpResolve.Init(); diff --git a/code/renderer/crp_opaque.cpp b/code/renderer/crp_opaque.cpp index 321980a..7575750 100644 --- a/code/renderer/crp_opaque.cpp +++ b/code/renderer/crp_opaque.cpp @@ -22,11 +22,7 @@ along with Challenge Quake 3. If not, see . #include "crp_local.h" -namespace opaque -{ -#include "compshaders/crp/opaque_vs.h" -#include "compshaders/crp/opaque_ps.h" -} +#include "compshaders/crp/opaque.h" #pragma pack(push, 4) @@ -207,8 +203,8 @@ void WorldOpaque::ProcessShader(shader_t& shader) desc.name = "opaque"; desc.rootSignature = RHI_MAKE_NULL_HANDLE(); desc.shortLifeTime = true; // the PSO cache is only valid for this map! - desc.vertexShader = opaque::g_vs; - desc.pixelShader = opaque::g_ps; + desc.vertexShader = g_opaque_vs; + desc.pixelShader = g_opaque_ps; desc.vertexLayout.AddAttribute(a++, ShaderSemantic::Position, DataType::Float32, 3, 0); desc.vertexLayout.AddAttribute(a++, ShaderSemantic::Normal, DataType::Float32, 2, 0); desc.vertexLayout.AddAttribute(a++, ShaderSemantic::TexCoord, DataType::Float32, 2, 0); diff --git a/code/renderer/crp_tone_map.cpp b/code/renderer/crp_tone_map.cpp index 619f4d3..ecba48f 100644 --- a/code/renderer/crp_tone_map.cpp +++ b/code/renderer/crp_tone_map.cpp @@ -22,16 +22,9 @@ along with Challenge Quake 3. If not, see . #include "crp_local.h" -namespace tone_map -{ -#include "compshaders/crp/tone_map_vs.h" -#include "compshaders/crp/tone_map_ps.h" -} -namespace inverse_tone_map -{ -#include "compshaders/crp/tone_map_inverse_vs.h" -#include "compshaders/crp/tone_map_inverse_ps.h" -} +#include "compshaders/crp/fullscreen.h" +#include "compshaders/crp/tone_map.h" +#include "compshaders/crp/tone_map_inverse.h" #pragma pack(push, 4) @@ -61,8 +54,8 @@ void ToneMap::Init() { GraphicsPipelineDesc desc("Tone Map"); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(tone_map::g_vs); - desc.pixelShader = ShaderByteCode(tone_map::g_ps); + desc.vertexShader = ShaderByteCode(g_fullscreen_vs); + desc.pixelShader = ShaderByteCode(g_tone_map_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_TWO_SIDED; desc.AddRenderTarget(0, crp.renderTargetFormat); @@ -72,8 +65,8 @@ void ToneMap::Init() { GraphicsPipelineDesc desc("Inverse Tone Map"); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(tone_map::g_vs); - desc.pixelShader = ShaderByteCode(tone_map::g_ps); + desc.vertexShader = ShaderByteCode(g_fullscreen_vs); + desc.pixelShader = ShaderByteCode(g_tone_map_inverse_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_TWO_SIDED; desc.AddRenderTarget(0, crp.renderTargetFormat); diff --git a/code/renderer/crp_transp_draw.cpp b/code/renderer/crp_transp_draw.cpp index f2cc839..0480e69 100644 --- a/code/renderer/crp_transp_draw.cpp +++ b/code/renderer/crp_transp_draw.cpp @@ -22,11 +22,7 @@ along with Challenge Quake 3. If not, see . #include "crp_local.h" -namespace transp_draw -{ -#include "compshaders/crp/transp_draw_vs.h" -#include "compshaders/crp/transp_draw_ps.h" -} +#include "compshaders/crp/transp_draw.h" #pragma pack(push, 4) @@ -236,8 +232,8 @@ void WorldTransp::ProcessShader(shader_t& shader) desc.name = "transp"; desc.rootSignature = RHI_MAKE_NULL_HANDLE(); desc.shortLifeTime = true; // the PSO cache is only valid for this map! - desc.vertexShader = transp_draw::g_vs; - desc.pixelShader = transp_draw::g_ps; + desc.vertexShader = g_transp_draw_vs; + desc.pixelShader = g_transp_draw_ps; desc.vertexLayout.AddAttribute(a++, ShaderSemantic::Position, DataType::Float32, 3, 0); desc.vertexLayout.AddAttribute(a++, ShaderSemantic::Normal, DataType::Float32, 2, 0); desc.vertexLayout.AddAttribute(a++, ShaderSemantic::TexCoord, DataType::Float32, 2, 0); diff --git a/code/renderer/crp_transp_resolve.cpp b/code/renderer/crp_transp_resolve.cpp index 7a7b453..37c9182 100644 --- a/code/renderer/crp_transp_resolve.cpp +++ b/code/renderer/crp_transp_resolve.cpp @@ -22,11 +22,8 @@ along with Challenge Quake 3. If not, see . #include "crp_local.h" -namespace transp_resolve -{ -#include "compshaders/crp/transp_resolve_vs.h" -#include "compshaders/crp/transp_resolve_ps.h" -} +#include "compshaders/crp/fullscreen.h" +#include "compshaders/crp/transp_resolve.h" #pragma pack(push, 4) @@ -53,8 +50,8 @@ void TranspResolve::Init() { GraphicsPipelineDesc desc("OIT Resolve"); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(transp_resolve::g_vs); - desc.pixelShader = ShaderByteCode(transp_resolve::g_ps); + desc.vertexShader = ShaderByteCode(g_fullscreen_vs); + desc.pixelShader = ShaderByteCode(g_transp_resolve_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_TWO_SIDED; desc.AddRenderTarget(0, crp.renderTargetFormat); diff --git a/code/renderer/grp_main.cpp b/code/renderer/grp_main.cpp index b214da0..d885357 100644 --- a/code/renderer/grp_main.cpp +++ b/code/renderer/grp_main.cpp @@ -23,37 +23,16 @@ along with Challenge Quake 3. If not, see . #include "grp_local.h" #include "grp_uber_shaders.h" +#include "../client/cl_imgui.h" #include "compshaders/grp/uber_shader.h" #include "compshaders/grp/complete_uber_vs.h" #include "compshaders/grp/complete_uber_ps.h" -#include "../client/cl_imgui.h" -namespace ui -{ -#include "compshaders/grp/ui_vs.h" -#include "compshaders/grp/ui_ps.h" -} -namespace imgui -{ -#include "compshaders/grp/imgui_vs.h" -#include "compshaders/grp/imgui_ps.h" -} -namespace nuklear -{ -#include "compshaders/grp/nuklear_vs.h" -#include "compshaders/grp/nuklear_ps.h" -} -namespace mip_1 -{ -#include "compshaders/grp/mip_1_cs.h" -} -namespace mip_2 -{ -#include "compshaders/grp/mip_2_cs.h" -} -namespace mip_3 -{ -#include "compshaders/grp/mip_3_cs.h" -} +#include "compshaders/grp/ui.h" +#include "compshaders/grp/imgui.h" +#include "compshaders/grp/nuklear.h" +#include "compshaders/grp/mip_1.h" +#include "compshaders/grp/mip_2.h" +#include "compshaders/grp/mip_3.h" GRP grp; @@ -223,13 +202,13 @@ void GRP::Init() readbackRenderTarget = RHI::CreateTexture(desc); } - ui.Init(false, ShaderByteCode(ui::g_vs), ShaderByteCode(ui::g_ps), renderTargetFormat, descriptorTable, &rootSignatureDesc); + ui.Init(false, ShaderByteCode(g_ui_vs), ShaderByteCode(g_ui_ps), renderTargetFormat, descriptorTable, &rootSignatureDesc); world.Init(); - mipMapGen.Init(false, ShaderByteCode(mip_1::g_cs), ShaderByteCode(mip_2::g_cs), ShaderByteCode(mip_3::g_cs)); - const HTexture fontAtlas = imgui.Init(false, ShaderByteCode(imgui::g_vs), ShaderByteCode(imgui::g_ps), renderTargetFormat, descriptorTable, &rootSignatureDesc); + mipMapGen.Init(false, ShaderByteCode(g_mip_1_cs), ShaderByteCode(g_mip_2_cs), ShaderByteCode(g_mip_3_cs)); + const HTexture fontAtlas = imgui.Init(false, ShaderByteCode(g_imgui_vs), ShaderByteCode(g_imgui_ps), renderTargetFormat, descriptorTable, &rootSignatureDesc); const uint32_t fontAtlasSRV = RegisterTexture(fontAtlas); imgui.RegisterFontAtlas(fontAtlasSRV); - nuklear.Init(false, ShaderByteCode(nuklear::g_vs), ShaderByteCode(nuklear::g_ps), renderTargetFormat, descriptorTable, &rootSignatureDesc); + nuklear.Init(false, ShaderByteCode(g_nuklear_vs), ShaderByteCode(g_nuklear_ps), renderTargetFormat, descriptorTable, &rootSignatureDesc); post.Init(); post.SetToneMapInput(renderTarget); smaa.Init(); // must be after post diff --git a/code/renderer/grp_post.cpp b/code/renderer/grp_post.cpp index d0f13c7..d5348ee 100644 --- a/code/renderer/grp_post.cpp +++ b/code/renderer/grp_post.cpp @@ -22,16 +22,8 @@ along with Challenge Quake 3. If not, see . #include "grp_local.h" -namespace tone_map -{ -#include "compshaders/grp/post_gamma_vs.h" -#include "compshaders/grp/post_gamma_ps.h" -} -namespace inverse_tone_map -{ -#include "compshaders/grp/post_inverse_gamma_vs.h" -#include "compshaders/grp/post_inverse_gamma_ps.h" -} +#include "compshaders/grp/post_gamma.h" +#include "compshaders/grp/post_inverse_gamma.h" #pragma pack(push, 4) @@ -95,8 +87,8 @@ void PostProcess::Init() } { GraphicsPipelineDesc desc("tone map", toneMapRootSignature); - desc.vertexShader = ShaderByteCode(tone_map::g_vs); - desc.pixelShader = ShaderByteCode(tone_map::g_ps); + desc.vertexShader = ShaderByteCode(g_post_vs); + desc.pixelShader = ShaderByteCode(g_post_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_TWO_SIDED; desc.AddRenderTarget(0, TextureFormat::RGBA32_UNorm); @@ -125,8 +117,8 @@ void PostProcess::Init() for(int i = 0; i < RTCF_COUNT; ++i) { GraphicsPipelineDesc desc("inverse tone map", inverseToneMapRootSignature); - desc.vertexShader = ShaderByteCode(inverse_tone_map::g_vs); - desc.pixelShader = ShaderByteCode(inverse_tone_map::g_ps); + desc.vertexShader = ShaderByteCode(g_post_inverse_vs); + desc.pixelShader = ShaderByteCode(g_post_inverse_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_TWO_SIDED; desc.AddRenderTarget(0, rtFormats[i]); diff --git a/code/renderer/grp_world.cpp b/code/renderer/grp_world.cpp index 81b4487..d2fd94f 100644 --- a/code/renderer/grp_world.cpp +++ b/code/renderer/grp_world.cpp @@ -26,28 +26,11 @@ along with Challenge Quake 3. If not, see . #include "grp_local.h" #include "../client/cl_imgui.h" -namespace zpp -{ -#include "compshaders/grp/depth_pre_pass_vs.h" -#include "compshaders/grp/depth_pre_pass_ps.h" -} -namespace fog -{ -#include "compshaders/grp/fog_vs.h" -} -namespace fog_inside -{ -#include "compshaders/grp/fog_inside_ps.h" -} -namespace fog_outside -{ -#include "compshaders/grp/fog_outside_ps.h" -} -namespace dyn_light -{ -#include "compshaders/grp/dynamic_light_vs.h" -#include "compshaders/grp/dynamic_light_ps.h" -} +#include "compshaders/grp/depth_pre_pass.h" +#include "compshaders/grp/fog.h" +#include "compshaders/grp/fog_inside.h" +#include "compshaders/grp/fog_outside.h" +#include "compshaders/grp/dynamic_light.h" #pragma pack(push, 4) @@ -179,8 +162,8 @@ void World::Init() // we could handle all 3 cull mode modes and alpha testing, but we do a partial pre-pass // it wouldn't make sense going any further instead of trying a visibility buffer approach GraphicsPipelineDesc desc("Z pre-pass", zppRootSignature); - desc.vertexShader = ShaderByteCode(zpp::g_vs); - desc.pixelShader = ShaderByteCode(zpp::g_ps); + desc.vertexShader = ShaderByteCode(g_zpp_vs); + desc.pixelShader = ShaderByteCode(g_zpp_ps); desc.vertexLayout.AddAttribute(0, ShaderSemantic::Position, DataType::Float32, 3, 0); desc.depthStencil.depthComparison = ComparisonFunction::GreaterEqual; desc.depthStencil.depthStencilFormat = TextureFormat::Depth32_Float; @@ -302,8 +285,8 @@ void World::Init() { GraphicsPipelineDesc desc("fog outside", fogRootSignature); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(fog::g_vs); - desc.pixelShader = ShaderByteCode(fog_outside::g_ps); + desc.vertexShader = ShaderByteCode(g_fog_vs); + desc.pixelShader = ShaderByteCode(g_fog_outside_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_BACK_SIDED; desc.rasterizer.polygonOffset = false; @@ -315,8 +298,8 @@ void World::Init() { GraphicsPipelineDesc desc("fog inside", fogRootSignature); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(fog::g_vs); - desc.pixelShader = ShaderByteCode(fog_inside::g_ps); + desc.vertexShader = ShaderByteCode(g_fog_vs); + desc.pixelShader = ShaderByteCode(g_fog_inside_ps); desc.depthStencil.DisableDepth(); desc.rasterizer.cullMode = CT_FRONT_SIDED; desc.rasterizer.polygonOffset = false; @@ -332,8 +315,8 @@ void World::Init() { GraphicsPipelineDesc desc("dynamic light opaque", dlRootSignature); desc.shortLifeTime = true; - desc.vertexShader = ShaderByteCode(dyn_light::g_vs); - desc.pixelShader = ShaderByteCode(dyn_light::g_ps); + desc.vertexShader = ShaderByteCode(g_dl_vs); + desc.pixelShader = ShaderByteCode(g_dl_ps); desc.depthStencil.enableDepthWrites = false; desc.rasterizer.clampDepth = r_depthClamp->integer != 0; desc.AddRenderTarget(GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE, grp.renderTargetFormat); diff --git a/code/renderer/shaders/crp/accumdof_accum.hlsl b/code/renderer/shaders/crp/accumdof_accum.hlsl index 12ddc4d..e149edb 100644 --- a/code/renderer/shaders/crp/accumdof_accum.hlsl +++ b/code/renderer/shaders/crp/accumdof_accum.hlsl @@ -22,6 +22,7 @@ along with Challenge Quake 3. If not, see . #include "common.hlsli" +#include "fullscreen.hlsli" cbuffer RootConstants @@ -29,27 +30,6 @@ cbuffer RootConstants uint textureIndex; }; -struct VOut -{ - float4 position : SV_Position; -}; - - -#if VERTEX_SHADER - -VOut vs(uint id : SV_VertexID) -{ - VOut output; - output.position = FSTrianglePosFromVertexId(id); - - return output; -} - -#endif - - -#if PIXEL_SHADER - float4 ps(VOut input) : SV_Target { Texture2D texture0 = ResourceDescriptorHeap[textureIndex]; @@ -61,5 +41,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/renderer/shaders/crp/accumdof_debug.hlsl b/code/renderer/shaders/crp/accumdof_debug.hlsl index c31d9aa..90f0aee 100644 --- a/code/renderer/shaders/crp/accumdof_debug.hlsl +++ b/code/renderer/shaders/crp/accumdof_debug.hlsl @@ -22,6 +22,7 @@ along with Challenge Quake 3. If not, see . #include "common.hlsli" +#include "fullscreen.hlsli" #include "dof.hlsli" @@ -40,29 +41,6 @@ cbuffer RootConstants float maxFarCocCS; }; -struct VOut -{ - float4 position : SV_Position; - float2 texCoords : TEXCOORD0; -}; - - -#if VERTEX_SHADER - -VOut vs(uint id : SV_VertexID) -{ - VOut output; - output.position = FSTrianglePosFromVertexId(id); - output.texCoords = FSTriangleTCFromVertexId(id); - - return output; -} - -#endif - - -#if PIXEL_SHADER - float4 ps(VOut input) : SV_Target { Texture2D colorTexture = ResourceDescriptorHeap[colorTextureIndex]; @@ -95,5 +73,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/renderer/shaders/crp/accumdof_norm.hlsl b/code/renderer/shaders/crp/accumdof_norm.hlsl index c928626..e8ac5cd 100644 --- a/code/renderer/shaders/crp/accumdof_norm.hlsl +++ b/code/renderer/shaders/crp/accumdof_norm.hlsl @@ -22,6 +22,7 @@ along with Challenge Quake 3. If not, see . #include "common.hlsli" +#include "fullscreen.hlsli" cbuffer RootConstants @@ -29,27 +30,6 @@ cbuffer RootConstants uint textureIndex; }; -struct VOut -{ - float4 position : SV_Position; -}; - - -#if VERTEX_SHADER - -VOut vs(uint id : SV_VertexID) -{ - VOut output; - output.position = FSTrianglePosFromVertexId(id); - - return output; -} - -#endif - - -#if PIXEL_SHADER - float4 ps(VOut input) : SV_Target { Texture2D texture0 = ResourceDescriptorHeap[textureIndex]; @@ -61,5 +41,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/renderer/shaders/crp/blit.hlsl b/code/renderer/shaders/crp/blit.hlsl index c7ab20f..a7e27b2 100644 --- a/code/renderer/shaders/crp/blit.hlsl +++ b/code/renderer/shaders/crp/blit.hlsl @@ -1,6 +1,6 @@ /* =========================================================================== -Copyright (C) 2023 Gian 'myT' Schellenbaum +Copyright (C) 2023-2024 Gian 'myT' Schellenbaum This file is part of Challenge Quake 3 (CNQ3). @@ -21,7 +21,7 @@ along with Challenge Quake 3. If not, see . // blit shader - unlike texture copies, it doesn't care about the specific formats used -#include "common.hlsli" +#include "fullscreen.hlsli" cbuffer RootConstants : register(b0) @@ -32,29 +32,6 @@ cbuffer RootConstants : register(b0) float2 tcBias; }; -struct VOut -{ - float4 position : SV_Position; - float2 texCoords : TEXCOORD0; -}; - - -#if VERTEX_SHADER - -VOut vs(uint id : SV_VertexID) -{ - VOut output; - output.position = FSTrianglePosFromVertexId(id); - output.texCoords = FSTriangleTCFromVertexId(id); - - return output; -} - -#endif - - -#if PIXEL_SHADER - float4 ps(VOut input) : SV_Target { Texture2D texture0 = ResourceDescriptorHeap[textureIndex]; @@ -65,5 +42,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/renderer/shaders/crp/fog.hlsli b/code/renderer/shaders/crp/fog.hlsli index 6d08bb9..12b4637 100644 --- a/code/renderer/shaders/crp/fog.hlsli +++ b/code/renderer/shaders/crp/fog.hlsli @@ -21,12 +21,6 @@ along with Challenge Quake 3. If not, see . // fog volume (AABB) rendering - shared code -struct VOut -{ - float4 position : SV_Position; - float depthVS : DEPTHVS; -}; - cbuffer RootConstants { matrix modelViewMatrix; @@ -40,8 +34,11 @@ cbuffer RootConstants uint depthTextureIndex; }; - -#ifdef VERTEX_SHADER +struct VOut +{ + float4 position : SV_Position; + float depthVS : DEPTHVS; +}; VOut vs(float3 positionOS : POSITION) { @@ -54,5 +51,3 @@ VOut vs(float3 positionOS : POSITION) return output; } - -#endif diff --git a/code/renderer/shaders/crp/fog_inside.hlsl b/code/renderer/shaders/crp/fog_inside.hlsl index 1cbbe63..6765561 100644 --- a/code/renderer/shaders/crp/fog_inside.hlsl +++ b/code/renderer/shaders/crp/fog_inside.hlsl @@ -25,8 +25,6 @@ along with Challenge Quake 3. If not, see . #include "fog.hlsli" -#if PIXEL_SHADER - float4 ps(VOut input) : SV_Target { Texture2D depthTexture = ResourceDescriptorHeap[depthTextureIndex]; @@ -39,5 +37,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/renderer/shaders/crp/fog_outside.hlsl b/code/renderer/shaders/crp/fog_outside.hlsl index e02ad90..0218ba0 100644 --- a/code/renderer/shaders/crp/fog_outside.hlsl +++ b/code/renderer/shaders/crp/fog_outside.hlsl @@ -25,8 +25,6 @@ along with Challenge Quake 3. If not, see . #include "fog.hlsli" -#ifdef PIXEL_SHADER - float4 ps(VOut input) : SV_Target { Texture2D depthTexture = ResourceDescriptorHeap[depthTextureIndex]; @@ -43,5 +41,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/renderer/shaders/crp/fullscreen.hlsl b/code/renderer/shaders/crp/fullscreen.hlsl new file mode 100644 index 0000000..a472cd6 --- /dev/null +++ b/code/renderer/shaders/crp/fullscreen.hlsl @@ -0,0 +1,35 @@ +/* +=========================================================================== +Copyright (C) 2024 Gian 'myT' Schellenbaum + +This file is part of Challenge Quake 3 (CNQ3). + +Challenge Quake 3 is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + +Challenge Quake 3 is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Challenge Quake 3. If not, see . +=========================================================================== +*/ +// full-screen triangle vertex shader + + +#include "common.hlsli" +#include "fullscreen.hlsli" + + +VOut vs(uint id : SV_VertexID) +{ + VOut output; + output.position = FSTrianglePosFromVertexId(id); + output.texCoords = FSTriangleTCFromVertexId(id); + + return output; +} diff --git a/code/renderer/shaders/crp/fullscreen.hlsli b/code/renderer/shaders/crp/fullscreen.hlsli new file mode 100644 index 0000000..5cf7c0f --- /dev/null +++ b/code/renderer/shaders/crp/fullscreen.hlsli @@ -0,0 +1,28 @@ +/* +=========================================================================== +Copyright (C) 2024 Gian 'myT' Schellenbaum + +This file is part of Challenge Quake 3 (CNQ3). + +Challenge Quake 3 is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + +Challenge Quake 3 is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Challenge Quake 3. If not, see . +=========================================================================== +*/ +// full-screen triangle vertex shader struct + + +struct VOut +{ + float4 position : SV_Position; + float2 texCoords : TEXCOORD0; +}; diff --git a/code/renderer/shaders/crp/gatherdof_combine.hlsl b/code/renderer/shaders/crp/gatherdof_combine.hlsl index 7c67a23..4c0b566 100644 --- a/code/renderer/shaders/crp/gatherdof_combine.hlsl +++ b/code/renderer/shaders/crp/gatherdof_combine.hlsl @@ -22,6 +22,7 @@ along with Challenge Quake 3. If not, see . #include "common.hlsli" +#include "fullscreen.hlsli" #include "gatherdof.hlsli" @@ -29,47 +30,22 @@ cbuffer RootConstants : register(b0) { uint nearTextureIndex; uint farTextureIndex; - uint nearCocTextureIndex; + uint nearCocTextureIndex; // @TODO: remove uint farCocTextureIndex; uint sharpTextureIndex; uint samplerIndex; // point/clamp }; -struct VOut -{ - float4 position : SV_Position; - float2 texCoords : TEXCOORD0; -}; - - -#if VERTEX_SHADER - -VOut vs(uint id : SV_VertexID) -{ - VOut output; - output.position = FSTrianglePosFromVertexId(id); - output.texCoords = FSTriangleTCFromVertexId(id); - - return output; -} - -#endif - - -#if PIXEL_SHADER - float4 ps(VOut input) : SV_Target { SamplerState samplerState = SamplerDescriptorHeap[samplerIndex]; Texture2D nearColorTexture = ResourceDescriptorHeap[nearTextureIndex]; Texture2D farColorTexture = ResourceDescriptorHeap[farTextureIndex]; - Texture2D nearCocTexture = ResourceDescriptorHeap[nearCocTextureIndex]; Texture2D farCocTexture = ResourceDescriptorHeap[farCocTextureIndex]; Texture2D sharpTexture = ResourceDescriptorHeap[sharpTextureIndex]; float4 nearColor = nearColorTexture.Sample(samplerState, input.texCoords); float4 farColor = farColorTexture.Sample(samplerState, input.texCoords); - //float nearCoc = nearCocTexture.Sample(samplerState, input.texCoords); float nearCoc = saturate(nearColor.a); float farCoc = farCocTexture.Sample(samplerState, input.texCoords); float4 sharp = sharpTexture.Sample(samplerState, input.texCoords); @@ -80,5 +56,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/renderer/shaders/crp/gatherdof_debug.hlsl b/code/renderer/shaders/crp/gatherdof_debug.hlsl index 54f09bd..85a7770 100644 --- a/code/renderer/shaders/crp/gatherdof_debug.hlsl +++ b/code/renderer/shaders/crp/gatherdof_debug.hlsl @@ -22,6 +22,7 @@ along with Challenge Quake 3. If not, see . #include "common.hlsli" +#include "fullscreen.hlsli" #include "gatherdof.hlsli" #include "dof.hlsli" @@ -40,29 +41,6 @@ cbuffer RootConstants : register(b0) float focusDist; }; -struct VOut -{ - float4 position : SV_Position; - float2 texCoords : TEXCOORD0; -}; - - -#if VERTEX_SHADER - -VOut vs(uint id : SV_VertexID) -{ - VOut output; - output.position = FSTrianglePosFromVertexId(id); - output.texCoords = FSTriangleTCFromVertexId(id); - - return output; -} - -#endif - - -#if PIXEL_SHADER - float4 ps(VOut input) : SV_Target { Texture2D colorTexture = ResourceDescriptorHeap[colorTextureIndex]; @@ -89,5 +67,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/renderer/shaders/crp/imgui.hlsl b/code/renderer/shaders/crp/imgui.hlsl index 12eebe6..bd1c65c 100644 --- a/code/renderer/shaders/crp/imgui.hlsl +++ b/code/renderer/shaders/crp/imgui.hlsl @@ -21,13 +21,6 @@ along with Challenge Quake 3. If not, see . // Dear ImGui integration -struct VOut -{ - float4 pos : SV_POSITION; - float4 col : COLOR0; - float2 uv : TEXCOORD0; -}; - cbuffer RootConstants : register(b0) { float4x4 projectionMatrix; @@ -36,9 +29,6 @@ cbuffer RootConstants : register(b0) float mipIndex; }; - -#if VERTEX_SHADER - struct VIn { float2 pos : POSITION; @@ -46,6 +36,13 @@ struct VIn float2 uv : TEXCOORD0; }; +struct VOut +{ + float4 pos : SV_POSITION; + float4 col : COLOR0; + float2 uv : TEXCOORD0; +}; + VOut vs(VIn input) { VOut output; @@ -56,11 +53,6 @@ VOut vs(VIn input) return output; } -#endif - - -#if PIXEL_SHADER - float4 ps(VOut input) : SV_Target { Texture2D texture0 = ResourceDescriptorHeap[textureIndex]; @@ -69,5 +61,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/renderer/shaders/crp/nuklear.hlsl b/code/renderer/shaders/crp/nuklear.hlsl index 1d58e68..9ee14ce 100644 --- a/code/renderer/shaders/crp/nuklear.hlsl +++ b/code/renderer/shaders/crp/nuklear.hlsl @@ -21,13 +21,6 @@ along with Challenge Quake 3. If not, see . // Nuklear integration -struct VOut -{ - float4 pos : SV_POSITION; - float4 col : COLOR0; - float2 uv : TEXCOORD0; -}; - cbuffer RootConstants { float4x4 projectionMatrix; @@ -35,8 +28,12 @@ cbuffer RootConstants uint samplerIndex; }; - -#if VERTEX_SHADER +struct VOut +{ + float4 pos : SV_POSITION; + float4 col : COLOR0; + float2 uv : TEXCOORD0; +}; struct VIn { @@ -55,11 +52,6 @@ VOut vs(VIn input) return output; } -#endif - - -#if PIXEL_SHADER - float4 ps(VOut input) : SV_Target { Texture2D texture0 = ResourceDescriptorHeap[textureIndex]; @@ -68,5 +60,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/renderer/shaders/crp/opaque.hlsl b/code/renderer/shaders/crp/opaque.hlsl index 1116767..0811d89 100644 --- a/code/renderer/shaders/crp/opaque.hlsl +++ b/code/renderer/shaders/crp/opaque.hlsl @@ -48,9 +48,6 @@ cbuffer RootConstants // @TODO: Voronoi tiling }; - -#if VERTEX_SHADER - struct VIn { float3 position : POSITION; @@ -59,8 +56,6 @@ struct VIn float4 color : COLOR0; }; -#endif - struct VOut { float4 position : SV_Position; @@ -72,9 +67,6 @@ struct VOut float depthVS : DEPTHVS; }; - -#if VERTEX_SHADER - VOut vs(VIn input) { float4 positionVS = mul(modelViewMatrix, float4(input.position.xyz, 1)); @@ -91,11 +83,6 @@ VOut vs(VIn input) return output; } -#endif - - -#if PIXEL_SHADER - float4 ps(VOut input) : SV_Target { // @TODO: Voronoi tiling @@ -127,5 +114,3 @@ float4 ps(VOut input) : SV_Target return dst; } - -#endif diff --git a/code/renderer/shaders/crp/tone_map.hlsl b/code/renderer/shaders/crp/tone_map.hlsl index 73f7dde..f37c21e 100644 --- a/code/renderer/shaders/crp/tone_map.hlsl +++ b/code/renderer/shaders/crp/tone_map.hlsl @@ -23,14 +23,9 @@ along with Challenge Quake 3. If not, see . #include "common.hlsli" +#include "fullscreen.hlsli" -struct VOut -{ - float4 position : SV_Position; - float2 texCoords : TEXCOORD0; -}; - cbuffer RootConstants { uint textureIndex; @@ -40,9 +35,6 @@ cbuffer RootConstants float greyscale; }; - -#if VERTEX_SHADER - VOut vs(uint id : SV_VertexID) { VOut output; @@ -52,11 +44,6 @@ VOut vs(uint id : SV_VertexID) return output; } -#endif - - -#if PIXEL_SHADER - // X3571: pow(f, e) won't work if f is negative #pragma warning(disable : 3571) @@ -70,5 +57,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/renderer/shaders/crp/tone_map_inverse.hlsl b/code/renderer/shaders/crp/tone_map_inverse.hlsl index 858fa86..7064991 100644 --- a/code/renderer/shaders/crp/tone_map_inverse.hlsl +++ b/code/renderer/shaders/crp/tone_map_inverse.hlsl @@ -22,14 +22,9 @@ along with Challenge Quake 3. If not, see . #include "common.hlsli" +#include "fullscreen.hlsli" -struct VOut -{ - float4 position : SV_Position; - float2 texCoords : TEXCOORD0; -}; - cbuffer RootConstants { uint textureIndex; @@ -38,9 +33,6 @@ cbuffer RootConstants float invBrightness; }; - -#if VERTEX_SHADER - VOut vs(uint id : SV_VertexID) { VOut output; @@ -50,11 +42,6 @@ VOut vs(uint id : SV_VertexID) return output; } -#endif - - -#if PIXEL_SHADER - // X3571: pow(f, e) won't work if f is negative #pragma warning(disable : 3571) @@ -68,5 +55,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/renderer/shaders/crp/transp_draw.hlsl b/code/renderer/shaders/crp/transp_draw.hlsl index 9b04faa..fb45ff9 100644 --- a/code/renderer/shaders/crp/transp_draw.hlsl +++ b/code/renderer/shaders/crp/transp_draw.hlsl @@ -46,8 +46,6 @@ cbuffer RootConstants uint depthFadeScaleBias; // enable: 1 - color bias: 4 - color scale: 4 }; -#if VERTEX_SHADER - struct VIn { float3 position : POSITION; @@ -56,8 +54,6 @@ struct VIn float4 color : COLOR0; }; -#endif - struct VOut { float4 position : SV_Position; @@ -69,9 +65,6 @@ struct VOut float depthVS : DEPTHVS; }; - -#if VERTEX_SHADER - VOut vs(VIn input) { float4 positionVS = mul(modelViewMatrix, float4(input.position.xyz, 1)); @@ -88,11 +81,6 @@ VOut vs(VIn input) return output; } -#endif - - -#if PIXEL_SHADER - [earlydepthstencil] void ps(VOut input) { @@ -132,5 +120,3 @@ void ps(VOut input) InterlockedAdd(counter[0].fragmentCount, -1, garbage); } } - -#endif diff --git a/code/renderer/shaders/crp/transp_resolve.hlsl b/code/renderer/shaders/crp/transp_resolve.hlsl index 1ca6138..fedc81e 100644 --- a/code/renderer/shaders/crp/transp_resolve.hlsl +++ b/code/renderer/shaders/crp/transp_resolve.hlsl @@ -23,6 +23,7 @@ along with Challenge Quake 3. If not, see . #include "common.hlsli" #include "oit.h.hlsli" +#include "fullscreen.hlsli" #include "../common/state_bits.h.hlsli" @@ -40,29 +41,6 @@ cbuffer RootConstants float2 scissorRectMax; }; -struct VOut -{ - float4 position : SV_Position; - float2 texCoords : TEXCOORD0; -}; - - -#if VERTEX_SHADER - -VOut vs(uint id : SV_VertexID) -{ - VOut output; - output.position = FSTrianglePosFromVertexId(id); - output.texCoords = FSTriangleTCFromVertexId(id); - - return output; -} - -#endif - - -#if PIXEL_SHADER - uint GetShaderStage(uint stateBits) { return (stateBits & GLS_STAGEINDEX_BITS) >> GLS_STAGEINDEX_SHIFT; @@ -212,5 +190,3 @@ float4 ps(VOut input) : SV_Target return color; } - -#endif diff --git a/code/renderer/shaders/crp/ui.hlsl b/code/renderer/shaders/crp/ui.hlsl index ad10c92..b73fa4b 100644 --- a/code/renderer/shaders/crp/ui.hlsl +++ b/code/renderer/shaders/crp/ui.hlsl @@ -21,13 +21,6 @@ along with Challenge Quake 3. If not, see . // UI rendering -struct VOut -{ - float4 position : SV_Position; - float2 texCoords : TEXCOORD0; - float4 color : COLOR0; -}; - cbuffer RootConstants : register(b0) { float2 scale; @@ -35,8 +28,12 @@ cbuffer RootConstants : register(b0) uint samplerIndex; }; - -#if VERTEX_SHADER +struct VOut +{ + float4 position : SV_Position; + float2 texCoords : TEXCOORD0; + float4 color : COLOR0; +}; struct VIn { @@ -56,11 +53,6 @@ VOut vs(VIn input) return output; } -#endif - - -#if PIXEL_SHADER - float4 ps(VOut input) : SV_Target { Texture2D texture0 = ResourceDescriptorHeap[textureIndex]; @@ -69,5 +61,3 @@ float4 ps(VOut input) : SV_Target return result; } - -#endif diff --git a/code/shadercomp/shadercomp.cpp b/code/shadercomp/shadercomp.cpp index 69e5ee9..86000ef 100644 --- a/code/shadercomp/shadercomp.cpp +++ b/code/shadercomp/shadercomp.cpp @@ -80,6 +80,17 @@ struct ShaderArgs const char* targetProfile; }; +const char* OutputPath(const char* path) +{ + return va("%s\\%s", outputPath, path); +} + +const char* HeaderVariable(const char* name) +{ + // the output variable isn't declared static, polluting the global namespace... + return va("\"static %s\"", name); +} + void CompileShader(const ShaderArgs& args, int extraCount = 0, const char** extras = NULL) { static char temp[4096]; @@ -119,7 +130,7 @@ void CompileSMAAShader(const SMAAArgs& smaaArgs) { const char* extras[] = { - "-Vn", smaaArgs.variableName, + "-Vn", HeaderVariable(smaaArgs.variableName), smaaArgs.presetMacro, smaaArgs.vertexShader ? "-D SMAA_INCLUDE_VS=1" : "-D SMAA_INCLUDE_PS=1", "-D SMAA_HLSL_5_1=1", @@ -159,9 +170,49 @@ void CompileSMAAShaders() ProcessSMAAShadersForPreset("ultra", "-D SMAA_PRESET_ULTRA=1"); } -void CompileVS(const char* headerPath, const char* shaderPath) +void CompileGraphics(const char* headerPath, const char* shaderPath, const char* varName) { - const char* extras[] = { "-D VERTEX_SHADER=1" }; + const char* vsHeaderRelPath = va("%s.vs.h", shaderPath); + const char* psHeaderRelPath = va("%s.ps.h", shaderPath); + const char* vsHeaderPath = OutputPath(vsHeaderRelPath); + const char* psHeaderPath = OutputPath(psHeaderRelPath); + const char* vsExtras[] = + { + "-D", "VERTEX_SHADER=1", + "-Vn", HeaderVariable(va("g_%s_vs", varName)) + }; + const char* psExtras[] = + { + "-D", "PIXEL_SHADER=1", + "-Vn", HeaderVariable(va("g_%s_ps", varName)) + }; + + ShaderArgs args; + args.entryPoint = "vs"; + args.headerPath = vsHeaderRelPath; + args.shaderPath = shaderPath; + args.targetProfile = targetVS; + CompileShader(args, _countof(vsExtras), vsExtras); + + args.entryPoint = "ps"; + args.headerPath = psHeaderRelPath; + args.shaderPath = shaderPath; + args.targetProfile = targetPS; + CompileShader(args, _countof(psExtras), psExtras); + + const char* outHeaderPath = OutputPath(headerPath); + system(va("type %s %s > %s", vsHeaderPath, psHeaderPath, outHeaderPath)); + system(va("del %s", vsHeaderPath)); + system(va("del %s", psHeaderPath)); +} + +void CompileVertexShader(const char* headerPath, const char* shaderPath, const char* varName) +{ + const char* extras[] = + { + "-D", "VERTEX_SHADER=1", + "-Vn", HeaderVariable(va("g_%s_vs", varName)) + }; ShaderArgs args; args.entryPoint = "vs"; @@ -171,9 +222,13 @@ void CompileVS(const char* headerPath, const char* shaderPath) CompileShader(args, _countof(extras), extras); } -void CompilePS(const char* headerPath, const char* shaderPath) +void CompilePixelShader(const char* headerPath, const char* shaderPath, const char* varName) { - const char* extras[] = { "-D PIXEL_SHADER=1" }; + const char* extras[] = + { + "-D", "PIXEL_SHADER=1", + "-Vn", HeaderVariable(va("g_%s_ps", varName)) + }; ShaderArgs args; args.entryPoint = "ps"; @@ -183,9 +238,13 @@ void CompilePS(const char* headerPath, const char* shaderPath) CompileShader(args, _countof(extras), extras); } -void CompileCS(const char* headerPath, const char* shaderPath) +void CompileCompute(const char* headerPath, const char* shaderPath, const char* varName) { - const char* extras[] = { "-D COMPUTE_SHADER=1" }; + const char* extras[] = + { + "-D", "COMPUTE_SHADER=1", + "-Vn", HeaderVariable(va("g_%s_cs", varName)) + }; ShaderArgs args; args.entryPoint = "cs"; @@ -195,19 +254,13 @@ void CompileCS(const char* headerPath, const char* shaderPath) CompileShader(args, _countof(extras), extras); } -void CompileVSAndPS(const char* headerPathPrefix, const char* shaderPath) -{ - CompileVS(va("%s_vs.h", headerPathPrefix), shaderPath); - CompilePS(va("%s_ps.h", headerPathPrefix), shaderPath); -} - void CompileUberVS(const char* headerPath, const char* shaderPath, int stageCount) { const char* extras[] = { - "-D VERTEX_SHADER=1", - va("-D STAGE_COUNT=%d", stageCount), - va("-Vn g_vs_%d", stageCount) + "-D", "VERTEX_SHADER=1", + "-D", va("STAGE_COUNT=%d", stageCount), + "-Vn", HeaderVariable(va("g_vs_%d", stageCount)) }; ShaderArgs args; @@ -229,7 +282,7 @@ void CompileUberPS(const char* stateString) const char* extras[16]; int extraCount = 0; - extras[extraCount++] = va("-Vn g_ps_%s", stateString); + extras[extraCount++] = va("-Vn %s", HeaderVariable(va("g_ps_%s", stateString))); extras[extraCount++] = "-D USE_INCLUDES=1"; extras[extraCount++] = "-D PIXEL_SHADER=1"; if(state.globalState & UBERPS_DITHER_BIT) @@ -283,19 +336,19 @@ void ProcessGRP() targetPS = "ps_6_0"; targetCS = "cs_6_0"; - CompileVSAndPS("post_gamma", "post_gamma.hlsl"); - CompileVSAndPS("post_inverse_gamma", "post_inverse_gamma.hlsl"); - CompileVSAndPS("imgui", "imgui.hlsl"); - CompileVSAndPS("nuklear", "nuklear.hlsl"); - CompileVSAndPS("ui", "ui.hlsl"); - CompileVSAndPS("depth_pre_pass", "depth_pre_pass.hlsl"); - CompileVSAndPS("dynamic_light", "dynamic_light.hlsl"); - CompileVS("fog_vs.h", "fog_inside.hlsl"); - CompilePS("fog_inside_ps.h", "fog_inside.hlsl"); - CompilePS("fog_outside_ps.h", "fog_outside.hlsl"); - CompileCS("mip_1_cs.h", "mip_1.hlsl"); - CompileCS("mip_2_cs.h", "mip_2.hlsl"); - CompileCS("mip_3_cs.h", "mip_3.hlsl"); + CompileGraphics("post_gamma.h", "post_gamma.hlsl", "post"); + CompileGraphics("post_inverse_gamma.h", "post_inverse_gamma.hlsl", "post_inverse"); + CompileGraphics("imgui.h", "imgui.hlsl", "imgui"); + CompileGraphics("nuklear.h", "nuklear.hlsl", "nuklear"); + CompileGraphics("ui.h", "ui.hlsl", "ui"); + CompileGraphics("depth_pre_pass.h", "depth_pre_pass.hlsl", "zpp"); + CompileGraphics("dynamic_light.h", "dynamic_light.hlsl", "dl"); + CompileVertexShader("fog.h", "fog_inside.hlsl", "fog"); + CompilePixelShader("fog_inside.h", "fog_inside.hlsl", "fog_inside"); + CompilePixelShader("fog_outside.h", "fog_outside.hlsl", "fog_outside"); + CompileCompute("mip_1.h", "mip_1.hlsl", "mip_1"); + CompileCompute("mip_2.h", "mip_2.hlsl", "mip_2"); + CompileCompute("mip_3.h", "mip_3.hlsl", "mip_3"); CompileSMAAShaders(); system(va("type %s\\smaa*.h > %s\\complete_smaa.h", outputPath, outputPath)); @@ -327,31 +380,31 @@ void ProcessCRP() targetPS = "ps_6_6"; targetCS = "cs_6_6"; - CompileVSAndPS("blit", "blit.hlsl"); - CompileVSAndPS("ui", "ui.hlsl"); - CompileVSAndPS("imgui", "imgui.hlsl"); - CompileVSAndPS("nuklear", "nuklear.hlsl"); - CompileCS("mip_1_cs.h", "mip_1.hlsl"); - CompileCS("mip_2_cs.h", "mip_2.hlsl"); - CompileCS("mip_3_cs.h", "mip_3.hlsl"); - - CompileVSAndPS("opaque", "opaque.hlsl"); - CompileVSAndPS("transp_draw", "transp_draw.hlsl"); - CompileVSAndPS("transp_resolve", "transp_resolve.hlsl"); - CompileVSAndPS("tone_map", "tone_map.hlsl"); - CompileVSAndPS("tone_map_inverse", "tone_map_inverse.hlsl"); - CompileVSAndPS("accumdof_accum", "accumdof_accum.hlsl"); - CompileVSAndPS("accumdof_norm", "accumdof_norm.hlsl"); - CompileVSAndPS("accumdof_debug", "accumdof_debug.hlsl"); - CompileCS("gatherdof_split.h", "gatherdof_split.hlsl"); - CompileCS("gatherdof_coc_tile_gen.h", "gatherdof_coc_tile_gen.hlsl"); - CompileCS("gatherdof_coc_tile_max.h", "gatherdof_coc_tile_max.hlsl"); - CompileCS("gatherdof_blur.h", "gatherdof_blur.hlsl"); - CompileCS("gatherdof_fill.h", "gatherdof_fill.hlsl"); - CompileVSAndPS("gatherdof_combine", "gatherdof_combine.hlsl"); - CompileVSAndPS("gatherdof_debug", "gatherdof_debug.hlsl"); - CompileVSAndPS("fog_inside", "fog_inside.hlsl"); - CompileVSAndPS("fog_outside", "fog_outside.hlsl"); + CompileVertexShader("fullscreen.h", "fullscreen.hlsl", "fullscreen"); + CompilePixelShader("blit.h", "blit.hlsl", "blit"); + CompileGraphics("ui.h", "ui.hlsl", "ui"); + CompileGraphics("imgui.h", "imgui.hlsl", "imgui"); + CompileGraphics("nuklear.h", "nuklear.hlsl", "nuklear"); + CompileCompute("mip_1.h", "mip_1.hlsl", "mip_1"); + CompileCompute("mip_2.h", "mip_2.hlsl", "mip_2"); + CompileCompute("mip_3.h", "mip_3.hlsl", "mip_3"); + CompileGraphics("opaque.h", "opaque.hlsl", "opaque"); + CompileGraphics("transp_draw.h", "transp_draw.hlsl", "transp_draw"); + CompilePixelShader("transp_resolve.h", "transp_resolve.hlsl", "transp_resolve"); + CompilePixelShader("tone_map.h", "tone_map.hlsl", "tone_map"); + CompilePixelShader("tone_map_inverse.h", "tone_map_inverse.hlsl", "tone_map_inverse"); + CompilePixelShader("accumdof_accum.h", "accumdof_accum.hlsl", "accum"); + CompilePixelShader("accumdof_norm.h", "accumdof_norm.hlsl", "norm"); + CompilePixelShader("accumdof_debug.h", "accumdof_debug.hlsl", "debug"); + CompileCompute("gatherdof_split.h", "gatherdof_split.hlsl", "split"); + CompileCompute("gatherdof_coc_tile_gen.h", "gatherdof_coc_tile_gen.hlsl", "coc_tile_gen"); + CompileCompute("gatherdof_coc_tile_max.h", "gatherdof_coc_tile_max.hlsl", "coc_tile_max"); + CompileCompute("gatherdof_blur.h", "gatherdof_blur.hlsl", "blur"); + CompileCompute("gatherdof_fill.h", "gatherdof_fill.hlsl", "fill"); + CompilePixelShader("gatherdof_combine.h", "gatherdof_combine.hlsl", "combine"); + CompilePixelShader("gatherdof_debug.h", "gatherdof_debug.hlsl", "debug"); + CompileGraphics("fog_inside.h", "fog_inside.hlsl", "inside"); + CompileGraphics("fog_outside.h", "fog_outside.hlsl", "outside"); } int main(int /*argc*/, const char** argv) diff --git a/makefiles/premake5.lua b/makefiles/premake5.lua index 7c553f7..0144bbd 100644 --- a/makefiles/premake5.lua +++ b/makefiles/premake5.lua @@ -656,6 +656,12 @@ solution "cnq3" if os.istarget("windows") then files { string.format("%s/renderer/shaders/**.hlsl", path_src) } files { string.format("%s/renderer/shaders/**.hlsli", path_src) } + --[[ remap file paths to not have a top-level "shaders" filter + vpaths { ["shaders_common"] = string.format("%s/renderer/shaders/common", path_src) } + vpaths { ["shaders_grp"] = string.format("%s/renderer/shaders/grp", path_src) } + vpaths { ["shaders_crp"] = string.format("%s/renderer/shaders/crp", path_src) } + vpaths { [""] = string.format("%s/renderer", path_src) } + --]] filter "files:**.hlsl" flags { "ExcludeFromBuild" } filter { } diff --git a/makefiles/windows_vs2019/renderer.vcxproj b/makefiles/windows_vs2019/renderer.vcxproj index bef5e36..1f41d78 100644 --- a/makefiles/windows_vs2019/renderer.vcxproj +++ b/makefiles/windows_vs2019/renderer.vcxproj @@ -190,6 +190,9 @@ true + + true + true @@ -300,6 +303,7 @@ + diff --git a/makefiles/windows_vs2019/renderer.vcxproj.filters b/makefiles/windows_vs2019/renderer.vcxproj.filters index c045ac2..34bdace 100644 --- a/makefiles/windows_vs2019/renderer.vcxproj.filters +++ b/makefiles/windows_vs2019/renderer.vcxproj.filters @@ -94,6 +94,9 @@ shaders\crp + + shaders\crp + shaders\crp @@ -216,6 +219,9 @@ shaders\crp + + shaders\crp + shaders\crp diff --git a/makefiles/windows_vs2022/renderer.vcxproj b/makefiles/windows_vs2022/renderer.vcxproj index 2f93908..43727a7 100644 --- a/makefiles/windows_vs2022/renderer.vcxproj +++ b/makefiles/windows_vs2022/renderer.vcxproj @@ -192,6 +192,9 @@ true + + true + true @@ -302,6 +305,7 @@ + diff --git a/makefiles/windows_vs2022/renderer.vcxproj.filters b/makefiles/windows_vs2022/renderer.vcxproj.filters index c045ac2..34bdace 100644 --- a/makefiles/windows_vs2022/renderer.vcxproj.filters +++ b/makefiles/windows_vs2022/renderer.vcxproj.filters @@ -94,6 +94,9 @@ shaders\crp + + shaders\crp + shaders\crp @@ -216,6 +219,9 @@ shaders\crp + + shaders\crp + shaders\crp