-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Brian Paul wrote:

> It's been a long time since I've looked at this stuff, but I'm not sure
> that __glXImageSize() is correct.  Specifically, the last part of the
> function:
> 
>     [...]
>     if (imageHeight > 0) {
>         imageSize = (imageHeight + skipRows) * rowSize;
>     } else {
>         imageSize = (h + skipRows) * rowSize;
>     }
>     return ((d + skipImages) * imageSize);
>     }
> }
> 
> 
> Why do skipRows and skipImages factor into the image size?  I believe
> the dimensions of the image going over the wire is W * H * D.  The
> skipRows and skipImages (and skipPixels) values just describe where to
> find the W*H*D image inside of a larger image.

This will require some investigation.  That particular block of code has
been in the server-side GLX code since day 1.

> See figure 3.8 on page 131 of the OpenGL 2.0 specification for a diagram.

I looked that information up in the glPixelStore man page in order to
write the comment before __glXImageSize. :)

> Consider a scenario in which you're replacing a single texel in a 3D
> texture map.  You've got a W*H*D 3D texture that in malloc'd memory
> which you previously uploaded with glTexImage3D.  To upload a single
> changed texel in that volume at (x,y,z) you'd set
> GL_UNPACK_SKIP_PIXELS=x, GL_UNPACK_SKIP_ROWS=y, and
> GL_UNPACK_SKIP_IMAGES=z then call glTexSubImage3D(target, level, x, y,
> z, 1, 1, 1, type, volume).
> 
> Over the wire, we should send a single texel so the result of
> __glXImageSize should be pretty small.  The __glFillImage() command on
> the client side doesn't seem to use SKIP_ROWS or SKIP_IMAGES in the way
> that __glXImageSize does.

This is one of the tricky / annoying parts of sending pixel data between
the client and the server.  The pixel pack / unpack settings are not
stored as persistent state.  They are included with each pixel transfer
command.  So, the protocol for glTexImage2D and glReadPixels embed all
of the needed pixel storage information.  What this means is that the
sender of the data, be it the client or the server, can do whatever
voodoo it wants on the data so long as it includes the pixel storage
settings to correctly describe it.

As it turns out, both sides in our implementation do all the packing /
unpacking locally and send zeros for all three of these settings.

> Ian, you should test this with the drawpix demo:  decrease the image
> height to about half by pressing 'h'.  Then increase the skipRows value
> by pressing 'R'.  Things should blow up on the server side if the
> __glXImageSize computation is wrong.

I'll give that a try before I commit anything.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (GNU/Linux)

iD8DBQFDPEJCX1gOwKyEAw8RApYHAKCAcAxcbzr21njBUdFOPE5D6GULngCaAs+2
BMRIuYx7gOo+cgnrVV1CvN0=
=xTzj
-----END PGP SIGNATURE-----


-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to