mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-05 01:24:14 +01:00
[dxvk] Tweak descriptor pool numbers
Increases the descriptor pool size on 64-bit, but also makes significantly better use of descriptor pool memory in situations with very high draw counts and many UBO descriptor set updates.
This commit is contained in:
parent
4d0d455895
commit
eacb8da9f7
@ -288,18 +288,26 @@ namespace dxvk {
|
|||||||
return m_vkPools[--m_vkPoolCount];
|
return m_vkPools[--m_vkPoolCount];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deliberately pick a very high number of descriptor sets so that
|
||||||
|
// we will typically end up using all available pool memory before
|
||||||
|
// the descriptor set limit becomes the limiting factor.
|
||||||
uint32_t maxSets = m_contextType == DxvkContextType::Primary
|
uint32_t maxSets = m_contextType == DxvkContextType::Primary
|
||||||
? 8192 : 256;
|
? (env::is32BitHostPlatform() ? 24576u : 49152u)
|
||||||
|
: (512u);
|
||||||
|
|
||||||
|
// Samplers and uniform buffers may be special on some implementations
|
||||||
|
// so we should allocate space for a reasonable number of both, but
|
||||||
|
// assume that all other descriptor types share pool memory.
|
||||||
std::array<VkDescriptorPoolSize, 8> pools = {{
|
std::array<VkDescriptorPoolSize, 8> pools = {{
|
||||||
{ VK_DESCRIPTOR_TYPE_SAMPLER, maxSets * 2 },
|
{ VK_DESCRIPTOR_TYPE_SAMPLER, maxSets * 1 },
|
||||||
{ VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, maxSets * 2 },
|
{ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, maxSets / 4 },
|
||||||
|
{ VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, maxSets / 2 },
|
||||||
{ VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, maxSets / 64 },
|
{ VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, maxSets / 64 },
|
||||||
{ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, maxSets * 4 },
|
{ VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, maxSets / 2 },
|
||||||
{ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, maxSets * 1 },
|
|
||||||
{ VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, maxSets * 1 },
|
|
||||||
{ VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, maxSets / 64 },
|
{ VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, maxSets / 64 },
|
||||||
{ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, maxSets * 1 } }};
|
{ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, maxSets * 2 },
|
||||||
|
{ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, maxSets / 2 },
|
||||||
|
}};
|
||||||
|
|
||||||
VkDescriptorPoolCreateInfo info = { VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO };
|
VkDescriptorPoolCreateInfo info = { VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO };
|
||||||
info.maxSets = maxSets;
|
info.maxSets = maxSets;
|
||||||
|
Loading…
Reference in New Issue
Block a user