Skip to content

Commit 842003f

Browse files
Add support for Y210 format in cl_va sharing
Related-To: NEO-7245 Signed-off-by: Kamil Diedrich <kamil.diedrich@intel.com>
1 parent 6102f02 commit 842003f

File tree

3 files changed

+86
-7
lines changed

3 files changed

+86
-7
lines changed

opencl/source/sharings/va/va_surface.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ bool VASurface::isSupportedPackedFormat(uint32_t imageFourcc) {
3636
switch (imageFourcc) {
3737
case VA_FOURCC_YUY2:
3838
return true;
39+
case VA_FOURCC_Y210:
40+
return true;
3941
default:
4042
return false;
4143
}
@@ -287,6 +289,16 @@ const ClSurfaceFormatInfo *VASurface::getExtendedSurfaceFormatInfo(uint32_t form
287289
2}};
288290
return &formatInfoYUY2;
289291
}
292+
if (formatFourCC == VA_FOURCC_Y210) {
293+
static const ClSurfaceFormatInfo formatInfoY210 = {{CL_RGBA, CL_UNORM_INT16},
294+
{GMM_RESOURCE_FORMAT::GMM_FORMAT_Y210,
295+
static_cast<GFX3DSTATE_SURFACEFORMAT>(GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_UNORM),
296+
0,
297+
4,
298+
2,
299+
8}};
300+
return &formatInfoY210;
301+
}
290302

291303
return nullptr;
292304
}

opencl/test/unit_test/sharings/va/mock_va_sharing.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ class VASharingFunctionsMock : public VASharingFunctions {
124124
return queryImageFormatsReturnStatus;
125125
}
126126
if (numFormats) {
127-
*numFormats = 5;
127+
*numFormats = 6;
128128
}
129129

130130
if (formatList) {
@@ -147,12 +147,16 @@ class VASharingFunctionsMock : public VASharingFunctions {
147147
formatList[4].fourcc = VA_FOURCC_YUY2;
148148
formatList[4].bits_per_pixel = 16;
149149
formatList[4].byte_order = VA_LSB_FIRST;
150+
151+
formatList[5].fourcc = VA_FOURCC_Y210;
152+
formatList[5].bits_per_pixel = 32;
153+
formatList[5].byte_order = VA_LSB_FIRST;
150154
}
151155
return VA_STATUS_SUCCESS;
152156
}
153157

154158
int maxNumImageFormats(VADisplay vaDisplay) override {
155-
return 5;
159+
return 6;
156160
}
157161
};
158162

