|
|
@ -5,6 +5,7 @@ |
|
|
#include "common/assert.h"
|
|
|
#include "common/assert.h"
|
|
|
#include "common/logging/log.h"
|
|
|
#include "common/logging/log.h"
|
|
|
#include "core/core.h"
|
|
|
#include "core/core.h"
|
|
|
|
|
|
#include "core/hle/kernel/k_process.h"
|
|
|
#include "core/hle/service/nvdrv/core/container.h"
|
|
|
#include "core/hle/service/nvdrv/core/container.h"
|
|
|
#include "core/hle/service/nvdrv/core/nvmap.h"
|
|
|
#include "core/hle/service/nvdrv/core/nvmap.h"
|
|
|
#include "core/hle/service/nvdrv/core/syncpoint_manager.h"
|
|
|
#include "core/hle/service/nvdrv/core/syncpoint_manager.h"
|
|
|
@ -75,7 +76,7 @@ NvResult nvhost_gpu::Ioctl1(DeviceFD fd, Ioctl command, std::span<const u8> inpu |
|
|
case 0xd: |
|
|
case 0xd: |
|
|
return WrapFixed(this, &nvhost_gpu::SetChannelPriority, input, output); |
|
|
return WrapFixed(this, &nvhost_gpu::SetChannelPriority, input, output); |
|
|
case 0x1a: |
|
|
case 0x1a: |
|
|
return WrapFixed(this, &nvhost_gpu::AllocGPFIFOEx2, input, output); |
|
|
|
|
|
|
|
|
return WrapFixed(this, &nvhost_gpu::AllocGPFIFOEx2, input, output, fd); |
|
|
case 0x1b: |
|
|
case 0x1b: |
|
|
return WrapFixedVariable(this, &nvhost_gpu::SubmitGPFIFOBase1, input, output, true); |
|
|
return WrapFixedVariable(this, &nvhost_gpu::SubmitGPFIFOBase1, input, output, true); |
|
|
case 0x1d: |
|
|
case 0x1d: |
|
|
@ -120,8 +121,13 @@ NvResult nvhost_gpu::Ioctl3(DeviceFD fd, Ioctl command, std::span<const u8> inpu |
|
|
return NvResult::NotImplemented; |
|
|
return NvResult::NotImplemented; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void nvhost_gpu::OnOpen(NvCore::SessionId session_id, DeviceFD fd) {} |
|
|
|
|
|
void nvhost_gpu::OnClose(DeviceFD fd) {} |
|
|
|
|
|
|
|
|
void nvhost_gpu::OnOpen(NvCore::SessionId session_id, DeviceFD fd) { |
|
|
|
|
|
sessions[fd] = session_id; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void nvhost_gpu::OnClose(DeviceFD fd) { |
|
|
|
|
|
sessions.erase(fd); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
NvResult nvhost_gpu::SetNVMAPfd(IoctlSetNvmapFD& params) { |
|
|
NvResult nvhost_gpu::SetNVMAPfd(IoctlSetNvmapFD& params) { |
|
|
LOG_DEBUG(Service_NVDRV, "called, fd={}", params.nvmap_fd); |
|
|
LOG_DEBUG(Service_NVDRV, "called, fd={}", params.nvmap_fd); |
|
|
@ -161,7 +167,7 @@ NvResult nvhost_gpu::SetChannelPriority(IoctlChannelSetPriority& params) { |
|
|
return NvResult::Success; |
|
|
return NvResult::Success; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
NvResult nvhost_gpu::AllocGPFIFOEx2(IoctlAllocGpfifoEx2& params) { |
|
|
|
|
|
|
|
|
NvResult nvhost_gpu::AllocGPFIFOEx2(IoctlAllocGpfifoEx2& params, DeviceFD fd) { |
|
|
LOG_WARNING(Service_NVDRV, |
|
|
LOG_WARNING(Service_NVDRV, |
|
|
"(STUBBED) called, num_entries={:X}, flags={:X}, unk0={:X}, " |
|
|
"(STUBBED) called, num_entries={:X}, flags={:X}, unk0={:X}, " |
|
|
"unk1={:X}, unk2={:X}, unk3={:X}", |
|
|
"unk1={:X}, unk2={:X}, unk3={:X}", |
|
|
@ -173,7 +179,12 @@ NvResult nvhost_gpu::AllocGPFIFOEx2(IoctlAllocGpfifoEx2& params) { |
|
|
return NvResult::AlreadyAllocated; |
|
|
return NvResult::AlreadyAllocated; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
system.GPU().InitChannel(*channel_state); |
|
|
|
|
|
|
|
|
u64 program_id{}; |
|
|
|
|
|
if (auto* const session = core.GetSession(sessions[fd]); session != nullptr) { |
|
|
|
|
|
program_id = session->process->GetProgramId(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
system.GPU().InitChannel(*channel_state, program_id); |
|
|
|
|
|
|
|
|
params.fence_out = syncpoint_manager.GetSyncpointFence(channel_syncpoint); |
|
|
params.fence_out = syncpoint_manager.GetSyncpointFence(channel_syncpoint); |
|
|
|
|
|
|
|
|
|