Fixes rendering issues with mode rgba on etnaviv. I have applied the same change for nv12 variants but they are not supported on etnaviv.
Signed-off-by: Christian Gmeiner <christian.gmei...@gmail.com> --- cube-tex.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/cube-tex.c b/cube-tex.c index 9e38ae8..dba19ff 100644 --- a/cube-tex.c +++ b/cube-tex.c @@ -213,7 +213,7 @@ static const char *fragment_shader_source_2img = static const uint32_t texw = 512, texh = 512; -static int get_fd_rgba(uint32_t *pstride) +static int get_fd_rgba(uint32_t *pstride, uint64_t *modifier) { struct gbm_bo *bo; void *map_data = NULL; @@ -234,6 +234,7 @@ static int get_fd_rgba(uint32_t *pstride) gbm_bo_unmap(bo, map_data); fd = gbm_bo_get_fd(bo); + *modifier = gbm_bo_get_modifier(bo); /* we have the fd now, no longer need the bo: */ gbm_bo_destroy(bo); @@ -243,7 +244,7 @@ static int get_fd_rgba(uint32_t *pstride) return fd; } -static int get_fd_y(uint32_t *pstride) +static int get_fd_y(uint32_t *pstride, uint64_t *modifier) { struct gbm_bo *bo; void *map_data = NULL; @@ -264,6 +265,7 @@ static int get_fd_y(uint32_t *pstride) gbm_bo_unmap(bo, map_data); fd = gbm_bo_get_fd(bo); + *modifier = gbm_bo_get_modifier(bo); /* we have the fd now, no longer need the bo: */ gbm_bo_destroy(bo); @@ -273,7 +275,7 @@ static int get_fd_y(uint32_t *pstride) return fd; } -static int get_fd_uv(uint32_t *pstride) +static int get_fd_uv(uint32_t *pstride, uint64_t *modifier) { struct gbm_bo *bo; void *map_data = NULL; @@ -294,6 +296,7 @@ static int get_fd_uv(uint32_t *pstride) gbm_bo_unmap(bo, map_data); fd = gbm_bo_get_fd(bo); + *modifier = gbm_bo_get_modifier(bo); /* we have the fd now, no longer need the bo: */ gbm_bo_destroy(bo); @@ -306,7 +309,8 @@ static int get_fd_uv(uint32_t *pstride) static int init_tex_rgba(void) { uint32_t stride; - int fd = get_fd_rgba(&stride); + uint64_t modifier; + int fd = get_fd_rgba(&stride, &modifier); const EGLint attr[] = { EGL_WIDTH, texw, EGL_HEIGHT, texh, @@ -314,6 +318,8 @@ static int init_tex_rgba(void) EGL_DMA_BUF_PLANE0_FD_EXT, fd, EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, EGL_DMA_BUF_PLANE0_PITCH_EXT, stride, + EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT, modifier & 0xFFFFFFFF, + EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT, modifier >> 32, EGL_NONE }; EGLImage img; @@ -339,8 +345,9 @@ static int init_tex_rgba(void) static int init_tex_nv12_2img(void) { uint32_t stride_y, stride_uv; - int fd_y = get_fd_y(&stride_y); - int fd_uv = get_fd_uv(&stride_uv); + uint64_t modifier_y, modifier_uv; + int fd_y = get_fd_y(&stride_y, &modifier_y); + int fd_uv = get_fd_uv(&stride_uv, &modifier_uv); const EGLint attr_y[] = { EGL_WIDTH, texw, EGL_HEIGHT, texh, @@ -348,6 +355,8 @@ static int init_tex_nv12_2img(void) EGL_DMA_BUF_PLANE0_FD_EXT, fd_y, EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, EGL_DMA_BUF_PLANE0_PITCH_EXT, stride_y, + EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT, modifier_y & 0xFFFFFFFF, + EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT, modifier_y >> 32, EGL_NONE }; const EGLint attr_uv[] = { @@ -357,6 +366,8 @@ static int init_tex_nv12_2img(void) EGL_DMA_BUF_PLANE0_FD_EXT, fd_uv, EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, EGL_DMA_BUF_PLANE0_PITCH_EXT, stride_uv, + EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT, modifier_uv & 0xFFFFFFFF, + EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT, modifier_uv >> 32, EGL_NONE }; EGLImage img_y, img_uv; @@ -397,8 +408,9 @@ static int init_tex_nv12_2img(void) static int init_tex_nv12_1img(void) { uint32_t stride_y, stride_uv; - int fd_y = get_fd_y(&stride_y); - int fd_uv = get_fd_uv(&stride_uv); + uint64_t modifier_y, modifier_uv; + int fd_y = get_fd_y(&stride_y, &modifier_y); + int fd_uv = get_fd_uv(&stride_uv, &modifier_uv); const EGLint attr[] = { EGL_WIDTH, texw, EGL_HEIGHT, texh, @@ -406,9 +418,13 @@ static int init_tex_nv12_1img(void) EGL_DMA_BUF_PLANE0_FD_EXT, fd_y, EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, EGL_DMA_BUF_PLANE0_PITCH_EXT, stride_y, + EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT, modifier_y & 0xFFFFFFFF, + EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT, modifier_y >> 32, EGL_DMA_BUF_PLANE1_FD_EXT, fd_uv, EGL_DMA_BUF_PLANE1_OFFSET_EXT, 0, EGL_DMA_BUF_PLANE1_PITCH_EXT, stride_uv, + EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT, modifier_uv & 0xFFFFFFFF, + EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT, modifier_uv >> 32, EGL_NONE }; EGLImage img; -- 2.14.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev