diff --git a/runtime/os_interface/debug_settings_manager.cpp b/runtime/os_interface/debug_settings_manager.cpp index 9096e215ad..106d639867 100644 --- a/runtime/os_interface/debug_settings_manager.cpp +++ b/runtime/os_interface/debug_settings_manager.cpp @@ -131,6 +131,22 @@ const std::string DebugSettingsManager::getEvents(const uintptr_t *i return os.str(); } +template +const std::string DebugSettingsManager::getMemObjects(const uintptr_t *input, uint32_t numOfObjects) { + if (false == debugLoggingAvailable()) { + return ""; + } + + std::stringstream os; + for (uint32_t i = 0; i < numOfObjects; i++) { + if (input != nullptr) { + cl_mem mem = const_cast(reinterpret_cast(input)[i]); + os << "cl_mem " << mem << ", MemObj " << static_cast(mem) << ", "; + } + } + return os.str(); +} + template void DebugSettingsManager::dumpBinaryProgram(int32_t numDevices, const size_t *lengths, const unsigned char **binaries) { if (false == debugKernelDumpingAvailable()) { diff --git a/runtime/os_interface/debug_settings_manager.h b/runtime/os_interface/debug_settings_manager.h index eb0c7bcac2..33ddae6d24 100644 --- a/runtime/os_interface/debug_settings_manager.h +++ b/runtime/os_interface/debug_settings_manager.h @@ -121,6 +121,7 @@ class DebugSettingsManager { void logApiCall(const char *function, bool enter, int32_t errorCode); size_t getInput(const size_t *input, int32_t index); const std::string getEvents(const uintptr_t *input, uint32_t numOfEvents); + const std::string getMemObjects(const uintptr_t *input, uint32_t numOfObjects); MOCKABLE_VIRTUAL void writeToFile(std::string filename, const char *str, size_t length, std::ios_base::openmode mode); diff --git a/runtime/sharings/va/cl_va_api.cpp b/runtime/sharings/va/cl_va_api.cpp index 158ccc168b..6e8db90c8c 100644 --- a/runtime/sharings/va/cl_va_api.cpp +++ b/runtime/sharings/va/cl_va_api.cpp @@ -29,6 +29,7 @@ #include "runtime/device/device.h" #include "runtime/sharings/va/va_sharing.h" #include "runtime/sharings/va/va_surface.h" +#include "runtime/utilities/api_intercept.h" #include using namespace OCLRT; @@ -37,34 +38,49 @@ cl_mem CL_API_CALL clCreateFromVA_APIMediaSurfaceINTEL(cl_context context, cl_mem_flags flags, VASurfaceID *surface, cl_uint plane, cl_int *errcodeRet) { + cl_int returnCode = CL_SUCCESS; + API_ENTER(&returnCode); + DBG_LOG_INPUTS("context", context, + "flags", flags, + "VASurfaceID", surface, + "plane", plane); + Context *pContext = nullptr; + cl_mem image = nullptr; - auto returnCode = validateObject(WithCastToInternal(context, &pContext)); - + returnCode = validateObject(WithCastToInternal(context, &pContext)); ErrorCodeHelper err(errcodeRet, returnCode); if (returnCode != CL_SUCCESS) { return nullptr; } - - return VASurface::createSharedVaSurface(pContext, pContext->getSharing(), flags, surface, plane, errcodeRet); + image = VASurface::createSharedVaSurface(pContext, pContext->getSharing(), flags, surface, plane, errcodeRet); + DBG_LOG_INPUTS("image", image); + return image; } cl_int CL_API_CALL clGetDeviceIDsFromVA_APIMediaAdapterINTEL(cl_platform_id platform, cl_va_api_device_source_intel mediaAdapterType, void *mediaAdapter, cl_va_api_device_set_intel mediaAdapterSet, cl_uint numEntries, cl_device_id *devices, cl_uint *numDevices) { + cl_int status = CL_SUCCESS; + API_ENTER(&status); + DBG_LOG_INPUTS("platform", platform, + "mediaAdapterType", mediaAdapterType, + "mediaAdapter", mediaAdapter, + "mediaAdapterSet", mediaAdapterSet, + "numEntries", numEntries); Platform *pPlatform = nullptr; - auto status = validateObjects(WithCastToInternal(platform, &pPlatform)); + status = validateObjects(WithCastToInternal(platform, &pPlatform)); if (status != CL_SUCCESS) { - return CL_INVALID_PLATFORM; + status = CL_INVALID_PLATFORM; + } else { + cl_device_id device = pPlatform->getDevice(0); + GetInfoHelper::set(devices, device); + GetInfoHelper::set(numDevices, 1u); } - - cl_device_id device = pPlatform->getDevice(0); - GetInfoHelper::set(devices, device); - GetInfoHelper::set(numDevices, 1u); - return CL_SUCCESS; + return status; } cl_int CL_API_CALL @@ -74,10 +90,18 @@ clEnqueueAcquireVA_APIMediaSurfacesINTEL(cl_command_queue commandQueue, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) { + cl_int status = CL_SUCCESS; + API_ENTER(&status); + DBG_LOG_INPUTS("commandQueue", commandQueue, + "numObjects", numObjects, + "memObjects", DebugManager.getMemObjects(reinterpret_cast(memObjects), numObjects), + "numEventsInWaitList", numEventsInWaitList, + "eventWaitList", DebugManager.getEvents(reinterpret_cast(eventWaitList), numEventsInWaitList), + "event", DebugManager.getEvents(reinterpret_cast(event), 1)); CommandQueue *pCommandQueue = nullptr; - auto status = validateObjects(WithCastToInternal(commandQueue, &pCommandQueue)); + status = validateObjects(WithCastToInternal(commandQueue, &pCommandQueue)); if (status == CL_SUCCESS) { status = pCommandQueue->enqueueAcquireSharedObjects(numObjects, memObjects, numEventsInWaitList, @@ -93,10 +117,18 @@ clEnqueueReleaseVA_APIMediaSurfacesINTEL(cl_command_queue commandQueue, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) { + cl_int status = CL_SUCCESS; + API_ENTER(&status); + DBG_LOG_INPUTS("commandQueue", commandQueue, + "numObjects", numObjects, + "memObjects", DebugManager.getMemObjects(reinterpret_cast(memObjects), numObjects), + "numEventsInWaitList", numEventsInWaitList, + "eventWaitList", DebugManager.getEvents(reinterpret_cast(eventWaitList), numEventsInWaitList), + "event", DebugManager.getEvents(reinterpret_cast(event), 1)); CommandQueue *pCommandQueue = nullptr; - auto status = validateObjects(WithCastToInternal(commandQueue, &pCommandQueue)); + status = validateObjects(WithCastToInternal(commandQueue, &pCommandQueue)); if (status == CL_SUCCESS) { status = pCommandQueue->enqueueReleaseSharedObjects(numObjects, memObjects, numEventsInWaitList, diff --git a/unit_tests/os_interface/debug_settings_manager_tests.cpp b/unit_tests/os_interface/debug_settings_manager_tests.cpp index 7e80fba6f5..131a9435eb 100644 --- a/unit_tests/os_interface/debug_settings_manager_tests.cpp +++ b/unit_tests/os_interface/debug_settings_manager_tests.cpp @@ -331,6 +331,34 @@ TEST(DebugSettingsManager, WithDebugFunctionalityGetEventsNegative) { EXPECT_EQ(0u, event.size()); } +TEST(DebugSettingsManager, GivenDebugManagerWithDebugFunctionalityWhenGetMemObjectsIsCalledThenCorrectStringIsReturned) { + FullyEnabledTestDebugManager debugManager; + debugManager.flags.LogApiCalls.set(true); + MockBuffer buffer; + MemObj *memoryObject = &buffer; + cl_mem clMem = memoryObject; + cl_mem clMemObjects[] = {clMem, clMem}; + cl_uint numObjects = 2; + + string memObjectString = debugManager.getMemObjects(reinterpret_cast(clMemObjects), numObjects); + EXPECT_NE(0u, memObjectString.size()); + stringstream output; + output << "cl_mem " << clMem << ", MemObj " << memoryObject; + EXPECT_THAT(memObjectString, ::testing::HasSubstr(output.str())); +} + +TEST(DebugSettingsManager, GivenDebugManagerWithDebugFunctionalityWhenGetMemObjectsIsCalledWithNullptrThenStringIsEmpty) { + FullyEnabledTestDebugManager debugManager; + string memObjectString = debugManager.getMemObjects(nullptr, 2); + EXPECT_EQ(0u, memObjectString.size()); +} + +TEST(DebugSettingsManager, GivenDebugManagerWithoutDebugFunctionalityWhenGetMemObjectsIsCalledThenCallReturnsImmediately) { + FullyDisabledTestDebugManager debugManager; + string memObjectString = debugManager.getMemObjects(nullptr, 2); + EXPECT_EQ(0u, memObjectString.size()); +} + TEST(DebugSettingsManager, WithDebugFunctionalityDumpKernel) { FullyEnabledTestDebugManager debugManager; string kernelDumpFile = "testDumpKernel";