[PATCH xserver V3] use xcb struct in render

Christian Linhart chris at DemoRecorder.com
Fri Jan 30 07:16:27 PST 2015


On 01/30/15 06:20, Peter Hutterer wrote:
> On Sun, Jan 18, 2015 at 02:57:21PM +0530, Jaya Tiwari wrote:
>> Replacing manually written proto headers for render extension with xcb
>> generated structs
>> Have changed simple requests without list/switch and replies
>>
>> Signed-off-by: Jaya Tiwari <tiwari.jaya18 at gmail.com>
> Patch looks good minus the whitespace issue that Christian already pointed
> out. Can I ask though: what's the longer-term plan here? Is this the only
> extension to be changed, or are there others that work similarly? While this
> is an improvement, it'd be nice to see a number of patches that do this go
> in at the same time, having only one extension use xcb makes it stand out a
> bit.
The longer term plan is to change all extensions this way.
Render is just the first extension to do this.

The next step is to convert the rest of render in this way,
e.g, handling of lists using xcb-access-functions,
length-functions and iterators.
This will replace constructs like
* "&(stuff[1])"
* and computing list lengths with handwritten arithmetics.

For that, one part of the xml-definition of render needs to be fixed:
The list in request SetPictureClipRectangles does not have a length-definition yet.
Jaya is currently working on fixing the missing length.

The length of the list depends on the request length.
In theory, this can be solved with an expression using <op> elements,
but right now, it does not work to access  the hidden "length" field
of the request with a <fieldref> tag.
So Jaya is working on changing the generator accordingly.

So, this is done step by step until (hopefully) completion in all extensions.

Of course, the first extension is more work because all the base stuff has to be solved there.

Cheers,

Chris





