1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-01 10:54:14 +01:00

[dxvk] Rename new descriptor pool implementation to DxvkDescriptorPool

This commit is contained in:
Philip Rebohle 2022-06-21 14:16:24 +02:00
parent 6aeed40af2
commit eea5c9f0da
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
4 changed files with 43 additions and 43 deletions

View File

@ -756,7 +756,7 @@ namespace dxvk {
} }
void trackDescriptorPool( void trackDescriptorPool(
const Rc<DxvkPersistentDescriptorPool>& pool, const Rc<DxvkDescriptorPool>& pool,
const Rc<DxvkDescriptorManager>& manager) { const Rc<DxvkDescriptorManager>& manager) {
m_descriptorPools.push_back({ pool, manager }); m_descriptorPools.push_back({ pool, manager });
} }
@ -787,7 +787,7 @@ namespace dxvk {
DxvkStatCounters m_statCounters; DxvkStatCounters m_statCounters;
std::vector<std::pair< std::vector<std::pair<
Rc<DxvkPersistentDescriptorPool>, Rc<DxvkDescriptorPool>,
Rc<DxvkDescriptorManager>>> m_descriptorPools; Rc<DxvkDescriptorManager>>> m_descriptorPools;
VkCommandBuffer getCmdBuffer(DxvkCmdBuffer cmdBuffer) const { VkCommandBuffer getCmdBuffer(DxvkCmdBuffer cmdBuffer) const {

View File

@ -1057,7 +1057,7 @@ namespace dxvk {
DxvkContextFeatures m_features; DxvkContextFeatures m_features;
DxvkDescriptorState m_descriptorState; DxvkDescriptorState m_descriptorState;
Rc<DxvkPersistentDescriptorPool> m_descriptorPool; Rc<DxvkDescriptorPool> m_descriptorPool;
Rc<DxvkDescriptorManager> m_descriptorManager; Rc<DxvkDescriptorManager> m_descriptorManager;
DxvkBarrierSet m_sdmaAcquires; DxvkBarrierSet m_sdmaAcquires;

View File

@ -3,17 +3,17 @@
namespace dxvk { namespace dxvk {
DxvkPersistentDescriptorSetList::DxvkPersistentDescriptorSetList() { DxvkDescriptorSetList::DxvkDescriptorSetList() {
} }
DxvkPersistentDescriptorSetList::~DxvkPersistentDescriptorSetList() { DxvkDescriptorSetList::~DxvkDescriptorSetList() {
} }
VkDescriptorSet DxvkPersistentDescriptorSetList::alloc() { VkDescriptorSet DxvkDescriptorSetList::alloc() {
if (unlikely(m_next == m_sets.size())) if (unlikely(m_next == m_sets.size()))
return VK_NULL_HANDLE; return VK_NULL_HANDLE;
@ -21,19 +21,19 @@ namespace dxvk {
} }
void DxvkPersistentDescriptorSetList::addSet(VkDescriptorSet set) { void DxvkDescriptorSetList::addSet(VkDescriptorSet set) {
m_sets.push_back(set); m_sets.push_back(set);
m_next = m_sets.size(); m_next = m_sets.size();
} }
void DxvkPersistentDescriptorSetList::reset() { void DxvkDescriptorSetList::reset() {
m_next = 0; m_next = 0;
} }
DxvkPersistentDescriptorPool::DxvkPersistentDescriptorPool( DxvkDescriptorPool::DxvkDescriptorPool(
DxvkDevice* device, DxvkDevice* device,
DxvkContextType contextType) DxvkContextType contextType)
: m_device(device), m_contextType(contextType), : m_device(device), m_contextType(contextType),
@ -42,7 +42,7 @@ namespace dxvk {
} }
DxvkPersistentDescriptorPool::~DxvkPersistentDescriptorPool() { DxvkDescriptorPool::~DxvkDescriptorPool() {
auto vk = m_device->vkd(); auto vk = m_device->vkd();
for (auto pool : m_descriptorPools) for (auto pool : m_descriptorPools)
@ -50,7 +50,7 @@ namespace dxvk {
} }
void DxvkPersistentDescriptorPool::alloc( void DxvkDescriptorPool::alloc(
const DxvkBindingLayoutObjects* layout, const DxvkBindingLayoutObjects* layout,
uint32_t setMask, uint32_t setMask,
VkDescriptorSet* sets) { VkDescriptorSet* sets) {
@ -69,14 +69,14 @@ namespace dxvk {
} }
VkDescriptorSet DxvkPersistentDescriptorPool::alloc( VkDescriptorSet DxvkDescriptorPool::alloc(
VkDescriptorSetLayout layout) { VkDescriptorSetLayout layout) {
auto setList = getSetList(layout); auto setList = getSetList(layout);
return allocSet(setList, layout); return allocSet(setList, layout);
} }
void DxvkPersistentDescriptorPool::reset() { void DxvkDescriptorPool::reset() {
// As a heuristic to save memory, check how many descriptors // As a heuristic to save memory, check how many descriptors
// have actively been used in the past couple of submissions. // have actively been used in the past couple of submissions.
bool isLowUsageFrame = false; bool isLowUsageFrame = false;
@ -118,7 +118,7 @@ namespace dxvk {
} }
DxvkPersistentDescriptorSetMap* DxvkPersistentDescriptorPool::getSetMapCached( DxvkDescriptorSetMap* DxvkDescriptorPool::getSetMapCached(
const DxvkBindingLayoutObjects* layout) { const DxvkBindingLayoutObjects* layout) {
if (likely(m_cachedEntry.first == layout)) if (likely(m_cachedEntry.first == layout))
return m_cachedEntry.second; return m_cachedEntry.second;
@ -129,7 +129,7 @@ namespace dxvk {
} }
DxvkPersistentDescriptorSetMap* DxvkPersistentDescriptorPool::getSetMap( DxvkDescriptorSetMap* DxvkDescriptorPool::getSetMap(
const DxvkBindingLayoutObjects* layout) { const DxvkBindingLayoutObjects* layout) {
auto pair = m_setMaps.find(layout->getPipelineLayout()); auto pair = m_setMaps.find(layout->getPipelineLayout());
if (likely(pair != m_setMaps.end())) { if (likely(pair != m_setMaps.end())) {
@ -151,7 +151,7 @@ namespace dxvk {
} }
DxvkPersistentDescriptorSetList* DxvkPersistentDescriptorPool::getSetList( DxvkDescriptorSetList* DxvkDescriptorPool::getSetList(
VkDescriptorSetLayout layout) { VkDescriptorSetLayout layout) {
auto pair = m_setLists.find(layout); auto pair = m_setLists.find(layout);
if (pair != m_setLists.end()) if (pair != m_setLists.end())
@ -165,8 +165,8 @@ namespace dxvk {
} }
VkDescriptorSet DxvkPersistentDescriptorPool::allocSet( VkDescriptorSet DxvkDescriptorPool::allocSet(
DxvkPersistentDescriptorSetList* list, DxvkDescriptorSetList* list,
VkDescriptorSetLayout layout) { VkDescriptorSetLayout layout) {
VkDescriptorSet set = list->alloc(); VkDescriptorSet set = list->alloc();
@ -185,7 +185,7 @@ namespace dxvk {
} }
VkDescriptorSet DxvkPersistentDescriptorPool::allocSetFromPool( VkDescriptorSet DxvkDescriptorPool::allocSetFromPool(
VkDescriptorPool pool, VkDescriptorPool pool,
VkDescriptorSetLayout layout) { VkDescriptorSetLayout layout) {
auto vk = m_device->vkd(); auto vk = m_device->vkd();
@ -204,7 +204,7 @@ namespace dxvk {
} }
VkDescriptorPool DxvkPersistentDescriptorPool::addPool() { VkDescriptorPool DxvkDescriptorPool::addPool() {
auto vk = m_device->vkd(); auto vk = m_device->vkd();
uint32_t maxSets = m_contextType == DxvkContextType::Primary uint32_t maxSets = m_contextType == DxvkContextType::Primary
@ -251,18 +251,18 @@ namespace dxvk {
} }
Rc<DxvkPersistentDescriptorPool> DxvkDescriptorManager::getDescriptorPool() { Rc<DxvkDescriptorPool> DxvkDescriptorManager::getDescriptorPool() {
Rc<DxvkPersistentDescriptorPool> pool = m_pools.retrieveObject(); Rc<DxvkDescriptorPool> pool = m_pools.retrieveObject();
if (pool == nullptr) if (pool == nullptr)
pool = new DxvkPersistentDescriptorPool(m_device, m_contextType); pool = new DxvkDescriptorPool(m_device, m_contextType);
return pool; return pool;
} }
void DxvkDescriptorManager::recycleDescriptorPool( void DxvkDescriptorManager::recycleDescriptorPool(
const Rc<DxvkPersistentDescriptorPool>& pool) { const Rc<DxvkDescriptorPool>& pool) {
pool->reset(); pool->reset();
m_pools.returnObject(pool); m_pools.returnObject(pool);

View File

@ -36,12 +36,12 @@ namespace dxvk {
/** /**
* \brief Descriptor set list * \brief Descriptor set list
*/ */
class DxvkPersistentDescriptorSetList { class DxvkDescriptorSetList {
public: public:
DxvkPersistentDescriptorSetList(); DxvkDescriptorSetList();
~DxvkPersistentDescriptorSetList(); ~DxvkDescriptorSetList();
VkDescriptorSet alloc(); VkDescriptorSet alloc();
@ -63,8 +63,8 @@ namespace dxvk {
* Points to a list of set maps for each * Points to a list of set maps for each
* defined set in a pipeline layout. * defined set in a pipeline layout.
*/ */
struct DxvkPersistentDescriptorSetMap { struct DxvkDescriptorSetMap {
std::array<DxvkPersistentDescriptorSetList*, DxvkDescriptorSets::SetCount> sets; std::array<DxvkDescriptorSetList*, DxvkDescriptorSets::SetCount> sets;
}; };
@ -77,15 +77,15 @@ namespace dxvk {
* but allocated sets will have unspecified contents and need * but allocated sets will have unspecified contents and need
* to be updated. * to be updated.
*/ */
class DxvkPersistentDescriptorPool : public RcObject { class DxvkDescriptorPool : public RcObject {
public: public:
DxvkPersistentDescriptorPool( DxvkDescriptorPool(
DxvkDevice* device, DxvkDevice* device,
DxvkContextType contextType); DxvkContextType contextType);
~DxvkPersistentDescriptorPool(); ~DxvkDescriptorPool();
/** /**
* \brief Allocates one or multiple descriptor sets * \brief Allocates one or multiple descriptor sets
@ -118,26 +118,26 @@ namespace dxvk {
DxvkDevice* m_device; DxvkDevice* m_device;
DxvkContextType m_contextType; DxvkContextType m_contextType;
std::vector<VkDescriptorPool> m_descriptorPools; std::vector<VkDescriptorPool> m_descriptorPools;
std::unordered_map<VkDescriptorSetLayout, DxvkPersistentDescriptorSetList> m_setLists; std::unordered_map<VkDescriptorSetLayout, DxvkDescriptorSetList> m_setLists;
std::unordered_map<VkPipelineLayout, DxvkPersistentDescriptorSetMap> m_setMaps; std::unordered_map<VkPipelineLayout, DxvkDescriptorSetMap> m_setMaps;
std::pair<const DxvkBindingLayoutObjects*, DxvkPersistentDescriptorSetMap*> m_cachedEntry; std::pair<const DxvkBindingLayoutObjects*, DxvkDescriptorSetMap*> m_cachedEntry;
uint32_t m_setsAllocated = 0; uint32_t m_setsAllocated = 0;
uint32_t m_setsUsed = 0; uint32_t m_setsUsed = 0;
uint32_t m_lowUsageFrames = 0; uint32_t m_lowUsageFrames = 0;
DxvkPersistentDescriptorSetMap* getSetMapCached( DxvkDescriptorSetMap* getSetMapCached(
const DxvkBindingLayoutObjects* layout); const DxvkBindingLayoutObjects* layout);
DxvkPersistentDescriptorSetMap* getSetMap( DxvkDescriptorSetMap* getSetMap(
const DxvkBindingLayoutObjects* layout); const DxvkBindingLayoutObjects* layout);
DxvkPersistentDescriptorSetList* getSetList( DxvkDescriptorSetList* getSetList(
VkDescriptorSetLayout layout); VkDescriptorSetLayout layout);
VkDescriptorSet allocSet( VkDescriptorSet allocSet(
DxvkPersistentDescriptorSetList* list, DxvkDescriptorSetList* list,
VkDescriptorSetLayout layout); VkDescriptorSetLayout layout);
VkDescriptorSet allocSetFromPool( VkDescriptorSet allocSetFromPool(
@ -165,7 +165,7 @@ namespace dxvk {
* \brief Retrieves or creates a descriptor type * \brief Retrieves or creates a descriptor type
* \returns The descriptor pool * \returns The descriptor pool
*/ */
Rc<DxvkPersistentDescriptorPool> getDescriptorPool(); Rc<DxvkDescriptorPool> getDescriptorPool();
/** /**
* \brief Recycles descriptor pool * \brief Recycles descriptor pool
@ -174,13 +174,13 @@ namespace dxvk {
* descriptor pool for future use. * descriptor pool for future use.
*/ */
void recycleDescriptorPool( void recycleDescriptorPool(
const Rc<DxvkPersistentDescriptorPool>& pool); const Rc<DxvkDescriptorPool>& pool);
private: private:
DxvkDevice* m_device; DxvkDevice* m_device;
DxvkContextType m_contextType; DxvkContextType m_contextType;
DxvkRecycler<DxvkPersistentDescriptorPool, 8> m_pools; DxvkRecycler<DxvkDescriptorPool, 8> m_pools;
}; };