diff options
Diffstat (limited to '')
| -rw-r--r-- | src/core/hle/service/nvflinger/buffer_queue_consumer.cpp | 29 | ||||
| -rw-r--r-- | src/core/hle/service/nvflinger/buffer_queue_core.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/service/nvflinger/buffer_slot.h | 1 |
3 files changed, 3 insertions, 31 deletions
diff --git a/src/core/hle/service/nvflinger/buffer_queue_consumer.cpp b/src/core/hle/service/nvflinger/buffer_queue_consumer.cpp index d7db77aff..4b3d5efd6 100644 --- a/src/core/hle/service/nvflinger/buffer_queue_consumer.cpp +++ b/src/core/hle/service/nvflinger/buffer_queue_consumer.cpp | |||
| @@ -89,14 +89,6 @@ Status BufferQueueConsumer::AcquireBuffer(BufferItem* out_buffer, | |||
| 89 | 89 | ||
| 90 | LOG_DEBUG(Service_NVFlinger, "acquiring slot={}", slot); | 90 | LOG_DEBUG(Service_NVFlinger, "acquiring slot={}", slot); |
| 91 | 91 | ||
| 92 | // If the front buffer is still being tracked, update its slot state | ||
| 93 | if (core->StillTracking(*front)) { | ||
| 94 | slots[slot].acquire_called = true; | ||
| 95 | slots[slot].needs_cleanup_on_release = false; | ||
| 96 | slots[slot].buffer_state = BufferState::Acquired; | ||
| 97 | slots[slot].fence = Fence::NoFence(); | ||
| 98 | } | ||
| 99 | |||
| 100 | // If the buffer has previously been acquired by the consumer, set graphic_buffer to nullptr to | 92 | // If the buffer has previously been acquired by the consumer, set graphic_buffer to nullptr to |
| 101 | // avoid unnecessarily remapping this buffer on the consumer side. | 93 | // avoid unnecessarily remapping this buffer on the consumer side. |
| 102 | if (out_buffer->acquire_called) { | 94 | if (out_buffer->acquire_called) { |
| @@ -139,26 +131,11 @@ Status BufferQueueConsumer::ReleaseBuffer(s32 slot, u64 frame_number, const Fenc | |||
| 139 | ++current; | 131 | ++current; |
| 140 | } | 132 | } |
| 141 | 133 | ||
| 142 | if (slots[slot].buffer_state == BufferState::Acquired) { | 134 | slots[slot].buffer_state = BufferState::Free; |
| 143 | slots[slot].fence = release_fence; | ||
| 144 | slots[slot].buffer_state = BufferState::Free; | ||
| 145 | |||
| 146 | listener = core->connected_producer_listener; | ||
| 147 | |||
| 148 | LOG_DEBUG(Service_NVFlinger, "releasing slot {}", slot); | ||
| 149 | } else if (slots[slot].needs_cleanup_on_release) { | ||
| 150 | LOG_DEBUG(Service_NVFlinger, "releasing a stale buffer slot {} (state = {})", slot, | ||
| 151 | slots[slot].buffer_state); | ||
| 152 | 135 | ||
| 153 | slots[slot].needs_cleanup_on_release = false; | 136 | listener = core->connected_producer_listener; |
| 154 | 137 | ||
| 155 | return Status::StaleBufferSlot; | 138 | LOG_DEBUG(Service_NVFlinger, "releasing slot {}", slot); |
| 156 | } else { | ||
| 157 | LOG_ERROR(Service_NVFlinger, "attempted to release buffer slot {} but its state was {}", | ||
| 158 | slot, slots[slot].buffer_state); | ||
| 159 | |||
| 160 | return Status::BadValue; | ||
| 161 | } | ||
| 162 | 139 | ||
| 163 | core->SignalDequeueCondition(); | 140 | core->SignalDequeueCondition(); |
| 164 | } | 141 | } |
diff --git a/src/core/hle/service/nvflinger/buffer_queue_core.cpp b/src/core/hle/service/nvflinger/buffer_queue_core.cpp index d4e8b44d0..ea4a14ea4 100644 --- a/src/core/hle/service/nvflinger/buffer_queue_core.cpp +++ b/src/core/hle/service/nvflinger/buffer_queue_core.cpp | |||
| @@ -84,10 +84,6 @@ void BufferQueueCore::FreeBufferLocked(s32 slot) { | |||
| 84 | 84 | ||
| 85 | slots[slot].graphic_buffer.reset(); | 85 | slots[slot].graphic_buffer.reset(); |
| 86 | 86 | ||
| 87 | if (slots[slot].buffer_state == BufferState::Acquired) { | ||
| 88 | slots[slot].needs_cleanup_on_release = true; | ||
| 89 | } | ||
| 90 | |||
| 91 | slots[slot].buffer_state = BufferState::Free; | 87 | slots[slot].buffer_state = BufferState::Free; |
| 92 | slots[slot].frame_number = UINT32_MAX; | 88 | slots[slot].frame_number = UINT32_MAX; |
| 93 | slots[slot].acquire_called = false; | 89 | slots[slot].acquire_called = false; |
diff --git a/src/core/hle/service/nvflinger/buffer_slot.h b/src/core/hle/service/nvflinger/buffer_slot.h index 6b3e87446..0cd0e9964 100644 --- a/src/core/hle/service/nvflinger/buffer_slot.h +++ b/src/core/hle/service/nvflinger/buffer_slot.h | |||
| @@ -31,7 +31,6 @@ struct BufferSlot final { | |||
| 31 | u64 frame_number{}; | 31 | u64 frame_number{}; |
| 32 | Fence fence; | 32 | Fence fence; |
| 33 | bool acquire_called{}; | 33 | bool acquire_called{}; |
| 34 | bool needs_cleanup_on_release{}; | ||
| 35 | bool attached_by_consumer{}; | 34 | bool attached_by_consumer{}; |
| 36 | bool is_preallocated{}; | 35 | bool is_preallocated{}; |
| 37 | }; | 36 | }; |