aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/render/gles2.h2
-rw-r--r--render/gles2/pixel_format.c33
-rw-r--r--render/gles2/renderer.c6
3 files changed, 40 insertions, 1 deletions
diff --git a/include/render/gles2.h b/include/render/gles2.h
index 68fbb40e..cc5a2808 100644
--- a/include/render/gles2.h
+++ b/include/render/gles2.h
@@ -43,6 +43,8 @@ struct wlr_gles2_renderer {
bool KHR_debug;
bool OES_egl_image_external;
bool OES_egl_image;
+ bool EXT_texture_type_2_10_10_10_REV;
+ bool OES_texture_half_float_linear;
} exts;
struct {
diff --git a/render/gles2/pixel_format.c b/render/gles2/pixel_format.c
index ceb8dadd..31bb3908 100644
--- a/render/gles2/pixel_format.c
+++ b/render/gles2/pixel_format.c
@@ -69,7 +69,30 @@ static const struct wlr_gles2_pixel_format formats[] = {
.gl_type = GL_UNSIGNED_SHORT_5_6_5,
.has_alpha = false,
},
- // TODO: EXT_texture_type_2_10_10_10_REV support
+ {
+ .drm_format = DRM_FORMAT_XBGR2101010,
+ .gl_format = GL_RGBA,
+ .gl_type = GL_UNSIGNED_INT_2_10_10_10_REV_EXT,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_ABGR2101010,
+ .gl_format = GL_RGBA,
+ .gl_type = GL_UNSIGNED_INT_2_10_10_10_REV_EXT,
+ .has_alpha = true,
+ },
+ {
+ .drm_format = DRM_FORMAT_XBGR16161616F,
+ .gl_format = GL_RGBA,
+ .gl_type = GL_HALF_FLOAT_OES,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_ABGR16161616F,
+ .gl_format = GL_RGBA,
+ .gl_type = GL_HALF_FLOAT_OES,
+ .has_alpha = true,
+ },
#endif
};
@@ -77,6 +100,14 @@ static const struct wlr_gles2_pixel_format formats[] = {
bool is_gles2_pixel_format_supported(const struct wlr_gles2_renderer *renderer,
const struct wlr_gles2_pixel_format *format) {
+ if (format->gl_type == GL_UNSIGNED_INT_2_10_10_10_REV_EXT
+ && !renderer->exts.EXT_texture_type_2_10_10_10_REV) {
+ return false;
+ }
+ if (format->gl_type == GL_HALF_FLOAT_OES
+ && !renderer->exts.OES_texture_half_float_linear) {
+ return false;
+ }
if (format->gl_format == GL_BGRA_EXT
&& !renderer->exts.EXT_read_format_bgra) {
return false;
diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c
index 509d39d2..9ae6e2bb 100644
--- a/render/gles2/renderer.c
+++ b/render/gles2/renderer.c
@@ -749,6 +749,12 @@ struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_egl *egl) {
renderer->exts.EXT_read_format_bgra =
check_gl_ext(exts_str, "GL_EXT_read_format_bgra");
+ renderer->exts.EXT_texture_type_2_10_10_10_REV =
+ check_gl_ext(exts_str, "GL_EXT_texture_type_2_10_10_10_REV");
+
+ renderer->exts.OES_texture_half_float_linear =
+ check_gl_ext(exts_str, "GL_OES_texture_half_float_linear");
+
if (check_gl_ext(exts_str, "GL_KHR_debug")) {
renderer->exts.KHR_debug = true;
load_gl_proc(&renderer->procs.glDebugMessageCallbackKHR,