[Mesa-dev] [PATCH] mesa: don't set _NEW_PROGRAM_CONSTANTS for non-bindless opaque uniforms

Timothy Arceri tarceri at itsqueeze.com
Thu Jun 15 10:59:50 UTC 2017


---

 I haven't tried to benchmark/profile this with anything but it makes
 sense to try skip this if we can.

 src/mesa/main/uniform_query.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index fed33df..364e8a0 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -1049,21 +1049,25 @@ _mesa_uniform(GLint location, GLsizei count, const GLvoid *values,
     *     element that exceeds the highest array element index used, as
     *     reported by GetActiveUniform, will be ignored by the GL."
     *
     * Clamp 'count' to a valid value.  Note that for non-arrays a count > 1
     * will have already generated an error.
     */
    if (uni->array_elements != 0) {
       count = MIN2(count, (int) (uni->array_elements - offset));
    }
 
-   FLUSH_VERTICES(ctx, _NEW_PROGRAM_CONSTANTS);
+   FLUSH_VERTICES(ctx, 0);
+
+   if (uni->is_bindless || !uni->type->contains_opaque()) {
+      ctx->NewState |= _NEW_PROGRAM_CONSTANTS;
+   }
 
    /* Store the data in the "actual type" backing storage for the uniform.
     */
    if (!uni->type->is_boolean() && !uni->is_bindless) {
       memcpy(&uni->storage[size_mul * components * offset], values,
              sizeof(uni->storage[0]) * components * count * size_mul);
    } else if (uni->is_bindless) {
       const union gl_constant_value *src =
          (const union gl_constant_value *) values;
       GLuint64 *dst = (GLuint64 *)&uni->storage[components * offset].i;
-- 
2.9.4



More information about the mesa-dev mailing list