mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-02 10:24:12 +01:00
[d3d9] Handle edge cases around implicit discard
This commit is contained in:
parent
ea53923406
commit
89d36e1d7f
@ -153,6 +153,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
return --m_lockCount;
|
return --m_lockCount;
|
||||||
}
|
}
|
||||||
|
uint32_t GetLockCount() const { return m_lockCount; }
|
||||||
|
|
||||||
void MarkUploaded() { m_needsUpload = false; }
|
void MarkUploaded() { m_needsUpload = false; }
|
||||||
void MarkNeedsUpload() { m_needsUpload = true; }
|
void MarkNeedsUpload() { m_needsUpload = true; }
|
||||||
|
@ -4004,7 +4004,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
if (alloced)
|
if (alloced)
|
||||||
std::memset(physSlice.mapPtr, 0, physSlice.length);
|
std::memset(physSlice.mapPtr, 0, physSlice.length);
|
||||||
else if ((managed || systemmem) && !skipWait) {
|
else if ((managed || (systemmem && !dirty)) && !(Flags & D3DLOCK_DONOTWAIT) && !skipWait) {
|
||||||
if (!WaitForResource(mappedBuffer, D3DLOCK_DONOTWAIT)) {
|
if (!WaitForResource(mappedBuffer, D3DLOCK_DONOTWAIT)) {
|
||||||
// if the mapped buffer is currently being copied to image
|
// if the mapped buffer is currently being copied to image
|
||||||
// we can just avoid a stall by allocating a new slice and copying the existing contents
|
// we can just avoid a stall by allocating a new slice and copying the existing contents
|
||||||
@ -4350,7 +4350,7 @@ namespace dxvk {
|
|||||||
quickRead ||
|
quickRead ||
|
||||||
(boundsCheck && !pResource->DirtyRange().Overlaps(pResource->LockRange()));
|
(boundsCheck && !pResource->DirtyRange().Overlaps(pResource->LockRange()));
|
||||||
if (!skipWait) {
|
if (!skipWait) {
|
||||||
if (IsPoolManaged(desc.Pool) || desc.Pool == D3DPOOL_SYSTEMMEM) {
|
if ((IsPoolManaged(desc.Pool) || desc.Pool == D3DPOOL_SYSTEMMEM) && !(Flags & D3DLOCK_DONOTWAIT) && pResource->GetLockCount() == 0) {
|
||||||
if (!WaitForResource(mappingBuffer, D3DLOCK_DONOTWAIT)) {
|
if (!WaitForResource(mappingBuffer, D3DLOCK_DONOTWAIT)) {
|
||||||
// if the mapped buffer is currently being copied to the primary buffer
|
// if the mapped buffer is currently being copied to the primary buffer
|
||||||
// we can just avoid a stall by allocating a new slice and copying the existing contents
|
// we can just avoid a stall by allocating a new slice and copying the existing contents
|
||||||
|
Loading…
Reference in New Issue
Block a user