[Mesa-dev] [PATCH] main: fix basename match's check if it's an array or struct

Samuel Iglesias Gonsálvez siglesias at igalia.com
Wed Oct 28 03:16:54 PDT 2015



On 28/10/15 11:13, Samuel Iglesias Gonsálvez wrote:
> 
> 
> On 28/10/15 10:31, Tapani Pälli wrote:
>> On 10/28/2015 09:09 AM, Samuel Iglesias Gonsálvez wrote:
>>>
>>> On 28/10/15 06:53, Tapani Pälli wrote:
>>>> On 10/27/2015 04:04 PM, Samuel Iglesias Gonsalvez wrote:
>>>>> Commit 4565b6f did not update the basename match's check for
>>>>> the case that string would exactly match the name of the
>>>>> variable if the suffix "[0]" were appended to it.
>>>>>
>>>>> Fixes two dEQP-GLES31 tests:
>>>>>
>>>>> dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array
>>>>>
>>>>>
>>>>> dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array_single_element
>>>>>
>>>>>
>>>> These tests are passing already with commit 4565b6f right? I think the
>>>> 'found' boolean already takes care of this, I need to step through again
>>>> to make sure though.
>>> No, they are failing in those cases because 'found' is true but then for
>>> either Uniform block or shader storage block, we check if the name is an
>>> array or struct:
>>>
>>>         if (found) {
>>>           switch (programInterface) {
>>>           case GL_UNIFORM_BLOCK:
>>>           case GL_SHADER_STORAGE_BLOCK:
>>>              /* Basename match, check if array or struct. */
>>>              if (name[baselen] == '\0' ||
>>>                  name[baselen] == '[' ||
>>>                  name[baselen] == '.') {
>>>              [...]
>>>
>>> As 'found' can be true because of two different cases, we need to take
>>> care of both in this 'if' condition.
>>>
>>> $ ./deqp-gles31 -n
>>> dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array*
>>>
>>> dEQP Core git-deb902685b9309a64b5e08c48157d3117cf27750 (0xdeb90268)
>>> starting..
>>>    target implementation = 'Default'
>>>
>>> Test case
>>> 'dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array'..
>>>
>>> Compute shader compile time = 16.732000 ms
>>> Link time = 14.251000 ms
>>> Test case duration in microseconds = 43993 us
>>>    Fail (GetProgramResourceIndex returned unexpected values)
>>>
>>> Test case
>>> 'dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array_single_element'..
>>>
>>> Compute shader compile time = 1.114000 ms
>>> Link time = 2.714000 ms
>>> Test case duration in microseconds = 8858 us
>>>    Fail (GetProgramResourceIndex returned unexpected values)
>>>
>>> DONE!
>>>
>>> Test run totals:
>>>    Passed:        0/2 (0.0%)
>>>    Failed:        2/2 (100.0%)
>>>    Not supported: 0/2 (0.0%)
>>>    Warnings:      0/2 (0.0%)
>>>
>>> $ glxinfo | grep git
>>>
>>>
>>> OpenGL core profile version string: 3.3 (Core Profile) Mesa 11.1.0-devel
>>> (git-4565b6f)
>>> OpenGL version string: 3.0 Mesa 11.1.0-devel (git-4565b6f)
>>> OpenGL ES profile version string: OpenGL ES 3.1 Mesa 11.1.0-devel
>>> (git-4565b6f)
>>
>> That is strange, for me these pass fine, I can see that our deqp version
>> differ:
>>
>> [tpalli at tpalli-mobl2 gles31]$ mesa_run ./deqp-gles31
>> --deqp-case=dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array*
>>
>> dEQP Core git-7d804783aef83f8f2784d99812d98bcfcf21e95f (0x7d804783)
>> starting..
>>   target implementation = 'Default'
>>
>> Test case
>> 'dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array'..
>>
>> Compute shader compile time = 4.585000 ms
>> Link time = 3.678000 ms
>> Test case duration in microseconds = 12021 us
>>   Pass (Pass)
>>
>> Test case
>> 'dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array_single_element'..
>>
>> Compute shader compile time = 0.822000 ms
>> Link time = 1.225000 ms
>> Test case duration in microseconds = 3682 us
>>   Pass (Pass)
>>
>> DONE!
>>
>> Test run totals:
>>   Passed:        2/2 (100.0%)
>>   Failed:        0/2 (0.0%)
>>   Not supported: 0/2 (0.0%)
>>   Warnings:      0/2 (0.0%)
>>
>>
>>
>> This is with
>>
>> MESA_EXTENSION_OVERRIDE=GL_ARB_compute_shader
>> MESA_GLES_VERSION_OVERRIDE=3.1
>>
>> and current Mesa head (03c92ff), tested on Ivybridge laptop.
>>
> 
> I checked out the same commits for both dEQP and Mesa. Run it on HSW
> laptop with MESA_EXTENSION_OVERRIDE=GL_ARB_compute_shader and
> MESA_GLES_VERSION_OVERRIDE=3.1. Both tests failed for me.
> 
> $ ./deqp-gles31 -n
> dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array*
> dEQP Core git-7d804783aef83f8f2784d99812d98bcfcf21e95f (0x7d804783)
> starting..
>   target implementation = 'Default'
> 
> Test case
> 'dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array'..
> Compute shader compile time = 10.610000 ms
> Link time = 8.145000 ms
> Test case duration in microseconds = 26574 us
>   Fail (GetProgramResourceIndex returned unexpected values)
> 
> Test case
> 'dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array_single_element'..
> Compute shader compile time = 1.038000 ms
> Link time = 2.763000 ms
> Test case duration in microseconds = 7789 us
>   Fail (GetProgramResourceIndex returned unexpected values)
> 
> DONE!
> 
> Test run totals:
>   Passed:        0/2 (0.0%)
>   Failed:        2/2 (100.0%)
>   Not supported: 0/2 (0.0%)
>   Warnings:      0/2 (0.0%)
> $ glxinfo | grep git
> OpenGL core profile version string: 3.3 (Core Profile) Mesa 11.1.0-devel
> (git-0325f68)
> OpenGL version string: 3.0 Mesa 11.1.0-devel (git-0325f68)
> OpenGL ES profile version string: OpenGL ES 3.1 Mesa 11.1.0-devel
> (git-0325f68)
> 

Sorry, I used a later commit, but with 03c92ff I get the same result.

Sam

> Verify you don't have uncommitted local changes that can modify this
> result. If not, this is very strange indeed (or maybe HSW is doing
> something different when adding the resources).
> 
> Sam
> 
>>
>>>
>>>   This function is becoming a bit of a pain because
>>>> different resources have different naming schemes, I'll have to see if
>>>> it could be somehow refactored simpler.
>>>>
>>> OK, thanks.
>>>
>>> Sam
>>>
>>>>> Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
>>>>> ---
>>>>>    src/mesa/main/shader_query.cpp | 3 ++-
>>>>>    1 file changed, 2 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/src/mesa/main/shader_query.cpp
>>>>> b/src/mesa/main/shader_query.cpp
>>>>> index 59ec3d7..6cc91de 100644
>>>>> --- a/src/mesa/main/shader_query.cpp
>>>>> +++ b/src/mesa/main/shader_query.cpp
>>>>> @@ -592,7 +592,8 @@ _mesa_program_resource_find_name(struct
>>>>> gl_shader_program *shProg,
>>>>>                /* Basename match, check if array or struct. */
>>>>>                if (name[baselen] == '\0' ||
>>>>>                    name[baselen] == '[' ||
>>>>> -                name[baselen] == '.') {
>>>>> +                name[baselen] == '.' ||
>>>>> +                rname_has_array_index_zero) {
>>>>>                   return res;
>>>>>                }
>>>>>                break;
>>>>
>>
>>


More information about the mesa-dev mailing list