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