[Mesa-dev] [PATCH 03/16] dri/radeon: use a const __DRIextension array

Kristian Høgsberg krh at bitplanet.net
Fri Apr 25 10:53:27 PDT 2014


On Sun, Mar 16, 2014 at 6:48 AM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> Rather than keeping a separate and unused copy of the screen extensions
> within the radeon screen, use a constant array that can be used directly
> with __DRIscreen.

The copy in the radeon screen isn't unused, that's where the array is
built and stored, the dri screen just points to that.  The pattern
here was used for cases where the extensions exported by a dri driver
could vary at runtime, for example depending on chipset.  In this
case, it's known at compile time, so it makes sense to use a static
const array instead.

Reviewed-by: Kristian Høgsberg <krh at bitplanet.net>

> Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
> ---
>  src/mesa/drivers/dri/radeon/radeon_screen.c | 29 ++++++++++++++---------------
>  src/mesa/drivers/dri/radeon/radeon_screen.h |  2 --
>  2 files changed, 14 insertions(+), 17 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c b/src/mesa/drivers/dri/radeon/radeon_screen.c
> index dd94038..fe72b77 100644
> --- a/src/mesa/drivers/dri/radeon/radeon_screen.c
> +++ b/src/mesa/drivers/dri/radeon/radeon_screen.c
> @@ -481,11 +481,23 @@ static int radeon_set_screen_flags(radeonScreenPtr screen, int device_id)
>     return 0;
>  }
>
> +
> +static const __DRIextension *radeon_screen_extensions[] = {
> +    &dri2ConfigQueryExtension.base,
> +#if defined(RADEON_R100)
> +    &radeonTexBufferExtension.base,
> +#elif defined(RADEON_R200)
> +    &r200TexBufferExtension.base,
> +#endif
> +    &radeonFlushExtension.base,
> +    &radeonImageExtension.base,
> +    NULL
> +};
> +
>  static radeonScreenPtr
>  radeonCreateScreen2(__DRIscreen *sPriv)
>  {
>     radeonScreenPtr screen;
> -   int i;
>     int ret;
>     uint32_t device_id = 0;
>
> @@ -522,20 +534,7 @@ radeonCreateScreen2(__DRIscreen *sPriv)
>     if (getenv("RADEON_NO_TCL"))
>            screen->chip_flags &= ~RADEON_CHIPSET_TCL;
>
> -   i = 0;
> -   screen->extensions[i++] = &dri2ConfigQueryExtension.base;
> -
> -#if defined(RADEON_R100)
> -   screen->extensions[i++] = &radeonTexBufferExtension.base;
> -#elif defined(RADEON_R200)
> -   screen->extensions[i++] = &r200TexBufferExtension.base;
> -#endif
> -
> -   screen->extensions[i++] = &radeonFlushExtension.base;
> -   screen->extensions[i++] = &radeonImageExtension.base;
> -
> -   screen->extensions[i++] = NULL;
> -   sPriv->extensions = screen->extensions;
> +   sPriv->extensions = radeon_screen_extensions;
>
>     screen->driScreen = sPriv;
>     screen->bom = radeon_bo_manager_gem_ctor(sPriv->fd);
> diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.h b/src/mesa/drivers/dri/radeon/radeon_screen.h
> index 03abb2a..76fa1ec 100644
> --- a/src/mesa/drivers/dri/radeon/radeon_screen.h
> +++ b/src/mesa/drivers/dri/radeon/radeon_screen.h
> @@ -97,8 +97,6 @@ typedef struct radeon_screen {
>     /* Configuration cache with default values for all contexts */
>     driOptionCache optionCache;
>
> -   const __DRIextension *extensions[17];
> -
>     int num_gb_pipes;
>     int num_z_pipes;
>     drm_radeon_sarea_t *sarea;  /* Private SAREA data */
> --
> 1.9.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list