From 18995f13cb42ca971d3ed689101f6c2cc1565ba8 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 5 Jul 2021 13:01:33 -0400 Subject: [PATCH] asahi: Handle nonzero first_level Signed-off-by: Alyssa Rosenzweig Part-of: --- src/gallium/drivers/asahi/agx_state.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/asahi/agx_state.c b/src/gallium/drivers/asahi/agx_state.c index d3bd2dbd..4111eb2 100644 --- a/src/gallium/drivers/asahi/agx_state.c +++ b/src/gallium/drivers/asahi/agx_state.c @@ -395,8 +395,7 @@ agx_create_sampler_view(struct pipe_context *pctx, util_format_compose_swizzles(desc->swizzle, view_swizzle, out_swizzle); - if (state->u.tex.first_level != 0) - unreachable("todo: nonzero first level"); + unsigned level = state->u.tex.first_level; /* Pack the descriptor into GPU memory */ agx_pack(so->desc->ptr.cpu, TEXTURE, cfg) { @@ -406,15 +405,15 @@ agx_create_sampler_view(struct pipe_context *pctx, cfg.swizzle_g = agx_channel_from_pipe(out_swizzle[1]); cfg.swizzle_b = agx_channel_from_pipe(out_swizzle[2]); cfg.swizzle_a = agx_channel_from_pipe(out_swizzle[3]); - cfg.width = texture->width0; - cfg.height = texture->height0; - cfg.levels = state->u.tex.last_level + 1; + cfg.width = u_minify(texture->width0, level); + cfg.height = u_minify(texture->height0, level); + cfg.levels = state->u.tex.last_level - level + 1; cfg.srgb = (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB); - cfg.unk_1 = rsrc->bo->ptr.gpu; + cfg.unk_1 = rsrc->bo->ptr.gpu + rsrc->slices[level].offset; cfg.unk_2 = false; cfg.stride = (rsrc->modifier == DRM_FORMAT_MOD_LINEAR) ? - (rsrc->slices[0].line_stride - 16) : + (rsrc->slices[level].line_stride - 16) : AGX_RT_STRIDE_TILED; } -- 2.7.4