mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-10-20 02:51:13 +00:00
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:
1 parent
1dbd64c791
commit
0d1b8f8154
6 files changed
+111
-5
No files matched your search
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -818,7 +818,7 @@ namespace DXCEnumerateAndCheck {
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
<Target Name="_bakeShaders" BeforeTargets="PrepareForBuild" Condition="$(DXCExecutable.Length) > 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) > 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=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\fixedcol.hlsl" -T ps_6_0 -DVARIANT=0 -E main -Qstrip_reflect -Fo "$(DXILBakedDir)fixedcol_0.dxbc"" />
|
||||
@@ -826,6 +826,15 @@ namespace DXCEnumerateAndCheck {
|
||||
<Exec Command=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\fixedcol.hlsl" -T ps_6_0 -DVARIANT=2 -E main -Qstrip_reflect -Fo "$(DXILBakedDir)fixedcol_2.dxbc"" />
|
||||
<Exec Command=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\fixedcol.hlsl" -T ps_6_0 -DVARIANT=3 -E main -Qstrip_reflect -Fo "$(DXILBakedDir)fixedcol_3.dxbc"" />
|
||||
<Exec Command=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\quadoverdraw.hlsl" -T ps_6_0 -DD3D12=1 -E RENDERDOC_QuadOverdrawPS -Qstrip_reflect -Fo "$(DXILBakedDir)quadwrite.dxbc"" />
|
||||
<Exec Command=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl" -T ps_6_0 -E RENDERDOC_PrimitiveIDPS -Qstrip_reflect -Fo "$(DXILBakedDir)pixelhistory_primitiveid.dxbc"" />
|
||||
<Exec Command=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl" -T ps_6_0 -DRT=0 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo "$(DXILBakedDir)pixelhistory_fixedcol_0.dxbc"" />
|
||||
<Exec Command=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl" -T ps_6_0 -DRT=1 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo "$(DXILBakedDir)pixelhistory_fixedcol_1.dxbc"" />
|
||||
<Exec Command=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl" -T ps_6_0 -DRT=2 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo "$(DXILBakedDir)pixelhistory_fixedcol_2.dxbc"" />
|
||||
<Exec Command=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl" -T ps_6_0 -DRT=3 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo "$(DXILBakedDir)pixelhistory_fixedcol_3.dxbc"" />
|
||||
<Exec Command=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl" -T ps_6_0 -DRT=4 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo "$(DXILBakedDir)pixelhistory_fixedcol_4.dxbc"" />
|
||||
<Exec Command=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl" -T ps_6_0 -DRT=5 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo "$(DXILBakedDir)pixelhistory_fixedcol_5.dxbc"" />
|
||||
<Exec Command=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl" -T ps_6_0 -DRT=6 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo "$(DXILBakedDir)pixelhistory_fixedcol_6.dxbc"" />
|
||||
<Exec Command=""$(DXCExecutable)" "$(ProjectDir)data\hlsl\d3d12_pixelhistory.hlsl" -T ps_6_0 -DRT=7 -E RENDERDOC_PixelHistoryFixedColPS -Qstrip_reflect -Fo "$(DXILBakedDir)pixelhistory_fixedcol_7.dxbc"" />
|
||||
</Target>
|
||||
<ItemGroup>
|
||||
<Natvis Include="renderdoc.natvis" />
|
||||
|
||||
Reference in new issue
Block a user