mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 20:28:04 +02:00
i965: Make calculate_attr_overrides return the URB read offset.
Traditionally, we've hardcoded "URB Entry Read Offset" to 1 (which represents 2 vec4 varying slots) to skip over the 8 DWord VUE header. In order to support ARB_fragment_layer_viewport, we'll need to read from that header. This patch adds the basic plumbing necessary to calculate a value dynamically and hook it up in the SBE packets. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
This commit is contained in:
parent
b3d19d20f2
commit
5392328a32
4 changed files with 17 additions and 10 deletions
|
|
@ -345,7 +345,8 @@ 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_length,
|
||||
uint32_t *urb_entry_read_offset);
|
||||
|
||||
/* gen6_surface_state.c */
|
||||
void gen6_init_vtable_surface_functions(struct brw_context *brw);
|
||||
|
|
|
|||
|
|
@ -159,14 +159,16 @@ 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_length,
|
||||
uint32_t *urb_entry_read_offset)
|
||||
{
|
||||
const int urb_entry_read_offset = BRW_SF_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;
|
||||
|
||||
/* _NEW_LIGHT */
|
||||
bool shade_model_flat = brw->ctx.Light.ShadeModel == GL_FLAT;
|
||||
|
||||
|
|
@ -228,7 +230,7 @@ calculate_attr_overrides(const struct brw_context *brw,
|
|||
/* 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,
|
||||
urb_entry_read_offset, attr,
|
||||
*urb_entry_read_offset, attr,
|
||||
brw->ctx.VertexProgram._TwoSideEnabled,
|
||||
&max_source_attr);
|
||||
|
||||
|
|
@ -276,7 +278,6 @@ upload_sf_state(struct brw_context *brw)
|
|||
bool render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer);
|
||||
const bool multisampled_fbo = _mesa_geometric_samples(ctx->DrawBuffer) > 1;
|
||||
|
||||
const int urb_entry_read_offset = BRW_SF_URB_ENTRY_READ_OFFSET;
|
||||
float point_size;
|
||||
uint16_t attr_overrides[16];
|
||||
uint32_t point_sprite_origin;
|
||||
|
|
@ -411,8 +412,10 @@ upload_sf_state(struct brw_context *brw)
|
|||
* _NEW_POINT | _NEW_LIGHT | _NEW_PROGRAM | BRW_NEW_FS_PROG_DATA
|
||||
*/
|
||||
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);
|
||||
&flat_enables, &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);
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ upload_sbe_state(struct brw_context *brw)
|
|||
uint32_t point_sprite_enables;
|
||||
uint32_t flat_enables;
|
||||
int i;
|
||||
const int urb_entry_read_offset = BRW_SF_URB_ENTRY_READ_OFFSET;
|
||||
uint16_t attr_overrides[16];
|
||||
/* _NEW_BUFFERS */
|
||||
bool render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer);
|
||||
|
|
@ -65,8 +64,10 @@ upload_sbe_state(struct brw_context *brw)
|
|||
* _NEW_POINT | _NEW_LIGHT | _NEW_PROGRAM | BRW_NEW_FS_PROG_DATA
|
||||
*/
|
||||
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);
|
||||
&flat_enables, &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;
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ upload_sbe(struct brw_context *brw)
|
|||
uint32_t num_outputs = brw->wm.prog_data->num_varying_inputs;
|
||||
uint16_t attr_overrides[VARYING_SLOT_MAX];
|
||||
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;
|
||||
|
|
@ -66,7 +67,8 @@ upload_sbe(struct brw_context *brw)
|
|||
calculate_attr_overrides(brw, attr_overrides,
|
||||
&point_sprite_enables,
|
||||
&flat_enables,
|
||||
&urb_entry_read_length);
|
||||
&urb_entry_read_length,
|
||||
&urb_entry_read_offset);
|
||||
|
||||
/* Typically, the URB entry read length and offset should be programmed in
|
||||
* 3DSTATE_VS and 3DSTATE_GS; SBE inherits it from the last active stage
|
||||
|
|
@ -78,7 +80,7 @@ upload_sbe(struct brw_context *brw)
|
|||
*/
|
||||
dw1 |=
|
||||
urb_entry_read_length << GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT |
|
||||
BRW_SF_URB_ENTRY_READ_OFFSET << GEN8_SBE_URB_ENTRY_READ_OFFSET_SHIFT |
|
||||
urb_entry_read_offset << GEN8_SBE_URB_ENTRY_READ_OFFSET_SHIFT |
|
||||
GEN8_SBE_FORCE_URB_ENTRY_READ_LENGTH |
|
||||
GEN8_SBE_FORCE_URB_ENTRY_READ_OFFSET;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue