summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2017-06-20 10:31:32 +1000
committerTimothy Arceri <[email protected]>2018-03-20 14:17:33 +1100
commita2198d4fdb7d93568ba0792a326971abb6d6b3a9 (patch)
tree2523656341a0bf5d9390553b7f89f792ec2317d6
parent6cfa15b8031b30b987b7c62fcdbc5813765e692c (diff)
mesa: add packing support for setting uniform handles
Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r--src/mesa/main/uniform_query.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index 14ecfdca2f3..f901fcb3e58 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -1523,10 +1523,20 @@ _mesa_uniform_handle(GLint location, GLsizei count, const GLvoid *values,
/* Store the data in the "actual type" backing storage for the uniform.
*/
- memcpy(&uni->storage[size_mul * components * offset], values,
- sizeof(uni->storage[0]) * components * count * size_mul);
+ gl_constant_value *storage;
+ if (ctx->Const.PackedDriverUniformStorage) {
+ for (unsigned s = 0; s < uni->num_driver_storage; s++) {
+ storage = (gl_constant_value *)
+ uni->driver_storage[s].data + (size_mul * offset * components);
+ memcpy(storage, values,
+ sizeof(uni->storage[0]) * components * count * size_mul);
+ }
+ } else {
+ memcpy(&uni->storage[size_mul * components * offset], values,
+ sizeof(uni->storage[0]) * components * count * size_mul);
- _mesa_propagate_uniforms_to_driver_storage(uni, offset, count);
+ _mesa_propagate_uniforms_to_driver_storage(uni, offset, count);
+ }
if (uni->type->is_sampler()) {
/* Mark this bindless sampler as not bound to a texture unit because