diff options
| -rw-r--r-- | src/core/hle/service/nvdrv/devices/nvhost_as_gpu.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_as_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_as_gpu.cpp index 8d194e175..c41ef7058 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_as_gpu.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_as_gpu.cpp | |||
| @@ -15,6 +15,11 @@ | |||
| 15 | #include "video_core/renderer_base.h" | 15 | #include "video_core/renderer_base.h" |
| 16 | 16 | ||
| 17 | namespace Service::Nvidia::Devices { | 17 | namespace Service::Nvidia::Devices { |
| 18 | namespace NvErrCodes { | ||
| 19 | enum { | ||
| 20 | InvalidNmapHandle = -22, | ||
| 21 | }; | ||
| 22 | } | ||
| 18 | 23 | ||
| 19 | nvhost_as_gpu::nvhost_as_gpu(std::shared_ptr<nvmap> nvmap_dev) : nvmap_dev(std::move(nvmap_dev)) {} | 24 | nvhost_as_gpu::nvhost_as_gpu(std::shared_ptr<nvmap> nvmap_dev) : nvmap_dev(std::move(nvmap_dev)) {} |
| 20 | nvhost_as_gpu::~nvhost_as_gpu() = default; | 25 | nvhost_as_gpu::~nvhost_as_gpu() = default; |
| @@ -79,14 +84,16 @@ u32 nvhost_as_gpu::Remap(const std::vector<u8>& input, std::vector<u8>& output) | |||
| 79 | std::memcpy(entries.data(), input.data(), input.size()); | 84 | std::memcpy(entries.data(), input.data(), input.size()); |
| 80 | 85 | ||
| 81 | auto& gpu = Core::System::GetInstance().GPU(); | 86 | auto& gpu = Core::System::GetInstance().GPU(); |
| 82 | |||
| 83 | for (const auto& entry : entries) { | 87 | for (const auto& entry : entries) { |
| 84 | LOG_WARNING(Service_NVDRV, "remap entry, offset=0x{:X} handle=0x{:X} pages=0x{:X}", | 88 | LOG_WARNING(Service_NVDRV, "remap entry, offset=0x{:X} handle=0x{:X} pages=0x{:X}", |
| 85 | entry.offset, entry.nvmap_handle, entry.pages); | 89 | entry.offset, entry.nvmap_handle, entry.pages); |
| 86 | Tegra::GPUVAddr offset = static_cast<Tegra::GPUVAddr>(entry.offset) << 0x10; | 90 | Tegra::GPUVAddr offset = static_cast<Tegra::GPUVAddr>(entry.offset) << 0x10; |
| 87 | |||
| 88 | auto object = nvmap_dev->GetObject(entry.nvmap_handle); | 91 | auto object = nvmap_dev->GetObject(entry.nvmap_handle); |
| 89 | ASSERT(object); | 92 | if (!object) { |
| 93 | LOG_CRITICAL(Service_NVDRV, "nvmap {} is an invalid handle!", entry.nvmap_handle); | ||
| 94 | std::memcpy(output.data(), entries.data(), output.size()); | ||
| 95 | return static_cast<u32>(NvErrCodes::InvalidNmapHandle); | ||
| 96 | } | ||
| 90 | 97 | ||
| 91 | ASSERT(object->status == nvmap::Object::Status::Allocated); | 98 | ASSERT(object->status == nvmap::Object::Status::Allocated); |
| 92 | 99 | ||