Mesa (main): iris: Add and use fill_surface_states
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Feb 10 05:10:55 UTC 2022
Module: Mesa
Branch: main
Commit: d705faad6cb3d02feeb51faf28983eaf1c17cf1f
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d705faad6cb3d02feeb51faf28983eaf1c17cf1f
Author: Nanley Chery <nanley.g.chery at intel.com>
Date: Fri Sep 17 12:06:27 2021 -0700
iris: Add and use fill_surface_states
This helper simplifies some repeated logic.
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14806>
---
src/gallium/drivers/iris/iris_state.c | 76 +++++++++++++++--------------------
1 file changed, 33 insertions(+), 43 deletions(-)
diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c
index 49acc3252df..a57c049d6c4 100644
--- a/src/gallium/drivers/iris/iris_state.c
+++ b/src/gallium/drivers/iris/iris_state.c
@@ -2443,6 +2443,29 @@ fill_surface_state(struct isl_device *isl_dev,
isl_surf_fill_state_s(isl_dev, map, &f);
}
+static void
+fill_surface_states(struct isl_device *isl_dev,
+ struct iris_surface_state *surf_state,
+ struct iris_resource *res,
+ struct isl_surf *surf,
+ struct isl_view *view,
+ uint64_t extra_main_offset,
+ uint32_t tile_x_sa,
+ uint32_t tile_y_sa)
+{
+ void *map = surf_state->cpu;
+ unsigned aux_modes = surf_state->aux_usages;
+
+ while (aux_modes) {
+ enum isl_aux_usage aux_usage = u_bit_scan(&aux_modes);
+
+ fill_surface_state(isl_dev, map, res, surf, view, aux_usage,
+ extra_main_offset, tile_x_sa, tile_y_sa);
+
+ map += SURFACE_STATE_ALIGNMENT;
+ }
+}
+
/**
* The pipe->create_sampler_view() driver hook.
*/
@@ -2519,15 +2542,8 @@ iris_create_sampler_view(struct pipe_context *ctx,
tmpl->u.tex.last_layer - tmpl->u.tex.first_layer + 1;
}
- unsigned aux_modes = isv->res->aux.sampler_usages;
- while (aux_modes) {
- enum isl_aux_usage aux_usage = u_bit_scan(&aux_modes);
-
- fill_surface_state(&screen->isl_dev, map, isv->res, &isv->res->surf,
- &isv->view, aux_usage, 0, 0, 0);
-
- map += SURFACE_STATE_ALIGNMENT;
- }
+ fill_surface_states(&screen->isl_dev, &isv->surface_state, isv->res,
+ &isv->res->surf, &isv->view, 0, 0, 0);
} else {
fill_buffer_surface_state(&screen->isl_dev, isv->res, map,
isv->view.format, isv->view.swizzle,
@@ -2677,28 +2693,16 @@ iris_create_surface(struct pipe_context *ctx,
#endif
if (!isl_format_is_compressed(res->surf.format)) {
- void *map = surf->surface_state.cpu;
- UNUSED void *map_read = surf->surface_state_read.cpu;
-
/* This is a normal surface. Fill out a SURFACE_STATE for each possible
* auxiliary surface mode and return the pipe_surface.
*/
- unsigned aux_modes = res->aux.possible_usages;
- while (aux_modes) {
- enum isl_aux_usage aux_usage = u_bit_scan(&aux_modes);
- fill_surface_state(&screen->isl_dev, map, res, &res->surf,
- view, aux_usage, 0, 0, 0);
- map += SURFACE_STATE_ALIGNMENT;
-
+ fill_surface_states(&screen->isl_dev, &surf->surface_state, res,
+ &res->surf, view, 0, 0, 0);
#if GFX_VER == 8
- fill_surface_state(&screen->isl_dev, map_read, res,
- &read_surf, read_view, aux_usage,
- read_surf_offset_B,
- read_surf_tile_x_sa, read_surf_tile_y_sa);
- map_read += SURFACE_STATE_ALIGNMENT;
+ fill_surface_states(&screen->isl_dev, &surf->surface_state_read, res,
+ &read_surf, read_view, read_surf_offset_B,
+ read_surf_tile_x_sa, read_surf_tile_y_sa);
#endif
- }
-
return psurf;
}
@@ -2839,15 +2843,8 @@ iris_set_shader_images(struct pipe_context *ctx,
0, res->bo->size,
ISL_SURF_USAGE_STORAGE_BIT);
} else {
- unsigned aux_modes = aux_usages;
- while (aux_modes) {
- enum isl_aux_usage usage = u_bit_scan(&aux_modes);
-
- fill_surface_state(&screen->isl_dev, map, res, &res->surf,
- &view, usage, 0, 0, 0);
-
- map += SURFACE_STATE_ALIGNMENT;
- }
+ fill_surface_states(&screen->isl_dev, &iv->surface_state, res,
+ &res->surf, &view, 0, 0, 0);
}
isl_surf_fill_image_param(&screen->isl_dev,
@@ -4865,14 +4862,7 @@ update_clear_value(struct iris_context *ice,
/* TODO: Could update rather than re-filling */
alloc_surface_states(surf_state, surf_state->aux_usages);
- void *map = surf_state->cpu;
-
- while (aux_modes) {
- enum isl_aux_usage aux_usage = u_bit_scan(&aux_modes);
- fill_surface_state(isl_dev, map, res, &res->surf, view, aux_usage,
- 0, 0, 0);
- map += SURFACE_STATE_ALIGNMENT;
- }
+ fill_surface_states(isl_dev, surf_state, res, &res->surf, view, 0, 0, 0);
upload_surface_states(ice->state.surface_uploader, surf_state);
#endif
More information about the mesa-commit
mailing list