Yes, as OpenGL Guy writes, anyone can do gamma correction in the shader. The R300 has dedicated HW to perform degamma from textures into the shader, and on shader output, without using any shader instructions.
However, in the AA case when you "combine" your fragments into the final pixel color, you need to read in fragments that are gamma corrected, degamma them, merge them, and then gamma correct them before sending them out to the display buffer. This is called "resolving" the multi-sample buffer. Without gamma correction in the resolve pass, the merged fragments have the wrong color. Also, if you don't gamma correct at all into and out of the frame buffer, you lose LSBs in the color (gamma correction is a form of color compression, which lines up with the displayed color). Basically, you need to do it this way to get maximum output quality.
Without it, you either lose out some color LSBs, or you get AA that has weird intensity patterns.