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?

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;
  }
/**



--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to