PDA

View Full Version : Anybody tried new Ati driver (3.2.5)



Gorg
09-06-2003, 09:18 AM
Anybody tried the new Ati driver for linux and can tell us what extensions are supported and if applications work well?

m2
09-07-2003, 06:53 AM
Originally posted by Gorg:
Anybody tried the new Ati driver for linux and can tell us what extensions are supported and if applications work well?

Not yet, but I couldn't stop grinning after seeing this:



$ rpm2cpio fglrx-glc22-4.3.0-3.2.5.i586.rpm | cpio -itv | head -4
-rwxr-xr-x 1 root root 1354 Aug 6 17:08 ./lib/modules/fglrx/build_mod/2.6.x/Makefile
-rwxr-xr-x 1 root root 34050 Aug 6 17:08 ./lib/modules/fglrx/build_mod/agp.h
-rwxr-xr-x 1 root root 19380 Aug 6 17:08 ./lib/modules/fglrx/build_mod/agp3.c
-rwxr-xr-x 1 root root 9066 Aug 6 17:08 ./lib/modules/fglrx/build_mod/agp_backend.h
21647 blocks

Either the driver is damm well tested or someone hasn't heard of NTP yet :-)

luxo
09-07-2003, 07:32 PM
Yes, I'm curious to know how this new driver is compared to the Schneider Digital one (perhaps it's the same?)

I spent a lot of time getting things working well with the SD driver and so I'll only upgrade if there's better performance with the new driver.

mogumbo
09-09-2003, 09:48 AM
This new one is way better than the Schneider Digital driver. I beta tested it a couple weeks ago and only found a couple small problems, which they didn't fix http://www.opengl.org/discussion_boards/ubb/smile.gif But it's still a big improvement.

This driver lets you specify your own sample positions for anti-aliasing, which is pretty darn cool from a nerd standpoint. I started writing a GA last night to figure out good positions. Ooh, I can't wait to see what I come up with.

Gorg
09-09-2003, 07:00 PM
mogumbo : Does it have all the interesting extensions?

arb_frag program
arb_vertex program
vbo

fenris
09-10-2003, 06:47 AM
Originally posted by Gorg:
mogumbo : Does it have all the interesting extensions?

arb_frag program
arb_vertex program
vbo

All of the above. It also has entry points for ATI's implementation of super buffers.

Gorg
09-10-2003, 09:20 AM
Originally posted by fenris:
All of the above. It also has entry points for ATI's implementation of super buffers.

awesome. Thanks Fenris. Hopefuly Ati has a commitment to keep those drivers up to date.

Sord
09-13-2003, 07:46 PM
I'm running the latest ATI drivers with my ATI Radeon 9800 Pro and they work like a charm. Don't forget to disable DRI in the kernel though!

Gorg
09-13-2003, 08:29 PM
Originally posted by Sord:
Don't forget to disable DRI in the kernel though!

That's good to know. I actually think I read on the rage3d forum too. Well, I guess 2 people without problems are enough. I think I'll get one http://www.opengl.org/discussion_boards/ubb/wink.gif

m2
09-14-2003, 05:21 AM
Originally posted by fenris:
All of the above. It also has entry points for ATI's implementation of super buffers.

