Skip to content
  • Andrii Simiklit's avatar
    nir: get rid of OOB dereferences in nir_lower_io_arrays_to_elements · d972a6ac
    Andrii Simiklit authored
    
    
    This patch fixes mesa compiler crash in i965 on shaders like the following one:
    ```
       in VS_OUTPUT {
          mat4 data;
       } vs_output;
       out vec4 fs_output;
    
       vec4 convert(in float val) {
           return vec4(val);
       }
    
       void main()
       {
           fs_output = vec4(0.0);
           for (int a = -1; a < 5; a++) {
               for (int b = -1; b < 5; b++) {
                   fs_output += convert(vs_output.data[b][a]);
               }
           }
       }
    ```
    
    Section 5.11 (Out-of-Bounds Accesses) of the GLSL 4.60 spec says:
       In the subsections described above for array, vector, matrix and
       structure accesses, any out-of-bounds access produced undefined
       behavior....
       Out-of-bounds reads return undefined values, which
       include values from other variables of the active program or zero.
       Out-of-bounds writes may be discarded or overwrite
       other variables of the active program.
    
    GL_KHR_robustness and GL_ARB_robustness encourage us to return zero
    for reads.
    
    Reviewed-by: default avatarRhys Perry <pendingchaos02@gmail.com>
    Signed-off-by: default avatarAndrii Simiklit <andrii.simiklit@globallogic.com>
    Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6560>
    d972a6ac