FX color compression


The new NVIDIA architecture includes hardware-implemented color compression
technology. NVIDIA GeForce FX processors employ an advanced proprietary
form of loss-less data compression with a 4:1 compression ratio for color
information. This industry-unique color compression solution is implemented in
hardware and is completely transparent to applications, with both compression and
decompression taking place in real time. Because this compression is completely
loss-less, there is no reduction in image quality or loss of precision. The result of
this NVIDIA technology is a dramatic increase in memory efficiency, overall
improved system performance, and unmatched image quality. For the user, this
means that antialiasing speed is improved to the point where essentially all modes of
antialiasing are free—without any associated loss of performance.



I guess it'll be a secret for a while, especially if is transparent to both the user and programmers.
 
Seriously though, hasn't this already been discussed on the board? I thought the conclusion was that it was based on multisampling taking advantage of repeating the colours for the N samples.
 
I'm pretty sure this is how the 9700 does it, and from everything I've heard the FX does it the same way:

When a pixel is not on a poly edge, you know that each MSAA sample for the pixel will have the same color. So you only store the color once. There is probably a flag bit somewhere in the hierarchical Z buffer that says whether the sample is part of a non-edge pixel; when such a pixel is read out for the DAC, it just uses the single stored value instead of reading a separate value from each MSAA sample.

When another poly is drawn with an edge or intersection that runs through the pixel, each MSAA sample will then need to have its own color. So space is always reserved in the MSAA sample buffer for all the samples from each pixel, so the pixels can be addressed uniformly and so there is space for the additional sample values if necessary.

In other words, the compression doesn't really save space in the frame buffer, but it has the potential to save a lot of framebuffer bandwidth (6x on 9700 for 6x MSAA, 4x on GeForce FX).
 
Simon F said:
Seriously though, hasn't this already been discussed on the board? I thought the conclusion was that it was based on multisampling taking advantage of repeating the colours for the N samples.

No. As mentioned, this is what R300 appears to be doing, so it can achieve up to 6X with MSAA. NV30 appears have 4:1 compression on the buffer available all the time, however this obviously means minimal gains without MSAA (and also, still only a maximum of 4:1 with MSAA, meaning the mixed modes will get a lower advantage).
 
DaveBaumann said:
...NV30 appears have 4:1 compression on the buffer available all the time, however this obviously means minimal gains without MSAA (and also, still only a maximum of 4:1 with MSAA, meaning the mixed modes will get a lower advantage).

I thought it has been well-established that the FX's compression only worked with MSAA. It seems as if the amount of fixed ratio, lossless compression you could get in the framebuffer without MSAA would be so small that it wouldn't be worth the trouble.
 
antlers4 said:
I thought it has been well-established that the FX's compression only worked with MSAA. It seems as if the amount of fixed ratio, lossless compression you could get in the framebuffer without MSAA would be so small that it wouldn't be worth the trouble.

N.o it's been established tha nVidia admitted there wasn't much (if any)advantage unless MSAA was used. It doesn't mean it isn't on all the time, which was what some people had interpreted it as.

Of course Tom and Anand swallowed the marketing ploy that full time coloUr compression was an advanatge to the FX (in fact they didnt seem to recall/know/want to admit (delete as appropriate to your skew) that with AA the R300 had it, IIRC)
 
antlers4 said:
I thought it has been well-established that the FX's compression only worked with MSAA.

As Randell states, we established entirely the opposite. The fact that "4:1 color compression" was listed as a Quadro FX spec is also a clue this this is full time.
 
Assuming nVidia has a 6x MSAA mode (purely MS) and it is doing 4:1 ratio vs Ati's 24:1 at 6x FSAA.

Seems Ati's compression ratio means much more bandwidth saved when using 6x FSAA than nVidia's 4:1.
 
The 24:1 number is in relation to Z compression, not colour compression. The Max colour compression for R300 is 6X.
 
DaveBaumann said:
NV30 appears have 4:1 compression on the buffer available all the time, however this obviously means minimal gains without MSAA (and also, still only a maximum of 4:1 with MSAA, meaning the mixed modes will get a lower advantage).

Yes, but I cannot really figure out what kind of difference it makes when you're using compressed textures in the this place, since the colour compression isn't tied to MSAA?
 
LeStoffer said:
Yes, but I cannot really figure out what kind of difference it makes when you're using compressed textures in the this place

Sorry? Textures mean nothing here since by 'colour buffer' were talking about the pixel frame buffer - i.e. coloured pixels.
 
Err, sorry, I should have been mere precise: I meant in the case of compressed textures the source texels could have smaller number of different colours thus being easier to compress loss-less. But, okay, I was also thinking that the colour compression would work in all the texture-like data access between the memory and the chip, but I guess I misunderstood this part...
 
Thanks for referring me to that engineer's statement. I think it's very interesting in context--I guess it implies that without MSAA, if a block of four pixels have identical colors, they only have to be put in the framebuffer once. Not very useful in a lot of cases, but it will save bandwidth when drawing user interface elements and the like.

I think it is also interesting in that it implies that the FX color compression happens at a "low level", conceptually, more or less as part of the memory controller. The MSAA buffer is treated no differently from a "regular" framebuffer. This might be a clue as to why the FX is stuck with selecting multi-sampling samples in the ordered-grid pattern, as this corresponds most directly with a scaled-up framebuffer.
 
LeStoffer said:
Err, sorry, I should have been mere precise: I meant in the case of compressed textures the source texels could have smaller number of different colours thus being easier to compress loss-less.
Once filtering and shading have been applied that's unlikely.... unless we are emulating a flat shading system, eg MazeWars :)
 
Back
Top