<div dir="ltr"><div><div>For patches 1-3:<br><br></div>Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>><br><br></div>Marek<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 14, 2018 at 2:01 AM, Timothy Arceri <span dir="ltr"><<a href="mailto:tarceri@itsqueeze.com" target="_blank">tarceri@itsqueeze.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">These will be used in the following patch to allow copying directly<br>
to the param list when packing is enabled.<br>
<br>
Reviewed-by: Nicolai Hähnle <<a href="mailto:nicolai.haehnle@amd.com">nicolai.haehnle@amd.com</a>><br>
---<br>
 src/mesa/main/uniform_query.<wbr>cpp | 154 ++++++++++++++++++++++++------<wbr>----------<br>
 1 file changed, 91 insertions(+), 63 deletions(-)<br>
<br>
diff --git a/src/mesa/main/uniform_query.<wbr>cpp b/src/mesa/main/uniform_query.<wbr>cpp<br>
index 52b04c9243..eaed536f68 100644<br>
--- a/src/mesa/main/uniform_query.<wbr>cpp<br>
+++ b/src/mesa/main/uniform_query.<wbr>cpp<br>
@@ -1029,6 +1029,42 @@ _mesa_flush_vertices_for_<wbr>uniforms(struct gl_context *ctx,<br>
    ctx->NewDriverState |= new_driver_state;<br>
 }<br>
<br>
+static void<br>
+copy_uniforms_to_storage(<wbr>struct gl_uniform_storage *uni,<br>
+                         struct gl_context *ctx, GLsizei count,<br>
+                         const GLvoid *values, const int size_mul,<br>
+                         const unsigned offset, const unsigned components,<br>
+                         enum glsl_base_type basicType)<br>
+{<br>
+   if (!uni->type->is_boolean() && !uni->is_bindless) {<br>
+      memcpy(&uni->storage[size_mul * components * offset], values,<br>
+             sizeof(uni->storage[0]) * components * count * size_mul);<br>
+   } else if (uni->is_bindless) {<br>
+      const union gl_constant_value *src =<br>
+         (const union gl_constant_value *) values;<br>
+      GLuint64 *dst = (GLuint64 *)&uni->storage[components * offset].i;<br>
+      const unsigned elems = components * count;<br>
+<br>
+      for (unsigned i = 0; i < elems; i++) {<br>
+         dst[i] = src[i].i;<br>
+      }<br>
+   } else {<br>
+      const union gl_constant_value *src =<br>
+         (const union gl_constant_value *) values;<br>
+      union gl_constant_value *dst = &uni->storage[components * offset];<br>
+      const unsigned elems = components * count;<br>
+<br>
+      for (unsigned i = 0; i < elems; i++) {<br>
+         if (basicType == GLSL_TYPE_FLOAT) {<br>
+            dst[i].i = src[i].f != 0.0f ? ctx->Const.UniformBooleanTrue : 0;<br>
+         } else {<br>
+            dst[i].i = src[i].i != 0    ? ctx->Const.UniformBooleanTrue : 0;<br>
+         }<br>
+      }<br>
+   }<br>
+}<br>
+<br>
+<br>
 /**<br>
  * Called via glUniform*() functions.<br>
  */<br>
@@ -1091,32 +1127,8 @@ _mesa_uniform(GLint location, GLsizei count, const GLvoid *values,<br>
<br>
    /* Store the data in the "actual type" backing storage for the uniform.<br>
     */<br>
-   if (!uni->type->is_boolean() && !uni->is_bindless) {<br>
-      memcpy(&uni->storage[size_mul * components * offset], values,<br>
-             sizeof(uni->storage[0]) * components * count * size_mul);<br>
-   } else if (uni->is_bindless) {<br>
-      const union gl_constant_value *src =<br>
-         (const union gl_constant_value *) values;<br>
-      GLuint64 *dst = (GLuint64 *)&uni->storage[components * offset].i;<br>
-      const unsigned elems = components * count;<br>
-<br>
-      for (unsigned i = 0; i < elems; i++) {<br>
-         dst[i] = src[i].i;<br>
-      }<br>
-   } else {<br>
-      const union gl_constant_value *src =<br>
-         (const union gl_constant_value *) values;<br>
-      union gl_constant_value *dst = &uni->storage[components * offset];<br>
-      const unsigned elems = components * count;<br>
-<br>
-      for (unsigned i = 0; i < elems; i++) {<br>
-         if (basicType == GLSL_TYPE_FLOAT) {<br>
-            dst[i].i = src[i].f != 0.0f ? ctx->Const.UniformBooleanTrue : 0;<br>
-         } else {<br>
-            dst[i].i = src[i].i != 0    ? ctx->Const.UniformBooleanTrue : 0;<br>
-         }<br>
-      }<br>
-   }<br>
+   copy_uniforms_to_storage(uni, ctx, count, values, size_mul, offset,<br>
+                            components, basicType);<br>
<br>
    _mesa_propagate_uniforms_to_<wbr>driver_storage(uni, offset, count);<br>
<br>
@@ -1208,6 +1220,56 @@ _mesa_uniform(GLint location, GLsizei count, const GLvoid *values,<br>
    }<br>
 }<br>
