Skip to content
  • Kenneth Graunke's avatar
    i965: Ignore uniform storage for samplers or images, use binding info · 6981069f
    Kenneth Graunke authored
    gl_nir_lower_samplers_as_deref creates new top level sampler and image
    uniforms which have been split from structure uniforms.  i965 assumed
    that it could walk through gl_uniform_storage slots by starting at
    var->data.location and walking forward based on a simple slot count.
    This assumed that structure types were walked in a particular order.
    
    With samplers and images split out of structures, it becomes impossible
    to assign meaningful locations.  Consider:
    
       struct S {
          sampler2D a;
          sampler2D b;
       } s[2];
    
    The gl_uniform_storage locations for these follow this map:
    
       0 => a[0], 1 => b[0], 2 => a[0], 3 => b[0].
    
    But the new split variables look like:
    
       sampler2D lowered_a[2];
       sampler2D lowered_b[2];
    
    and there is no way to know that there's effectively a stride to get to
    the location for successive elements of a[] or b[].  So, working with
    location becomes effectively impossible.
    
    Ultimately, the point of looking at uniform storage was to pull out the
    bindings from the opaque index fields.  gl_nir_lower_samplers_as_derefs
    can obtain this information while doing the splitting, however, and sets
    up var->data.binding to have the desired values.
    
    We move gl_nir_lower_samplers before brw_nir_lower_image_load_store so
    gl_nir_lower_samplers_as_derefs has the opportunity to set proper image
    bindings.  Then, we make the uniform handling code skip sampler(-array)
    variables, and handle image param setup based on var->data.binding.
    
    Fixes Piglit tests/spec/glsl-1.10/execution/samplers/uniform-struct,
    this time without regressing dEQP-GLES2.functional.uniform_api.random.3.
    
    Fixes: f003859f
    
     nir: Make gl_nir_lower_samplers use gl_nir_lower_samplers_as_deref
    
    Reviewed-by: default avatarJason Ekstrand <jason@jlekstrand.net>
    6981069f