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;
|
return false;
|
||||||
|
|
||||||
// Find a pending clear that overlaps with the source image
|
// Find a pending clear that overlaps with the source image
|
||||||
const DxvkDeferredClear* clear = nullptr;
|
const DxvkDeferredClear* clear = findDeferredClear(srcImage, vk::makeSubresourceRange(srcSubresource));
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!clear)
|
if (!clear)
|
||||||
return false;
|
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() {
|
bool DxvkContext::updateIndexBufferBinding() {
|
||||||
if (unlikely(!m_state.vi.indexBuffer.length()))
|
if (unlikely(!m_state.vi.indexBuffer.length()))
|
||||||
return false;
|
return false;
|
||||||
|
@ -1731,6 +1731,10 @@ namespace dxvk {
|
|||||||
const VkImageSubresourceRange& subresources,
|
const VkImageSubresourceRange& subresources,
|
||||||
bool flushClears = true);
|
bool flushClears = true);
|
||||||
|
|
||||||
|
DxvkDeferredClear* findDeferredClear(
|
||||||
|
const Rc<DxvkImage>& image,
|
||||||
|
const VkImageSubresourceRange& subresources);
|
||||||
|
|
||||||
bool updateIndexBufferBinding();
|
bool updateIndexBufferBinding();
|
||||||
void updateVertexBufferBindings();
|
void updateVertexBufferBindings();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user