Jason Wood <sand...@hotmail.com> writes: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 10/15/2012 10:41 AM, Eric Anholt wrote: >> Jason Wood <sand...@hotmail.com> writes: >> >>> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 >>> >>> On 10/12/2012 04:30 PM, Eric Anholt wrote: >>>> There are a number of places where some obscure piece of the >>>> code is not currently worth fixing, and we have some workaround >>>> behavior available. It's nicer for users to do some lame >>>> workaround than to just assert, but without asserts we never >>>> knew when the workaround was at fault. >>>> >>>> This should give us a nice compromise: Execute the workaround, >>>> but mention that the obscure workaround was hit. --- >>>> src/mesa/drivers/dri/intel/intel_context.h | 11 +++++++++++ >>>> 1 file changed, 11 insertions(+) >>>> >>>> diff --git a/src/mesa/drivers/dri/intel/intel_context.h >>>> b/src/mesa/drivers/dri/intel/intel_context.h index >>>> b732696..eeefadf 100644 --- >>>> a/src/mesa/drivers/dri/intel/intel_context.h +++ >>>> b/src/mesa/drivers/dri/intel/intel_context.h @@ -483,6 +483,17 >>>> @@ extern int INTEL_DEBUG; dbg_printf(__VA_ARGS__); >>>> \ } >>>> while(0) >>>> >>>> +#define WARN_ONCE(cond, fmt...) do { >>>> \ + if (unlikely(cond)) { >>>> \ + static bool _warned = false; >>>> \ + if (!_warned) { >>>> \ >>> >>> I could be wrong here because I'm not super familiar with how >>> macros work.. >>> >>> It looks like this if statement will _always_ evaluate to true >>> given that you just initialized the value in the previous line. >>> I assume this is not the behavior that you were after. >> >> The "static" keyword on _warned means that it will have persistant >> storage that contains the initializer value on library load. >> > > Have you actually tried this to see if your code only warns once? > When I write a little test program to see how this code actually > functions, I get multiple warnings unless I move the > definition/initialization of _warned outside of the WARN_ONCE define > block: > > static bool _warned = false; > > #define WARN_ONCE(cond, fmt...) do { \ > if (unlikely(cond)) { \ > if (!_warned) { \ > fprintf(stderr, "WARNING: "); \ > fprintf(stderr, fmt); \ > _warned = true; \ > } \ > } \ > } while (0) > > > I admit that as a Perl programmer my C fu is a little weak, so I may > just be adding noise to this list. If this is the case, I apologize. > > On a side note, the "do { ... } while(0)" portion of the code looks > funny to me, and I have to assume that it is some oddball compiler > workaround. GCC works just fine when this code is wrapped in just > curly braces.
No, really, it works: diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_conte index 204609e..a67d35b 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -707,6 +707,10 @@ intelInitContext(struct intel_context *intel, _swrast_CreateContext(ctx); } + for (int i = 0; i < 3; i++) { + WARN_ONCE(true, "asdfasdfasdf\n"); + } + _vbo_CreateContext(ctx); if (ctx->swrast_context) { _tnl_CreateContext(ctx); anholt@eliezer:anholt/src/mesa% mesagl glxgears libGL: OpenDriver: trying /home/anholt/src/mesa/lib/tls/i965_dri.so libGL: OpenDriver: trying /home/anholt/src/mesa/lib/i965_dri.so WARNING: asdfasdfasdf Running synchronized to the vertical refresh. The framerate should be approximately the same as the monitor refresh rate.
pgp4L9IyEw9ng.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev