On Tue, 2009-07-14 at 15:29 -0700, Nicolai Hähnle wrote: > Am Tuesday 14 July 2009 23:37:17 schrieb Brian Paul: > > The glean exactRGBA test has always failed with Mesa (with sw > > rendering at least). The failures come from a sequence of > > int->float->int conversions which don't meet the GL spec. > > > > In particular, when glColor4us() or glColor4ui() are used to set the > > drawing color, the N-bit integer frame buffer values should match the > > upper N bits of the GLushort or GLuint value originally passed in. > > > > Because of int->float->int conversions it's a little tricky to > > maintain the N-bit identity requirement. > > > > The attached patch fixes the exactRGBA failures. I haven't seen any > > regressions but some additional eyes should take a look. > > > > There are two parts: > > > > 1. Convert float->ubyte with floor(x*255.999) instead of iround(x*255.0) > > > > 2. Convert uint->float with floor((u >> 16) / 65535.0) instead of > > floor(u / 4294967295.0) This effectively converts the GLuint to a > > GLushort. This isn't ideal but I think it's "good enough" until we > > find otherwise. > > Actually, this patch is incorrect, and as far as I can tell, the OpenGL > specification is unfortunately self-contradictory. My personal opinion is > that > the current behaviour of Mesa is the sane thing to do, and the behaviour that > exactRGBA tests for is crazy and unexpected. > > It is, however, possible that I'm wrong, so let me just explain how I came to > this opinion long ago, and perhaps you can explain a mistake I made. In any > case, let the specification lawyering begin. > > The test exactRGBA is motivated by a paragraph in the section "Final Color > Processing" (2.19.9 in glspec3.0). This is, as far as I know, the only > support > for this test in the entire spec. > > And here's evidence supporting the current Mesa behaviour: > > 1. The state tables clearly state that the current color is a vector of > floating point values. All places where converting between fixed point and > floating point are mentioned require what Mesa currently does. > > 2. Consider the paragraph following the description of the Color and > SecondaryColor functions in section "Vertex Specification" (section 2.7). It > explicitly says that integer values are to be converted to floating point as > discussed in a different part of the spec (section 2.19). This section > contains a table (table 2.10) is *very* explicit about how conversions are to > be done: In the same way that Mesa currently does it. > > So the OpenGL specification contradicts itself: Either you convert in the way > mandated by table 2.10, or you support the language of section 2.19.9. Doing > both is essentially impossible. > > With that, one thing to keep in mind is that probably this should be brought > to the ARB's attention. The other thing is to choose how Mesa should behave, > and here I vote for going with what's sane. > > And in my opinion, Mesa current behaviour is clearly the sane choice. Why? > Because that's really what you expect from fixed point <-> floating point > conversion (principle of least surprise and so on). > > As a consequence, and perhaps after checking in with the ARB, it seems wise > to > remove or appropriately modify that exactRGBA test). > > cu, > Nicolai
Fantastic -- I couldn't agree more. I'm glad I'm not the only exatRGBA hater here... Keith ------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge _______________________________________________ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev