i965/fs: Change brw_wm_prog_data::urb_read_length to num_varying_inputs.
On gen4-5, the FS stage reads varying inputs from URB entries that were output by the SF thread, where each register stores the interpolation setup for two components of a vec4, therefore the FS urb_read_length is twice the number of FS input varyings. On gen6+, varying inputs are directly deposited in the FS payload by the SF/SBE fixed function logic, so urb_read_length is irrelevant. However, in future patches, it will be nice to be able to consult brw_wm_prog_data to determine how many varying inputs the FS expects (rather than inferring it from gl_program::InputsRead). So instead of storing urb_read_length, we simply store num_varying_inputs in brw_wm_prog_data. On gen4-5, we multiply this by 2 to recover the URB read length. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -314,7 +314,7 @@ struct brw_shader {
|
||||
*/
|
||||
struct brw_wm_prog_data {
|
||||
GLuint curb_read_length;
|
||||
GLuint urb_read_length;
|
||||
GLuint num_varying_inputs;
|
||||
|
||||
GLuint first_curbe_grf;
|
||||
GLuint first_curbe_grf_16;
|
||||
|
||||
@@ -1272,8 +1272,7 @@ fs_visitor::calculate_urb_setup()
|
||||
c->prog_data.urb_setup[VARYING_SLOT_PNTC] = urb_next++;
|
||||
}
|
||||
|
||||
/* Each attribute is 4 setup channels, each of which is half a reg. */
|
||||
c->prog_data.urb_read_length = urb_next * 2;
|
||||
c->prog_data.num_varying_inputs = urb_next;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1298,7 +1297,9 @@ fs_visitor::assign_urb_setup()
|
||||
}
|
||||
}
|
||||
|
||||
this->first_non_payload_grf = urb_start + c->prog_data.urb_read_length;
|
||||
/* Each attribute is 4 setup channels, each of which is half a reg. */
|
||||
this->first_non_payload_grf =
|
||||
urb_start + c->prog_data.num_varying_inputs * 2;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -133,7 +133,8 @@ brw_upload_wm_unit(struct brw_context *brw)
|
||||
}
|
||||
|
||||
wm->thread3.dispatch_grf_start_reg = brw->wm.prog_data->first_curbe_grf;
|
||||
wm->thread3.urb_entry_read_length = brw->wm.prog_data->urb_read_length;
|
||||
wm->thread3.urb_entry_read_length =
|
||||
brw->wm.prog_data->num_varying_inputs * 2;
|
||||
wm->thread3.urb_entry_read_offset = 0;
|
||||
wm->thread3.const_urb_entry_read_length =
|
||||
brw->wm.prog_data->curb_read_length;
|
||||
|
||||
Reference in New Issue
Block a user