S3TC was working on my machine and now it is not! How that goes for reliability?

I was unsure but now you sure convinced me. I'm removing this constructor magic 
madness. Please leave the much more reliable system of explicitly calling 
initializers.

Jose

________________________________________
From: luca.barbi...@gmail.com [luca.barbi...@gmail.com] On Behalf Of Luca 
Barbieri [l...@luca-barbieri.com]
Sent: Friday, April 02, 2010 16:09
To: Jose Fonseca
Cc: Brian Paul; mesa3d-dev@lists.sourceforge.net
Subject: Re: [Mesa3d-dev] How do we init half float tables?

On Fri, Apr 2, 2010 at 9:51 AM, Jose Fonseca <jfons...@vmware.com> wrote:
> Reliability goes both ways: using a global constructor simplifies the problem 
> substantially, but it is only as reliable as the global constructor mechanism 
> itself -- which it's not much given the compiler/linker magic necessary to 
> work.

Once it is written and works, it should just work indefinitely, since
the C++ ABI relies on it.

> I also think that we should code generate most constat lookup tables: it 
> avoids the initialization problem, and it saves memory when the SO is loaded 
> in several processes as pages can be shared.

Yes, I have done exactly this, for the reasons you describe.
The half float tables are now pre-generated by a Python script.

> For S3TC it is not a real problem: any code that exposes S3TC support needs 
> to check if S3TC (de)compresion support is available before advertising 
> (xxx_screen.c). Checking the support and initialization should be done by a 
> single function. That is, if the libtxc_dxtn.so is not available the s3tc 
> functions should *never* be called.

I changed the format code to add a new "util_format_is_supported" that
allows users to query if the util_format code can pack/unpack a given
format.

That function, if called on an s3tc format, will automatically call
the S3TC init function.
This way, users of the format helpers no longer need to know about
S3TC at all, and it will just work.

Even if the util_format_is_supported function is not called before
reading/writing an S3TC format, the fetch/pack function pointers are
initialized to versions that will autoload the S3TC library.

Additionally, the S3TC library may now support only a subset of the
formats. This may be even more useful as further compressed formats
are added.

There are two areas where I'm not totally happy with the approach I did though:
1. Currently upon a successful load of S3TC, we hack the format
descriptions to set the is_supported bit to 1. Not sure if it is the
best way to do it.
2. If S3TC is not available, the functions just do nothing: this is
consistent with other unsupported formats. We may however want to read
black pixels, throw an error, or read a special "error" image instead
(I'd suggest having "unsupported" unpack/pack functions and pointing
all unsupported formats to them)

Also, I think we should remove all the Mesa internal format code and
make it use util_format instead, unless there is really a good reason
to duplicate it all.
Same thing for util_half.

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to