Embed D3D12 Pixel History DXIL compiled shaders as resources

Fallback to use the embedded compiled shader if the source shader fails to compile
Only try to get pixel history DXIL shaders for captures that use DXIL
This commit is contained in:
Jake Turner committed 2024-06-20 14:25:08 +01:00
1 parent 1dbd64c791
commit 0d1b8f8154
6 files changed
+111 -5

No files matched your search

+18
View File
@@ -131,6 +131,15 @@ RESOURCE_fixedcol_1_dxbc TYPE_EMBED fixedcol_1.dxbc
RESOURCE_fixedcol_2_dxbc TYPE_EMBED fixedcol_2.dxbc
RESOURCE_fixedcol_3_dxbc TYPE_EMBED fixedcol_3.dxbc
RESOURCE_quadwrite_dxbc TYPE_EMBED quadwrite.dxbc
RESOURCE_pixelhistory_primitiveid_dxbc TYPE_EMBED pixelhistory_primitiveid.dxbc
RESOURCE_pixelhistory_fixedcol_0_dxbc TYPE_EMBED pixelhistory_fixedcol_0.dxbc
RESOURCE_pixelhistory_fixedcol_1_dxbc TYPE_EMBED pixelhistory_fixedcol_1.dxbc
RESOURCE_pixelhistory_fixedcol_2_dxbc TYPE_EMBED pixelhistory_fixedcol_2.dxbc
RESOURCE_pixelhistory_fixedcol_3_dxbc TYPE_EMBED pixelhistory_fixedcol_3.dxbc
RESOURCE_pixelhistory_fixedcol_4_dxbc TYPE_EMBED pixelhistory_fixedcol_4.dxbc
RESOURCE_pixelhistory_fixedcol_5_dxbc TYPE_EMBED pixelhistory_fixedcol_5.dxbc
RESOURCE_pixelhistory_fixedcol_6_dxbc TYPE_EMBED pixelhistory_fixedcol_6.dxbc
RESOURCE_pixelhistory_fixedcol_7_dxbc TYPE_EMBED pixelhistory_fixedcol_7.dxbc
#else
@@ -139,6 +148,15 @@ RESOURCE_fixedcol_1_dxbc TYPE_EMBED "hlsl/empty.dxbc"
RESOURCE_fixedcol_2_dxbc TYPE_EMBED "hlsl/empty.dxbc"
RESOURCE_fixedcol_3_dxbc TYPE_EMBED "hlsl/empty.dxbc"
RESOURCE_quadwrite_dxbc TYPE_EMBED "hlsl/empty.dxbc"
RESOURCE_pixelhistory_primitiveid_dxbc TYPE_EMBED "hlsl/empty.dxbc"
RESOURCE_pixelhistory_fixedcol_0_dxbc TYPE_EMBED "hlsl/empty.dxbc"
RESOURCE_pixelhistory_fixedcol_1_dxbc TYPE_EMBED "hlsl/empty.dxbc"
RESOURCE_pixelhistory_fixedcol_2_dxbc TYPE_EMBED "hlsl/empty.dxbc"
RESOURCE_pixelhistory_fixedcol_3_dxbc TYPE_EMBED "hlsl/empty.dxbc"
RESOURCE_pixelhistory_fixedcol_4_dxbc TYPE_EMBED "hlsl/empty.dxbc"
RESOURCE_pixelhistory_fixedcol_5_dxbc TYPE_EMBED "hlsl/empty.dxbc"
RESOURCE_pixelhistory_fixedcol_6_dxbc TYPE_EMBED "hlsl/empty.dxbc"
RESOURCE_pixelhistory_fixedcol_7_dxbc TYPE_EMBED "hlsl/empty.dxbc"
#endif
+9
View File
@@ -27,6 +27,15 @@
#define RESOURCE_fixedcol_2_dxbc 115
#define RESOURCE_fixedcol_3_dxbc 116
#define RESOURCE_quadwrite_dxbc 117
#define RESOURCE_pixelhistory_primitiveid_dxbc 122
#define RESOURCE_pixelhistory_fixedcol_0_dxbc 123
#define RESOURCE_pixelhistory_fixedcol_1_dxbc 124
#define RESOURCE_pixelhistory_fixedcol_2_dxbc 125
#define RESOURCE_pixelhistory_fixedcol_3_dxbc 126
#define RESOURCE_pixelhistory_fixedcol_4_dxbc 127
#define RESOURCE_pixelhistory_fixedcol_5_dxbc 128
#define RESOURCE_pixelhistory_fixedcol_6_dxbc 129
#define RESOURCE_pixelhistory_fixedcol_7_dxbc 130
#define RESOURCE_sourcecodepro_ttf 301
+39 -4
View File
@@ -2925,16 +2925,51 @@ void D3D12Replay::PixelHistory::Init(WrappedID3D12Device *device, D3D12DebugMana
shaderCache->GetShaderBlob(hlsl.c_str(), "RENDERDOC_PrimitiveIDPS",
D3DCOMPILE_WARNINGS_ARE_ERRORS, {}, "ps_5_0", &PrimitiveIDPS);
shaderCache->GetShaderBlob(hlsl.c_str(), "RENDERDOC_PrimitiveIDPS",
D3DCOMPILE_WARNINGS_ARE_ERRORS, {}, "ps_6_0", &PrimitiveIDPSDxil);
for(int i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
{
rdcstr hlsl_variant = "#define RT " + ToStr(i) + "\n" + hlsl;
shaderCache->GetShaderBlob(hlsl_variant.c_str(), "RENDERDOC_PixelHistoryFixedColPS",
D3DCOMPILE_WARNINGS_ARE_ERRORS, {}, "ps_5_0", &FixedColorPS[i]);
shaderCache->GetShaderBlob(hlsl_variant.c_str(), "RENDERDOC_PixelHistoryFixedColPS",
D3DCOMPILE_WARNINGS_ARE_ERRORS, {}, "ps_6_0", &FixedColorPSDxil[i]);
}
// only create DXIL shaders if DXIL was used by the application to reduce the chance of failure
if(device->UsedDXIL())
{
shaderCache->GetShaderBlob(hlsl.c_str(), "RENDERDOC_PrimitiveIDPS",
D3DCOMPILE_WARNINGS_ARE_ERRORS, {}, "ps_6_0", &PrimitiveIDPSDxil);
if(PrimitiveIDPSDxil == NULL)
{
RDCWARN(
"Couldn't compile DXIL Pixel History Primitive ID shader at runtime, falling back to "
"baked DXIL shader");
PrimitiveIDPSDxil = shaderCache->GetPrimitiveIDShaderDXILBlob();
if(!PrimitiveIDPSDxil)
{
RDCWARN("No fallback DXIL shader available!");
}
}
for(int i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
{
rdcstr hlsl_variant = "#define RT " + ToStr(i) + "\n" + hlsl;
shaderCache->GetShaderBlob(hlsl_variant.c_str(), "RENDERDOC_PixelHistoryFixedColPS",
D3DCOMPILE_WARNINGS_ARE_ERRORS, {}, "ps_6_0", &FixedColorPSDxil[i]);
if(FixedColorPSDxil[i] == NULL)
{
RDCWARN(
"Couldn't compile DXIL Pixel History Fixed Color %d shader at runtime, falling back to "
"baked DXIL shader",
i);
FixedColorPSDxil[i] = shaderCache->GetFixedColorShaderDXILBlob(i);
if(!FixedColorPSDxil[i])
{
RDCWARN("No fallback DXIL shader available!");
}
}
}
}
shaderCache->SetCaching(false);
@@ -1072,6 +1072,39 @@ ID3DBlob *D3D12ShaderCache::GetQuadShaderDXILBlob()
return ret;
}
ID3DBlob *D3D12ShaderCache::GetPrimitiveIDShaderDXILBlob()
{
rdcstr embedded = GetEmbeddedResource(pixelhistory_primitiveid_dxbc);
if(embedded.empty() || !embedded.beginsWith("DXBC"))
return NULL;
ID3DBlob *ret = NULL;
D3D12ShaderCacheCallbacks.Create((uint32_t)embedded.size(), embedded.data(), &ret);
return ret;
}
ID3DBlob *D3D12ShaderCache::GetFixedColorShaderDXILBlob(uint32_t variant)
{
const rdcstr variants[] = {
GetEmbeddedResource(pixelhistory_fixedcol_0_dxbc),
GetEmbeddedResource(pixelhistory_fixedcol_1_dxbc),
GetEmbeddedResource(pixelhistory_fixedcol_2_dxbc),
GetEmbeddedResource(pixelhistory_fixedcol_3_dxbc),
GetEmbeddedResource(pixelhistory_fixedcol_4_dxbc),
GetEmbeddedResource(pixelhistory_fixedcol_5_dxbc),
GetEmbeddedResource(pixelhistory_fixedcol_6_dxbc),
GetEmbeddedResource(pixelhistory_fixedcol_7_dxbc),
};
const rdcstr embedded = variants[variant];
if(embedded.empty() || !embedded.beginsWith("DXBC"))
return NULL;
ID3DBlob *ret = NULL;
D3D12ShaderCacheCallbacks.Create((uint32_t)embedded.size(), embedded.data(), &ret);
return ret;
}
void D3D12ShaderCache::LoadDXC()
{
GetDXC();
@@ -58,6 +58,8 @@ public:
};
ID3DBlob *MakeFixedColShader(FixedColVariant variant, bool dxil = false);
ID3DBlob *GetQuadShaderDXILBlob();
ID3DBlob *GetPrimitiveIDShaderDXILBlob();
ID3DBlob *GetFixedColorShaderDXILBlob(uint32_t variant);
void LoadDXC();
+10 -1
View File
@@ -818,7 +818,7 @@ namespace DXCEnumerateAndCheck {
</ResourceCompile>
</ItemGroup>
</Target>
<Target Name="_bakeShaders" BeforeTargets="PrepareForBuild" Condition="$(DXCExecutable.Length) &gt; 0" Inputs="data\hlsl\fixedcol.hlsl;data\hlsl\quadoverdraw.hlsl" Outputs="$(DXILBakedDir)\fixedcol_0.dxbc;$(DXILBakedDir)\fixedcol_1.dxbc;$(DXILBakedDir)\fixedcol_2.dxbc;$(DXILBakedDir)\fixedcol_3.dxbc;$(DXILBakedDir)\quadwrite.dxbc">
<Target Name="_bakeShaders" BeforeTargets="PrepareForBuild" Condition="$(DXCExecutable.Length) &gt; 0" Inputs="data\hlsl\fixedcol.hlsl;data\hlsl\quadoverdraw.hlsl;data\hlsl\d3d12_pixelhistory.hlsl" Outputs="$(DXILBakedDir)\fixedcol_0.dxbc;$(DXILBakedDir)\fixedcol_1.dxbc;$(DXILBakedDir)\fixedcol_2.dxbc;$(DXILBakedDir)\fixedcol_3.dxbc;$(DXILBakedDir)\quadwrite.dxbc;$(DXILBakedDir)\pixelhistory_primitiveid.dxbc;$(DXILBakedDir)\pixelhistory_fixedcol_0.dxbc;$(DXILBakedDir)\pixelhistory_fixedcol_1.dxbc;$(DXILBakedDir)\pixelhistory_fixedcol_2.dxbc;$(DXILBakedDir)\pixelhistory_fixedcol_3.dxbc;$(DXILBakedDir)\pixelhistory_fixedcol_4.dxbc;$(DXILBakedDir)\pixelhistory_fixedcol_5.dxbc;$(DXILBakedDir)\pixelhistory_fixedcol_6.dxbc;$(DXILBakedDir)\pixelhistory_fixedcol_7.dxbc">
<Message Text="Baking DXIL Shaders with $(DXCExecutable)" Importance="High" />
<MakeDir Directories="$(DXILBakedDir)" />
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\fixedcol.hlsl&quot; -T ps_6_0 -DVARIANT=0 -E main -Qstrip_reflect -Fo &quot;$(DXILBakedDir)fixedcol_0.dxbc&quot;" />
@@ -826,6 +826,15 @@ namespace DXCEnumerateAndCheck {
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\fixedcol.hlsl&quot; -T ps_6_0 -DVARIANT=2 -E main -Qstrip_reflect -Fo &quot;$(DXILBakedDir)fixedcol_2.dxbc&quot;" />
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\fixedcol.hlsl&quot; -T ps_6_0 -DVARIANT=3 -E main -Qstrip_reflect -Fo &quot;$(DXILBakedDir)fixedcol_3.dxbc&quot;" />
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\quadoverdraw.hlsl&quot; -T ps_6_0 -DD3D12=1 -E RENDERDOC_QuadOverdrawPS -Qstrip_reflect -Fo &quot;$(DXILBakedDir)quadwrite.dxbc&quot;" />
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl&quot; -T ps_6_0 -E RENDERDOC_PrimitiveIDPS -Qstrip_reflect -Fo &quot;$(DXILBakedDir)pixelhistory_primitiveid.dxbc&quot;" />
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl&quot; -T ps_6_0 -DRT=0 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo &quot;$(DXILBakedDir)pixelhistory_fixedcol_0.dxbc&quot;" />
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl&quot; -T ps_6_0 -DRT=1 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo &quot;$(DXILBakedDir)pixelhistory_fixedcol_1.dxbc&quot;" />
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl&quot; -T ps_6_0 -DRT=2 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo &quot;$(DXILBakedDir)pixelhistory_fixedcol_2.dxbc&quot;" />
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl&quot; -T ps_6_0 -DRT=3 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo &quot;$(DXILBakedDir)pixelhistory_fixedcol_3.dxbc&quot;" />
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl&quot; -T ps_6_0 -DRT=4 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo &quot;$(DXILBakedDir)pixelhistory_fixedcol_4.dxbc&quot;" />
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl&quot; -T ps_6_0 -DRT=5 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo &quot;$(DXILBakedDir)pixelhistory_fixedcol_5.dxbc&quot;" />
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl&quot; -T ps_6_0 -DRT=6 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo &quot;$(DXILBakedDir)pixelhistory_fixedcol_6.dxbc&quot;" />
<Exec Command="&quot;$(DXCExecutable)&quot; &quot;$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl&quot; -T ps_6_0 -DRT=7 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo &quot;$(DXILBakedDir)pixelhistory_fixedcol_7.dxbc&quot;" />
</Target>
<ItemGroup>
<Natvis Include="renderdoc.natvis" />