>
> Cheers,
>    Peter
>
>> ---
>>  render/render.c | 153 ++++++++++++++++++++++++++++----------------------------
>>  1 file changed, 77 insertions(+), 76 deletions(-)
>>
>> diff --git a/render/render.c b/render/render.c
>> index 723f380..65f51d3 100644
>> --- a/render/render.c
>> +++ b/render/render.c
>> @@ -41,6 +41,7 @@
>>  #include "servermd.h"
>>  #include <X11/extensions/render.h>
>>  #include <X11/extensions/renderproto.h>
>> +#include <xcb/render.h>
>>  #include "picturestr.h"
>>  #include "glyphstr.h"
>>  #include <X11/Xfuncproto.h>
>> @@ -654,9 +655,9 @@ ProcRenderFreePicture(ClientPtr client)
>>  {
>>      PicturePtr pPicture;
>>  
>> -    REQUEST(xRenderFreePictureReq);
>> +    REQUEST(xcb_render_free_picture_request_t);
>>  
>> -    REQUEST_SIZE_MATCH(xRenderFreePictureReq);
>> +    REQUEST_SIZE_MATCH(xcb_render_free_picture_request_t);
>>  
>>      VERIFY_PICTURE(pPicture, stuff->picture, client, DixDestroyAccess);
>>      FreeResource(stuff->picture, RT_NONE);
>> @@ -682,9 +683,9 @@ ProcRenderComposite(ClientPtr client)
>>  {
>>      PicturePtr pSrc, pMask, pDst;
>>  
>> -    REQUEST(xRenderCompositeReq);
>> +    REQUEST(xcb_render_composite_request_t);
>>  
>> -    REQUEST_SIZE_MATCH(xRenderCompositeReq);
>> +    REQUEST_SIZE_MATCH(xcb_render_composite_request_t);
>>      if (!PictOpValid(stuff->op)) {
>>          client->errorValue = stuff->op;
>>          return BadValue;
>> @@ -709,11 +710,11 @@ ProcRenderComposite(ClientPtr client)
>>                       pSrc,
>>                       pMask,
>>                       pDst,
>> -                     stuff->xSrc,
>> -                     stuff->ySrc,
>> -                     stuff->xMask,
>> -                     stuff->yMask,
>> -                     stuff->xDst, stuff->yDst, stuff->width, stuff->height);
>> +                     stuff->src_x,
>> +                     stuff->src_y,
>> +                     stuff->mask_x,
>> +                     stuff->mask_y,
>> +                     stuff->dst_x, stuff->dst_y, stuff->width, stuff->height);
>>      return Success;
>>  }
>>  
>> @@ -904,9 +905,9 @@ ProcRenderCreateGlyphSet(ClientPtr client)
>>      PictFormatPtr format;
>>      int rc, f;
>>  
>> -    REQUEST(xRenderCreateGlyphSetReq);
>> +    REQUEST(xcb_render_create_glyph_set_request_t);
>>  
>> -    REQUEST_SIZE_MATCH(xRenderCreateGlyphSetReq);
>> +    REQUEST_SIZE_MATCH(xcb_render_create_glyph_set_request_t);
>>  
>>      LEGAL_NEW_RESOURCE(stuff->gsid, client);
>>      rc = dixLookupResourceByType((void **) &format, stuff->format,
>> @@ -954,9 +955,9 @@ ProcRenderReferenceGlyphSet(ClientPtr client)
>>      GlyphSetPtr glyphSet;
>>      int rc;
>>  
>> -    REQUEST(xRenderReferenceGlyphSetReq);
>> +    REQUEST(xcb_render_reference_glyph_set_request_t);
>>  
>> -    REQUEST_SIZE_MATCH(xRenderReferenceGlyphSetReq);
>> +    REQUEST_SIZE_MATCH(xcb_render_reference_glyph_set_request_t);
>>  
>>      LEGAL_NEW_RESOURCE(stuff->gsid, client);
>>  
>> @@ -981,9 +982,9 @@ ProcRenderFreeGlyphSet(ClientPtr client)
>>      GlyphSetPtr glyphSet;
>>      int rc;
>>  
>> -    REQUEST(xRenderFreeGlyphSetReq);
>> +    REQUEST(xcb_render_free_glyph_set_request_t);
>>  
>> -    REQUEST_SIZE_MATCH(xRenderFreeGlyphSetReq);
>> +    REQUEST_SIZE_MATCH(xcb_render_free_glyph_set_request_t);
>>      rc = dixLookupResourceByType((void **) &glyphSet, stuff->glyphset,
>>                                   GlyphSetType, client, DixDestroyAccess);
>>      if (rc != Success) {
>> @@ -1459,7 +1460,7 @@ static CARD32 orderedDither[DITHER_DIM][DITHER_DIM] = {
>>  static int
>>  ProcRenderCreateCursor(ClientPtr client)
>>  {
>> -    REQUEST(xRenderCreateCursorReq);
>> +    REQUEST(xcb_render_create_cursor_request_t);
>>      PicturePtr pSrc;
>>      ScreenPtr pScreen;
>>      unsigned short width, height;
>> @@ -1474,10 +1475,10 @@ ProcRenderCreateCursor(ClientPtr client)
>>      CARD32 twocolor[3];
>>      int rc, ncolor;
>>  
>> -    REQUEST_SIZE_MATCH(xRenderCreateCursorReq);
>> +    REQUEST_SIZE_MATCH(xcb_render_create_cursor_request_t);
>>      LEGAL_NEW_RESOURCE(stuff->cid, client);
>>  
>> -    VERIFY_PICTURE(pSrc, stuff->src, client, DixReadAccess);
>> +    VERIFY_PICTURE(pSrc, stuff->source, client, DixReadAccess);
>>      if (!pSrc->pDrawable)
>>          return BadDrawable;
>>      pScreen = pSrc->pDrawable->pScreen;
>> @@ -1548,7 +1549,7 @@ ProcRenderCreateCursor(ClientPtr client)
>>          FreePicture(pPicture, 0);
>>      }
>>      /*
>> -     * Check whether the cursor can be directly supported by
>> +     * Check whether the cursor can be directly supported by 
>>       * the core cursor code
>>       */
>>      ncolor = 0;
>> @@ -1648,10 +1649,10 @@ ProcRenderCreateCursor(ClientPtr client)
>>  static int
>>  ProcRenderSetPictureTransform(ClientPtr client)
>>  {
>> -    REQUEST(xRenderSetPictureTransformReq);
>> +    REQUEST(xcb_render_set_picture_transform_request_t);
>>      PicturePtr pPicture;
>>  
>> -    REQUEST_SIZE_MATCH(xRenderSetPictureTransformReq);
>> +    REQUEST_SIZE_MATCH(xcb_render_set_picture_transform_request_t);
>>      VERIFY_PICTURE(pPicture, stuff->picture, client, DixSetAttrAccess);
>>      return SetPictureTransform(pPicture, (PictTransform *) &stuff->transform);
>>  }
>> @@ -1847,21 +1848,21 @@ ProcRenderCreateSolidFill(ClientPtr client)
>>      PicturePtr pPicture;
>>      int error = 0;
>>  
>> -    REQUEST(xRenderCreateSolidFillReq);
>> +    REQUEST(xcb_render_create_solid_fill_request_t);
>>  
>> -    REQUEST_AT_LEAST_SIZE(xRenderCreateSolidFillReq);
>> +    REQUEST_AT_LEAST_SIZE(xcb_render_create_solid_fill_request_t);
>>  
>> -    LEGAL_NEW_RESOURCE(stuff->pid, client);
>> +    LEGAL_NEW_RESOURCE(stuff->picture, client);
>>  
>> -    pPicture = CreateSolidPicture(stuff->pid, &stuff->color, &error);
>> +    pPicture = CreateSolidPicture(stuff->picture, &stuff->color, &error);
>>      if (!pPicture)
>>          return error;
>>      /* security creation/labeling check */
>> -    error = XaceHook(XACE_RESOURCE_ACCESS, client, stuff->pid, PictureType,
>> +    error = XaceHook(XACE_RESOURCE_ACCESS, client, stuff->picture, PictureType,
>>                       pPicture, RT_NONE, NULL, DixCreateAccess);
>>      if (error != Success)
>>          return error;
>> -    if (!AddResource(stuff->pid, PictureType, (void *) pPicture))
>> +    if (!AddResource(stuff->picture, PictureType, (void *) pPicture))
>>          return BadAlloc;
>>      return Success;
>>  }
>> @@ -2069,31 +2070,31 @@ SProcRenderSetPictureClipRectangles(ClientPtr client)
>>  static int
>>  SProcRenderFreePicture(ClientPtr client)
>>  {
>> -    REQUEST(xRenderFreePictureReq);
>> -    REQUEST_SIZE_MATCH(xRenderFreePictureReq);
>> +    REQUEST(xcb_render_free_picture_request_t);
>> +    REQUEST_SIZE_MATCH(xcb_render_free_picture_request_t);
>>      swaps(&stuff->length);
>>      swapl(&stuff->picture);
>> -    return (*ProcRenderVector[stuff->renderReqType]) (client);
>> +    return (*ProcRenderVector[stuff->minor_opcode]) (client);
>>  }
>>  
>>  static int
>>  SProcRenderComposite(ClientPtr client)
>>  {
>> -    REQUEST(xRenderCompositeReq);
>> -    REQUEST_SIZE_MATCH(xRenderCompositeReq);
>> +    REQUEST(xcb_render_composite_request_t);
>> +    REQUEST_SIZE_MATCH(xcb_render_composite_request_t);
>>      swaps(&stuff->length);
>>      swapl(&stuff->src);
>>      swapl(&stuff->mask);
>>      swapl(&stuff->dst);
>> -    swaps(&stuff->xSrc);
>> -    swaps(&stuff->ySrc);
>> -    swaps(&stuff->xMask);
>> -    swaps(&stuff->yMask);
>> -    swaps(&stuff->xDst);
>> -    swaps(&stuff->yDst);
>> +    swaps(&stuff->src_x);
>> +    swaps(&stuff->src_y);
>> +    swaps(&stuff->mask_x);
>> +    swaps(&stuff->mask_y);
>> +    swaps(&stuff->dst_x);
>> +    swaps(&stuff->dst_y);
>>      swaps(&stuff->width);
>>      swaps(&stuff->height);
>> -    return (*ProcRenderVector[stuff->renderReqType]) (client);
>> +    return (*ProcRenderVector[stuff->minor_opcode]) (client);
>>  }
>>  
>>  static int
>> @@ -2200,33 +2201,33 @@ SProcRenderTransform(ClientPtr client)
>>  static int
>>  SProcRenderCreateGlyphSet(ClientPtr client)
>>  {
>> -    REQUEST(xRenderCreateGlyphSetReq);
>> -    REQUEST_SIZE_MATCH(xRenderCreateGlyphSetReq);
>> +    REQUEST(xcb_render_create_glyph_set_request_t);
>> +    REQUEST_SIZE_MATCH(xcb_render_create_glyph_set_request_t);
>>      swaps(&stuff->length);
>>      swapl(&stuff->gsid);
>>      swapl(&stuff->format);
>> -    return (*ProcRenderVector[stuff->renderReqType]) (client);
>> +    return (*ProcRenderVector[stuff->minor_opcode]) (client);
>>  }
>>  
>>  static int
>>  SProcRenderReferenceGlyphSet(ClientPtr client)
>>  {
>> -    REQUEST(xRenderReferenceGlyphSetReq);
>> -    REQUEST_SIZE_MATCH(xRenderReferenceGlyphSetReq);
>> +    REQUEST(xcb_render_reference_glyph_set_request_t);
>> +    REQUEST_SIZE_MATCH(xcb_render_reference_glyph_set_request_t);
>>      swaps(&stuff->length);
>>      swapl(&stuff->gsid);
>>      swapl(&stuff->existing);
>> -    return (*ProcRenderVector[stuff->renderReqType]) (client);
>> +    return (*ProcRenderVector[stuff->minor_opcode]) (client);
>>  }
>>  
>>  static int
>>  SProcRenderFreeGlyphSet(ClientPtr client)
>>  {
>> -    REQUEST(xRenderFreeGlyphSetReq);
>> -    REQUEST_SIZE_MATCH(xRenderFreeGlyphSetReq);
>> +    REQUEST(xcb_render_free_glyph_set_request_t);
>> +    REQUEST_SIZE_MATCH(xcb_render_free_glyph_set_request_t);
>>      swaps(&stuff->length);
>>      swapl(&stuff->glyphset);
>> -    return (*ProcRenderVector[stuff->renderReqType]) (client);
>> +    return (*ProcRenderVector[stuff->minor_opcode]) (client);
>>  }
>>  
>>  static int
>> @@ -2371,22 +2372,22 @@ SProcRenderFillRectangles(ClientPtr client)
>>  static int
>>  SProcRenderCreateCursor(ClientPtr client)
>>  {
>> -    REQUEST(xRenderCreateCursorReq);
>> -    REQUEST_SIZE_MATCH(xRenderCreateCursorReq);
>> +    REQUEST(xcb_render_create_cursor_request_t);
>> +    REQUEST_SIZE_MATCH(xcb_render_create_cursor_request_t);
>>  
>>      swaps(&stuff->length);
>>      swapl(&stuff->cid);
>> -    swapl(&stuff->src);
>> +    swapl(&stuff->source);
>>      swaps(&stuff->x);
>>      swaps(&stuff->y);
>> -    return (*ProcRenderVector[stuff->renderReqType]) (client);
>> +    return (*ProcRenderVector[stuff->minor_opcode]) (client);
>>  }
>>  
>>  static int
>>  SProcRenderSetPictureTransform(ClientPtr client)
>>  {
>> -    REQUEST(xRenderSetPictureTransformReq);
>> -    REQUEST_SIZE_MATCH(xRenderSetPictureTransformReq);
>> +    REQUEST(xcb_render_set_picture_transform_request_t);
>> +    REQUEST_SIZE_MATCH(xcb_render_set_picture_transform_request_t);
>>  
>>      swaps(&stuff->length);
>>      swapl(&stuff->picture);
>> @@ -2399,7 +2400,7 @@ SProcRenderSetPictureTransform(ClientPtr client)
>>      swapl(&stuff->transform.matrix31);
>>      swapl(&stuff->transform.matrix32);
>>      swapl(&stuff->transform.matrix33);
>> -    return (*ProcRenderVector[stuff->renderReqType]) (client);
>> +    return (*ProcRenderVector[stuff->minor_opcode]) (client);
>>  }
>>  
>>  static int
>> @@ -2454,16 +2455,16 @@ SProcRenderAddTraps(ClientPtr client)
>>  static int
>>  SProcRenderCreateSolidFill(ClientPtr client)
>>  {
>> -    REQUEST(xRenderCreateSolidFillReq);
>> -    REQUEST_AT_LEAST_SIZE(xRenderCreateSolidFillReq);
>> +    REQUEST(xcb_render_create_solid_fill_request_t);
>> +    REQUEST_AT_LEAST_SIZE(xcb_render_create_solid_fill_request_t);
>>  
>>      swaps(&stuff->length);
>> -    swapl(&stuff->pid);
>> +    swapl(&stuff->picture);
>>      swaps(&stuff->color.alpha);
>>      swaps(&stuff->color.red);
>>      swaps(&stuff->color.green);
>>      swaps(&stuff->color.blue);
>> -    return (*ProcRenderVector[stuff->renderReqType]) (client);
>> +    return (*ProcRenderVector[stuff->minor_opcode]) (client);
>>  }
>>  
>>  static void
>> @@ -2684,11 +2685,11 @@ PanoramiXRenderSetPictureClipRectangles(ClientPtr client)
>>  static int
>>  PanoramiXRenderSetPictureTransform(ClientPtr client)
>>  {
>> -    REQUEST(xRenderSetPictureTransformReq);
>> +    REQUEST(xcb_render_set_picture_transform_request_t);
>>      int result = Success, j;
>>      PanoramiXRes *pict;
>>  
>> -    REQUEST_AT_LEAST_SIZE(xRenderSetPictureTransformReq);
>> +    REQUEST_AT_LEAST_SIZE(xcb_render_set_picture_transform_request_t);
>>  
>>      VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess);
>>  
>> @@ -2731,9 +2732,9 @@ PanoramiXRenderFreePicture(ClientPtr client)
>>      PanoramiXRes *pict;
>>      int result = Success, j;
>>  
>> -    REQUEST(xRenderFreePictureReq);
>> +    REQUEST(xcb_render_free_picture_request_t);
>>  
>> -    REQUEST_SIZE_MATCH(xRenderFreePictureReq);
>> +    REQUEST_SIZE_MATCH(xcb_render_free_picture_request_t);
>>  
>>      client->errorValue = stuff->picture;
>>  
>> @@ -2757,11 +2758,11 @@ PanoramiXRenderComposite(ClientPtr client)
>>  {
>>      PanoramiXRes *src, *msk, *dst;
>>      int result = Success, j;
>> -    xRenderCompositeReq orig;
>> +    xcb_render_composite_request_t orig;
>>  
>> -    REQUEST(xRenderCompositeReq);
>> +    REQUEST(xcb_render_composite_request_t);
>>  
>> -    REQUEST_SIZE_MATCH(xRenderCompositeReq);
>> +    REQUEST_SIZE_MATCH(xcb_render_composite_request_t);
>>  
>>      VERIFY_XIN_PICTURE(src, stuff->src, client, DixReadAccess);
>>      VERIFY_XIN_ALPHA(msk, stuff->mask, client, DixReadAccess);
>> @@ -2772,19 +2773,19 @@ PanoramiXRenderComposite(ClientPtr client)
>>      FOR_NSCREENS_FORWARD(j) {
>>          stuff->src = src->info[j].id;
>>          if (src->u.pict.root) {
>> -            stuff->xSrc = orig.xSrc - screenInfo.screens[j]->x;
>> -            stuff->ySrc = orig.ySrc - screenInfo.screens[j]->y;
>> +            stuff->src_x = orig.src_x - screenInfo.screens[j]->x;
>> +            stuff->src_y = orig.src_y - screenInfo.screens[j]->y;
>>          }
>>          stuff->dst = dst->info[j].id;
>>          if (dst->u.pict.root) {
>> -            stuff->xDst = orig.xDst - screenInfo.screens[j]->x;
>> -            stuff->yDst = orig.yDst - screenInfo.screens[j]->y;
>> +            stuff->dst_x = orig.dst_x - screenInfo.screens[j]->x;
>> +            stuff->dst_y = orig.dst_y - screenInfo.screens[j]->y;
>>          }
>>          if (msk) {
>>              stuff->mask = msk->info[j].id;
>>              if (msk->u.pict.root) {
>> -                stuff->xMask = orig.xMask - screenInfo.screens[j]->x;
>> -                stuff->yMask = orig.yMask - screenInfo.screens[j]->y;
>> +                stuff->mask_x = orig.mask_x - screenInfo.screens[j]->x;
>> +                stuff->mask_y = orig.mask_y - screenInfo.screens[j]->y;
>>              }
>>          }
>>          result = (*PanoramiXSaveRenderVector[X_RenderComposite]) (client);
>> @@ -3145,21 +3146,21 @@ PanoramiXRenderAddTraps(ClientPtr client)
>>  static int
>>  PanoramiXRenderCreateSolidFill(ClientPtr client)
>>  {
>> -    REQUEST(xRenderCreateSolidFillReq);
>> +    REQUEST(xcb_render_create_solid_fill_request_t);
>>      PanoramiXRes *newPict;
>>      int result = Success, j;
>>  
>> -    REQUEST_AT_LEAST_SIZE(xRenderCreateSolidFillReq);
>> +    REQUEST_AT_LEAST_SIZE(xcb_render_create_solid_fill_request_t);
>>  
>>      if (!(newPict = (PanoramiXRes *) malloc(sizeof(PanoramiXRes))))
>>          return BadAlloc;
>>  
>>      newPict->type = XRT_PICTURE;
>> -    panoramix_setup_ids(newPict, client, stuff->pid);
>> +    panoramix_setup_ids(newPict, client, stuff->picture);
>>      newPict->u.pict.root = FALSE;
>>  
>>      FOR_NSCREENS_BACKWARD(j) {
>> -        stuff->pid = newPict->info[j].id;
>> +        stuff->picture = newPict->info[j].id;
>>          result = (*PanoramiXSaveRenderVector[X_RenderCreateSolidFill]) (client);
>>          if (result != Success)
>>              break;
>> -- 
>> 2.1.3
>>
>> _______________________________________________
>> xorg-devel at lists.x.org: X.Org development
>> Archives: http://lists.x.org/archives/xorg-devel
>> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel



More information about the xorg-devel mailing list