From 23777543290b9dfa17bfecb5b389ad3fc8e75820 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Tue, 13 Mar 2018 16:44:06 +1100 Subject: [PATCH] mesa: add support propagate uniform support for packed uniforms MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák --- src/mesa/program/ir_to_mesa.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 0dad6f9c712..b0b322865b7 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -2639,8 +2639,24 @@ _mesa_associate_uniform_storage(struct gl_context *ctx, */ if (propagate_to_storage) { unsigned array_elements = MAX2(1, storage->array_elements); - _mesa_propagate_uniforms_to_driver_storage(storage, 0, - array_elements); + if (ctx->Const.PackedDriverUniformStorage && !prog->is_arb_asm && + (storage->is_bindless || !storage->type->contains_opaque())) { + const int dmul = storage->type->is_64bit() ? 2 : 1; + const unsigned components = + storage->type->vector_elements * + storage->type->matrix_columns; + + for (unsigned s = 0; s < storage->num_driver_storage; s++) { + gl_constant_value *uni_storage = (gl_constant_value *) + storage->driver_storage[s].data; + memcpy(uni_storage, storage->storage, + sizeof(storage->storage[0]) * components * + array_elements * dmul); + } + } else { + _mesa_propagate_uniforms_to_driver_storage(storage, 0, + array_elements); + } } last_location = location; -- 2.30.2