Mesa (master): mesa: stop assigning unused storage for non-bindless opaque types
Timothy Arceri
tarceri at kemper.freedesktop.org
Thu Jun 15 22:09:13 UTC 2017
Module: Mesa
Branch: master
Commit: fcbb93e860246375d03f280f927f79d3645a8988
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fcbb93e860246375d03f280f927f79d3645a8988
Author: Timothy Arceri <tarceri at itsqueeze.com>
Date: Thu Jun 15 11:56:28 2017 +1000
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 at gmail.com>
---
src/mesa/program/ir_to_mesa.cpp | 42 ++++++-----------------------------------
1 file changed, 6 insertions(+), 36 deletions(-)
diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 775211cefb..d70494c2f9 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2447,48 +2447,18 @@ add_uniform_to_shader::visit_field(const glsl_type *type, const char *name,
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 unless they are
+ * bindless samplers or images.
+ */
+ if (type->contains_opaque() && !var->data.bindless)
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);
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
More information about the mesa-commit
mailing list