glewinfo output for a Radeon 9700 using these drivers (http://glew.sourceforge.net/glewinfo.Radeon-9700_XFree86-4.3.0_ATI-3.2.5.txt)

I've been looking for something that looks like a spec for superbuffers. Is there anything beyond the presentations at the ATI website? What functions are you calling "entrypoints for ATI's implementation of superbuffers"?

Forgot this:

radeon-9700$ glxgears
17658 frames in 5.0 seconds = 3531.600 FPS
18827 frames in 5.0 seconds = 3765.400 FPS
18829 frames in 5.0 seconds = 3765.800 FPS
18828 frames in 5.0 seconds = 3765.600 FPS
18827 frames in 5.0 seconds = 3765.400 FPS

geforce-5800-fx$ glxgears
35882 frames in 5.0 seconds = 7176.400 FPS
38570 frames in 5.0 seconds = 7714.000 FPS
38573 frames in 5.0 seconds = 7714.600 FPS
38573 frames in 5.0 seconds = 7714.600 FPS
38560 frames in 5.0 seconds = 7712.000 FPS

geforce-Ti-4200$ glxgears
18524 frames in 5.0 seconds = 3704.800 FPS
20858 frames in 5.0 seconds = 4171.600 FPS
20856 frames in 5.0 seconds = 4171.200 FPS
20860 frames in 5.0 seconds = 4172.000 FPS
20861 frames in 5.0 seconds = 4172.200 FPS

geforce-Ti-4600$ glxgears
22609 frames in 5.0 seconds = 4521.800 FPS
27464 frames in 5.0 seconds = 5492.800 FPS
27467 frames in 5.0 seconds = 5493.400 FPS
27467 frames in 5.0 seconds = 5493.400 FPS
27469 frames in 5.0 seconds = 5493.800 FPS

Otherwise identical machines (P4@2.8, E7205, 2.4.22 with minimal patches, AGP 8x except for the 4600 @ 4x)

[This message has been edited by m2 (edited 09-14-2003).]

azazello
09-15-2003, 01:08 PM
Is this driver have a entry point for ARB_vetex/fragmnet_shader, like Catalyst 3.7 for Win?

luxo
09-16-2003, 07:56 PM
m2, here's my numbers with the Schneider Digital ATI drivers:

Radeon 9700$ glxgears
21590 frames in 5.0 seconds = 4318.000 FPS
22492 frames in 5.0 seconds = 4498.400 FPS
22464 frames in 5.0 seconds = 4492.800 FPS
22585 frames in 5.0 seconds = 4517.000 FPS
22400 frames in 5.0 seconds = 4480.000 FPS
22483 frames in 5.0 seconds = 4496.600 FPS
23139 frames in 5.0 seconds = 4627.800 FPS
22796 frames in 5.0 seconds = 4559.200 FPS
22752 frames in 5.0 seconds = 4550.400 FPS
22759 frames in 5.0 seconds = 4551.800 FPS
22650 frames in 5.0 seconds = 4530.000 FPS
22565 frames in 5.0 seconds = 4513.000 FPS

That's with an Athlon XP 2500+ (overclocked to 1991MHz w/ 400MHz FSB) and an All-In-Wonder Radeon 9700 PRO running on XFree86 4.2.1, kernel 2.4.22 (and running a few other apps at the same time).

Although we're running different systems, it would seem to indicate that the performance of the new ATI drivers is slower than the Schneider Digital ones.


[This message has been edited by luxo (edited 09-16-2003).]

fenris
09-17-2003, 04:43 AM
Originally posted by m2:

I've been looking for something that looks like a spec for superbuffers. Is there anything beyond the presentations at the ATI website? What functions are you calling "entrypoints for ATI's implementation of superbuffers"?


The entry points I found follow ATI's presentation, except they are suffixed with 'ATI'. Do an 'nm /usr/X11R6/lib/libGL.so.1.2 | grep -i mem' and you'll see them.

Also, I'd take glxgears scores with a grain of salt. It's a rather meaningless benchmark. When we are talking 4000+ frames per second, the video card is obviously not being stressed a single bit. I haven't seen my gf4 ti4600 beat my 9700 pro at any 'real-world' benchmarks. Usually the 9700 comes out twice as fast.

pkaler
09-17-2003, 10:38 AM
Originally posted by fenris:

Also, I'd take glxgears scores with a grain of salt. It's a rather meaningless benchmark.


It's more to make sure that drivers installed correctly. That you aren't software rendering, using DRI, etc.

More of a correctness thing than a performance thing.

vincoof
09-17-2003, 11:50 AM
Originally posted by fenris:
Also, I'd take glxgears scores with a grain of salt. It's a rather meaningless benchmark. When we are talking 4000+ frames per second, the video card is obviously not being stressed a single bit.


So why do scores change when the graphics card changes ? http://www.opengl.org/discussion_boards/ubb/wink.gif
Well, I agree that it's not really representative in "real" cases (even though 'real' is hard to define), but still it's a score that shows at least IMHO that the driver interface is probably heavier with ATi drivers than with nVidia ones.

vincoof
09-17-2003, 12:09 PM
LOL I know it was about to be there, but now it's true : NVIDIA register combiners are supported in this ATi driver http://www.opengl.org/discussion_boards/ubb/smile.gif

pkaler
09-18-2003, 03:06 PM
Wierd, register combiners are supported. Can someone dump a glxinfo? The glewinfo has a whole bunch of extra stuff that I don't care to see.

OldMan
09-19-2003, 03:19 AM
So if glxgeras is not ok.. can anyone test it with America's Army or UT2003? The first one is easier because it's free. Lets say.. the fps in the shooting range test at 1024x768 with all options at maximum. (no FSAA and no AF). The FPS before you go get weapons.. while you are still looking to the intructor.

I am really away of ATI because last time I bought an ATI card I had to sell it in 3 days.. because It could not be faster than a 1 year older NVIDIA card on linux.

OldMan
09-22-2003, 03:28 AM
Ok! So .. none of you who bought a priceless Radeon 9800 PRO (that I would take 1 year of payment to get) have a real game on linux?

PLease.. I wanna know if I can count with ATI drivers for linux...

mogumbo
09-22-2003, 04:30 PM
Hey PK, here's the glxinfo you wanted:

display: :0.0 screen:0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context
client glx vendor string: SGI
client glx version string: 1.2
client glx extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context,
GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_ATI_pixel_format_float,
GLX_ATI_render_texture
GLX extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: Radeon 9800 Pro Pentium 4 (SSE2)
OpenGL version string: 1.3 (X4.3.0-3.2.5)
OpenGL extensions:
GL_ARB_multitexture, GL_EXT_texture_env_add, GL_EXT_compiled_vertex_array,
GL_S3_s3tc, GL_ARB_depth_texture, GL_ARB_fragment_program,
GL_ARB_multisample, GL_ARB_point_parameters, GL_ARB_shadow,
GL_ARB_shadow_ambient, GL_ARB_texture_border_clamp,
GL_ARB_texture_compression, GL_ARB_texture_cube_map,
GL_ARB_texture_env_add, GL_ARB_texture_env_combine,
GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3,
GL_ARB_texture_mirrored_repeat, GL_ARB_transpose_matrix,
GL_ARB_vertex_blend, GL_ARB_vertex_buffer_object, GL_ARB_vertex_program,
GL_ARB_window_pos, GL_ATI_draw_buffers, GL_ATI_element_array,
GL_ATI_envmap_bumpmap, GL_ATI_fragment_shader, GL_ATI_map_object_buffer,
GL_ATI_separate_stencil, GL_ATI_texture_env_combine3,
GL_ATI_texture_float, GL_ATI_texture_mirror_once,
GL_ATI_vertex_array_object, GL_ATI_vertex_attrib_array_object,
GL_ATI_vertex_streams, GL_ATIX_texture_env_combine3,
GL_ATIX_texture_env_route, GL_ATIX_vertex_shader_output_point_size,
GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color, GL_EXT_blend_func_separate,
GL_EXT_blend_minmax, GL_EXT_blend_subtract, GL_EXT_clip_volume_hint,
GL_EXT_draw_range_elements, GL_EXT_fog_coord, GL_EXT_multi_draw_arrays,
GL_EXT_packed_pixels, GL_EXT_point_parameters, GL_EXT_rescale_normal,
GL_EXT_polygon_offset, GL_EXT_secondary_color,
GL_EXT_separate_specular_color, GL_EXT_stencil_wrap,
GL_EXT_texgen_reflection, GL_EXT_texture3D,
GL_EXT_texture_compression_s3tc, GL_EXT_texture_cube_map,
GL_EXT_texture_edge_clamp, GL_EXT_texture_env_combine,
GL_EXT_texture_env_dot3, GL_EXT_texture_filter_anisotropic,
GL_EXT_texture_lod_bias, GL_EXT_texture_object, GL_EXT_texture_rectangle,
GL_EXT_vertex_array, GL_EXT_vertex_shader, GL_HP_occlusion_test,
GL_NV_texgen_reflection, GL_NV_blend_square, GL_NV_occlusion_query,
GL_SGI_color_matrix, GL_SGIS_texture_edge_clamp,
GL_SGIS_texture_border_clamp, GL_SGIS_texture_lod,
GL_SGIS_generate_mipmap, GL_SGIS_multitexture, GL_SUN_multi_draw_arrays
glu version: 1.3
glu extensions:
GLU_EXT_nurbs_tessellator, GLU_EXT_object_space_tess

visual x bf lv rg d st colorbuffer ax dp st accumbuffer ms cav
id dep cl sp sz l ci b ro r g b a bf th cl r g b a ns b eat
----------------------------------------------------------------------
0x23 24 tc 0 24 0 r y . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x24 24 tc 0 24 0 r . . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x25 24 tc 0 24 0 r y . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x26 24 tc 0 24 0 r . . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x27 24 tc 0 24 0 r y . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x28 24 tc 0 24 0 r . . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x29 24 tc 0 24 0 r y . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x2a 24 tc 0 24 0 r . . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x2b 24 tc 0 24 0 r y . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x2c 24 tc 0 24 0 r . . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x2d 24 tc 0 24 0 r y . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x2e 24 tc 0 24 0 r . . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x2f 24 tc 0 24 0 r y . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x30 24 tc 0 24 0 r . . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x31 24 tc 0 24 0 r y . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x32 24 tc 0 24 0 r . . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x33 24 tc 0 24 0 r y . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x34 24 tc 0 24 0 r . . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x35 24 tc 0 24 0 r y . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x36 24 tc 0 24 0 r . . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x37 24 tc 0 24 0 r y . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x38 24 tc 0 24 0 r . . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x39 24 tc 0 24 0 r y . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x3a 24 tc 0 24 0 r . . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x3b 24 tc 0 24 0 r y . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x3c 24 tc 0 24 0 r . . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x3d 24 tc 0 24 0 r y . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x3e 24 tc 0 24 0 r . . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x3f 24 tc 0 24 0 r y . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x40 24 tc 0 24 0 r . . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x41 24 tc 0 24 0 r y . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x42 24 tc 0 24 0 r . . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x43 24 dc 0 24 0 r y . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x44 24 dc 0 24 0 r . . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x45 24 dc 0 24 0 r y . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x46 24 dc 0 24 0 r . . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x47 24 dc 0 24 0 r y . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x48 24 dc 0 24 0 r . . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x49 24 dc 0 24 0 r y . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x4a 24 dc 0 24 0 r . . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x4b 24 dc 0 24 0 r y . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x4c 24 dc 0 24 0 r . . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x4d 24 dc 0 24 0 r y . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x4e 24 dc 0 24 0 r . . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x4f 24 dc 0 24 0 r y . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x50 24 dc 0 24 0 r . . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x51 24 dc 0 24 0 r y . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x52 24 dc 0 24 0 r . . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x53 24 dc 0 24 0 r y . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x54 24 dc 0 24 0 r . . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x55 24 dc 0 24 0 r y . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x56 24 dc 0 24 0 r . . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x57 24 dc 0 24 0 r y . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x58 24 dc 0 24 0 r . . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x59 24 dc 0 24 0 r y . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x5a 24 dc 0 24 0 r . . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x5b 24 dc 0 24 0 r y . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x5c 24 dc 0 24 0 r . . 8 8 8 8 0 24 8 16 16 16 16 0 0 None
0x5d 24 dc 0 24 0 r y . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x5e 24 dc 0 24 0 r . . 8 8 8 8 0 24 0 16 16 16 16 0 0 None
0x5f 24 dc 0 24 0 r y . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x60 24 dc 0 24 0 r . . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x61 24 dc 0 24 0 r y . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x62 24 dc 0 24 0 r . . 8 8 8 8 0 24 0 0 0 0 0 0 0 None

mogumbo
09-22-2003, 04:33 PM
Oh, and while I'm posting, try out these 4-sample AA positions that I computed. They seem to work a little better than the defaults.

Option "FSAAMSPosX0" "0.630508"
Option "FSAAMSPosY0" "0.3693"
Option "FSAAMSPosX1" "0.30964"
Option "FSAAMSPosY1" "0.690672"
Option "FSAAMSPosX2" "0.87173"
Option "FSAAMSPosY2" "0.811148"
Option "FSAAMSPosX3" "0.188122"
Option "FSAAMSPosY3" "0.128881"

I haven't been able to compute positions for 6-sample AA that show any improvement over the default.

heath
10-02-2003, 03:31 PM
One pet peeve I currently have with the ATI driver is that they support pbuffers, but don't advertise it in the glx???string.

This makes it kind of annoying when writing code that follows one path if PBuffers are available, and another if they're not.

pkaler
10-02-2003, 04:24 PM
Originally posted by heath:
One pet peeve I currently have with the ATI driver is that they support pbuffers, but don't advertise it in the glx???string.


That usually means that support of the extension is in Beta or that the extension is deprecated in favour of another extension.

3.2.5 drivers are pretty old compared to the Windows drivers. Maybe pbuffer support is not mature in this release.

heath
10-03-2003, 07:24 AM
This is what ATI (Really the old fgldriver) states in the readme for fglxgears demo.

It can also be found in the rpm,just unzip the fglrx_sample_source.tgz file and look at the fgl_glxgears README.

It would be nice for ATI to tidy this up, if it has been in what you call beta, it sure is taking a long time.

Heath.
=================================

Using Pixel Buffers with ATI Fire GL graphics boards under Linux/XFree86 4.X
================================================== ==========================


ATI Research GmbH
Markus Neff


September 13, 2001

Latest Update: 2002-Oct-10

IMPORTANT NOTE:
This is a preliminary document which might differ in several cases from
the true capabilities and specific behaviour of the fglrx drivers.
It is provided as it is in order to give the developer a minimum guideline.


1. Introduction / disclaimer

This document describes and specifies the API for using Pixel Buffers
(pbuffers) with the ATI Fire GL graphics boards under Linux/XFree86.
Please note that pbuffer support is still in an early beta stage. It may
contain bugs and some limitations that we - hopefully - can clear with the
next releases of the driver.
This pre-release represents the current direction of our pbuffer support
development under Linux/XFree86. To find out if we are on the right way, we
provide this "snapshot version" of our driver (and especially the pbuffer
support) "as is" - without any warranty of fitness for usage in a "production
environment".


2. Description of the "pbuffer API"

Pbuffer support was officially introduced in GLX 1.3 but Silicon Graphics,
Inc. has publicly released only the source code of GLX 1.2 so far. This is
included in XFree4.X. To provide pbuffer support to our customers, we decided
to partially emulate the behavior of GLX 1.3 on top of GLX 1.2. As soon as
the "real" GLX 1.3 API is available in XFree86, you can use the "genuine"
pbuffers of GLX 1.3 with our drivers. This will not require any changes in
your application code because the programmer has to use the same function
calls.
To use pbuffers, you need a custom version of "libGL.so.1.2" installed -
including our GLX 1.3 emulation code. Our driver installation tool will
automatically do that for you.

NOTE: Your application will report GLX version 1.2 on glXQueryVersion.
However, it is safe to call the GLX 1.3 functions as described below.

Now let's talk about the emulated functions of GLX 1.3. First, I'll name all
functions that are present in our emulation layer. Then I'll describe where
they differ from the original functions. The pdf file "glx1.3.pdf"
(ftp://ftp.sgi.com/opengl/doc/opengl1.2/glx1.3.pdf) contains the original
GLX 1.3 specs. For general questions please refer to the related chapters
of that document.


2.1 Function specification

GLX 1.3 replaces the use of X Visuals for configuration management with the
use of GLXFBConfigs. For handling GLXFBConfigs, the following functions are
provided:
- glXGetFBConfigs
- glXChooseFBConfig
- glXGetFBConfigAttrib
- glXGetVisualFromFBConfig

All of these functions are implemented in our emulation. However, please use
these functions only to manage configurations for pbuffers. For example, if
you want to create a window with a certain GLXFBConfig, you can use
glXGetVisualFromFBConfig to get the respective XVisualInfo.
Creating contexts for use with pbuffers is similar: You get the XVisualInfo
by calling glXGetVisualFromFBConfig. Then you create the context with
glXCreateContext using exactly this XVisualInfo.

To create / destroy pbuffers, the following functions exist:
- glXCreatePbuffer
- glXDestroyPbuffer

In future releases, we may provide the calls glXCreateNewContext,
glXQueryDrawable and glXMakeContextCurrent. The latter would allow to specify
a different source for pixel data when assigning a context to be the current
context. Then you can, for example, transfer images from a pbuffer to an X
window calling glCopyPixles. As for now, you can only read the pixels from
one drawable to host memory (glReadPixels) and draw them to another drawable
(glDrawPixels).


2.2 Current limitations / deviations from GLX 1.3 specs

First, let me mention some general limitations:

- You should expect that you can create only a limited number of pbuffers.
If you try to create more pbuffers than the adapter is capable then
the call to glXCreatePbuffer will not succeed but raise an error.
- When you create a pbuffer, other applications can also make use of this
pbuffer, if they know its XID. But please note the following: Unlike
stated in GLX 1.3 spec, if one client destroys a pbuffer that is
current to any client, undefined behavior occurs. That's why the
programmer has to make sure that only unbound pbuffers are destroyed.
- If you use error handlers (XSetErrorHandler) to catch GLX protocol
errors, you need to change the error handler code to look for different
major/minor opcodes. This is because the pbuffer requests don't use the
GLX protocol.
- Some error codes are different from the error codes specified in the
GLX 1.3 specs. We try to fix this and the other issues.

Function glXChooseFBConfig:

- The following attributes can be specified in the attribute list but
they will be ignored: GLX_MAX_PUBUFFER_*


3. Sample application

For a better understanding and for demonstration, a simple pbuffer example
program is provided with the drivers. If you start the program, you will see
a rotating cube. On each face of the cube, you can observe a changing texture
showing three rotating gear wheels. These texture images are generated by
rendering to a pbuffer and a subsequent call to glCopyTexImage2D.
By pressing the arrow keys, the position of the gear wheels relative to the
viewer can be changed.

The following command will compile the example:

gcc -o fgl_glxgears -Wall -I/usr/X11R6/include -L/usr/X11R6/lib -lGL -lGLU -lX11 -lm fgl_glxgears.c