[Mesa-dev] [PATCH 1/3] isl: Add a null surface fill function.

Jason Ekstrand jason at jlekstrand.net
Fri Aug 18 05:26:44 UTC 2017


On August 17, 2017 4:36:42 PM Kenneth Graunke <kenneth at whitecape.org> wrote:

> ISL already offers functions to fill out most kinds of SURFACE_STATE,
> so why not handle null surfaces too?
>
> Null surfaces are simple, so we can just take the dimensions, rather
> than an entirte fill structure.
> ---
>  src/intel/isl/isl.c               |  7 +++++++
>  src/intel/isl/isl.h               |  4 ++++
>  src/intel/isl/isl_genX_priv.h     |  3 +++
>  src/intel/isl/isl_surface_state.c | 26 ++++++++++++++++++++++++++
>  4 files changed, 40 insertions(+)
>
>  Applies on top of Jason's patches:
>  https://lists.freedesktop.org/archives/mesa-dev/2017-August/166628.html
>
> diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c
> index 3788f9c2ead..59f512fc050 100644
> --- a/src/intel/isl/isl.c
> +++ b/src/intel/isl/isl.c
> @@ -1811,6 +1811,13 @@ isl_buffer_fill_state_s(const struct isl_device 
> *dev, void *state,
>     isl_genX_call(dev, buffer_fill_state_s, state, info);
>  }
>
> +void
> +isl_null_fill_state(const struct isl_device *dev, void *state,
> +                    struct isl_extent3d size)

I might be inclined to make this an extent4d, assert that one off depth and 
array_length is zero, and take the maximum of the two as the depth.  Thoughts?

> +{
> +   isl_genX_call(dev, null_fill_state, state, size);

This is so much nicer.  Thanks for complaining.

> +}
> +
>  void
>  isl_emit_depth_stencil_hiz_s(const struct isl_device *dev, void *batch,
>                               const struct isl_depth_stencil_hiz_emit_info *restrict info)
> diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h
> index 0e6fc774862..ca4556ffcff 100644
> --- a/src/intel/isl/isl.h
> +++ b/src/intel/isl/isl.h
> @@ -1691,6 +1691,10 @@ void
>  isl_buffer_fill_state_s(const struct isl_device *dev, void *state,
>                          const struct isl_buffer_fill_state_info *restrict info);
>
> +void
> +isl_null_fill_state(const struct isl_device *dev, void *state,
> +                    struct isl_extent3d size);
> +
>  #define isl_emit_depth_stencil_hiz(dev, batch, ...) \
>     isl_emit_depth_stencil_hiz_s((dev), (batch), \
>                                  &(struct isl_depth_stencil_hiz_emit_info) {  __VA_ARGS__ })
> diff --git a/src/intel/isl/isl_genX_priv.h b/src/intel/isl/isl_genX_priv.h
> index f6336cbcd2d..a005e1c7b32 100644
> --- a/src/intel/isl/isl_genX_priv.h
> +++ b/src/intel/isl/isl_genX_priv.h
> @@ -43,3 +43,6 @@ isl_genX(buffer_fill_state_s)(void *state,
>  void
>  isl_genX(emit_depth_stencil_hiz_s)(const struct isl_device *dev, void *batch,
>                                     const struct isl_depth_stencil_hiz_emit_info *restrict info);
> +
> +void
> +isl_genX(null_fill_state)(void *state, struct isl_extent3d size);
> diff --git a/src/intel/isl/isl_surface_state.c 
> b/src/intel/isl/isl_surface_state.c
> index cd8bef257fe..61cd4c69fc9 100644
> --- a/src/intel/isl/isl_surface_state.c
> +++ b/src/intel/isl/isl_surface_state.c
> @@ -753,3 +753,29 @@ isl_genX(buffer_fill_state_s)(void *state,
>
>     GENX(RENDER_SURFACE_STATE_pack)(NULL, state, &s);
>  }
> +
> +void
> +isl_genX(null_fill_state)(void *state, struct isl_extent3d size)
> +{
> +   struct GENX(RENDER_SURFACE_STATE) s = {
> +      .SurfaceType = SURFTYPE_NULL,
> +      .SurfaceFormat = ISL_FORMAT_B8G8R8A8_UNORM,
> +#if GEN_GEN >= 7
> +      .SurfaceArray = size.depth > 0,
> +#endif
> +#if GEN_GEN >= 8
> +      .TileMode = YMAJOR,
> +#else
> +      .TiledSurface = true,
> +      .TileWalk = TILEWALK_YMAJOR,
> +#endif
> +      .Width = size.width - 1,
> +      .Height = size.height - 1,
> +      .Depth = size.depth - 1,
> +      .RenderTargetViewExtent = size.depth - 1,
> +#if GEN_GEN <= 5
> +      .ColorBufferComponentWriteDisables = 0xf,
> +#endif
> +   };
> +   GENX(RENDER_SURFACE_STATE_pack)(NULL, state, &s);
> +}
> --
> 2.14.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev




More information about the mesa-dev mailing list