Pushed, thanks. Marek
On Fri, Oct 11, 2013 at 1:23 AM, Grigori Goronzy <[email protected]> wrote: > We should be able to safely set the framebuffer state without a > fragment shader bound. bind_ps_state will take care of updating the > necessary state bits later. > > v2: check in update_db_shader_control > --- > src/gallium/drivers/r600/evergreen_state.c | 23 +++++++++++++++-------- > src/gallium/drivers/r600/r600_state.c | 15 +++++++++++---- > 2 files changed, 26 insertions(+), 12 deletions(-) > > diff --git a/src/gallium/drivers/r600/evergreen_state.c > b/src/gallium/drivers/r600/evergreen_state.c > index 83cb024..4535d21 100644 > --- a/src/gallium/drivers/r600/evergreen_state.c > +++ b/src/gallium/drivers/r600/evergreen_state.c > @@ -3581,14 +3581,21 @@ void *evergreen_create_db_flush_dsa(struct > r600_context *rctx) > > void evergreen_update_db_shader_control(struct r600_context * rctx) > { > - bool dual_export = rctx->framebuffer.export_16bpc && > - !rctx->ps_shader->current->ps_depth_export; > - > - unsigned db_shader_control = > rctx->ps_shader->current->db_shader_control | > - S_02880C_DUAL_EXPORT_ENABLE(dual_export) | > - S_02880C_DB_SOURCE_FORMAT(dual_export ? > V_02880C_EXPORT_DB_TWO : > - > V_02880C_EXPORT_DB_FULL) | > - > S_02880C_ALPHA_TO_MASK_DISABLE(rctx->framebuffer.cb0_is_integer); > + bool dual_export; > + unsigned db_shader_control; > + > + if (!rctx->ps_shader) { > + return; > + } > + > + dual_export = rctx->framebuffer.export_16bpc && > + !rctx->ps_shader->current->ps_depth_export; > + > + db_shader_control = rctx->ps_shader->current->db_shader_control | > + S_02880C_DUAL_EXPORT_ENABLE(dual_export) | > + S_02880C_DB_SOURCE_FORMAT(dual_export ? > V_02880C_EXPORT_DB_TWO : > + > V_02880C_EXPORT_DB_FULL) | > + > S_02880C_ALPHA_TO_MASK_DISABLE(rctx->framebuffer.cb0_is_integer); > > /* When alpha test is enabled we can't trust the hw to make the proper > * decision on the order in which ztest should be run related to > fragment > diff --git a/src/gallium/drivers/r600/r600_state.c > b/src/gallium/drivers/r600/r600_state.c > index b01ab9c..f148052 100644 > --- a/src/gallium/drivers/r600/r600_state.c > +++ b/src/gallium/drivers/r600/r600_state.c > @@ -2972,11 +2972,18 @@ void *r600_create_db_flush_dsa(struct r600_context > *rctx) > > void r600_update_db_shader_control(struct r600_context * rctx) > { > - bool dual_export = rctx->framebuffer.export_16bpc && > - !rctx->ps_shader->current->ps_depth_export; > + bool dual_export; > + unsigned db_shader_control; > > - unsigned db_shader_control = > rctx->ps_shader->current->db_shader_control | > - S_02880C_DUAL_EXPORT_ENABLE(dual_export); > + if (!rctx->ps_shader) { > + return; > + } > + > + dual_export = rctx->framebuffer.export_16bpc && > + !rctx->ps_shader->current->ps_depth_export; > + > + db_shader_control = rctx->ps_shader->current->db_shader_control | > + S_02880C_DUAL_EXPORT_ENABLE(dual_export); > > /* When alpha test is enabled we can't trust the hw to make the proper > * decision on the order in which ztest should be run related to > fragment > -- > 1.8.1.2 > > _______________________________________________ > mesa-dev mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
