[Mesa-dev] [PATCH] mesa: stop assigning unused storage for opaque types

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed Jun 14 08:27:31 UTC 2017



On 06/14/2017 09:45 AM, Nicolai Hähnle wrote:
> On 14.06.2017 06:44, Timothy Arceri wrote:
>> The storage was once used by get_sampler_uniform_value() but that
>> was fixed long ago to use the uniform storage assigned by the
>> linker.
>>
>> By not assigning storage for images/samplers the constant buffer
>> for gallium drivers will be reduced which could result in small
>> perf improvements.
> 
> I like it, but maybe it's best to wait for after bindless lands?

I second that. I have just pushed bindless.

Samuel.

> 
> Cheers,
> Nicolai
> 
> 
>> ---
>>
>>   This will need to be updated to create storage for bindless
>>   samplers/images.
>>
>>   src/mesa/program/ir_to_mesa.cpp | 40 
>> ++++------------------------------------
>>   1 file changed, 4 insertions(+), 36 deletions(-)
>>
>> diff --git a/src/mesa/program/ir_to_mesa.cpp 
>> b/src/mesa/program/ir_to_mesa.cpp
>> index 4c30bea..342a1f0 100644
>> --- a/src/mesa/program/ir_to_mesa.cpp
>> +++ b/src/mesa/program/ir_to_mesa.cpp
>> @@ -2438,62 +2438,30 @@ private:
>>   } /* anonymous namespace */
>>   void
>>   add_uniform_to_shader::visit_field(const glsl_type *type, const char 
>> *name,
>>                                      bool /* row_major */,
>>                                      const glsl_type * /* record_type */,
>>                                      const enum glsl_interface_packing,
>>                                      bool /* last_field */)
>>   {
>> -   /* atomics don't get real storage */
>> -   if (type->contains_atomic())
>> +   /* opaque types don't use storage in the param list*/
>> +   if (type->contains_opaque())
>>         return;
>> -   gl_register_file file;
>> -   if (type->without_array()->is_sampler()) {
>> -      file = PROGRAM_SAMPLER;
>> -   } else {
>> -      file = PROGRAM_UNIFORM;
>> -   }
>> -
>>      int index = _mesa_lookup_parameter_index(params, name);
>>      if (index < 0) {
>>         unsigned size = type_size(type) * 4;
>> -      index = _mesa_add_parameter(params, file, name, size, 
>> type->gl_type,
>> -                  NULL, NULL);
>> -
>> -      /* Sampler uniform values are stored in prog->SamplerUnits,
>> -       * and the entry in that array is selected by this index we
>> -       * store in ParameterValues[].
>> -       */
>> -      if (file == PROGRAM_SAMPLER) {
>> -     unsigned location;
>> -     const bool found =
>> -        this->shader_program->UniformHash->get(location,
>> -                           params->Parameters[index].Name);
>> -     assert(found);
>> -
>> -     if (!found)
>> -        return;
>> -
>> -     struct gl_uniform_storage *storage =
>> -            &this->shader_program->data->UniformStorage[location];
>> -
>> -         assert(storage->type->is_sampler() &&
>> -                storage->opaque[shader_type].active);
>> -
>> -     for (unsigned int j = 0; j < size / 4; j++)
>> -            params->ParameterValues[index + j][0].f =
>> -               storage->opaque[shader_type].index + j;
>> -      }
>> +      index = _mesa_add_parameter(params, PROGRAM_UNIFORM, name, size,
>> +                                  type->gl_type, NULL, NULL);
>>      }
>>      /* The first part of the uniform that's processed determines the 
>> base
>>       * location of the whole uniform (for structures).
>>       */
>>      if (this->idx < 0)
>>         this->idx = index;
>>   }
>>   /**
>>
> 
> 


More information about the mesa-dev mailing list