[libvirt] [PATCH] Support for 3d Acceleration in video tag

Daniel Veillard veillard at redhat.com
Thu Sep 3 08:30:24 UTC 2009


On Wed, Sep 02, 2009 at 06:23:01PM +0200, Daniel Veillard wrote:
> On Wed, Aug 19, 2009 at 10:45:25AM +0200, Pritesh Kothari wrote:
> > > true, will add a element called <acceleration/> cause there are some
> > > features for 2d acceleration as well, so that will take care of 3d and 2d
> > > acceleration both.
> > >
> > > will post a patch soon with the above changes in it.
> > 
> > Reposting the patch with changes mentioned above.
> [...]
> > diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng
> > index f857301..8f82e01 100644
> > --- a/docs/schemas/domain.rng
> > +++ b/docs/schemas/domain.rng
> > @@ -814,6 +814,26 @@
> >                <ref name="unsignedInt"/>
> >              </attribute>
> >            </optional>
> > +          <optional>
> > +            <element name="acceleration">
> > +              <optional>
> > +                <attribute name="3d">

  3d and 2d are not XML Names, so changed to accel2d and accel3d, which
is actually what was used in the code, so the rng was just behind.
Note: please make check before sending a patch, thanks ;-)

> > +                <attribute name="2d">
[...]
> 
>   I'm afraid that in the long run we may have to deal with far more
> video emulation options, a bit like cpu emulation flags, but that's a
> reasonable approach for now.
> 
> [...]
> > diff --git a/src/domain_conf.h b/src/domain_conf.h
> > index 44302be..2f3a02d 100644
> > --- a/src/domain_conf.h
> > +++ b/src/domain_conf.h
> > @@ -307,12 +307,21 @@ enum virDomainVideoType {
> >  };
> >  
> >  
> > +typedef struct _virDomainVideoAccelDef virDomainVideoAccelDef;
> > +typedef virDomainVideoAccelDef *virDomainVideoAccelDefPtr;
> > +struct _virDomainVideoAccelDef {
> > +    int support3d : 1;
> > +    int support2d : 1;
> > +};
> > +
> > +
> >  typedef struct _virDomainVideoDef virDomainVideoDef;
> >  typedef virDomainVideoDef *virDomainVideoDefPtr;
> >  struct _virDomainVideoDef {
> >      int type;
> >      unsigned int vram;
> >      unsigned int heads;
> > +    virDomainVideoAccelDef accel;
> >  };
> >  
> >  /* 3 possible graphics console modes */
> 
>   I'm not that fond of adding a substructure like this by value,
> I don't really see what this brings and make the code below less
> clever

  It was actually in my opinion severley broken, the parsing routine was
allocating the struct on teh stack and passing it as a return value,
to avoid this I used virDomainVideoAccelDefPtr accel in the referencing
structure, and makes virDomainVideoAccelDefParseXML allocate the
structure, and return is by pointer as it should.

> > @@ -3824,7 +3876,12 @@ virDomainVideoDefFormat(virConnectPtr conn,
> >          virBufferVSprintf(buf, " vram='%u'", def->vram);
> >      if (def->heads)
> >          virBufferVSprintf(buf, " heads='%u'", def->heads);
> > -    virBufferAddLit(buf, "/>\n");
> > +    virBufferAddLit(buf, ">\n");
> > +
> > +    virDomainVideoAccelDefFormat(buf, def->accel);
> > +
> > +    virBufferAddLit(buf, "      </model>\n");
> > +
> >      virBufferAddLit(buf, "    </video>\n");

  I also fixed this to call virDomainVideoAccelDefFormat only if
def->accel is non null i.e. if an acceleration element with attribute
was found.

  thanks,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list