nvhost_ctrl_gpu: Implement IoctlGetGpuTime.
- Used by Undertale.
This commit is contained in:
parent
bb175ab430
commit
7f10db1c20
|
@ -5,6 +5,8 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
|
#include "core/core_timing.h"
|
||||||
|
#include "core/core_timing_util.h"
|
||||||
#include "core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.h"
|
#include "core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.h"
|
||||||
|
|
||||||
namespace Service::Nvidia::Devices {
|
namespace Service::Nvidia::Devices {
|
||||||
|
@ -33,6 +35,8 @@ u32 nvhost_ctrl_gpu::ioctl(Ioctl command, const std::vector<u8>& input, std::vec
|
||||||
return ZBCQueryTable(input, output);
|
return ZBCQueryTable(input, output);
|
||||||
case IoctlCommand::IocFlushL2:
|
case IoctlCommand::IocFlushL2:
|
||||||
return FlushL2(input, output);
|
return FlushL2(input, output);
|
||||||
|
case IoctlCommand::IocGetGpuTime:
|
||||||
|
return GetGpuTime(input, output);
|
||||||
}
|
}
|
||||||
UNIMPLEMENTED_MSG("Unimplemented ioctl");
|
UNIMPLEMENTED_MSG("Unimplemented ioctl");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -169,4 +173,13 @@ u32 nvhost_ctrl_gpu::FlushL2(const std::vector<u8>& input, std::vector<u8>& outp
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 nvhost_ctrl_gpu::GetGpuTime(const std::vector<u8>& input, std::vector<u8>& output) {
|
||||||
|
LOG_DEBUG(Service_NVDRV, "called");
|
||||||
|
IoctlGetGpuTime params{};
|
||||||
|
std::memcpy(¶ms, input.data(), input.size());
|
||||||
|
params.gpu_time = CoreTiming::cyclesToNs(CoreTiming::GetTicks());
|
||||||
|
std::memcpy(output.data(), ¶ms, output.size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Service::Nvidia::Devices
|
} // namespace Service::Nvidia::Devices
|
||||||
|
|
|
@ -156,6 +156,11 @@ private:
|
||||||
};
|
};
|
||||||
static_assert(sizeof(IoctlFlushL2) == 8, "IoctlFlushL2 is incorrect size");
|
static_assert(sizeof(IoctlFlushL2) == 8, "IoctlFlushL2 is incorrect size");
|
||||||
|
|
||||||
|
struct IoctlGetGpuTime {
|
||||||
|
u64_le gpu_time;
|
||||||
|
};
|
||||||
|
static_assert(sizeof(IoctlGetGpuTime) == 8, "IoctlGetGpuTime is incorrect size");
|
||||||
|
|
||||||
u32 GetCharacteristics(const std::vector<u8>& input, std::vector<u8>& output);
|
u32 GetCharacteristics(const std::vector<u8>& input, std::vector<u8>& output);
|
||||||
u32 GetTPCMasks(const std::vector<u8>& input, std::vector<u8>& output);
|
u32 GetTPCMasks(const std::vector<u8>& input, std::vector<u8>& output);
|
||||||
u32 GetActiveSlotMask(const std::vector<u8>& input, std::vector<u8>& output);
|
u32 GetActiveSlotMask(const std::vector<u8>& input, std::vector<u8>& output);
|
||||||
|
@ -164,6 +169,7 @@ private:
|
||||||
u32 ZBCSetTable(const std::vector<u8>& input, std::vector<u8>& output);
|
u32 ZBCSetTable(const std::vector<u8>& input, std::vector<u8>& output);
|
||||||
u32 ZBCQueryTable(const std::vector<u8>& input, std::vector<u8>& output);
|
u32 ZBCQueryTable(const std::vector<u8>& input, std::vector<u8>& output);
|
||||||
u32 FlushL2(const std::vector<u8>& input, std::vector<u8>& output);
|
u32 FlushL2(const std::vector<u8>& input, std::vector<u8>& output);
|
||||||
|
u32 GetGpuTime(const std::vector<u8>& input, std::vector<u8>& output);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Service::Nvidia::Devices
|
} // namespace Service::Nvidia::Devices
|
||||||
|
|
Loading…
Reference in New Issue