[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