From 5c67db68897843885ac1502c85995527288613f1 Mon Sep 17 00:00:00 2001 From: Axel Davy Date: Mon, 21 Jan 2019 22:50:01 +0100 Subject: [PATCH] st/nine: Handle const_ranges in nine_state Handle slot mapping if there is one. Signed-off-by: Axel Davy --- src/gallium/state_trackers/nine/nine_state.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/nine/nine_state.c b/src/gallium/state_trackers/nine/nine_state.c index 7de5fc9..4367571 100644 --- a/src/gallium/state_trackers/nine/nine_state.c +++ b/src/gallium/state_trackers/nine/nine_state.c @@ -495,7 +495,19 @@ prepare_vs_constants_userbuf(struct NineDevice9 *device) assert(cb.buffer && upload_ptr); - memcpy(upload_ptr, cb.user_buffer, cb.buffer_size); + if (!context->cso_shader.vs_const_ranges) { + memcpy(upload_ptr, cb.user_buffer, cb.buffer_size); + } else { + unsigned i = 0; + unsigned offset = 0; + while (context->cso_shader.vs_const_ranges[i*2+1] != 0) { + memcpy(upload_ptr+offset, + &((float*)cb.user_buffer)[4*context->cso_shader.vs_const_ranges[i*2]], + context->cso_shader.vs_const_ranges[i*2+1] * sizeof(float[4])); + offset += context->cso_shader.vs_const_ranges[i*2+1] * sizeof(float[4]); + i++; + } + } u_upload_unmap(context->pipe->const_uploader); cb.user_buffer = NULL; @@ -571,7 +583,19 @@ prepare_ps_constants_userbuf(struct NineDevice9 *device) assert(cb.buffer && upload_ptr); - memcpy(upload_ptr, cb.user_buffer, cb.buffer_size); + if (!context->cso_shader.ps_const_ranges) { + memcpy(upload_ptr, cb.user_buffer, cb.buffer_size); + } else { + unsigned i = 0; + unsigned offset = 0; + while (context->cso_shader.ps_const_ranges[i*2+1] != 0) { + memcpy(upload_ptr+offset, + &((float*)cb.user_buffer)[4*context->cso_shader.ps_const_ranges[i*2]], + context->cso_shader.ps_const_ranges[i*2+1] * sizeof(float[4])); + offset += context->cso_shader.ps_const_ranges[i*2+1] * sizeof(float[4]); + i++; + } + } u_upload_unmap(context->pipe->const_uploader); cb.user_buffer = NULL; -- 2.7.4