Mesa (main): crocus: copy views before adjusting
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Aug 24 06:35:03 UTC 2021
Module: Mesa
Branch: main
Commit: 63138c42c5631ecf5d3c8eb3e39e33cac91df4f1
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=63138c42c5631ecf5d3c8eb3e39e33cac91df4f1
Author: Dave Airlie <airlied at gmail.com>
Date: Tue Aug 24 02:16:59 2021 -0400
crocus: copy views before adjusting
The current code overwrote the original view which meant if we
had to reemit a surface the second emit would be wrong.
This fixes cubemaps on gm45 and maybe some issues with 3D textures
elsewhere.
Fixes: f3630548f1da ("crocus: initial gallium driver for Intel gfx 4-7")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12514>
---
src/gallium/drivers/crocus/crocus_state.c | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/src/gallium/drivers/crocus/crocus_state.c b/src/gallium/drivers/crocus/crocus_state.c
index b2327f1979c..914e5a1e203 100644
--- a/src/gallium/drivers/crocus/crocus_state.c
+++ b/src/gallium/drivers/crocus/crocus_state.c
@@ -4958,7 +4958,7 @@ emit_surface_state(struct crocus_batch *batch,
struct crocus_resource *res,
const struct isl_surf *in_surf,
bool adjust_surf,
- struct isl_view *view,
+ struct isl_view *in_view,
bool writeable,
enum isl_aux_usage aux_usage,
bool blend_enable,
@@ -4976,23 +4976,24 @@ emit_surface_state(struct crocus_batch *batch,
reloc |= RELOC_WRITE;
struct isl_surf surf = *in_surf;
+ struct isl_view view = *in_view;
if (adjust_surf) {
- if (res->base.b.target == PIPE_TEXTURE_3D && view->array_len == 1) {
+ if (res->base.b.target == PIPE_TEXTURE_3D && view.array_len == 1) {
isl_surf_get_image_surf(isl_dev, in_surf,
- view->base_level, 0,
- view->base_array_layer,
+ view.base_level, 0,
+ view.base_array_layer,
&surf, &offset_B,
&tile_x_sa, &tile_y_sa);
- view->base_array_layer = 0;
- view->base_level = 0;
+ view.base_array_layer = 0;
+ view.base_level = 0;
} else if (res->base.b.target == PIPE_TEXTURE_CUBE && devinfo->ver == 4) {
isl_surf_get_image_surf(isl_dev, in_surf,
- view->base_level, view->base_array_layer,
+ view.base_level, view.base_array_layer,
0,
&surf, &offset_B,
&tile_x_sa, &tile_y_sa);
- view->base_array_layer = 0;
- view->base_level = 0;
+ view.base_array_layer = 0;
+ view.base_level = 0;
} else if (res->base.b.target == PIPE_TEXTURE_1D_ARRAY)
surf.dim = ISL_SURF_DIM_2D;
}
@@ -5011,7 +5012,7 @@ emit_surface_state(struct crocus_batch *batch,
isl_surf_fill_state(isl_dev, surf_state,
.surf = &surf,
- .view = view,
+ .view = &view,
.address = crocus_state_reloc(batch,
addr_offset + isl_dev->ss.addr_offset,
res->bo, offset_B, reloc),
More information about the mesa-commit
mailing list