render/gles2: add a few 10-bit and FP16 formats
The half-float formats depend on GL_OES_texture_half_float_linear, not just the GL_OES_texture_half_float extension, because the latter does not include support for linear magni/minification filters. The new 2101010 and 16161616F formats are only available on little- endian builds, since their gl_types are larger than a byte and thus endianness dependent.
This commit is contained in:
		
							parent
							
								
									44e8451cd9
								
							
						
					
					
						commit
						f5df956c18
					
				|  | @ -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 { | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue