mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-23 19:54:16 +01:00
[dxvk] Factor out method to find pending deferred clears
This commit is contained in:
parent
1cabbee2bb
commit
f5a5ec7c88
@ -4244,18 +4244,7 @@ namespace dxvk {
|
||||
return false;
|
||||
|
||||
// Find a pending clear that overlaps with the source image
|
||||
const DxvkDeferredClear* clear = nullptr;
|
||||
|
||||
for (const auto& entry : m_deferredClears) {
|
||||
// Entries in the deferred clear array cannot overlap, so
|
||||
// if we find an entry covering all source subresources,
|
||||
// it's the only one in the list that does.
|
||||
if ((entry.imageView->image() == srcImage) && ((srcSubresource.aspectMask & entry.clearAspects) == srcSubresource.aspectMask)
|
||||
&& (vk::checkSubresourceRangeSuperset(entry.imageView->subresources(), vk::makeSubresourceRange(srcSubresource)))) {
|
||||
clear = &entry;
|
||||
break;
|
||||
}
|
||||
}
|
||||
const DxvkDeferredClear* clear = findDeferredClear(srcImage, vk::makeSubresourceRange(srcSubresource));
|
||||
|
||||
if (!clear)
|
||||
return false;
|
||||
@ -6187,6 +6176,19 @@ namespace dxvk {
|
||||
}
|
||||
|
||||
|
||||
DxvkDeferredClear* DxvkContext::findDeferredClear(
|
||||
const Rc<DxvkImage>& image,
|
||||
const VkImageSubresourceRange& subresources) {
|
||||
for (auto& entry : m_deferredClears) {
|
||||
if ((entry.imageView->image() == image) && ((subresources.aspectMask & entry.clearAspects) == subresources.aspectMask)
|
||||
&& (vk::checkSubresourceRangeSuperset(entry.imageView->imageSubresources(), subresources)))
|
||||
return &entry;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
bool DxvkContext::updateIndexBufferBinding() {
|
||||
if (unlikely(!m_state.vi.indexBuffer.length()))
|
||||
return false;
|
||||
|
@ -1731,6 +1731,10 @@ namespace dxvk {
|
||||
const VkImageSubresourceRange& subresources,
|
||||
bool flushClears = true);
|
||||
|
||||
DxvkDeferredClear* findDeferredClear(
|
||||
const Rc<DxvkImage>& image,
|
||||
const VkImageSubresourceRange& subresources);
|
||||
|
||||
bool updateIndexBufferBinding();
|
||||
void updateVertexBufferBindings();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user