[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