aboutsummaryrefslogtreecommitdiff
path: root/render/gles2/pixel_format.c
diff options
context:
space:
mode:
authorManuel Stoeckl <code@mstoeckl.com>2022-04-30 22:43:49 -0400
committerSimon Ser <contact@emersion.fr>2022-05-07 16:25:38 +0000
commit7ad67e0f1db486bf0994128f9750115722eef6d5 (patch)
tree08aeea2f5ea1aa581322af5164be327a38cfdc56 /render/gles2/pixel_format.c
parentcb012c5cb53a937037717ac79c125922e37193da (diff)
render/gles: add support for some 16-bpc unsigned shm formats
These formats require EXT_texture_norm16, which in turn needs OpenGL ES 3.1. The EXT_texture_norm16 extension does not support passing gl_internalformat = GL_RGBA to glTexImage2D, as can be done for formats available in OpenGL ES 2.0, so this commit adds a field to wlr_gles2_pixel_format to provide a more specific internalformat parameter to glTexImage2D.
Diffstat (limited to 'render/gles2/pixel_format.c')
-rw-r--r--render/gles2/pixel_format.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/render/gles2/pixel_format.c b/render/gles2/pixel_format.c
index b155bbbe..acaac5ce 100644
--- a/render/gles2/pixel_format.c
+++ b/render/gles2/pixel_format.c
@@ -93,6 +93,20 @@ static const struct wlr_gles2_pixel_format formats[] = {
.gl_type = GL_HALF_FLOAT_OES,
.has_alpha = true,
},
+ {
+ .drm_format = DRM_FORMAT_XBGR16161616,
+ .gl_internalformat = GL_RGBA16_EXT,
+ .gl_format = GL_RGBA,
+ .gl_type = GL_UNSIGNED_SHORT,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_ABGR16161616,
+ .gl_internalformat = GL_RGBA16_EXT,
+ .gl_format = GL_RGBA,
+ .gl_type = GL_UNSIGNED_SHORT,
+ .has_alpha = true,
+ },
#endif
};
@@ -112,6 +126,10 @@ bool is_gles2_pixel_format_supported(const struct wlr_gles2_renderer *renderer,
&& !renderer->exts.OES_texture_half_float_linear) {
return false;
}
+ if (format->gl_type == GL_UNSIGNED_SHORT
+ && !renderer->exts.EXT_texture_norm16) {
+ return false;
+ }
/*
* Note that we don't need to check for GL_EXT_texture_format_BGRA8888
* here, since we've already checked if we have it at renderer creation