[PATCH] glamor: fallback if font is too large for FBO size.
Keith Packard
keithp at keithp.com
Mon Jan 11 22:15:53 PST 2016
Dave Airlie <airlied at gmail.com> writes:
> From: Dave Airlie <airlied at redhat.com>
>
> running xfontsel on haswell here, with a max texture size
> of 8kx8k, one font wants 9711 height. This fallsback to
> sw in this case.
>
> A proper solution probably involves using an array texture.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> glamor/glamor_font.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/glamor/glamor_font.c b/glamor/glamor_font.c
> index 6753d50..bda1b58 100644
> --- a/glamor/glamor_font.c
> +++ b/glamor/glamor_font.c
> @@ -80,6 +80,10 @@ glamor_font_get(ScreenPtr screen, FontPtr font)
> overall_width = glyph_width_bytes * num_cols;
> overall_height = glyph_height * num_rows;
>
> + if (overall_width > glamor_priv->max_fbo_size ||
> + overall_height > glamor_priv->max_fbo_size) {
> + return NULL;
> + }
I wonder why glTexImage2D didn't return GL_OUT_OF_MEMORY for this case;
we check for that. Maybe there's a different error we should be looking
for?
In any case, bailing early seems like a fine plan, and this looks like
the right solution
> bits = malloc(overall_width * overall_height);
> if (!bits)
> return NULL;
I note that the case where GL_OUT_OF_MEMORY is returned fails to free
the allocated bits (oops!). Here's a patch that just moves the free
above the error return:
diff --git a/glamor/glamor_font.c b/glamor/glamor_font.c
index 6753d50..3925f2a 100644
--- a/glamor/glamor_font.c
+++ b/glamor/glamor_font.c
@@ -132,11 +132,12 @@ glamor_font_get(ScreenPtr screen, FontPtr font)
glTexImage2D(GL_TEXTURE_2D, 0, GL_R8UI, overall_width, overall_height,
0, GL_RED_INTEGER, GL_UNSIGNED_BYTE, bits);
glamor_priv->suppress_gl_out_of_memory_logging = false;
- if (glGetError() == GL_OUT_OF_MEMORY)
- return NULL;
free(bits);
+ if (glGetError() == GL_OUT_OF_MEMORY)
+ return NULL;
+
glamor_font->realized = TRUE;
return glamor_font;
--
-keith
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 810 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg-devel/attachments/20160111/f45ffcdf/attachment.sig>
More information about the xorg-devel
mailing list