ilo: add ilo_finalize_compute_states()

It updates the handles of the global bindings.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
This commit is contained in:
Chia-I Wu
2014-10-30 15:45:05 +08:00
parent 9feb637cd0
commit 207eccc5bf
2 changed files with 37 additions and 0 deletions
+34
View File
@@ -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)
+3
View File
@@ -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);