mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 22:00:13 +01:00
mesa: stop assigning unused storage for non-bindless opaque types
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. V2: rebase on ARB_bindless_texture Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
parent
a4d3371176
commit
fcbb93e860
1 changed files with 6 additions and 36 deletions
|
|
@ -2447,48 +2447,18 @@ add_uniform_to_shader::visit_field(const glsl_type *type, const char *name,
|
||||||
const enum glsl_interface_packing,
|
const enum glsl_interface_packing,
|
||||||
bool /* last_field */)
|
bool /* last_field */)
|
||||||
{
|
{
|
||||||
/* atomics don't get real storage */
|
/* opaque types don't use storage in the param list unless they are
|
||||||
if (type->contains_atomic())
|
* bindless samplers or images.
|
||||||
|
*/
|
||||||
|
if (type->contains_opaque() && !var->data.bindless)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gl_register_file file;
|
|
||||||
if (type->without_array()->is_sampler() && !var->data.bindless) {
|
|
||||||
file = PROGRAM_SAMPLER;
|
|
||||||
} else {
|
|
||||||
file = PROGRAM_UNIFORM;
|
|
||||||
}
|
|
||||||
|
|
||||||
int index = _mesa_lookup_parameter_index(params, name);
|
int index = _mesa_lookup_parameter_index(params, name);
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
unsigned size = type_size(type) * 4;
|
unsigned size = type_size(type) * 4;
|
||||||
|
|
||||||
index = _mesa_add_parameter(params, file, name, size, type->gl_type,
|
index = _mesa_add_parameter(params, PROGRAM_UNIFORM, name, size,
|
||||||
NULL, NULL);
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The first part of the uniform that's processed determines the base
|
/* The first part of the uniform that's processed determines the base
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue