From 207eccc5bf43a8b63b68e29c9d5e02744d115f56 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 30 Oct 2014 15:45:05 +0800 Subject: [PATCH] ilo: add ilo_finalize_compute_states() It updates the handles of the global bindings. Signed-off-by: Chia-I Wu --- src/gallium/drivers/ilo/ilo_state.c | 34 +++++++++++++++++++++++++++++ src/gallium/drivers/ilo/ilo_state.h | 3 +++ 2 files changed, 37 insertions(+) diff --git a/src/gallium/drivers/ilo/ilo_state.c b/src/gallium/drivers/ilo/ilo_state.c index 217d22c614b..c68062adb03 100644 --- a/src/gallium/drivers/ilo/ilo_state.c +++ b/src/gallium/drivers/ilo/ilo_state.c @@ -262,6 +262,40 @@ ilo_finalize_3d_states(struct ilo_context *ilo, u_upload_unmap(ilo->uploader); } +static void +finalize_global_binding(struct ilo_state_vector *vec) +{ + struct ilo_shader_state *cs = vec->cs; + int base, count, shift; + int i; + + count = ilo_shader_get_kernel_param(cs, + ILO_KERNEL_CS_SURFACE_GLOBAL_COUNT); + if (!count) + return; + + base = ilo_shader_get_kernel_param(cs, ILO_KERNEL_CS_SURFACE_GLOBAL_BASE); + shift = 32 - util_last_bit(base + count - 1); + + if (count > vec->global_binding.count) + count = vec->global_binding.count; + + for (i = 0; i < count; i++) { + struct ilo_global_binding_cso *cso = + util_dynarray_element(&vec->global_binding.bindings, + struct ilo_global_binding_cso, i); + const uint32_t offset = *cso->handle & ((1 << shift) - 1); + + *cso->handle = ((base + i) << shift) | offset; + } +} + +void +ilo_finalize_compute_states(struct ilo_context *ilo) +{ + finalize_global_binding(&ilo->state_vector); +} + static void * ilo_create_blend_state(struct pipe_context *pipe, const struct pipe_blend_state *state) diff --git a/src/gallium/drivers/ilo/ilo_state.h b/src/gallium/drivers/ilo/ilo_state.h index 7343b20e357..6f544e1f788 100644 --- a/src/gallium/drivers/ilo/ilo_state.h +++ b/src/gallium/drivers/ilo/ilo_state.h @@ -427,6 +427,9 @@ void ilo_finalize_3d_states(struct ilo_context *ilo, const struct pipe_draw_info *draw); +void +ilo_finalize_compute_states(struct ilo_context *ilo); + void ilo_state_vector_init(const struct ilo_dev_info *dev, struct ilo_state_vector *vec); -- 2.30.2