mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-10-01 14:59:13 +00:00
[gpu/NVDRV] Unstub SetChannelPriority and adjust ChannelSetTimeSlice (#3017)
Games usually rely on either 1 of this services or both. The last call adjusts channel_timeslice. This behavior closely resembles Ryujinx accurate behavior for setting the channel_timeslice accordingly to the situation. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3017 Reviewed-by: Caio Oliveira <[email protected]> Reviewed-by: crueter <[email protected]> Co-authored-by: SDK Chan <[email protected]> Co-committed-by: SDK Chan <[email protected]>
This commit is contained in:
1 parent
a27914f0f4
commit
680384f7b8
2 files changed
+19
-1
No files matched your search
@@ -168,7 +168,15 @@ NvResult nvhost_gpu::SetErrorNotifier(IoctlSetErrorNotifier& params) {
|
||||
|
||||
NvResult nvhost_gpu::SetChannelPriority(IoctlChannelSetPriority& params) {
|
||||
channel_priority = params.priority;
|
||||
LOG_DEBUG(Service_NVDRV, "(STUBBED) called, priority={:X}", channel_priority);
|
||||
LOG_INFO(Service_NVDRV, "called, priority={:X}", channel_priority);
|
||||
|
||||
switch (static_cast<ChannelPriority>(channel_priority)) {
|
||||
case ChannelPriority::Low: channel_timeslice = 1300; break;
|
||||
case ChannelPriority::Medium: channel_timeslice = 2600; break;
|
||||
case ChannelPriority::High: channel_timeslice = 5200; break;
|
||||
default : return NvResult::BadParameter;
|
||||
}
|
||||
|
||||
return NvResult::Success;
|
||||
}
|
||||
|
||||
@@ -402,6 +410,10 @@ NvResult nvhost_gpu::ChannelSetTimeout(IoctlChannelSetTimeout& params) {
|
||||
NvResult nvhost_gpu::ChannelSetTimeslice(IoctlSetTimeslice& params) {
|
||||
LOG_INFO(Service_NVDRV, "called, timeslice={:#X}", params.timeslice);
|
||||
|
||||
if (params.timeslice < 1000 || params.timeslice > 5000) {
|
||||
return NvResult::BadParameter;
|
||||
}
|
||||
|
||||
channel_timeslice = params.timeslice;
|
||||
|
||||
return NvResult::Success;
|
||||
|
||||
@@ -66,6 +66,12 @@ private:
|
||||
CtxChannelGPFIFO = 0xB06F,
|
||||
};
|
||||
|
||||
enum class ChannelPriority : u32 {
|
||||
Low = 0x32,
|
||||
Medium = 0x64,
|
||||
High = 0x96,
|
||||
};
|
||||
|
||||
struct IoctlSetNvmapFD {
|
||||
s32_le nvmap_fd{};
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user