diff --git a/opencl/source/sharings/va/va_surface.cpp b/opencl/source/sharings/va/va_surface.cpp index 3c034acf5e..edc97fef49 100644 --- a/opencl/source/sharings/va/va_surface.cpp +++ b/opencl/source/sharings/va/va_surface.cpp @@ -156,15 +156,15 @@ Image *VASurface::createSharedVaSurface(Context *context, VASharingFunctions *sh void VASurface::synchronizeObject(UpdateData &updateData) { updateData.synchronizationStatus = SynchronizeStatus::ACQUIRE_SUCCESFUL; if (!interopUserSync) { - if (sharingFunctions->syncSurface(*surfaceId) != VA_STATUS_SUCCESS) { + if (sharingFunctions->syncSurface(surfaceId) != VA_STATUS_SUCCESS) { updateData.synchronizationStatus = SYNCHRONIZE_ERROR; } } } void VASurface::getMemObjectInfo(size_t ¶mValueSize, void *¶mValue) { - paramValueSize = sizeof(surfaceId); - paramValue = &surfaceId; + paramValueSize = sizeof(surfaceIdPtr); + paramValue = &surfaceIdPtr; } bool VASurface::validate(cl_mem_flags flags, cl_uint plane) { diff --git a/opencl/source/sharings/va/va_surface.h b/opencl/source/sharings/va/va_surface.h index dc3415a08a..80757712d8 100644 --- a/opencl/source/sharings/va/va_surface.h +++ b/opencl/source/sharings/va/va_surface.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2021 Intel Corporation + * Copyright (C) 2018-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -31,10 +31,13 @@ class VASurface : VASharing { protected: VASurface(VASharingFunctions *sharingFunctions, VAImageID imageId, cl_uint plane, VASurfaceID *surfaceId, bool interopUserSync) - : VASharing(sharingFunctions, imageId), plane(plane), surfaceId(surfaceId), interopUserSync(interopUserSync){}; + : VASharing(sharingFunctions, imageId), plane(plane), surfaceId(*surfaceId), interopUserSync(interopUserSync) { + surfaceIdPtr = &this->surfaceId; + }; cl_uint plane; - VASurfaceID *surfaceId; + VASurfaceID surfaceId; + VASurfaceID *surfaceIdPtr; bool interopUserSync; }; } // namespace NEO diff --git a/opencl/test/unit_test/sharings/va/mock_va_sharing.h b/opencl/test/unit_test/sharings/va/mock_va_sharing.h index 8be82947c1..820543d5ab 100644 --- a/opencl/test/unit_test/sharings/va/mock_va_sharing.h +++ b/opencl/test/unit_test/sharings/va/mock_va_sharing.h @@ -35,7 +35,7 @@ class VASharingFunctionsMock : public VASharingFunctions { bool syncSurfaceCalled = false; bool extGetSurfaceHandleCalled = false; bool exportSurfaceHandleCalled = false; - + VASurfaceID syncedSurfaceID = 0; osHandle acquiredVaHandle = 0; bool haveExportSurfaceHandle = false; @@ -110,6 +110,7 @@ class VASharingFunctionsMock : public VASharingFunctions { VAStatus syncSurface(VASurfaceID vaSurface) override { syncSurfaceCalled = true; + syncedSurfaceID = vaSurface; return syncSurfaceReturnStatus; } diff --git a/opencl/test/unit_test/sharings/va/va_sharing_tests.cpp b/opencl/test/unit_test/sharings/va/va_sharing_tests.cpp index 84eda9037a..f07c668a6b 100644 --- a/opencl/test/unit_test/sharings/va/va_sharing_tests.cpp +++ b/opencl/test/unit_test/sharings/va/va_sharing_tests.cpp @@ -438,16 +438,18 @@ TEST_F(VaSharingTests, givenHwCommandQueueWhenAcquireAndReleaseCallsAreMadeWithE } TEST_F(VaSharingTests, givenVaMediaSurfaceWhenGetMemObjectInfoIsCalledThenSurfaceIdIsReturned) { + vaSurfaceId = 1u; createMediaSurface(); VASurfaceID *retVaSurfaceId = nullptr; size_t retSize = 0; + vaSurfaceId = 0; errCode = clGetMemObjectInfo(sharedClMem, CL_MEM_VA_API_MEDIA_SURFACE_INTEL, sizeof(VASurfaceID *), &retVaSurfaceId, &retSize); EXPECT_EQ(CL_SUCCESS, errCode); EXPECT_EQ(sizeof(VASurfaceID *), retSize); - EXPECT_EQ(vaSurfaceId, *retVaSurfaceId); + EXPECT_EQ(1u, *retVaSurfaceId); } TEST_F(VaSharingTests, givenVaMediaSurfaceWhenGetImageInfoIsCalledThenPlaneIsReturned) { @@ -507,8 +509,9 @@ TEST_F(VaSharingTests, givenSimpleParamsWhenCreateSurfaceIsCalledThenSetImgObjec TEST_F(VaSharingTests, givenNonInteropUserSyncContextWhenAcquireIsCalledThenSyncSurface) { context.setInteropUserSyncEnabled(false); - + vaSurfaceId = 1u; createMediaSurface(); + vaSurfaceId = 0u; auto memObj = castToObject(sharedClMem); @@ -516,6 +519,7 @@ TEST_F(VaSharingTests, givenNonInteropUserSyncContextWhenAcquireIsCalledThenSync auto ret = memObj->peekSharingHandler()->acquire(sharedImg, context.getDevice(0)->getRootDeviceIndex()); EXPECT_TRUE(vaSharing->sharingFunctions.syncSurfaceCalled); EXPECT_EQ(CL_SUCCESS, ret); + EXPECT_EQ(1u, vaSharing->sharingFunctions.syncedSurfaceID); } TEST_F(VaSharingTests, givenInteropUserSyncContextWhenAcquireIsCalledThenDontSyncSurface) {