diff --git a/core/libs/prx/libSceAmpr/Export.cpp b/core/libs/prx/libSceAmpr/Export.cpp index 0f4f9b32a..05a651526 100644 --- a/core/libs/prx/libSceAmpr/Export.cpp +++ b/core/libs/prx/libSceAmpr/Export.cpp @@ -624,15 +624,15 @@ int APS5_VABI sceAmprAmmGetVirtualAddressRanges(std::uint64_t* start, std::uint6 } int APS5_VABI sceAmprAmmSubmitCommandBuffer(void* base, std::uint32_t offset, std::uint32_t priority) { - (void)priority; - if (!base) return SCE_KERNEL_ERROR_EINVAL; + if (priority > 2u) return SCE_KERNEL_ERROR_EINVAL; + if (!base) return SCE_KERNEL_ERROR_EPERM; AmmSubmit_nid_no_patch(base, offset); return 0; } int APS5_VABI sceAmprAmmSubmitCommandBuffer2(void* base, std::uint32_t offset, std::uint32_t priority, AmmSubmitResult* result, std::uint32_t* id) { - (void)priority; - if (!base) return SCE_KERNEL_ERROR_EINVAL; + if (priority > 2u) return SCE_KERNEL_ERROR_EINVAL; + if (!base) return SCE_KERNEL_ERROR_EPERM; const auto submitted = AmmSubmit_nid_no_patch(base, offset); if (result) *result = {0, 0}; if (id) *id = submitted; @@ -640,8 +640,8 @@ int APS5_VABI sceAmprAmmSubmitCommandBuffer2(void* base, std::uint32_t offset, s } int APS5_VABI sceAmprAmmSubmitCommandBuffer3(void* base, std::uint32_t offset, std::uint32_t priority, std::uint32_t* id) { - (void)priority; - if (!base) return SCE_KERNEL_ERROR_EINVAL; + if (priority > 2u) return SCE_KERNEL_ERROR_EINVAL; + if (!base) return SCE_KERNEL_ERROR_EPERM; const auto submitted = AmmSubmit_nid_no_patch(base, offset); if (id) *id = submitted; return 0; diff --git a/core/libs/tests/GuestAmpr.cpp b/core/libs/tests/GuestAmpr.cpp index 06ba7f696..d06f21ea9 100644 --- a/core/libs/tests/GuestAmpr.cpp +++ b/core/libs/tests/GuestAmpr.cpp @@ -646,7 +646,10 @@ void TestAmm() { Require(sceAmprAmmCommandBufferUnmap(&exact.buffer, start, page) == 0); Require(sceAmprAmmCommandBufferUnmap(&exact.buffer, start, page) == busy); Require(sceAmprAmmCommandBufferMap(&exact.buffer, start, page, 0, cpuReadWrite) == busy); - Require(sceAmprAmmSubmitCommandBuffer(nullptr, 0, 0) == invalidArgument); + Require(sceAmprAmmSubmitCommandBuffer(nullptr, 0, 0) == permissionDenied); + Require(sceAmprAmmSubmitCommandBuffer(exact.memory.data(), 0, 3) == invalidArgument); + Require(sceAmprAmmSubmitCommandBuffer3(nullptr, 0, 3, nullptr) == invalidArgument); + Require(sceAmprAmmSubmitCommandBuffer(exact.memory.data(), 0, 2) == 0); Require(sceAmprAmmMeasureAmmCommandSizeMap(start, page, 0, 0x04) == ammRejected); Require(sceAmprAmmMeasureAmmCommandSizeMapWithGpuMaskId(start + 8, page, 0, cpuReadWrite, 0) == ammRejected);