On Thu, 5 Dec 2002, magenta wrote:
> >
> > Well that sucks.  I guess I'd never be able to enable super-sampled FSAA
> > with your wrapper on my R100.  Even though I CAN do it with a driver-based
> > tweak utility on some other operating system.
>
> But it's not even supported in the DRI driver on the R100...  It's not like
> the wrapper can magically make functionality which isn't there to begin
> with appear, but in order to do the tweak in teh driver itself, the driver
> would have to support it anyway!

Ok. Please listen to yourself for a moment, and then _think_ about this.

Let's put out some facts, instead of just arguing:

 - FSAA is a good idea, especially for games and eyecandy. Maybe the CAD
   people don't care, but jaggies are horribly visible to the human eye,
   and this is one reason why computer-generated graphics at high
   resolution still often looks _more_ fake than a regular old NTSC
   picture at some ridiculously low resolution.

 - FSAA _cannot_ be done by a wrapper. End of discussion. It needs driver
   explicit support for it. It's not a "select one default value when
   presented a choice" kind of passthrough thing.

I doubt anybody disputes these two basic premises. FSAA is a good thing
(assuming the hardware is potent enough ;), and at the same time FSAA is
another example of something that needs support from the low-level driver
some way anyway (possibly only setting a register, I don't know).

But at the same time it is _not_ something that the actual client program
itself needs to care about. It's a very hw-dependent thing (ie different
cards have very different approaches for things like sample selection),
and yet it's largely invisible from a programmatic standpoint at a higher
level.

And I would claim that these two issues are important:

 - intimate hw-dependency (ie it's literally _hard_ to have a generic
   interface for it - do you really want to engineer some kind of OpenGL
   system for letting apps be told what kinds of supersampling patterns
   are available to be chosen?)

 - invisible to the client (ie the client doesn't need to care about the
   feature). And don't get me wrong: the client _can_ see the result of it
   (hey, it could just read back the picture it wrote), I just mean that
   the client doesn't really need to care or do anything special about it.

Together they say to me "not wrapper, and not OpenGL extensions". In
short, they say "sideband information directly to the low-level driver".

I'm not even going to argue what the implementation for the side-band
information is - I don't think that is the most important part. But I
_will_ argue that it is clearly a good idea, and every _single_ argument
against it has been pure and utter cow-manure.

All the "preloading" etc ideas may be clever, but they are still nothing
but the end product of bovine four-phase food processing. Because they
simply _cannot_ do all the things the driver can much more easily do on
its own ("easily" being relative, of course. There's undoubtedly a lot of
work in the hw-specific stuff, but it's at least an order of magnitude
easier to integrate into the code that already does all the hw accesses
anyway).

And I don't think that FSAA is in any way special. There are tons of
examples of things like this, and once you accept that hw-specific
side-band data is useful and a good idea, there's a number of other
features that are similar.

We've already mentioned anisotropic filtering (which may be more than just
a single value: it looks like all the vendors have somewhat tunable cutoff
parameters etc to avoid doing the full job when not needing to) as being
another of these hw-dependent yet largely client-invisible things. Or it
can be decisions about internal texture formats, and also less direct
things like card texture-memory allocation policies ("compress textures at
upload to conserve memory" or something). Or it could be simple things
like default gamma correction values.

Are these things that can _also_ be done using regular GL interfaces?
Sure. You can do even things like supersampling pattern setup that way.
I'm not saying it is impossible for clients to set all these things by
hand. It's just that it's not necessarily _sensible_ to have the logic to
know about all these things in every program. And it's not a sin to have
two different ways to get to the same end result.

And doing it in the low-level driver is potentially much easier than doing
it anywhere else. I assume that some of the smarter cards you can enable
anisotropic filtering with just a single register - and thus the code
needed to do this might be as simple as just having an initial value that
is dependent on whatever sideband signal you choose, ie you'd end up with
some simply initialization logic like

        ctx->anisovalue = sideband ? sidebandvalue : defaultvalue;

(Yeah, and maybe I'm full of shit, and all the cards require tons of setup
for anisotropic filtering. Whatever. I'm a kernel guy, I just want
tuxracer to give me FSAA some day, because I still see jaggies at
1600x1200 on my nice TFT display).

                        Linus



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to