[Mesa-dev] [PATCH 03/25] glx: move dri2_convert_glx_query_renderer_attribs into a common place
Emil Velikov
emil.l.velikov at gmail.com
Fri Feb 28 17:39:54 PST 2014
On 28/02/14 19:27, Ian Romanick wrote:
> On 02/21/2014 07:03 PM, Emil Velikov wrote:
>> This way we can reuse it for drisw and dri3.
>> Squash a couple minor whitespace fixes while we're here.
>
> Now I remember why I put this all in its own file... there are unit
> tests in src/glx/tests that link with these functions. If they have to
> link with something from dri_common.c, libxcb get pulled in, and the
> link E X P L O D E S. :( For a good time, call "make check" with this
> patch applied.
>
Strange I seem to get a ton of duplicated symbols due to redefinition of
functions within the tests. Which is sigh...
/**
* \name Indirect-rendering function stubs
*
* These are necessary so that indirect_init.c doesn't try to link with
* indirect.c. Linking with indirect.c would require linking with various X
* libraries and a bunch of other stuff. While this is ugly, it does
simplify
* the build quite a bit.
*/
Does the tests actually call those functions ? If not, one can link with
indirect.c and leave to extra deps (X etc.) as undefined.
This will remove these stubs and should resolve our problems in a better
fashion.
> Given that, I like my "dri3: Enable GLX_MESA_query_renderer on DRI3 too"
> patch better. :) Alternately, we could leave
> dri2_convert_glx_query_renderer_attribs in this file, but make it public
> (and rename it dri_convert_glx_query_renderer_attribs).
>
> Thoughts / opinions?
>
The major hit with your approach is that it additionally convolutes the
header inclusions. I have a some local patches that clears up some of
the unnecessary ones and I suspect that there are few more needed.
If you're going with "keep all the queries in dri2_query_renderer.c"
approach please move all the declarations out of dri2.h into a separate
header and keep the convert function at it's current place.
IMHO dri2_query_renderer.c sounds a bit ambiguous as it will be used by
dri2, dri3, and drisw, one might want to rename that and please use
designated initialisers for glx_screen_vtable.
I'm possibly pushing it with the last two but please take the header
business closer to heart.
Thanks
-Emil
>> Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
>> ---
>> src/glx/dri2_query_renderer.c | 34 +---------------------------------
>> src/glx/dri_common.c | 40
>> ++++++++++++++++++++++++++++++++++++----
>> src/glx/dri_common.h | 3 +++
>> 3 files changed, 40 insertions(+), 37 deletions(-)
>>
>> diff --git a/src/glx/dri2_query_renderer.c
>> b/src/glx/dri2_query_renderer.c
>> index 3baba86..5d66064 100644
>> --- a/src/glx/dri2_query_renderer.c
>> +++ b/src/glx/dri2_query_renderer.c
>> @@ -25,41 +25,9 @@
>> #include "xf86drm.h"
>> #include "dri2.h"
>> #include "dri_interface.h"
>> +#include "dri_common.h"
>> #include "dri2_priv.h"
>>
>> -#define __RENDERER(attrib) \
>> - { GLX_RENDERER_##attrib##_MESA, __DRI2_RENDERER_##attrib }
>> -
>> -static const struct {
>> - unsigned int glx_attrib, dri2_attrib;
>> -} query_renderer_map[] = {
>> - __RENDERER(VENDOR_ID),
>> - __RENDERER(DEVICE_ID),
>> - __RENDERER(VERSION),
>> - __RENDERER(ACCELERATED),
>> - __RENDERER(VIDEO_MEMORY),
>> - __RENDERER(UNIFIED_MEMORY_ARCHITECTURE),
>> - __RENDERER(PREFERRED_PROFILE),
>> - __RENDERER(OPENGL_CORE_PROFILE_VERSION),
>> - __RENDERER(OPENGL_COMPATIBILITY_PROFILE_VERSION),
>> - __RENDERER(OPENGL_ES_PROFILE_VERSION),
>> - __RENDERER(OPENGL_ES2_PROFILE_VERSION),
>> -};
>> -
>> -#undef __RENDERER
>> -
>> -static int
>> -dri2_convert_glx_query_renderer_attribs(int attribute)
>> -{
>> - int i;
>> -
>> - for (i = 0; i < ARRAY_SIZE(query_renderer_map); i++)
>> - if (query_renderer_map[i].glx_attrib == attribute)
>> - return query_renderer_map[i].dri2_attrib;
>> -
>> - return -1;
>> -}
>> -
>> _X_HIDDEN int
>> dri2_query_renderer_integer(struct glx_screen *base, int attribute,
>> unsigned int *value)
>> diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c
>> index 012c8f4..fb70107 100644
>> --- a/src/glx/dri_common.c
>> +++ b/src/glx/dri_common.c
>> @@ -204,7 +204,7 @@ static const struct
>> {
>> unsigned int attrib, offset;
>> } attribMap[] = {
>> - __ATTRIB(__DRI_ATTRIB_BUFFER_SIZE, rgbBits),
>> + __ATTRIB(__DRI_ATTRIB_BUFFER_SIZE, rgbBits),
>> __ATTRIB(__DRI_ATTRIB_LEVEL, level),
>> __ATTRIB(__DRI_ATTRIB_RED_SIZE, redBits),
>> __ATTRIB(__DRI_ATTRIB_GREEN_SIZE, greenBits),
>> @@ -241,10 +241,9 @@ static const struct
>> #if 0
>> __ATTRIB(__DRI_ATTRIB_SWAP_METHOD, swapMethod),
>> #endif
>> -__ATTRIB(__DRI_ATTRIB_BIND_TO_TEXTURE_RGB, bindToTextureRgb),
>> + __ATTRIB(__DRI_ATTRIB_BIND_TO_TEXTURE_RGB, bindToTextureRgb),
>> __ATTRIB(__DRI_ATTRIB_BIND_TO_TEXTURE_RGBA, bindToTextureRgba),
>> - __ATTRIB(__DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE,
>> - bindToMipmapTexture),
>> + __ATTRIB(__DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE,
>> bindToMipmapTexture),
>> __ATTRIB(__DRI_ATTRIB_YINVERTED, yInverted),
>> __ATTRIB(__DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE, sRGBCapable)
>> };
>> @@ -593,4 +592,37 @@ dri2_convert_glx_attribs(unsigned num_attribs,
>> const uint32_t *attribs,
>> return true;
>> }
>>
>> +#define __RENDERER(attrib) \
>> + { GLX_RENDERER_##attrib##_MESA, __DRI2_RENDERER_##attrib }
>> +
>> +static const struct {
>> + unsigned int glx_attrib, dri2_attrib;
>> +} query_renderer_map[] = {
>> + __RENDERER(VENDOR_ID),
>> + __RENDERER(DEVICE_ID),
>> + __RENDERER(VERSION),
>> + __RENDERER(ACCELERATED),
>> + __RENDERER(VIDEO_MEMORY),
>> + __RENDERER(UNIFIED_MEMORY_ARCHITECTURE),
>> + __RENDERER(PREFERRED_PROFILE),
>> + __RENDERER(OPENGL_CORE_PROFILE_VERSION),
>> + __RENDERER(OPENGL_COMPATIBILITY_PROFILE_VERSION),
>> + __RENDERER(OPENGL_ES_PROFILE_VERSION),
>> + __RENDERER(OPENGL_ES2_PROFILE_VERSION),
>> +};
>> +
>> +#undef __RENDERER
>> +
>> +_X_HIDDEN int
>> +dri2_convert_glx_query_renderer_attribs(int attribute)
>> +{
>> + int i;
>> +
>> + for (i = 0; i < ARRAY_SIZE(query_renderer_map); i++)
>> + if (query_renderer_map[i].glx_attrib == attribute)
>> + return query_renderer_map[i].dri2_attrib;
>> +
>> + return -1;
>> +}
>> +
>> #endif /* GLX_DIRECT_RENDERING */
>> diff --git a/src/glx/dri_common.h b/src/glx/dri_common.h
>> index 6234fd8..fc3b660 100644
>> --- a/src/glx/dri_common.h
>> +++ b/src/glx/dri_common.h
>> @@ -85,4 +85,7 @@ dri2_convert_glx_attribs(unsigned num_attribs, const
>> uint32_t *attribs,
>> uint32_t *render_type, uint32_t *flags,
>> unsigned *api,
>> int *reset, unsigned *error);
>>
>> +extern int
>> +dri2_convert_glx_query_renderer_attribs(int attribute);
>> +
>> #endif /* _DRI_COMMON_H */
>>
>
More information about the mesa-dev
mailing list