mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-05 11:08:14 +02:00
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>
This commit is contained in:
parent
8e8fa8e885
commit
49a8d9997b
1 changed files with 15 additions and 3 deletions
|
|
@ -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…
Add table
Reference in a new issue