diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 60 |
1 files changed, 39 insertions, 21 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp index f7e96e5efc6..c68ff802f3e 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -526,29 +526,47 @@ vec4_visitor::setup_uniform_clipplane_values() { gl_clip_plane *clip_planes = brw_select_clip_planes(ctx); - /* Pre-Gen6, we compact clip planes. For example, if the user - * enables just clip planes 0, 1, and 3, we will enable clip planes - * 0, 1, and 2 in the hardware, and we'll move clip plane 3 to clip - * plane 2. This simplifies the implementation of the Gen6 clip - * thread. - * - * In Gen6 and later, we don't compact clip planes, because this - * simplifies the implementation of gl_ClipDistance. - */ - int compacted_clipplane_index = 0; - for (int i = 0; i < c->key.nr_userclip_plane_consts; ++i) { - if (intel->gen < 6 && - !(c->key.userclip_planes_enabled_gen_4_5 & (1 << i))) { - continue; + if (intel->gen < 6) { + /* Pre-Gen6, we compact clip planes. For example, if the user + * enables just clip planes 0, 1, and 3, we will enable clip planes + * 0, 1, and 2 in the hardware, and we'll move clip plane 3 to clip + * plane 2. This simplifies the implementation of the Gen6 clip + * thread. + */ + int compacted_clipplane_index = 0; + for (int i = 0; i < c->key.nr_userclip_plane_consts; ++i) { + if (intel->gen < 6 && + !(c->key.userclip_planes_enabled_gen_4_5 & (1 << i))) { + continue; + } + this->uniform_vector_size[this->uniforms] = 4; + this->userplane[compacted_clipplane_index] = dst_reg(UNIFORM, this->uniforms); + this->userplane[compacted_clipplane_index].type = BRW_REGISTER_TYPE_F; + for (int j = 0; j < 4; ++j) { + c->prog_data.param[this->uniforms * 4 + j] = &clip_planes[i][j]; + } + ++compacted_clipplane_index; + ++this->uniforms; } - this->uniform_vector_size[this->uniforms] = 4; - this->userplane[compacted_clipplane_index] = dst_reg(UNIFORM, this->uniforms); - this->userplane[compacted_clipplane_index].type = BRW_REGISTER_TYPE_F; - for (int j = 0; j < 4; ++j) { - c->prog_data.param[this->uniforms * 4 + j] = &clip_planes[i][j]; + } else { + /* In Gen6 and later, we don't compact clip planes, because this + * simplifies the implementation of gl_ClipDistance. + */ + int compacted_clipplane_index = 0; + for (int i = 0; i < c->key.nr_userclip_plane_consts; ++i) { + if (intel->gen < 6 && + !(c->key.userclip_planes_enabled_gen_4_5 & (1 << i))) { + continue; + } + this->uniform_vector_size[this->uniforms] = 4; + this->userplane[compacted_clipplane_index] = dst_reg(UNIFORM, this->uniforms); + this->userplane[compacted_clipplane_index].type = BRW_REGISTER_TYPE_F; + for (int j = 0; j < 4; ++j) { + c->prog_data.param[this->uniforms * 4 + j] = &clip_planes[i][j]; + } + ++compacted_clipplane_index; + ++this->uniforms; } - ++compacted_clipplane_index; - ++this->uniforms; } } |