On 11/03/2010 07:48 PM, Daniel Stone wrote:
Hi,

On Thu, Oct 28, 2010 at 01:23:41PM +0300, Rami Ylimäki wrote:
+/**
+ * Override the default function that calculates resource size. For
+ * example, video driver knows better how to calculate pixmap memory
+ * usage and can therefore wrap or override size calculation for
+ * RT_PIXMAP.
+ *
+ * @param[in] type     Resource type used in size calculations.
+ *
+ * @param[in] sizeFunc Function to calculate the size of a single
+ *                     resource.
+ */
+void
+SetResourceTypeSizeFunc(RESTYPE type, SizeType sizeFunc)
+{
+    resourceTypes[type&  TypeMask].sizeFunc = sizeFunc;
+}
So, I guess the intention here would be to call
SetResourceTypeSizeFunc(RT_PIXMAP, my_driver_how_big_is_the_pixmap); ?

Yes.

In that case, it falls apart in the multi-screen case (yeah, I know, it
barely works).  dixFreePixmap and FreeWindowResources get around this by
calling the corresponding ScreenRec hook: would the intention be to add
one to make the sizing work correctly for multiple drivers, or?

I overlooked the case that multiple drivers could be in use. Would it make sense to require cooperation from drivers to make this work? A driver would call GetResourceTypeSizeFunc to save the old function before registering its own. Then the driver can check if the resource is associated with a screen, what screen it is associated with and either calculate the size or just forward the calculation to the original function.

To be honest I'm not exactly sure what is meant by this multi-screen case. Does that mean that each screen could have its own driver that is then responsible of calculating the size of those pixmaps whose pixmap->drawable.pScreen matches the driver screen?

Other than that, looks good to me, but one thing to bear in mind if we
keep on extending resource usage would be to add a size argument to
AddResource(), as well as a new ResourceSizeChanged(), rather than
having to call back for every resource.  The callbacks will work fine
for the pixmap/window/etc case as drivers already have all the relevant
size information, but we might end up with resource types in the future
where you'd need a great deal of unnecessary bookkeeping just for these
callbacks.

Makes sense to have these alternative ways of reporting the resource size. Every resource object would have a size associated with it. If the size happens to be zero (not given) try to call the size callback.

Cheers,
Daniel

-- Rami

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to