diff options
author | Paul Berry <[email protected]> | 2013-09-02 17:35:32 -0700 |
---|---|---|
committer | Paul Berry <[email protected]> | 2013-09-16 12:53:14 -0700 |
commit | 8c69eaba1a8a5e8a82112eb5c51b2f8978dd2c23 (patch) | |
tree | 784a9009c7933e9b64d777b4b872a559e0d01fbe /src/mesa | |
parent | 58f01bd17d5587c21d7f543b8f3769f3405dc420 (diff) |
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 <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.h | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.cpp | 7 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_wm_state.c | 3 |
3 files changed, 7 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 988e9fbf656..b9c9f505fe0 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -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; diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index e788196aeb9..29676658e64 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -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; } /** diff --git a/src/mesa/drivers/dri/i965/brw_wm_state.c b/src/mesa/drivers/dri/i965/brw_wm_state.c index c98ebe75573..9aa32c08ec9 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_state.c @@ -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; |