mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-15 07:29:17 +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(
|
D3D10ShaderReflectionType::D3D10ShaderReflectionType(
|
||||||
ID3D11ShaderReflectionType* d3d11)
|
ID3D11ShaderReflectionType* d3d11)
|
||||||
: m_d3d11(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(
|
ID3D10ShaderReflectionType* D3D10ShaderReflectionType::FindMemberType(
|
||||||
ID3D11ShaderReflectionType* pMemberType) {
|
ID3D11ShaderReflectionType* pMemberType) {
|
||||||
for (size_t i = 0; i < m_members.size(); i++) {
|
if (!pMemberType)
|
||||||
if (m_members[i].GetD3D11Iface() == pMemberType)
|
return nullptr;
|
||||||
return &m_members[i];
|
|
||||||
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,7 +38,10 @@ namespace dxvk {
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
ID3D11ShaderReflectionType* m_d3d11;
|
ID3D11ShaderReflectionType* m_d3d11;
|
||||||
std::vector<D3D10ShaderReflectionType> m_members;
|
|
||||||
|
std::unordered_map<
|
||||||
|
ID3D11ShaderReflectionType*,
|
||||||
|
std::unique_ptr<D3D10ShaderReflectionType>> m_members;
|
||||||
|
|
||||||
ID3D10ShaderReflectionType* FindMemberType(
|
ID3D10ShaderReflectionType* FindMemberType(
|
||||||
ID3D11ShaderReflectionType* pMemberType);
|
ID3D11ShaderReflectionType* pMemberType);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user