NVFlinger: Correct GCC compile error
This commit is contained in:
parent
0335a25d1f
commit
b391e5f638
|
@ -174,6 +174,7 @@ u32 nvhost_ctrl::IocCtrlEventSignal(const std::vector<u8>& input, std::vector<u8
|
||||||
if (gpu.CancelSyncptInterrupt(events_interface.assigned_syncpt[event_id],
|
if (gpu.CancelSyncptInterrupt(events_interface.assigned_syncpt[event_id],
|
||||||
events_interface.assigned_value[event_id])) {
|
events_interface.assigned_value[event_id])) {
|
||||||
events_interface.LiberateEvent(event_id);
|
events_interface.LiberateEvent(event_id);
|
||||||
|
events_interface.events[event_id].writable->Signal();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NvResult::Success;
|
return NvResult::Success;
|
||||||
|
|
|
@ -122,9 +122,9 @@ u32 nvhost_gpu::AllocGPFIFOEx2(const std::vector<u8>& input, std::vector<u8>& ou
|
||||||
params.unk3);
|
params.unk3);
|
||||||
|
|
||||||
auto& gpu = system.GPU();
|
auto& gpu = system.GPU();
|
||||||
params.fence_out.id = channels;
|
params.fence_out.id = assigned_syncpoints;
|
||||||
params.fence_out.value = gpu.GetSyncpointValue(channels);
|
params.fence_out.value = gpu.GetSyncpointValue(assigned_syncpoints);
|
||||||
channels++;
|
assigned_syncpoints++;
|
||||||
std::memcpy(output.data(), ¶ms, output.size());
|
std::memcpy(output.data(), ¶ms, output.size());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -169,8 +169,6 @@ u32 nvhost_gpu::SubmitGPFIFO(const std::vector<u8>& input, std::vector<u8>& outp
|
||||||
}
|
}
|
||||||
gpu.PushGPUEntries(std::move(entries));
|
gpu.PushGPUEntries(std::move(entries));
|
||||||
|
|
||||||
// TODO(Blinkhawk): Figure how thoios fence is set
|
|
||||||
// params.fence_out.value = 0;
|
|
||||||
std::memcpy(output.data(), ¶ms, sizeof(IoctlSubmitGpfifo));
|
std::memcpy(output.data(), ¶ms, sizeof(IoctlSubmitGpfifo));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -191,7 +191,7 @@ private:
|
||||||
u32 ChannelSetTimeout(const std::vector<u8>& input, std::vector<u8>& output);
|
u32 ChannelSetTimeout(const std::vector<u8>& input, std::vector<u8>& output);
|
||||||
|
|
||||||
std::shared_ptr<nvmap> nvmap_dev;
|
std::shared_ptr<nvmap> nvmap_dev;
|
||||||
u32 channels{};
|
u32 assigned_syncpoints{};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Service::Nvidia::Devices
|
} // namespace Service::Nvidia::Devices
|
||||||
|
|
|
@ -57,8 +57,8 @@ void NVDRV::Ioctl(Kernel::HLERequestContext& ctx) {
|
||||||
ctrl.fresh_call = false;
|
ctrl.fresh_call = false;
|
||||||
ctx.SleepClientThread(
|
ctx.SleepClientThread(
|
||||||
"NVServices::DelayedResponse", ctrl.timeout,
|
"NVServices::DelayedResponse", ctrl.timeout,
|
||||||
[this, ctrl = ctrl](Kernel::SharedPtr<Kernel::Thread> thread, Kernel::HLERequestContext& ctx,
|
[this, ctrl = ctrl](Kernel::SharedPtr<Kernel::Thread> thread,
|
||||||
Kernel::ThreadWakeupReason reason) {
|
Kernel::HLERequestContext& ctx, Kernel::ThreadWakeupReason reason) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
u32 fd = rp.Pop<u32>();
|
u32 fd = rp.Pop<u32>();
|
||||||
u32 command = rp.Pop<u32>();
|
u32 command = rp.Pop<u32>();
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <list>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <list>
|
|
||||||
|
|
||||||
#include "common/common_funcs.h"
|
#include "common/common_funcs.h"
|
||||||
#include "common/math_util.h"
|
#include "common/math_util.h"
|
||||||
|
|
|
@ -39,11 +39,11 @@ NVFlinger::NVFlinger(Core::Timing::CoreTiming& core_timing) : core_timing{core_t
|
||||||
// Schedule the screen composition events
|
// Schedule the screen composition events
|
||||||
// const auto ticks = Settings::values.force_30fps_mode ? frame_ticks_30fps : frame_ticks;
|
// const auto ticks = Settings::values.force_30fps_mode ? frame_ticks_30fps : frame_ticks;
|
||||||
|
|
||||||
composition_event = core_timing.RegisterEvent(
|
composition_event = core_timing.RegisterEvent("ScreenComposition", [this](u64 userdata,
|
||||||
"ScreenComposition", [this](u64 userdata, s64 cycles_late) {
|
s64 cycles_late) {
|
||||||
Compose();
|
Compose();
|
||||||
const auto ticks = Settings::values.force_30fps_mode ? frame_ticks_30fps : GetNextTicks();
|
const auto ticks = Settings::values.force_30fps_mode ? frame_ticks_30fps : GetNextTicks();
|
||||||
this->core_timing.ScheduleEvent(std::max(0LL,ticks - cycles_late), composition_event);
|
this->core_timing.ScheduleEvent(std::max<s64>(0LL, ticks - cycles_late), composition_event);
|
||||||
});
|
});
|
||||||
|
|
||||||
core_timing.ScheduleEvent(frame_ticks, composition_event);
|
core_timing.ScheduleEvent(frame_ticks, composition_event);
|
||||||
|
|
|
@ -69,7 +69,7 @@ const DmaPusher& GPU::DmaPusher() const {
|
||||||
|
|
||||||
void GPU::IncrementSyncPoint(const u32 syncpoint_id) {
|
void GPU::IncrementSyncPoint(const u32 syncpoint_id) {
|
||||||
syncpoints[syncpoint_id]++;
|
syncpoints[syncpoint_id]++;
|
||||||
sync_mutex.lock();
|
std::lock_guard lock{sync_mutex};
|
||||||
if (!syncpt_interrupts[syncpoint_id].empty()) {
|
if (!syncpt_interrupts[syncpoint_id].empty()) {
|
||||||
u32 value = syncpoints[syncpoint_id].load();
|
u32 value = syncpoints[syncpoint_id].load();
|
||||||
auto it = syncpt_interrupts[syncpoint_id].begin();
|
auto it = syncpt_interrupts[syncpoint_id].begin();
|
||||||
|
@ -82,7 +82,6 @@ void GPU::IncrementSyncPoint(const u32 syncpoint_id) {
|
||||||
it++;
|
it++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sync_mutex.unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 GPU::GetSyncpointValue(const u32 syncpoint_id) const {
|
u32 GPU::GetSyncpointValue(const u32 syncpoint_id) const {
|
||||||
|
@ -98,7 +97,7 @@ void GPU::RegisterSyncptInterrupt(const u32 syncpoint_id, const u32 value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GPU::CancelSyncptInterrupt(const u32 syncpoint_id, const u32 value) {
|
bool GPU::CancelSyncptInterrupt(const u32 syncpoint_id, const u32 value) {
|
||||||
sync_mutex.lock();
|
std::lock_guard lock{sync_mutex};
|
||||||
auto it = syncpt_interrupts[syncpoint_id].begin();
|
auto it = syncpt_interrupts[syncpoint_id].begin();
|
||||||
while (it != syncpt_interrupts[syncpoint_id].end()) {
|
while (it != syncpt_interrupts[syncpoint_id].end()) {
|
||||||
if (value == *it) {
|
if (value == *it) {
|
||||||
|
@ -108,7 +107,6 @@ bool GPU::CancelSyncptInterrupt(const u32 syncpoint_id, const u32 value) {
|
||||||
it++;
|
it++;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
sync_mutex.unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 RenderTargetBytesPerPixel(RenderTargetFormat format) {
|
u32 RenderTargetBytesPerPixel(RenderTargetFormat format) {
|
||||||
|
|
|
@ -21,7 +21,8 @@ static void RunThread(VideoCore::RendererBase& renderer, Tegra::DmaPusher& dma_p
|
||||||
MicroProfileOnThreadCreate("GpuThread");
|
MicroProfileOnThreadCreate("GpuThread");
|
||||||
|
|
||||||
// Wait for first GPU command before acquiring the window context
|
// Wait for first GPU command before acquiring the window context
|
||||||
while (state.queue.Empty());
|
while (state.queue.Empty())
|
||||||
|
;
|
||||||
|
|
||||||
// If emulation was stopped during disk shader loading, abort before trying to acquire context
|
// If emulation was stopped during disk shader loading, abort before trying to acquire context
|
||||||
if (!state.is_running) {
|
if (!state.is_running) {
|
||||||
|
@ -103,7 +104,8 @@ u64 ThreadManager::PushCommand(CommandData&& command_data) {
|
||||||
|
|
||||||
MICROPROFILE_DEFINE(GPU_wait, "GPU", "Wait for the GPU", MP_RGB(128, 128, 192));
|
MICROPROFILE_DEFINE(GPU_wait, "GPU", "Wait for the GPU", MP_RGB(128, 128, 192));
|
||||||
void SynchState::WaitForSynchronization(u64 fence) {
|
void SynchState::WaitForSynchronization(u64 fence) {
|
||||||
while (signaled_fence.load() < fence);
|
while (signaled_fence.load() < fence)
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace VideoCommon::GPUThread
|
} // namespace VideoCommon::GPUThread
|
||||||
|
|
Reference in New Issue