RandR (etc) DriverFunc
Andy Ritger
aritger at nvidia.com
Wed Mar 16 12:09:08 PST 2005
On Wed, 16 Mar 2005, Egbert Eich wrote:
> Andy Ritger writes:
> >
> > Sorry I didn't get a chance to respond to this yesterday, Thomas
> > and Egbert.
> >
> > This is a good point, Thomas.
> >
> > In the SetConfig case, it's nice for the driver to be notified
> > when the size is changed, even if the rotation is not changing (eg,
> > to reallocate vidmem for the root window's new resolution), though
> > I'd say it's not crucial (atleast for the NVIDIA driver).
>
> Hm, when we change the size we call setMode() in the driver
> anyway. Doesn't this suffice?
> Currently we don't reallocate vidmem as we don't ever change the
> size of the video memory. This is not really supported in our
> model. This shortcoming needs to be resolved when reworking the
> driver.
Yes, the driver has all the information it needs wrt resizing. Nevermind.
> >
> > There does seem to be a fundamental problem with interpretting the
> > return value of DriverFunc:
> >
> > TRUE - DriverFunc() recognized xorgDriverFuncOp and successfully
> > handled the request
> >
> > FALSE - DriverFunc() recognized xorgDriverFuncOp but failed
> > while processing it, in which case the caller should
> > presumably abort its operation
>
> Not necessarily. We may use the same fallbacks as below. If this
> isn't feasable we may want to consider to return a value in the
> structure pointed to that informs us why we failed.
Good idea.
> > - or -
> >
> > DriverFunc() did not recognize xorgDriverFuncOp; it is
> > caller-specific how to react to this. In some cases,
> > the caller should probably continue, but in other
> > cases, we might want to bail out because DriverFunc()
> > doesn't provide the support we need.
> >
> > There are 3 possible states that the common X server code needs to
> > infer from the X driver's boolean return value :(
>
> Yes, that's true. If you cannot handle 'not supported' and 'failed'
> the same way we either need to have a ternary return value or
> return a state in the private structure.
>
> >
> > At this point, there are drivers shipping (eg: the NVIDIA driver)
> > that plug into DriverFunc to provide rotation support, so I'd ask
> > that we not change the semantics of DriverFunc() or otherwise break
> > binary compatibility.
>
> Right.
>
> >
> > This proc was originally named RRFunc and was intended to be specific
> > to RandR. Egbert generalized it so that it could be used for other
> > things, which seems like a good idea, except for this issue of
> > overloading the return value.
>
> See above. The return state is something private to the function.
> So it makes sense to put the return status (which may have many
> different states) into the private data structure passed back and
> forth.
> I think the solution we have right now will do what we need in a
> reasonalbe way.
Yes, that seems good.
Thanks,
- Andy
> >
> > I expect DriverFunc won't scale well in the future due to this
> > return value problem.
> >
> > I'll offer a solution; it may not be the best solution, but it does
> > maintain binary compatibility and solves the return value dilemma
> > going forward:
> >
> > - rename DriverFunc back to RRFunc and only use it for
> > RR_GET_INFO and RR_SET_CONFIG. We alter the semantics of
> > this proc such that if a driver provides this function then
> > it must recognize both those values.
> >
> > - add a new proc to ScrnInfoRec named DriverFunc. This new
> > DriverFunc would return a tri-state enum; eg:
> >
> > typedef enum {
> > DRIVER_FUNC_SUCCESS = 0,
> > DRIVER_FUNC_FAILURE = 1,
> > DRIVER_FUNC_UNRECOGIZED = 2
> > } DriverFuncReturnCodes;
> >
> > I'm not sure how this solution would impact the
> > GET_REQUIRED_HW_INTERFACES request used with the current DriverFunc.
> > This solution would also break compile-time compatibility with
> > drivers built outside the Xorg tree. We might want to name the new
> > proc "DriverFunc2" or something different so as not to be confused
> > with the current DriverFunc.
> >
> > Thoughts?
> >
>
> Please see above.
>
> Cheers,
> Egbert.
>
More information about the xorg
mailing list