New Page 1

# Chromium OpenGL Conformance

Chromium strives to be a drop-in replacement for a conventional OpenGL implementation. In order to do so, Chromium must conform to the OpenGL specification. In some areas, this is very difficult or impossible to achieve. This section describes the ways in which Chromium differs from OpenGL.

## Conformance Issues

The following OpenGL features are not implemented in Chromium at this time:

- OpenGL 1.2 imaging functions related to histogram, min/max, convolution and colortables.
- To support Feedback & Selection, you need to use the feedbackSPU. If you don't, these features won't work.

Display lists aren't fully conformant. There are several issues:

- When using the tilesort SPU, glCopyTexImage (and similar) commands can't be implemented correctly since the framebuffer is tiled and the individual renderers can't access their peers.
- GL_COMPILE_AND_EXECUTE mode may not work reliably, specifically if there is a glGet* call between glNewList and glEndList which gets state that was set by a previous command compiled/executed inside the display list.

glReadPixels and glCopyPixels may not work correctly when using a tilesort configuration. Since the mural size usually doesn't match the original window size, there may be any number of inconsistences between what's drawn with glDrawPixels and what's seen on-screen, for example.

Similarly, glReadPixels may not return the expected results. For example, if the application window is 600x400 and you try to read back the entire 600x400 window, but you're using a tilesort config with a mural size of 2000x1500, you won't get back the whole image.

## Conformance Test Results

Here are the results of running the OpenGL conformance tests with the tilesort SPU (1 tile, 100x100 pixels) with comments explaining some of the failures:

        Viewport Clamp test (Test number #2) failed.
           Chromium extends the default viewport.
        DrawPixels test (Test number #29) failed.
           GL_DEPTH_COMPONENT test fails because of glRasterPos problem.
        CopyPixels test (Test number #30) failed.
           GL_DEPTH test fails because of glRasterPos problem.
        Bitmap Rasterization test (Test number #31) failed.
           Bitmap renders incorrectly due to glRasterPos problem.
        Display Lists test (Test number #72) failed.
           Known display list problem.
        Texture Edge Clamp test (Test number #75) not supported (not an error).
        Packed Pixels test (Test number #76) failed.
        Texture LOD test (Test number #77) failed.
        Color Table test (Test number #79) not supported (not an error).
        Convolution test (Test number #80) not supported (not an error).
        Convolution Border test (Test number #81) not supported (not an error).
        Histogram test (Test number #82) not supported (not an error).
        MinMax test (Test number #83) not supported (not an error).
        Texture Combine test (Test number #85) not supported (not an error).
        Texture Cube Map test (Test number #86) failed.
        Texture Add test (Test number #88) not supported (not an error).

To show the differences of the tilesort SPU failures, here are the results of running the OpenGL conformance tests with the tilesort SPU (2 tiles, 50x100 pixels each) again with comments explaining some of the failures:

        Viewport Clamp test (Test number #2) failed.
           Chromium extends the default viewport.
        Viewport Transformation test (Test number #8) failed.
           This may never be fixed because of the way the tilesort SPU
           manipulates the OpenGL viewport.
        Buffer Clear test (Test number #9) failed.
        Buffer Invariance test (Test number #14) failed.
           This test happens to draw a point which exactly falls in the
           center of the mural and winds up getting culled.  If the point is
           moved, the test passes.
        Scissor test (Test number #18) failed.
        Stencil Plane Operation test (Test number #22) failed.
        Blend test (Test number #26) failed.
        DrawPixels test (Test number #29) failed.
           (as per single tile above)
        CopyPixels test (Test number #30) failed.
           (as per single tile above)
        Bitmap Rasterization test (Test number #31) failed.
           (as per single tile above)
        Anti-aliased Point test (Test number #33) failed.
        Line Rasterization test (Test number #34) failed.
        Line Stipple test (Test number #35) failed.
           Line stipple can't be properly handled when lines cross tiles.
        Anti-aliased Line test (Test number #36) failed.
        Horizontal and Vertical Line test (Test number #37) failed.
        Triangle Rasterization test (Test number #38) failed.
        Triangle Tile test (Test number #39) failed.
        Triangle Stipple test (Test number #40) failed.
           Polygon stipples must be rotated if tile sizes aren't multiples of 32.
        Anti-aliased Triangles test (Test number #41) failed.
        Quad Rasterization test (Test number #42) failed.
        Polygon Face test (Test number #43) failed.
        Polygon Cull test (Test number #44) failed.
        Polygon Stipple test (Test number #45) failed.
           Polygon stipples must be rotated if tile sizes aren't multiples of 32.
        Polygon Edge test (Test number #46) failed.
        Texture Decal test (Test number #68) failed.
        Texture Border test (Test number #69) failed.
        Mipmaps Selection test (Test number #70) failed.
        Display Lists test (Test number #72) failed.
           Known display list problem.
        Texture Edge Clamp test (Test number #75) failed.
        Packed Pixels test (Test number #76) failed.
        Texture LOD test (Test number #77) failed.
        Rescale Normal test (Test number #78) failed.
        Color Table test (Test number #79) not supported (not an error).
        Convolution test (Test number #80) not supported (not an error).
        Convolution Border test (Test number #81) not supported (not an error).
        Histogram test (Test number #82) not supported (not an error).
        MinMax test (Test number #83) not supported (not an error).
        MultiTexture test (Test number #84) failed.
        Texture Combine test (Test number #85) not supported (not an error).
        Texture Cube Map test (Test number #86) failed.
        Texture Add test (Test number #88) not supported (not an error).

## GLX

The following GLX functions are not implemented by Chromium. Calling them will result in an error message. Zero will be returned if the function returns a value.

- `glXCopyContext`
- `glXCreateGLXPixmap`
- `glXDestroyGLXPixmap`
- `glXWaitGL`
- `glXWaitX`

Additionally, none of the GLX 1.3 functions related to Pbuffers or visual configs are implemented.

GLX visuals present a problem for Chromium. The basic problem is that the visuals available on the application host display may not match the visuals of the rendering host display(s). If the application queries the GLX visual attributes of the local host display it may find a visual that has no equal on the rendering hosts. It may even be the case that the local host display has no GLX capabilities at all. In a heterogeneous cluster, the rendering hosts themselves may have different visual capabilities.

Ideally, when the application queries GLX visuals and their attributes it should get results which reflect the capabilities of the rendering host displays. The results should be the minimums of the union of the rendering hosts. For example, if there are four rendering hosts and three of them support accumulation buffers but one doesn't then the application should be told that no accumulation buffer exists.

This level of sophistication does not yet exist in the Chromium GLX code. Therefore, it's possible for an application to determine that there are visual capabilities that don't really exist, causing the application to eventually abort. Luckily, all modern graphics hardware supports stencil buffers, alpha channels and accumulation buffers so this is seldom a problem. Trying to use stereo and multisample color buffers may be problematic, however.

## WGL

The following WGL functions are not implemented by Chromium. Calling them will result in an error message. Zero will be returned if the function returns a value.

- `wglShareLists`
- `wglCopyContext`
- `wglCreateLayerContext`
- `wglUseFontBitmapsA`
- `wglUseFontBitmapsW`
- `wglDescribeLayerPlane`
- `wglSetLayerPaletteEntries`
- `wglGetLayerPaletteEntries`
- `wglRealizeLayerPalette`
- `wglSwapMultipleBuffers`
- `wglUseFontOutlinesA`
- `wglUseFontOutlinesW`
- `wglSwapLayerBuffers`