José Fonseca pisze:
> On Mon, 2009-12-14 at 08:58 -0800, michal wrote:
>   
>> José Fonseca pisze:
>>     
>>> On Mon, 2009-12-14 at 08:22 -0800, Keith Whitwell wrote:
>>>   
>>>       
>>>> On Mon, 2009-12-14 at 08:19 -0800, Keith Whitwell wrote:
>>>>     
>>>>         
>>>>> On Mon, 2009-12-14 at 08:04 -0800, José Fonseca wrote:
>>>>>       
>>>>>           
>>>>>> On Mon, 2009-12-14 at 05:39 -0800, Keith Whitwell wrote:
>>>>>>         
>>>>>>             
>>>>>>> On Sun, 2009-12-13 at 15:27 -0800, Marek Olšák wrote:
>>>>>>>           
>>>>>>>               
>>>>>>>> +static INLINE
>>>>>>>> +void util_blitter_save_fragment_sampler_states(
>>>>>>>> +                  struct blitter_context *blitter,
>>>>>>>> +                  int num_sampler_states,
>>>>>>>> +                  void **sampler_states)
>>>>>>>> +{
>>>>>>>> +   assert(num_textures <= 32);
>>>>>>>> +
>>>>>>>> +   blitter->saved_num_sampler_states = num_sampler_states;
>>>>>>>> +   memcpy(blitter->saved_sampler_states, sampler_states,
>>>>>>>> +          num_sampler_states * sizeof(void *));
>>>>>>>> +}
>>>>>>>> + 
>>>>>>>>             
>>>>>>>>                 
>>>>>>> Have you tried compiling with debug enabled?  The assert above fails to
>>>>>>> compile.  Also, can you use Elements() or similar instead of the
>>>>>>> hard-coded 32?
>>>>>>>
>>>>>>> Maybe we can figure out how to go back to having asserts keep exposing
>>>>>>> their contents to the compiler even on non-debug builds.  This used to
>>>>>>> work without problem on linux and helped a lot to avoid these type of
>>>>>>> problems.
>>>>>>>           
>>>>>>>               
>>>>>> I wouldn't say without a problem: defining assert(expr) as (void)0
>>>>>> instead of (void)(expr) on release builds yielded a non-negligible
>>>>>> performance improvement. I don't recall the exact figure, but I believe
>>>>>> it was the 3-5% for the driver I was benchmarking at the time. YMMV.
>>>>>> Different drivers will give different results, but there's nothing
>>>>>> platform specific about this.
>>>>>>         
>>>>>>             
>>>>> It's not hard to avoid excuting code...  For instance we could always
>>>>> have it translated to something like:
>>>>>
>>>>>   if (0) {
>>>>>     (void)(expr);
>>>>>   }
>>>>>   (void)(0)
>>>>>
>>>>>       
>>>>>           
>>>> Obviously I would have meant to say something cleaner like:
>>>>
>>>>  do {
>>>>    if (0) { (void)(expr);  }
>>>>  }
>>>>  while (0)
>>>>     
>>>>         
>>> This only works if expr has no calls, or just inline calls. Using my
>>> earlier example, if very_expensive_check() is in another file then the
>>> compiler has to assume the function will have side effects, and the call
>>> can't be removed.
>>>
>>> I'm not sure __assume keyword that Michal mentioned helps. It's more a
>>> hint to the compiler to help him optimize code around the assertion, but
>>> perhaps it helps with the warnings too.
>>>
>>>   
>>>       
>> If I try to compile this:
>>
>> __assume(lalala);
>>
>> I get:
>>
>> error C2065: 'lalala' : undeclared identifier
>>
>> On the other side, the compiler is going to be serious about the 
>> assumptions inside __assume(), and if they happen to be false, the 
>> application can behave not as expected. This is against current gallium 
>> paradigm, where we put assertions, but also do the same check in 
>> non-debug builds to early out from a function or provide default values 
>> (e.g. in switch-case statements).
>>     
>
> Bummer... that's no good.
>
>
>   
On the third hand, we could transform the following idiom

switch (foo) {
case 1:
   bar = 22;
default:
   assert(0);
   bar = 11;   /* Safe value. */
}

to use some flavour of assert() that doesn't get substituted with 
__assume() on non-debug builds. Something like weak_assert() or 
warning(). Then assert() could be used in places where there is no 
backup plan and the app is going to crash anyway.

Or... do the opposite and introduce strong_assert() that translates to 
__assume() and leave assert() as it is now.

------------------------------------------------------------------------------
Return on Information:
Google Enterprise Search pays you back
Get the facts.
http://p.sf.net/sfu/google-dev2dev
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to