vk: Unionize anv_desciptor

For a given struct anv_descriptor, all members are NULL (in which case
the descriptor is empty) or exactly one member is non-NULL.
To make struct anv_descriptor better reflect its set of valid states,
convert the struct into a tagged union.
This commit is contained in:
Chad Versace
2015-10-05 14:43:23 -07:00
parent 63439953d7
commit ffd051830d
3 changed files with 39 additions and 12 deletions
+10 -6
View File
@@ -456,12 +456,14 @@ anv_cmd_buffer_emit_binding_table(struct anv_cmd_buffer *cmd_buffer,
uint32_t start = bias + layout->set[set].stage[stage].surface_start;
for (uint32_t b = 0; b < set_layout->stage[stage].surface_count; b++) {
struct anv_surface_view *view =
d->set->descriptors[surface_slots[b].index].view;
struct anv_descriptor *desc =
&d->set->descriptors[surface_slots[b].index];
if (!view)
if (desc->type != ANV_DESCRIPTOR_TYPE_SURFACE_VIEW)
continue;
struct anv_surface_view *view = desc->surface_view;
bt_map[start + b] = view->surface_state.offset + state_offset;
add_surface_state_reloc(cmd_buffer, view->surface_state,
view->bo, view->offset);
@@ -502,12 +504,14 @@ anv_cmd_buffer_emit_samplers(struct anv_cmd_buffer *cmd_buffer,
uint32_t start = layout->set[set].stage[stage].sampler_start;
for (uint32_t b = 0; b < set_layout->stage[stage].sampler_count; b++) {
struct anv_sampler *sampler =
d->set->descriptors[sampler_slots[b].index].sampler;
struct anv_descriptor *desc =
&d->set->descriptors[sampler_slots[b].index];
if (!sampler)
if (desc->type != ANV_DESCRIPTOR_TYPE_SAMPLER)
continue;
struct anv_sampler *sampler = desc->sampler;
memcpy(state->map + (start + b) * 16,
sampler->state, sizeof(sampler->state));
}