[Piglit] [PATCH] piglit_drm_dma_buf: fix NV12, YUV420, and YVU420 import tests for radeonsi

Marek Olšák maraeo at gmail.com
Mon May 13 21:52:29 UTC 2019


From: Marek Olšák <marek.olsak at amd.com>

- We have to use the linear layout, otherwise the offsets can't be modified.
- The GBM image has only 1 plane, so the gbm functions can't be used
  for other planes.
- Don't manipulate with the stride. It has to be the same.
---
 .../piglit-framework-gl/piglit_drm_dma_buf.c  | 21 ++++++++++---------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/tests/util/piglit-framework-gl/piglit_drm_dma_buf.c b/tests/util/piglit-framework-gl/piglit_drm_dma_buf.c
index d2182c48c..c8adc35a4 100644
--- a/tests/util/piglit-framework-gl/piglit_drm_dma_buf.c
+++ b/tests/util/piglit-framework-gl/piglit_drm_dma_buf.c
@@ -323,21 +323,22 @@ piglit_gbm_buf_create(unsigned w, unsigned h, unsigned fourcc,
 		buf_w = w / 2;
 		buf_h = h * 2;    /* U/V not interleaved */
 		src_stride = w;
 		cpp = 1;
 		break;
 	default:
 		fprintf(stderr, "invalid fourcc: %.4s\n", (char *)&fourcc);
 		return false;
 	}
 
-	bo = gbm_bo_create(gbm, buf_w, buf_h, format, GBM_BO_USE_RENDERING);
+	bo = gbm_bo_create(gbm, buf_w, buf_h, format,
+			   GBM_BO_USE_RENDERING | GBM_BO_USE_LINEAR);
 	if (!bo)
 		return false;
 
 	dst_data = gbm_bo_map(bo, 0, 0, buf_w, buf_h, GBM_BO_TRANSFER_WRITE,
 			      &dst_stride, &map_data);
 	if (!dst_data) {
 		fprintf(stderr, "Failed to map GBM bo\n");
 		gbm_bo_destroy(bo);
 		return NULL;
 	}
@@ -354,38 +355,38 @@ piglit_gbm_buf_create(unsigned w, unsigned h, unsigned fourcc,
 		       src_data + i * src_stride,
 		       w * cpp);
 	}
 
 	switch (fourcc) {
 	case DRM_FORMAT_NV12:
 		for (i = 0; i < h/2; ++i) {
 			memcpy(((char *)dst_data + dst_stride * h) + i * dst_stride,
 				(src_data + (w*h)) + i * src_stride, w);
 		}
-		buf->offset[1] = gbm_bo_get_offset(bo, 1);
-		buf->stride[1] = gbm_bo_get_stride_for_plane(bo, 1);
+		buf->offset[1] = buf->stride[0] * h;
+		buf->stride[1] = buf->stride[0];
 		break;
 	case DRM_FORMAT_YUV420:
 	case DRM_FORMAT_YVU420:
 		for (i = 0; i < h/2; ++i) {
-			memcpy(((char *)dst_data + dst_stride * h) + i * dst_stride / 2,
+			memcpy(((char *)dst_data + dst_stride * h) + i * dst_stride,
 				(src_data + (w*h)) + i * src_stride / 2, w / 2);
 		}
-		unsigned cpu_offset2 = dst_stride * h + (dst_stride * h / 2 / 2);
+		unsigned cpu_offset2 = dst_stride * h + dst_stride * h / 2;
 		for (i = 0; i < h/2; ++i) {
-			memcpy(((char *)dst_data + cpu_offset2) + i * dst_stride / 2,
+			memcpy(((char *)dst_data + cpu_offset2) + i * dst_stride,
 				(src_data + (w*h) + (w*h/4)) + i * src_stride / 2, w / 2);
 		}
-		buf->offset[1] = gbm_bo_get_offset(bo, 1);
-		buf->stride[1] = gbm_bo_get_stride_for_plane(bo, 1);
-		buf->offset[2] = gbm_bo_get_offset(bo, 2);
-		buf->stride[2] = gbm_bo_get_stride_for_plane(bo, 2);
+		buf->offset[1] = buf->stride[0] * h;
+		buf->stride[1] = buf->stride[0];
+		buf->offset[2] = buf->stride[0] * h + buf->stride[0] * h / 2;
+		buf->stride[2] = buf->stride[1];
 		break;
 	default:
 		break;
 	}
 
 	gbm_bo_unmap(bo, map_data);
 
 
 	return true;
 }
-- 
2.17.1



More information about the Piglit mailing list