gl-renderer: fix pixel format used in texture uploads when using R/RG textures

In glTexImage2D / glTexSubImage2D calls, the only pixel formats allowed
for the GL_R8 and GL_RG internal formats are respectively GL_RED and
GL_RG [1].

Make sure we match this requirement, as some drivers will fail with the
current code.

[1] https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml, Table 2

Signed-off-by: Arnaud Vrac <rawoul@gmail.com>
Fixes: 00a03d2f72 ("gl-renderer: add support of WL_SHM_FORMAT_NV12")
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
dev
Arnaud Vrac 7 years ago committed by Daniel Stone
parent 8e8fa8e885
commit 49a8d9997b
  1. 18
      libweston/gl-renderer.c

@ -1388,6 +1388,18 @@ gl_renderer_read_pixels(struct weston_output *output,
return 0;
}
static GLenum gl_format_from_internal(GLenum internal_format)
{
switch (internal_format) {
case GL_R8_EXT:
return GL_RED_EXT;
case GL_RG8_EXT:
return GL_RG_EXT;
default:
return internal_format;
}
}
static void
gl_renderer_flush_damage(struct weston_surface *surface)
{
@ -1436,7 +1448,7 @@ gl_renderer_flush_damage(struct weston_surface *surface)
gs->pitch / gs->hsub[j],
buffer->height / gs->vsub[j],
0,
gs->gl_format[j],
gl_format_from_internal(gs->gl_format[j]),
gs->gl_pixel_type,
data + gs->offset[j]);
}
@ -1458,7 +1470,7 @@ gl_renderer_flush_damage(struct weston_surface *surface)
gs->pitch / gs->hsub[j],
buffer->height / gs->vsub[j],
0,
gs->gl_format[j],
gl_format_from_internal(gs->gl_format[j]),
gs->gl_pixel_type,
data + gs->offset[j]);
}
@ -1486,7 +1498,7 @@ gl_renderer_flush_damage(struct weston_surface *surface)
r.y1 / gs->vsub[j],
(r.x2 - r.x1) / gs->hsub[j],
(r.y2 - r.y1) / gs->vsub[j],
gs->gl_format[j],
gl_format_from_internal(gs->gl_format[j]),
gs->gl_pixel_type,
data + gs->offset[j]);
}

Loading…
Cancel
Save