Address feedback
This commit is contained in:
parent
2c47f8aa18
commit
5462485cc3
5 changed files with 27 additions and 17 deletions
|
@ -20,8 +20,12 @@ NvResult nvhost_nvdec::Ioctl1(DeviceFD fd, Ioctl command, const std::vector<u8>&
|
|||
switch (command.group) {
|
||||
case 0x0:
|
||||
switch (command.cmd) {
|
||||
case 0x1:
|
||||
case 0x1: {
|
||||
if (!fd_to_id.contains(fd)) {
|
||||
fd_to_id[fd] = next_id++;
|
||||
}
|
||||
return Submit(fd, input, output);
|
||||
}
|
||||
case 0x2:
|
||||
return GetSyncpoint(input, output);
|
||||
case 0x3:
|
||||
|
@ -62,15 +66,13 @@ NvResult nvhost_nvdec::Ioctl3(DeviceFD fd, Ioctl command, const std::vector<u8>&
|
|||
return NvResult::NotImplemented;
|
||||
}
|
||||
|
||||
void nvhost_nvdec::OnOpen(DeviceFD fd) {
|
||||
static u32 next_id{};
|
||||
fd_to_id[fd] = next_id++;
|
||||
}
|
||||
void nvhost_nvdec::OnOpen(DeviceFD fd) {}
|
||||
|
||||
void nvhost_nvdec::OnClose(DeviceFD fd) {
|
||||
LOG_INFO(Service_NVDRV, "NVDEC video stream ended");
|
||||
if (fd_to_id.find(fd) != fd_to_id.end()) {
|
||||
system.GPU().ClearCdmaInstance(fd_to_id[fd]);
|
||||
const auto iter = fd_to_id.find(fd);
|
||||
if (iter != fd_to_id.end()) {
|
||||
system.GPU().ClearCdmaInstance(iter->second);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,9 @@ public:
|
|||
|
||||
void OnOpen(DeviceFD fd) override;
|
||||
void OnClose(DeviceFD fd) override;
|
||||
|
||||
private:
|
||||
u32 next_id{};
|
||||
};
|
||||
|
||||
} // namespace Service::Nvidia::Devices
|
||||
|
|
|
@ -21,6 +21,9 @@ NvResult nvhost_vic::Ioctl1(DeviceFD fd, Ioctl command, const std::vector<u8>& i
|
|||
case 0x0:
|
||||
switch (command.cmd) {
|
||||
case 0x1:
|
||||
if (!fd_to_id.contains(fd)) {
|
||||
fd_to_id[fd] = next_id++;
|
||||
}
|
||||
return Submit(fd, input, output);
|
||||
case 0x2:
|
||||
return GetSyncpoint(input, output);
|
||||
|
@ -62,14 +65,12 @@ NvResult nvhost_vic::Ioctl3(DeviceFD fd, Ioctl command, const std::vector<u8>& i
|
|||
return NvResult::NotImplemented;
|
||||
}
|
||||
|
||||
void nvhost_vic::OnOpen(DeviceFD fd) {
|
||||
static u32 next_id{};
|
||||
fd_to_id[fd] = next_id++;
|
||||
}
|
||||
void nvhost_vic::OnOpen(DeviceFD fd) {}
|
||||
|
||||
void nvhost_vic::OnClose(DeviceFD fd) {
|
||||
if (fd_to_id.find(fd) != fd_to_id.end()) {
|
||||
system.GPU().ClearCdmaInstance(fd_to_id[fd]);
|
||||
const auto iter = fd_to_id.find(fd);
|
||||
if (iter != fd_to_id.end()) {
|
||||
system.GPU().ClearCdmaInstance(iter->second);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,5 +23,8 @@ public:
|
|||
|
||||
void OnOpen(DeviceFD fd) override;
|
||||
void OnClose(DeviceFD fd) override;
|
||||
|
||||
private:
|
||||
u32 next_id{};
|
||||
};
|
||||
} // namespace Service::Nvidia::Devices
|
||||
|
|
|
@ -333,8 +333,8 @@ struct GPU::Impl {
|
|||
return;
|
||||
}
|
||||
|
||||
if (cdma_pushers.find(id) == cdma_pushers.end()) {
|
||||
cdma_pushers[id] = std::make_unique<Tegra::CDmaPusher>(gpu);
|
||||
if (!cdma_pushers.contains(id)) {
|
||||
cdma_pushers.insert_or_assign(id, std::make_unique<Tegra::CDmaPusher>(gpu));
|
||||
}
|
||||
|
||||
// SubmitCommandBuffer would make the nvdec operations async, this is not currently working
|
||||
|
@ -345,8 +345,9 @@ struct GPU::Impl {
|
|||
|
||||
/// Frees the CDMAPusher instance to free up resources
|
||||
void ClearCdmaInstance(u32 id) {
|
||||
if (cdma_pushers.find(id) != cdma_pushers.end()) {
|
||||
cdma_pushers.erase(id);
|
||||
const auto iter = cdma_pushers.find(id);
|
||||
if (iter != cdma_pushers.end()) {
|
||||
cdma_pushers.erase(iter);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue