The SX is a programmable device that accelerates operations on pixels; for XGL, this includes:
Operations on areas such as filling, copying, and accumulation buffering
and anything else that involves reading and writing pixel data (color and Z buffer included. The pixel data can reside either in video ram (the cg14 frame buffer, VRAM), or in main memory (DRAM.)
The SPARCstation 10SX system and SPARCstation 20 system are now used to accelerate all XGL pixel operations except accessing a textured pixel from a texture MipMap when certain attributes are not set
The SX does not support floating point operations. Thus, the transformation, clip checking, clipping, and optionally lighting steps that comprise the 2D and 3D graphics pipeline are done on the CPU. Since the SX runs in parallel with the CPU, typically the CPU will be transforming an object while the SX is rendering the previous object.
The SX has a single hardware context. This context is switched among all processes using SX. For example, using Xlib to render pixels via the server's SX driver, then XGL to render pixels via the XGL/SX driver, will cause a delay as the hardware context is switched between the two processes. Running a performance meter, for example, can cause a noticeable glitch in application animation when the SX context is switched between the meter process and the application. Use of Direct X when mixing Xlib and XGL rendering is highly recommended as, typically, no context switch will occur. The same SX context will be shared between the Xlib rendering calls and the XGL/SX driver. Similarly, mixing XIL, XGL and Direct X in the same process will cause no context switches.
The frame buffer, cg14, supports both 8 and 24 bit drawables, and can have both visible simultaneously. If window identifiers have not all been used up by other 8 bit double-buffered drawables, then the cg14 will use buffer switching for double buffering. Otherwise, the XGL/SX driver uses copy double buffering, using the SX to accelerate the copy. The driver always uses copy double buffering for 24 bit drawables.
The Z buffer is stored in DRAM, with one allocated for each XGL raster that has Z buffering turned on. The SX accelerates Z buffer clearing and comparison.
If SXDRAM is available, the XGL/SX driver will use it for Z buffers, and back buffers as well (if double buffering is enabled, and copy double buffering is being used.) SXDRAM significantly improves line-drawing and context-switching performance. Other pixel operations run about 10%-20% faster.