From: Jason Ekstrand Date: Wed, 6 Apr 2016 01:23:36 +0000 (-0700) Subject: i965/sf_state: Pull flat_enables out of prog_data X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c62db279b6bc4e820345f468c00d4fd65be8556b;p=mesa.git i965/sf_state: Pull flat_enables out of prog_data Previously, we were walking over the shader source to figure out which inputs should be marked flat. Now, we can just pull it out of prog_data. This is needed for properly setting up 3DSTATE_SF/SBE for Vulkan and it also means that it will get properly cached. Reviewed-by: Samuel Iglesias Gonsálvez Reviewed-by: Kenneth Graunke --- diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index 783af78479e..2dc0a0da45b 100644 --- a/src/mesa/drivers/dri/i965/brw_state.h +++ b/src/mesa/drivers/dri/i965/brw_state.h @@ -368,7 +368,6 @@ void calculate_attr_overrides(const struct brw_context *brw, uint16_t *attr_overrides, uint32_t *point_sprite_enables, - uint32_t *flat_enables, uint32_t *urb_entry_read_length, uint32_t *urb_entry_read_offset); diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c index 42f9a5ca8b6..4fdcb8d80e5 100644 --- a/src/mesa/drivers/dri/i965/gen6_sf_state.c +++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c @@ -155,14 +155,12 @@ void calculate_attr_overrides(const struct brw_context *brw, uint16_t *attr_overrides, uint32_t *point_sprite_enables, - uint32_t *flat_enables, uint32_t *urb_entry_read_length, uint32_t *urb_entry_read_offset) { uint32_t max_source_attr = 0; *point_sprite_enables = 0; - *flat_enables = 0; *urb_entry_read_offset = BRW_SF_URB_ENTRY_READ_OFFSET; @@ -180,9 +178,6 @@ calculate_attr_overrides(const struct brw_context *brw, *urb_entry_read_offset = fs_needs_vue_header ? 0 : 1; - /* _NEW_LIGHT */ - bool shade_model_flat = brw->ctx.Light.ShadeModel == GL_FLAT; - /* From the Ivybridge PRM, Vol 2 Part 1, 3DSTATE_SBE, * description of dw10 Point Sprite Texture Coordinate Enable: * @@ -208,10 +203,6 @@ calculate_attr_overrides(const struct brw_context *brw, memset(attr_overrides, 0, 16*sizeof(*attr_overrides)); for (int attr = 0; attr < VARYING_SLOT_MAX; attr++) { - /* BRW_NEW_FRAGMENT_PROGRAM */ - enum glsl_interp_qualifier interp_qualifier = - brw->fragment_program->InterpQualifier[attr]; - bool is_gl_Color = attr == VARYING_SLOT_COL0 || attr == VARYING_SLOT_COL1; /* BRW_NEW_FS_PROG_DATA */ int input_index = brw->wm.prog_data->urb_setup[attr]; @@ -234,12 +225,6 @@ calculate_attr_overrides(const struct brw_context *brw, *point_sprite_enables |= (1 << input_index); } - /* flat shading */ - if (interp_qualifier == INTERP_QUALIFIER_FLAT || - (shade_model_flat && is_gl_Color && - interp_qualifier == INTERP_QUALIFIER_NONE)) - *flat_enables |= (1 << input_index); - /* BRW_NEW_VUE_MAP_GEOM_OUT | _NEW_LIGHT | _NEW_PROGRAM */ uint16_t attr_override = point_sprite ? 0 : get_attr_override(&brw->vue_map_geom_out, @@ -285,7 +270,6 @@ upload_sf_state(struct brw_context *brw) uint32_t num_outputs = brw->wm.prog_data->num_varying_inputs; uint32_t dw1, dw2, dw3, dw4; uint32_t point_sprite_enables; - uint32_t flat_enables; int i; /* _NEW_BUFFER */ bool render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer); @@ -428,8 +412,7 @@ upload_sf_state(struct brw_context *brw) uint32_t urb_entry_read_length; uint32_t urb_entry_read_offset; calculate_attr_overrides(brw, attr_overrides, &point_sprite_enables, - &flat_enables, &urb_entry_read_length, - &urb_entry_read_offset); + &urb_entry_read_length, &urb_entry_read_offset); dw1 |= (urb_entry_read_length << GEN6_SF_URB_ENTRY_READ_LENGTH_SHIFT | urb_entry_read_offset << GEN6_SF_URB_ENTRY_READ_OFFSET_SHIFT); @@ -446,7 +429,7 @@ upload_sf_state(struct brw_context *brw) OUT_BATCH(attr_overrides[i * 2] | attr_overrides[i * 2 + 1] << 16); } OUT_BATCH(point_sprite_enables); /* dw16 */ - OUT_BATCH(flat_enables); + OUT_BATCH(brw->wm.prog_data->flat_inputs); OUT_BATCH(0); /* wrapshortest enables 0-7 */ OUT_BATCH(0); /* wrapshortest enables 8-15 */ ADVANCE_BATCH(); diff --git a/src/mesa/drivers/dri/i965/gen7_sf_state.c b/src/mesa/drivers/dri/i965/gen7_sf_state.c index 7c98c73edf8..c76789fa252 100644 --- a/src/mesa/drivers/dri/i965/gen7_sf_state.c +++ b/src/mesa/drivers/dri/i965/gen7_sf_state.c @@ -38,7 +38,6 @@ upload_sbe_state(struct brw_context *brw) uint32_t num_outputs = brw->wm.prog_data->num_varying_inputs; uint32_t dw1; uint32_t point_sprite_enables; - uint32_t flat_enables; int i; uint16_t attr_overrides[16]; /* _NEW_BUFFERS */ @@ -66,8 +65,7 @@ upload_sbe_state(struct brw_context *brw) uint32_t urb_entry_read_length; uint32_t urb_entry_read_offset; calculate_attr_overrides(brw, attr_overrides, &point_sprite_enables, - &flat_enables, &urb_entry_read_length, - &urb_entry_read_offset); + &urb_entry_read_length, &urb_entry_read_offset); dw1 |= urb_entry_read_length << GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT | urb_entry_read_offset << GEN7_SBE_URB_ENTRY_READ_OFFSET_SHIFT; @@ -81,7 +79,7 @@ upload_sbe_state(struct brw_context *brw) } OUT_BATCH(point_sprite_enables); /* dw10 */ - OUT_BATCH(flat_enables); + OUT_BATCH(brw->wm.prog_data->flat_inputs); OUT_BATCH(0); /* wrapshortest enables 0-7 */ OUT_BATCH(0); /* wrapshortest enables 8-15 */ ADVANCE_BATCH(); diff --git a/src/mesa/drivers/dri/i965/gen8_sf_state.c b/src/mesa/drivers/dri/i965/gen8_sf_state.c index 2ac21f7c873..5a97c1d0e90 100644 --- a/src/mesa/drivers/dri/i965/gen8_sf_state.c +++ b/src/mesa/drivers/dri/i965/gen8_sf_state.c @@ -39,7 +39,6 @@ upload_sbe(struct brw_context *brw) uint32_t urb_entry_read_length; uint32_t urb_entry_read_offset; uint32_t point_sprite_enables; - uint32_t flat_enables; int sbe_cmd_length; uint32_t dw1 = @@ -66,7 +65,6 @@ upload_sbe(struct brw_context *brw) */ calculate_attr_overrides(brw, attr_overrides, &point_sprite_enables, - &flat_enables, &urb_entry_read_length, &urb_entry_read_offset); @@ -109,7 +107,7 @@ upload_sbe(struct brw_context *brw) OUT_BATCH(_3DSTATE_SBE << 16 | (sbe_cmd_length - 2)); OUT_BATCH(dw1); OUT_BATCH(point_sprite_enables); - OUT_BATCH(flat_enables); + OUT_BATCH(brw->wm.prog_data->flat_inputs); if (sbe_cmd_length >= 6) { OUT_BATCH(dw4); OUT_BATCH(dw5);