iris: fix num viewports to be based on programs

This commit is contained in:
Kenneth Graunke 2018-06-20 15:57:46 -07:00
parent b17215800c
commit 4a94628513
2 changed files with 13 additions and 7 deletions

View file

@ -443,6 +443,19 @@ update_last_vue_map(struct iris_context *ice)
prog_data = ice->shaders.prog[MESA_SHADER_VERTEX]->prog_data;
struct brw_vue_prog_data *vue_prog_data = (void *) prog_data;
struct brw_vue_map *vue_map = &vue_prog_data->vue_map;
struct brw_vue_map *old_map = ice->shaders.last_vue_map;
const uint64_t changed_slots =
(old_map ? old_map->slots_valid : 0ull) ^ vue_map->slots_valid;
if (changed_slots & VARYING_BIT_VIEWPORT) {
// XXX: could use ctx->Const.MaxViewports for old API efficiency
ice->state.num_viewports =
(vue_map->slots_valid & VARYING_BIT_VIEWPORT) ? IRIS_MAX_VIEWPORTS : 1;
ice->state.dirty |= IRIS_DIRTY_CLIP | IRIS_DIRTY_SF_CL_VIEWPORT;
// XXX: CC_VIEWPORT?
}
ice->shaders.last_vue_map = &vue_prog_data->vue_map;
}

View file

@ -1259,13 +1259,6 @@ iris_set_viewport_states(struct pipe_context *ctx,
vp_map += GENX(SF_CLIP_VIEWPORT_length);
}
unsigned num_viewports = start_slot + count;
if (num_viewports != ice->state.num_viewports) {
ice->state.num_viewports = num_viewports;
ice->state.dirty |= IRIS_DIRTY_CLIP;
}
ice->state.dirty |= IRIS_DIRTY_SF_CL_VIEWPORT;
}