mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-13 19:29:14 +01:00
[d3d10] Create type reflection objects on demand
See previous commits for details. Fixes #1507.
This commit is contained in:
parent
3d81b3eb82
commit
33b0d4c991
@ -5,11 +5,7 @@ namespace dxvk {
|
||||
D3D10ShaderReflectionType::D3D10ShaderReflectionType(
|
||||
ID3D11ShaderReflectionType* d3d11)
|
||||
: m_d3d11(d3d11) {
|
||||
D3D11_SHADER_TYPE_DESC d3d11Desc;
|
||||
m_d3d11->GetDesc(&d3d11Desc);
|
||||
|
||||
for (uint32_t i = 0; i < d3d11Desc.Members; i++)
|
||||
m_members.emplace_back(m_d3d11->GetMemberTypeByIndex(i));
|
||||
}
|
||||
|
||||
|
||||
@ -57,12 +53,17 @@ namespace dxvk {
|
||||
|
||||
ID3D10ShaderReflectionType* D3D10ShaderReflectionType::FindMemberType(
|
||||
ID3D11ShaderReflectionType* pMemberType) {
|
||||
for (size_t i = 0; i < m_members.size(); i++) {
|
||||
if (m_members[i].GetD3D11Iface() == pMemberType)
|
||||
return &m_members[i];
|
||||
if (!pMemberType)
|
||||
return nullptr;
|
||||
|
||||
auto entry = m_members.find(pMemberType);
|
||||
|
||||
if (entry == m_members.end()) {
|
||||
entry = m_members.insert({ pMemberType,
|
||||
std::make_unique<D3D10ShaderReflectionType>(pMemberType) }).first;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
return entry->second.get();
|
||||
}
|
||||
|
||||
|
||||
|
@ -37,8 +37,11 @@ namespace dxvk {
|
||||
|
||||
private:
|
||||
|
||||
ID3D11ShaderReflectionType* m_d3d11;
|
||||
std::vector<D3D10ShaderReflectionType> m_members;
|
||||
ID3D11ShaderReflectionType* m_d3d11;
|
||||
|
||||
std::unordered_map<
|
||||
ID3D11ShaderReflectionType*,
|
||||
std::unique_ptr<D3D10ShaderReflectionType>> m_members;
|
||||
|
||||
ID3D10ShaderReflectionType* FindMemberType(
|
||||
ID3D11ShaderReflectionType* pMemberType);
|
||||
|
Loading…
x
Reference in New Issue
Block a user