[Mesa-dev] [PATCH v2] egl: support EGL_LARGEST_PBUFFER in eglCreatePbufferSurface(...)

Tapani Pälli tapani.palli at intel.com
Mon Mar 7 05:56:57 UTC 2016


ping Emil

On 02/22/2016 08:00 AM, Tapani Pälli wrote:
> From: Daniel Czarnowski <daniel.czarnowski at intel.com>
>
> Patch provides a default for a set pbuffer surface size when
> EGL_LARGEST_PBUFFER is used by the client. MIN2 macro is moved
> to egldefines so that it can be shared.
>
> Fixes following Piglit test:
>     egl-create-largest-pbuffer-surface
>
>  From EGL 1.5 spec:
>     "Use EGL_LARGEST_PBUFFER to get the largest available pbuffer
>     when the allocation of the pbuffer would otherwise fail."
>
> Currently there exists no API to query largest available pixmap size
> using xlib or xcb so right now this seems most straightforward way to
> ensure that we fulfill above API and also we don't attempt to allocate
> 'too big' pixmap which might succeed on server side but not work in
> practice when driver starts to use it as a texture.
>
> v2: add more explanation about the change (Emil)
>
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> Cc: "11.0 11.1" <mesa-stable at lists.freedesktop.org
> ---
>   src/egl/main/eglconfig.c  | 1 -
>   src/egl/main/egldefines.h | 7 +++++++
>   src/egl/main/eglsurface.c | 6 ++++++
>   3 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/src/egl/main/eglconfig.c b/src/egl/main/eglconfig.c
> index c445d9b..d79c0e1 100644
> --- a/src/egl/main/eglconfig.c
> +++ b/src/egl/main/eglconfig.c
> @@ -44,7 +44,6 @@
>   #include "egllog.h"
>
>
> -#define MIN2(A, B)  (((A) < (B)) ? (A) : (B))
>
>
>   /**
> diff --git a/src/egl/main/egldefines.h b/src/egl/main/egldefines.h
> index a32cab2..13a7563 100644
> --- a/src/egl/main/egldefines.h
> +++ b/src/egl/main/egldefines.h
> @@ -40,9 +40,16 @@ extern "C" {
>
>   #define _EGL_MAX_EXTENSIONS_LEN 1000
>
> +/* Hardcoded, conservative default for EGL_LARGEST_PBUFFER,
> + * this is used to implement EGL_LARGEST_PBUFFER.
> + */
> +#define _EGL_MAX_PBUFFER_WIDTH 4096
> +#define _EGL_MAX_PBUFFER_HEIGHT 4096
> +
>   #define _EGL_VENDOR_STRING "Mesa Project"
>
>   #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
> +#define MIN2(A, B)  (((A) < (B)) ? (A) : (B))
>
>   #ifdef __cplusplus
>   }
> diff --git a/src/egl/main/eglsurface.c b/src/egl/main/eglsurface.c
> index 4fa43f3..2971bb0 100644
> --- a/src/egl/main/eglsurface.c
> +++ b/src/egl/main/eglsurface.c
> @@ -307,6 +307,12 @@ _eglInitSurface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type,
>      if (err != EGL_SUCCESS)
>         return _eglError(err, func);
>
> +   /* if EGL_LARGEST_PBUFFER in use, clamp width and height */
> +   if (surf->LargestPbuffer) {
> +      surf->Width = MIN2(surf->Width, _EGL_MAX_PBUFFER_WIDTH);
> +      surf->Height = MIN2(surf->Height, _EGL_MAX_PBUFFER_HEIGHT);
> +   }
> +
>      return EGL_TRUE;
>   }
>
>


More information about the mesa-dev mailing list