mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-18 04:54:15 +01:00
[dxvk] Also add tracking ID to sampler objects
This commit is contained in:
parent
0e14fff749
commit
e41b1a11b2
@ -275,9 +275,28 @@ namespace dxvk {
|
|||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void track(Rc<T> object) {
|
void track(Rc<T> object) {
|
||||||
|
static_assert(!std::is_same_v<T, DxvkSampler>);
|
||||||
m_objectTracker.track<DxvkObjectRef<T>>(std::move(object));
|
m_objectTracker.track<DxvkObjectRef<T>>(std::move(object));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Tracks a sampler object
|
||||||
|
*
|
||||||
|
* Special code path that uses the tracking ID to ensure samplers
|
||||||
|
* only get tracked once per submission. This is useful since
|
||||||
|
* sampler objects are processed much the same way as resources.
|
||||||
|
* \param [in] sampler Sampler object
|
||||||
|
*/
|
||||||
|
void track(const Rc<DxvkSampler>& sampler) {
|
||||||
|
if (sampler->trackId(m_trackingId))
|
||||||
|
m_objectTracker.track<DxvkObjectRef<DxvkSampler>>(sampler.ptr());
|
||||||
|
}
|
||||||
|
|
||||||
|
void track(Rc<DxvkSampler>&& sampler) {
|
||||||
|
if (sampler->trackId(m_trackingId))
|
||||||
|
m_objectTracker.track<DxvkObjectRef<DxvkSampler>>(std::move(sampler));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Tracks a resource with access mode
|
* \brief Tracks a resource with access mode
|
||||||
*
|
*
|
||||||
|
@ -1358,7 +1358,7 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_cmd->track(imageView->image(), DxvkAccess::Write);
|
m_cmd->track(imageView->image(), DxvkAccess::Write);
|
||||||
m_cmd->track(sampler);
|
m_cmd->track(std::move(sampler));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2662,7 +2662,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
m_cmd->track(dstView->image(), DxvkAccess::Write);
|
m_cmd->track(dstView->image(), DxvkAccess::Write);
|
||||||
m_cmd->track(srcView->image(), DxvkAccess::Read);
|
m_cmd->track(srcView->image(), DxvkAccess::Read);
|
||||||
m_cmd->track(sampler);
|
m_cmd->track(std::move(sampler));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -163,6 +163,22 @@ namespace dxvk {
|
|||||||
release();
|
release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Updates tracking ID for sampler object
|
||||||
|
*
|
||||||
|
* Used when tracking submissions.
|
||||||
|
* \param [in] trackingID Tracking ID
|
||||||
|
* \returns \c true if the tracking ID has been updated,
|
||||||
|
* \c false if the sampler was already tracked with this ID.
|
||||||
|
*/
|
||||||
|
bool trackId(uint64_t trackingId) {
|
||||||
|
if (trackingId <= m_trackingId)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_trackingId = trackingId;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Sampler handle
|
* \brief Sampler handle
|
||||||
* \returns Sampler handle
|
* \returns Sampler handle
|
||||||
@ -181,7 +197,8 @@ namespace dxvk {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
std::atomic<uint32_t> m_refCount = { 0u };
|
std::atomic<uint64_t> m_refCount = { 0u };
|
||||||
|
uint64_t m_trackingId = 0u;
|
||||||
|
|
||||||
DxvkSamplerPool* m_pool = nullptr;
|
DxvkSamplerPool* m_pool = nullptr;
|
||||||
DxvkSamplerKey m_key = { };
|
DxvkSamplerKey m_key = { };
|
||||||
|
Loading…
x
Reference in New Issue
Block a user