Bläddra i källkod

Merge pull request #8428 from bunnei/nvflinger-fix-timing

Follow-up fixes for NVFlinger rewrite (Part 3)
bunnei 4 år sedan
förälder
incheckning
073714a762

+ 3 - 26
src/core/hle/service/nvflinger/buffer_queue_consumer.cpp

@@ -89,14 +89,6 @@ Status BufferQueueConsumer::AcquireBuffer(BufferItem* out_buffer,
 
     LOG_DEBUG(Service_NVFlinger, "acquiring slot={}", slot);
 
-    // If the front buffer is still being tracked, update its slot state
-    if (core->StillTracking(*front)) {
-        slots[slot].acquire_called = true;
-        slots[slot].needs_cleanup_on_release = false;
-        slots[slot].buffer_state = BufferState::Acquired;
-        slots[slot].fence = Fence::NoFence();
-    }
-
     // If the buffer has previously been acquired by the consumer, set graphic_buffer to nullptr to
     // avoid unnecessarily remapping this buffer on the consumer side.
     if (out_buffer->acquire_called) {
@@ -139,26 +131,11 @@ Status BufferQueueConsumer::ReleaseBuffer(s32 slot, u64 frame_number, const Fenc
             ++current;
         }
 
-        if (slots[slot].buffer_state == BufferState::Acquired) {
-            slots[slot].fence = release_fence;
-            slots[slot].buffer_state = BufferState::Free;
-
-            listener = core->connected_producer_listener;
-
-            LOG_DEBUG(Service_NVFlinger, "releasing slot {}", slot);
-        } else if (slots[slot].needs_cleanup_on_release) {
-            LOG_DEBUG(Service_NVFlinger, "releasing a stale buffer slot {} (state = {})", slot,
-                      slots[slot].buffer_state);
+        slots[slot].buffer_state = BufferState::Free;
 
-            slots[slot].needs_cleanup_on_release = false;
+        listener = core->connected_producer_listener;
 
-            return Status::StaleBufferSlot;
-        } else {
-            LOG_ERROR(Service_NVFlinger, "attempted to release buffer slot {} but its state was {}",
-                      slot, slots[slot].buffer_state);
-
-            return Status::BadValue;
-        }
+        LOG_DEBUG(Service_NVFlinger, "releasing slot {}", slot);
 
         core->SignalDequeueCondition();
     }

+ 0 - 4
src/core/hle/service/nvflinger/buffer_queue_core.cpp

@@ -84,10 +84,6 @@ void BufferQueueCore::FreeBufferLocked(s32 slot) {
 
     slots[slot].graphic_buffer.reset();
 
-    if (slots[slot].buffer_state == BufferState::Acquired) {
-        slots[slot].needs_cleanup_on_release = true;
-    }
-
     slots[slot].buffer_state = BufferState::Free;
     slots[slot].frame_number = UINT32_MAX;
     slots[slot].acquire_called = false;

+ 0 - 1
src/core/hle/service/nvflinger/buffer_slot.h

@@ -31,7 +31,6 @@ struct BufferSlot final {
     u64 frame_number{};
     Fence fence;
     bool acquire_called{};
-    bool needs_cleanup_on_release{};
     bool attached_by_consumer{};
     bool is_preallocated{};
 };