[Mesa-dev] [PATCH] r600g: fix crash in set_framebuffer_state
Marek Olšák
maraeo at gmail.com
Fri Oct 11 17:37:04 CEST 2013
Pushed, thanks.
Marek
On Fri, Oct 11, 2013 at 1:23 AM, Grigori Goronzy <greg at chown.ath.cx> 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
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list