diff --git a/renderdoc/data/hlsl/fixedcol.hlsl b/renderdoc/data/hlsl/fixedcol.hlsl new file mode 100644 index 000000000..45e50d900 --- /dev/null +++ b/renderdoc/data/hlsl/fixedcol.hlsl @@ -0,0 +1,43 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2020 Baldur Karlsson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ + +#define RED 0 +#define GREEN 1 +#define HIGHLIGHT 2 +#define WIREFRAME 3 + +float4 main() : SV_Target0 +{ +#if VARIANT == RED + return float4(1.0f, 0.0f, 0.0f, 1.0f); +#elif VARIANT == GREEN + return float4(0.0f, 1.0f, 0.0f, 1.0f); +#elif VARIANT == HIGHLIGHT + return float4(0.8f, 0.1f, 0.8f, 1.0f); +#elif VARIANT == WIREFRAME + return float4(200.0f / 255.0f, 255.0f / 255.0f, 0.0f / 255.0f, 1.0f); +#else + return float4(1.0f, 0.0f, 1.0f, 1.0f); +#endif +} diff --git a/renderdoc/data/renderdoc.rc b/renderdoc/data/renderdoc.rc index 04abb3803..26ffde5da 100644 --- a/renderdoc/data/renderdoc.rc +++ b/renderdoc/data/renderdoc.rc @@ -113,6 +113,7 @@ RESOURCE_texdisplay_hlsl TYPE_EMBED "hlsl/texdisplay.hlsl" RESOURCE_pixelhistory_hlsl TYPE_EMBED "hlsl/pixelhistory.hlsl" RESOURCE_quadoverdraw_hlsl TYPE_EMBED "hlsl/quadoverdraw.hlsl" RESOURCE_texremap_hlsl TYPE_EMBED "hlsl/texremap.hlsl" +RESOURCE_fixedcol_hlsl TYPE_EMBED "hlsl/fixedcol.hlsl" RESOURCE_sourcecodepro_ttf TYPE_EMBED "sourcecodepro.ttf" diff --git a/renderdoc/data/resource.h b/renderdoc/data/resource.h index 69f072d39..803943fd4 100644 --- a/renderdoc/data/resource.h +++ b/renderdoc/data/resource.h @@ -16,6 +16,7 @@ #define RESOURCE_pixelhistory_hlsl 109 #define RESOURCE_quadoverdraw_hlsl 110 #define RESOURCE_texremap_hlsl 111 +#define RESOURCE_fixedcol_hlsl 112 #define RESOURCE_sourcecodepro_ttf 301 diff --git a/renderdoc/driver/d3d12/d3d12_shader_cache.cpp b/renderdoc/driver/d3d12/d3d12_shader_cache.cpp index b2a054af9..c4dda4ec9 100644 --- a/renderdoc/driver/d3d12/d3d12_shader_cache.cpp +++ b/renderdoc/driver/d3d12/d3d12_shader_cache.cpp @@ -799,12 +799,14 @@ ID3DBlob *D3D12ShaderCache::MakeRootSig(const D3D12RootSignature &rootsig) rootsig.StaticSamplers.empty() ? NULL : &rootsig.StaticSamplers[0]); } -ID3DBlob *D3D12ShaderCache::MakeFixedColShader(float overlayConsts[4]) +ID3DBlob *D3D12ShaderCache::MakeFixedColShader(FixedColVariant variant) { ID3DBlob *ret = NULL; rdcstr hlsl = - StringFormat::Fmt("float4 main() : SV_Target0 { return float4(%f, %f, %f, %f); }\n", - overlayConsts[0], overlayConsts[1], overlayConsts[2], overlayConsts[3]); - GetShaderBlob(hlsl.c_str(), "main", D3DCOMPILE_WARNINGS_ARE_ERRORS, "ps_5_0", &ret); + StringFormat::Fmt("#define VARIANT %u\n\n", variant) + GetEmbeddedResource(fixedcol_hlsl); + bool wasCaching = m_CacheShaders; + m_CacheShaders = true; + GetShaderBlob(hlsl.c_str(), "main", ShaderCompileFlags(), "ps_5_0", &ret); + m_CacheShaders = wasCaching; return ret; } diff --git a/renderdoc/driver/d3d12/d3d12_shader_cache.h b/renderdoc/driver/d3d12/d3d12_shader_cache.h index 6b719ee31..06c5f4bda 100644 --- a/renderdoc/driver/d3d12/d3d12_shader_cache.h +++ b/renderdoc/driver/d3d12/d3d12_shader_cache.h @@ -49,7 +49,16 @@ public: UINT NumStaticSamplers = 0, const D3D12_STATIC_SAMPLER_DESC *StaticSamplers = NULL); ID3DBlob *MakeRootSig(const D3D12RootSignature &rootsig); - ID3DBlob *MakeFixedColShader(float overlayConsts[4]); + + // must match the values in fixedcol.hlsl + enum FixedColVariant + { + RED = 0, + GREEN = 1, + HIGHLIGHT = 2, + WIREFRAME = 3, + }; + ID3DBlob *MakeFixedColShader(FixedColVariant variant); void SetCaching(bool enabled) { m_CacheShaders = enabled; } private: diff --git a/renderdoc/renderdoc.vcxproj b/renderdoc/renderdoc.vcxproj index 9414c496a..3b5dae41c 100644 --- a/renderdoc/renderdoc.vcxproj +++ b/renderdoc/renderdoc.vcxproj @@ -625,6 +625,7 @@ + diff --git a/renderdoc/renderdoc.vcxproj.filters b/renderdoc/renderdoc.vcxproj.filters index 5b8f01fb8..2879291ce 100644 --- a/renderdoc/renderdoc.vcxproj.filters +++ b/renderdoc/renderdoc.vcxproj.filters @@ -1060,6 +1060,9 @@ Resources\hlsl + + Resources\hlsl + Resources\hlsl