diff --git a/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp b/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp index b6a211fbb..d2e9cdfb7 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp @@ -329,6 +329,12 @@ void MakeShaderReflection(DXBC::DXBCContainer *dxbc, const ShaderEntryPoint &ent refl->debugInfo.files = dxbc->GetDebugInfo()->Files; + // For DXIL ensure the entry point meta data has been parsed + if(dxbc->GetDXILByteCode()) + { + dxbc->GetDXILByteCode()->FetchEntryPoint(); + } + dxbc->GetDebugInfo()->GetLineInfo(~0U, ~0U, refl->debugInfo.entryLocation); rdcstr entryFunc = entry.name; diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index 9f8e0d827..636e624ed 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -1559,6 +1559,7 @@ public: const bytebuf &GetBytes() const { return m_Bytes; } void FetchComputeProperties(DXBC::Reflection *reflection); + void FetchEntryPoint(); DXBC::Reflection *BuildReflection(); rdcstr GetDebugStatus(); rdcarray GetEntryPoints(); diff --git a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp index 013c95596..bd8eab749 100644 --- a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp @@ -1461,6 +1461,24 @@ rdcarray Program::GetEntryPoints() return ret; } +void Program::FetchEntryPoint() +{ + if(m_EntryPoint.empty()) + { + DXMeta dx(m_NamedMeta); + if(dx.entryPoints && dx.entryPoints->children.size() > 0 && + dx.entryPoints->children[0]->children.size() > 2) + { + m_EntryPoint = dx.entryPoints->children[0]->children[1]->str; + } + else + { + RDCERR("Didn't find dx.entryPoints"); + m_EntryPoint = "main"; + } + } +} + DXBC::Reflection *Program::BuildReflection() { const bool dxcStyleFormatting = m_DXCStyle;