[Mesa-dev] [PATCH] glsl: Optimize certain if-statements to just casts from the condition

Ian Romanick idr at freedesktop.org
Mon Jan 19 18:41:31 PST 2015


On 01/15/2015 08:39 PM, Kenneth Graunke wrote:
> On Friday, January 16, 2015 04:54:44 PM Ian Romanick wrote:
>> On 01/16/2015 04:25 PM, Matt Turner wrote:
>>> On Thu, Jan 15, 2015 at 6:46 PM, Ian Romanick <idr at freedesktop.org> wrote:
>>>> On 01/16/2015 08:15 AM, Matt Turner wrote:
>>>>> From: Ian Romanick <ian.d.romanick at intel.com>
>>>>>
>>>>> Some shaders end up with code that looks something like:
>>>>>
>>>>>     if (some_condition)
>>>>>         result = 1.0;
>>>>>     else
>>>>>         result = 0.0;
>>>>>
>>>>> This pass converts those if-statements to
>>>>>
>>>>>      result = float(some_condition);
>>>>>
>>>>> total instructions in shared programs: 5934568 -> 5921818 (-0.21%)
>>>>> instructions in affected programs:     723433 -> 710683 (-1.76%)
>>>>> GAINED:                                26
>>>>> LOST:                                  7
>>>>
>>>> I was getting really different results here... on my more recent version
>>>> (that should produce the same IR), I was getting basically the reverse
>>>> lost / gained.  The other results were about the same.
>>>>
>>>> I updated both Mesa and shader-db, and I'm not able to do a full
>>>> shader-db run now.  At semi-arbitrary points in the run I get
>>>>
>>>> Exception: Only shader 0 found.
>>>> shaders/closed/unreal4/sun-temple/180.shader_test
>>>
>>> You need commit f0aec4ee1e3 to avoid an assertion failure.
>>>
>>>> If I run that shader_test by hand, I get multiple shader emitted.  I'm
>>>> using the older run.py... is it possible that's broken?
>>>
>>> It's been working for me in occasional usage to generate *.out files.
>>
>> Trivial. :p
>>
>> diff --git a/run.py b/run.py
>> index 4fc366e..d57da21 100755
>> --- a/run.py
>> +++ b/run.py
>> @@ -57,7 +57,7 @@ def run_test(filename):
>>          raise Exception('Only shader 0 found. {}'.format(filename))
>>  
>>      re_search = re.compile(
>> -        r'(?P<stage>[A-Za-z0-9]+) shader\: (?P<count>\d+) instructions.')
>> +        r'(?P<stage>[A-Za-z0-9 ]+) shader\: (?P<count>\d+) instructions.')
>>      for line in lines:
>>          match = re_search.match(line)
>>          if match is not None:
> 
> FYI, I broke report.py support with run.py the other day.  You want to use
> Matt's new C-based multithreaded runner, which takes literally 1/3 of the
> time of the old Python script.

I know that I *want* it, but it doesn't work on my distro due to lack of
rendernode support. :(

> $ make
> $ ./run shaders | tee results/foobarquux
> 
> or for even faster runs:
> $ LD_PRELOAD=/usr/lib64/libjemalloc.so.1 INTEL_NO_HW=1 ./run shaders
> 
> --Ken
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150119/0f296b32/attachment.sig>


More information about the mesa-dev mailing list