opencl/test/unit_test/sharings/va/va_sharing_tests.cpp

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -291,17 +291,19 @@ TEST_F(VaSharingTests, givenSupportedFourccFormatWhenIsSupportedPlanarFormatThen
291291

292292
TEST_F(VaSharingTests, givenSupportedPackedFormatWhenIsSupportedPlanarFormatThenFailIsReturned) {
293293
EXPECT_FALSE(VASurface::isSupportedPlanarFormat(VA_FOURCC_YUY2));
294+
EXPECT_FALSE(VASurface::isSupportedPlanarFormat(VA_FOURCC_Y210));
294295
}
295296

296297
TEST_F(VaSharingTests, givenSupportedFourccFormatWhenIsSupportedPackedFormatThenSuccessIsReturned) {
297298
EXPECT_TRUE(VASurface::isSupportedPackedFormat(VA_FOURCC_YUY2));
299+
EXPECT_TRUE(VASurface::isSupportedPackedFormat(VA_FOURCC_Y210));
298300
}
299301

300302
TEST_F(VaSharingTests, givenSupportedPlanarFormatWhenIsSupportedPackedFormatThenFailIsReturned) {
301303
EXPECT_FALSE(VASurface::isSupportedPackedFormat(VA_FOURCC_NV12));
302304
}
303305

304-
TEST_F(VaSharingTests, givenValidSurfaceWhenGetSurfaceDescriptionThenCLSuccessIsReturnedAndDataAreSet) {
306+
TEST_F(VaSharingTests, givenValidYUY2SurfaceWhenGetSurfaceDescriptionThenCLSuccessIsReturnedAndDataAreSet) {
305307
DebugManagerStateRestore restore;
306308
DebugManager.flags.EnableExtendedVaFormats.set(true);
307309
vaSharing->sharingFunctions.haveExportSurfaceHandle = true;
@@ -324,7 +326,30 @@ TEST_F(VaSharingTests, givenValidSurfaceWhenGetSurfaceDescriptionThenCLSuccessIs
324326
EXPECT_FALSE(surfaceInfo.imgInfo.linearStorage);
325327
}
326328

327-
TEST_F(VaSharingTests, givenValidSurfaceWithInvalidPlaneNumberWhenGetSurfaceDescriptionThenFailIsReturned) {
329+
TEST_F(VaSharingTests, givenValidY210SurfaceWhenGetSurfaceDescriptionThenCLSuccessIsReturnedAndDataAreSet) {
330+
DebugManagerStateRestore restore;
331+
DebugManager.flags.EnableExtendedVaFormats.set(true);
332+
vaSharing->sharingFunctions.haveExportSurfaceHandle = true;
333+
334+
vaSharing->sharingFunctions.mockVaSurfaceDesc.fourcc = VA_FOURCC_Y210;
335+
vaSharing->sharingFunctions.mockVaSurfaceDesc.objects[0] = {8, 98304, I915_FORMAT_MOD_Y_TILED};
336+
vaSharing->sharingFunctions.mockVaSurfaceDesc.num_layers = 1;
337+
vaSharing->sharingFunctions.mockVaSurfaceDesc.layers[0] = {DRM_FORMAT_Y210, 1, {}, {0, 0, 0, 0}, {256, 0, 0, 0}};
338+
vaSharing->sharingFunctions.mockVaSurfaceDesc.width = 24;
339+
vaSharing->sharingFunctions.mockVaSurfaceDesc.height = 24;
340+
vaSharing->sharingFunctions.derivedImageFormatBpp = 32;
341+
vaSharing->sharingFunctions.derivedImageFormatFourCC = VA_FOURCC_Y210;
342+
343+
SharedSurfaceInfo surfaceInfo{};
344+
EXPECT_EQ(VA_STATUS_SUCCESS, VASurface::getSurfaceDescription(surfaceInfo, &vaSharing->sharingFunctions, &vaSurfaceId));
345+
EXPECT_EQ(vaSharing->sharingFunctions.mockVaSurfaceDesc.height, surfaceInfo.imgInfo.imgDesc.imageWidth);
346+
EXPECT_EQ(vaSharing->sharingFunctions.mockVaSurfaceDesc.width, surfaceInfo.imgInfo.imgDesc.imageHeight);
347+
EXPECT_EQ(static_cast<uint32_t>(vaSharing->sharingFunctions.mockVaSurfaceDesc.objects[0].fd), surfaceInfo.sharedHandle);
348+
EXPECT_EQ(vaSharing->sharingFunctions.mockVaSurfaceDesc.fourcc, surfaceInfo.imageFourcc);
349+
EXPECT_FALSE(surfaceInfo.imgInfo.linearStorage);
350+
}
351+
352+
TEST_F(VaSharingTests, givenValidYUY2SurfaceWithInvalidPlaneNumberWhenGetSurfaceDescriptionThenFailIsReturned) {
328353
DebugManagerStateRestore restore;
329354
DebugManager.flags.EnableExtendedVaFormats.set(true);
330355
vaSharing->sharingFunctions.haveExportSurfaceHandle = true;
@@ -343,6 +368,25 @@ TEST_F(VaSharingTests, givenValidSurfaceWithInvalidPlaneNumberWhenGetSurfaceDesc
343368
EXPECT_EQ(VA_STATUS_ERROR_INVALID_PARAMETER, VASurface::getSurfaceDescription(surfaceInfo, &vaSharing->sharingFunctions, &vaSurfaceId));
344369
}
345370

371+
TEST_F(VaSharingTests, givenValidY210SurfaceWithInvalidPlaneNumberWhenGetSurfaceDescriptionThenFailIsReturned) {
372+
DebugManagerStateRestore restore;
373+
DebugManager.flags.EnableExtendedVaFormats.set(true);
374+
vaSharing->sharingFunctions.haveExportSurfaceHandle = true;
375+
376+
vaSharing->sharingFunctions.mockVaSurfaceDesc.fourcc = VA_FOURCC_Y210;
377+
vaSharing->sharingFunctions.mockVaSurfaceDesc.objects[0] = {8, 98304, I915_FORMAT_MOD_Y_TILED};
378+
vaSharing->sharingFunctions.mockVaSurfaceDesc.num_layers = 1;
379+
vaSharing->sharingFunctions.mockVaSurfaceDesc.layers[0] = {DRM_FORMAT_Y210, 1, {}, {0, 0, 0, 0}, {256, 0, 0, 0}};
380+
vaSharing->sharingFunctions.mockVaSurfaceDesc.width = 24;
381+
vaSharing->sharingFunctions.mockVaSurfaceDesc.height = 24;
382+
vaSharing->sharingFunctions.derivedImageFormatBpp = 32;
383+
vaSharing->sharingFunctions.derivedImageFormatFourCC = VA_FOURCC_Y210;
384+
385+
SharedSurfaceInfo surfaceInfo{};
386+
surfaceInfo.plane = 1;
387+
EXPECT_EQ(VA_STATUS_ERROR_INVALID_PARAMETER, VASurface::getSurfaceDescription(surfaceInfo, &vaSharing->sharingFunctions, &vaSurfaceId));
388+
}
389+
346390
TEST_F(VaSharingTests, givenValidPlanarSurfaceWithPlaneSetWhenGetSurfaceDescriptionThenCLSuccessIsReturnedAndDataAreSet) {
347391
DebugManagerStateRestore restore;
348392
DebugManager.flags.EnableExtendedVaFormats.set(true);
@@ -378,7 +422,8 @@ TEST_F(VaSharingTests, givenValidPlanarSurfaceWithPlaneSetWhenGetSurfaceDescript
378422
EXPECT_EQ(surfaceInfo.imageOffset, vaSharing->sharingFunctions.mockVaSurfaceDesc.layers[2].offset[0]);
379423
EXPECT_EQ(surfaceInfo.imagePitch, vaSharing->sharingFunctions.mockVaSurfaceDesc.layers[2].pitch[0]);
380424
}
381-
TEST_F(VaSharingTests, givenValidSurfaceWhenGetSurfaceDescriptionWithDeriveImageThenCLSuccessIsReturnedAndDataAreSet) {
425+
426+
TEST_F(VaSharingTests, givenValidYUY2SurfaceWhenGetSurfaceDescriptionWithDeriveImageThenCLSuccessIsReturnedAndDataAreSet) {
382427
vaSharing->sharingFunctions.derivedImageFormatBpp = 16;
383428
vaSharing->sharingFunctions.derivedImageFormatFourCC = VA_FOURCC_YUY2;
384429
vaSharing->sharingFunctions.derivedImageHeight = 24;
@@ -391,6 +436,23 @@ TEST_F(VaSharingTests, givenValidSurfaceWhenGetSurfaceDescriptionWithDeriveImage
391436
EXPECT_EQ(static_cast<uint32_t>(vaSharing->sharingFunctions.derivedImageFormatFourCC), surfaceInfo.imageFourcc);
392437
}
393438

439+
TEST_F(VaSharingTests, givenValidY210SurfaceWhenGetSurfaceDescriptionWithDeriveImageThenCLSuccessIsReturnedAndDataAreSet) {
440+
vaSharing->sharingFunctions.derivedImageFormatBpp = 32;
441+
vaSharing->sharingFunctions.derivedImageFormatFourCC = VA_FOURCC_Y210;
442+
vaSharing->sharingFunctions.derivedImageHeight = 24;
443+
vaSharing->sharingFunctions.derivedImageWidth = 24;
444+
445+
SharedSurfaceInfo surfaceInfo{};
446+
EXPECT_EQ(VA_STATUS_SUCCESS, VASurface::getSurfaceDescription(surfaceInfo, &vaSharing->sharingFunctions, &vaSurfaceId));
447+
EXPECT_EQ(vaSharing->sharingFunctions.derivedImageHeight, surfaceInfo.imgInfo.imgDesc.imageWidth);
448+
EXPECT_EQ(vaSharing->sharingFunctions.derivedImageWidth, surfaceInfo.imgInfo.imgDesc.imageHeight);
449+
EXPECT_EQ(static_cast<uint32_t>(vaSharing->sharingFunctions.derivedImageFormatFourCC), surfaceInfo.imageFourcc);
450+
}
451+
452+
TEST(VASurface, givenSupportedY210PackedFormatWhenCheckingIfSupportedThenSurfaceDescIsReturned) {
453+
EXPECT_NE(nullptr, VASurface::getExtendedSurfaceFormatInfo(VA_FOURCC_Y210));
454+
}
455+
394456
TEST_F(VaSharingTests, givenValidSurfaceWithInvalidPlaneNumberWhenGetSurfaceDescriptionWithDeriveImageThenFailIsReturned) {
395457
vaSharing->sharingFunctions.derivedImageFormatBpp = 16;
396458
vaSharing->sharingFunctions.derivedImageFormatFourCC = VA_FOURCC_YUY2;
@@ -1111,6 +1173,7 @@ TEST_F(ApiVaSharingTests, givenSupportedImageTypeWhenGettingSupportedVAApiFormat
11111173
supportedFormats.push_back(std::make_unique<VAImageFormat>(VAImageFormat{VA_FOURCC_P010, VA_LSB_FIRST, 0, 0, 0, 0, 0, 0}));
11121174
supportedFormats.push_back(std::make_unique<VAImageFormat>(VAImageFormat{VA_FOURCC_P016, VA_LSB_FIRST, 0, 0, 0, 0, 0, 0}));
11131175
supportedFormats.push_back(std::make_unique<VAImageFormat>(VAImageFormat{VA_FOURCC_YUY2, VA_LSB_FIRST, 0, 0, 0, 0, 0, 0}));
1176+
supportedFormats.push_back(std::make_unique<VAImageFormat>(VAImageFormat{VA_FOURCC_Y210, VA_LSB_FIRST, 0, 0, 0, 0, 0, 0}));
11141177

11151178
for (auto flag : flags) {
11161179

@@ -1126,7 +1189,7 @@ TEST_F(ApiVaSharingTests, givenSupportedImageTypeWhenGettingSupportedVAApiFormat
11261189
&numImageFormats);
11271190

11281191
EXPECT_EQ(CL_SUCCESS, result);
1129-
EXPECT_EQ(4u, numImageFormats);
1192+
EXPECT_EQ(5u, numImageFormats);
11301193
int i = 0;
11311194
for (auto &format : supportedFormats) {
11321195
EXPECT_EQ(format->fourcc, vaApiFormats[i++].fourcc);
@@ -1152,7 +1215,7 @@ TEST_F(ApiVaSharingTests, givenZeroNumEntriesWhenGettingSupportedVAApiFormatsThe
11521215
&numImageFormats);
11531216

11541217
EXPECT_EQ(CL_SUCCESS, result);
1155-
EXPECT_EQ(4u, numImageFormats);
1218+
EXPECT_EQ(5u, numImageFormats);
11561219
}
11571220
}
11581221

0 commit comments

Comments
 (0)