mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-11-05 17:25:07 +01:00
Revert "Reset executor command buffers asynchronously"
This reverts commit fc7956df4ff56fdb2afc4b2bb0bbca82196179ca.
This commit is contained in:
parent
2bbe975ea7
commit
d174ca950b
@ -29,27 +29,10 @@ namespace skyline::gpu::interconnect {
|
|||||||
fence{gpu.vkDevice, vk::FenceCreateInfo{ .flags = vk::FenceCreateFlagBits::eSignaled }},
|
fence{gpu.vkDevice, vk::FenceCreateInfo{ .flags = vk::FenceCreateFlagBits::eSignaled }},
|
||||||
cycle{std::make_shared<FenceCycle>(gpu.vkDevice, *fence, true)} {}
|
cycle{std::make_shared<FenceCycle>(gpu.vkDevice, *fence, true)} {}
|
||||||
|
|
||||||
CommandRecordThread::Slot::ScopedReset::ScopedReset(CommandRecordThread::Slot &slot) : slot{slot} {}
|
|
||||||
|
|
||||||
CommandRecordThread::Slot::ScopedReset::~ScopedReset() {
|
|
||||||
std::scoped_lock resetLock{slot.resetMutex};
|
|
||||||
if (slot.needsReset)
|
|
||||||
slot.commandBuffer.reset();
|
|
||||||
|
|
||||||
slot.needsReset = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<FenceCycle> CommandRecordThread::Slot::Reset(GPU &gpu) {
|
std::shared_ptr<FenceCycle> CommandRecordThread::Slot::Reset(GPU &gpu) {
|
||||||
cycle->Wait();
|
cycle->Wait();
|
||||||
cycle = std::make_shared<FenceCycle>(gpu.vkDevice, *fence);
|
cycle = std::make_shared<FenceCycle>(gpu.vkDevice, *fence);
|
||||||
|
commandBuffer.reset();
|
||||||
std::scoped_lock resetLock{resetMutex};
|
|
||||||
if (needsReset)
|
|
||||||
commandBuffer.reset();
|
|
||||||
|
|
||||||
needsReset = false;
|
|
||||||
cycle->AttachObjects(std::make_shared<ScopedReset>(*this));
|
|
||||||
|
|
||||||
return cycle;
|
return cycle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,9 +72,6 @@ namespace skyline::gpu::interconnect {
|
|||||||
|
|
||||||
slot->nodes.clear();
|
slot->nodes.clear();
|
||||||
slot->allocator.Reset();
|
slot->allocator.Reset();
|
||||||
|
|
||||||
std::scoped_lock resetLock{slot->resetMutex};
|
|
||||||
slot->needsReset = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandRecordThread::Run() {
|
void CommandRecordThread::Run() {
|
||||||
|
@ -19,25 +19,12 @@ namespace skyline::gpu::interconnect {
|
|||||||
* @brief Single execution slot, buffered back and forth between the GPFIFO thread and the record thread
|
* @brief Single execution slot, buffered back and forth between the GPFIFO thread and the record thread
|
||||||
*/
|
*/
|
||||||
struct Slot {
|
struct Slot {
|
||||||
/**
|
|
||||||
* @brief Helper to reset a slot's command buffer asynchronously
|
|
||||||
*/
|
|
||||||
struct ScopedReset {
|
|
||||||
Slot &slot;
|
|
||||||
|
|
||||||
ScopedReset(Slot &slot);
|
|
||||||
|
|
||||||
~ScopedReset();
|
|
||||||
};
|
|
||||||
|
|
||||||
vk::raii::CommandPool commandPool; //!< Use one command pool per slot since command buffers from different slots may be recorded into on multiple threads at the same time
|
vk::raii::CommandPool commandPool; //!< Use one command pool per slot since command buffers from different slots may be recorded into on multiple threads at the same time
|
||||||
vk::raii::CommandBuffer commandBuffer;
|
vk::raii::CommandBuffer commandBuffer;
|
||||||
vk::raii::Fence fence;
|
vk::raii::Fence fence;
|
||||||
std::shared_ptr<FenceCycle> cycle;
|
std::shared_ptr<FenceCycle> cycle;
|
||||||
boost::container::stable_vector<node::NodeVariant> nodes;
|
boost::container::stable_vector<node::NodeVariant> nodes;
|
||||||
LinearAllocatorState<> allocator;
|
LinearAllocatorState<> allocator;
|
||||||
std::mutex resetMutex;
|
|
||||||
bool needsReset{}; //!< If the slot's command buffer needs to be reset before it can be used again
|
|
||||||
|
|
||||||
Slot(GPU &gpu);
|
Slot(GPU &gpu);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user