[Mesa-dev] [PATCH 1/3] r300g: implement pipe_rasterizer_state::clip_halfz

Alex Deucher alexdeucher at gmail.com
Wed Oct 22 08:52:03 PDT 2014


On Wed, Oct 22, 2014 at 5:02 AM, Marek Olšák <maraeo at gmail.com> wrote:
> From: Marek Olšák <marek.olsak at amd.com>

For the series:

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

>
> ---
>  src/gallium/drivers/r300/r300_context.h | 1 +
>  src/gallium/drivers/r300/r300_emit.c    | 1 +
>  src/gallium/drivers/r300/r300_state.c   | 7 +++++++
>  3 files changed, 9 insertions(+)
>
> diff --git a/src/gallium/drivers/r300/r300_context.h b/src/gallium/drivers/r300/r300_context.h
> index 92a35d5..4d2b153 100644
> --- a/src/gallium/drivers/r300/r300_context.h
> +++ b/src/gallium/drivers/r300/r300_context.h
> @@ -580,6 +580,7 @@ struct r300_context {
>      /* Whether two-sided color selection is enabled (AKA light_twoside). */
>      boolean two_sided_color;
>      boolean flatshade;
> +    boolean clip_halfz;
>      /* Whether fast color clear is enabled. */
>      boolean cbzb_clear;
>      /* Whether fragment shader needs to be validated. */
> diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c
> index b201334..b632963 100644
> --- a/src/gallium/drivers/r300/r300_emit.c
> +++ b/src/gallium/drivers/r300/r300_emit.c
> @@ -1136,6 +1136,7 @@ void r300_emit_vs_state(struct r300_context* r300, unsigned size, void* state)
>              R300_PVS_NUM_CNTLRS(pvs_num_controllers) |
>              R300_PVS_NUM_FPUS(r300screen->caps.num_vert_fpus) |
>              R300_PVS_VF_MAX_VTX_NUM(12) |
> +            (r300->clip_halfz ? R300_DX_CLIP_SPACE_DEF : 0) |
>              (r300screen->caps.is_r500 ? R500_TCL_STATE_OPTIMIZATION : 0));
>
>      /* Emit flow control instructions.  Even if there are no fc instructions,
> diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c
> index fd67e35..cfcc19d 100644
> --- a/src/gallium/drivers/r300/r300_state.c
> +++ b/src/gallium/drivers/r300/r300_state.c
> @@ -1390,6 +1390,7 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state)
>      boolean last_two_sided_color = r300->two_sided_color;
>      boolean last_msaa_enable = r300->msaa_enable;
>      boolean last_flatshade = r300->flatshade;
> +    boolean last_clip_halfz = r300->clip_halfz;
>
>      if (r300->draw && rs) {
>          draw_set_rasterizer_state(r300->draw, &rs->rs_draw, state);
> @@ -1401,12 +1402,14 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state)
>          r300->two_sided_color = rs->rs.light_twoside;
>          r300->msaa_enable = rs->rs.multisample;
>          r300->flatshade = rs->rs.flatshade;
> +        r300->clip_halfz = rs->rs.clip_halfz;
>      } else {
>          r300->polygon_offset_enabled = FALSE;
>          r300->sprite_coord_enable = 0;
>          r300->two_sided_color = FALSE;
>          r300->msaa_enable = FALSE;
>          r300->flatshade = FALSE;
> +        r300->clip_halfz = FALSE;
>      }
>
>      UPDATE_STATE(state, r300->rs_state);
> @@ -1428,6 +1431,10 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state)
>              r300->fs_status = FRAGMENT_SHADER_MAYBE_DIRTY;
>          }
>      }
> +
> +    if (last_clip_halfz != r300->clip_halfz) {
> +        r300_mark_atom_dirty(r300, &r300->vs_state);
> +    }
>  }
>
>  /* Free rasterizer state. */
> --
> 1.9.1
>
> _______________________________________________
> 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