<br>
+<br>
+static void<br>
+copy_uniform_matrix_to_<wbr>storage(struct gl_uniform_storage *const uni,<br>
+                               GLsizei count, const void *values,<br>
+                               const unsigned size_mul, const unsigned offset,<br>
+                               const unsigned components,<br>
+                               const unsigned vectors, bool transpose,<br>
+                               unsigned cols, unsigned rows,<br>
+                               enum glsl_base_type basicType)<br>
+{<br>
+   const unsigned elements = components * vectors;<br>
+<br>
+   if (!transpose) {<br>
+      memcpy(&uni->storage[size_mul * elements * offset], values,<br>
+             sizeof(uni->storage[0]) * elements * count * size_mul);<br>
+   } else if (basicType == GLSL_TYPE_FLOAT) {<br>
+      /* Copy and transpose the matrix.<br>
+       */<br>
+      const float *src = (const float *)values;<br>
+      float *dst = &uni->storage[elements * offset].f;<br>
+<br>
+      for (int i = 0; i < count; i++) {<br>
+         for (unsigned r = 0; r < rows; r++) {<br>
+            for (unsigned c = 0; c < cols; c++) {<br>
+               dst[(c * components) + r] = src[c + (r * vectors)];<br>
+            }<br>
+         }<br>
+<br>
+         dst += elements;<br>
+         src += elements;<br>
+      }<br>
+   } else {<br>
+      assert(basicType == GLSL_TYPE_DOUBLE);<br>
+      const double *src = (const double *)values;<br>
+      double *dst = (double *)&uni->storage[elements * offset].f;<br>
+<br>
+      for (int i = 0; i < count; i++) {<br>
+         for (unsigned r = 0; r < rows; r++) {<br>
+            for (unsigned c = 0; c < cols; c++) {<br>
+               dst[(c * components) + r] = src[c + (r * vectors)];<br>
+            }<br>
+         }<br>
+<br>
+         dst += elements;<br>
+         src += elements;<br>
+      }<br>
+   }<br>
+}<br>
+<br>
+<br>
 /**<br>
  * Called by glUniformMatrix*() functions.<br>
  * Note: cols=2, rows=4  ==>  array[2] of vec4<br>
@@ -1307,43 +1369,9 @@ _mesa_uniform_matrix(GLint location, GLsizei count,<br>
<br>
    /* Store the data in the "actual type" backing storage for the uniform.<br>
     */<br>
-   const unsigned elements = components * vectors;<br>
-<br>
-   if (!transpose) {<br>
-      memcpy(&uni->storage[size_mul * elements * offset], values,<br>
-            sizeof(uni->storage[0]) * elements * count * size_mul);<br>
-   } else if (basicType == GLSL_TYPE_FLOAT) {<br>
-      /* Copy and transpose the matrix.<br>
-       */<br>
-      const float *src = (const float *)values;<br>
-      float *dst = &uni->storage[elements * offset].f;<br>
-<br>
-      for (int i = 0; i < count; i++) {<br>
-        for (unsigned r = 0; r < rows; r++) {<br>
-           for (unsigned c = 0; c < cols; c++) {<br>
-              dst[(c * components) + r] = src[c + (r * vectors)];<br>
-           }<br>
-        }<br>
-<br>
-        dst += elements;<br>
-        src += elements;<br>
-      }<br>
-   } else {<br>
-      assert(basicType == GLSL_TYPE_DOUBLE);<br>
-      const double *src = (const double *)values;<br>
-      double *dst = (double *)&uni->storage[elements * offset].f;<br>
-<br>
-      for (int i = 0; i < count; i++) {<br>
-        for (unsigned r = 0; r < rows; r++) {<br>
-           for (unsigned c = 0; c < cols; c++) {<br>
-              dst[(c * components) + r] = src[c + (r * vectors)];<br>
-           }<br>
-        }<br>
-<br>
-        dst += elements;<br>
-        src += elements;<br>
-      }<br>
-   }<br>
+   copy_uniform_matrix_to_<wbr>storage(uni, count, values, size_mul, offset,<br>
+                                  components, vectors, transpose, cols, rows,<br>
+                                  basicType);<br>
<br>
    _mesa_propagate_uniforms_to_<wbr>driver_storage(uni, offset, count);<br>
 }<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.14.3<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div>