From f74df6205d245491a8a54ffa6e737f22b9b00fb4 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 15 Jun 2022 12:58:03 -0400 Subject: [PATCH] zink: add a function for getting the minimum framebuffer layers this clamps the layer count to the smallest number of layers rather than the largest cc: mesa-stable Reviewed-by: Adam Jackson Part-of: --- src/gallium/drivers/zink/zink_framebuffer.c | 23 +++++++++++++++++++++++ src/gallium/drivers/zink/zink_framebuffer.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/src/gallium/drivers/zink/zink_framebuffer.c b/src/gallium/drivers/zink/zink_framebuffer.c index 84f410d..e0bc32d 100644 --- a/src/gallium/drivers/zink/zink_framebuffer.c +++ b/src/gallium/drivers/zink/zink_framebuffer.c @@ -219,3 +219,26 @@ zink_update_framebuffer_state(struct zink_context *ctx) ctx->fb_changed |= ctx->framebuffer != fb; ctx->framebuffer = fb; } + +/* same as u_framebuffer_get_num_layers, but clamp to lowest layer count */ +unsigned +zink_framebuffer_get_num_layers(const struct pipe_framebuffer_state *fb) +{ + unsigned i, num_layers = UINT32_MAX; + if (!(fb->nr_cbufs || fb->zsbuf)) + return MAX2(fb->layers, 1); + + for (i = 0; i < fb->nr_cbufs; i++) { + if (fb->cbufs[i]) { + unsigned num = fb->cbufs[i]->u.tex.last_layer - + fb->cbufs[i]->u.tex.first_layer + 1; + num_layers = MIN2(num_layers, num); + } + } + if (fb->zsbuf) { + unsigned num = fb->zsbuf->u.tex.last_layer - + fb->zsbuf->u.tex.first_layer + 1; + num_layers = MIN2(num_layers, num); + } + return MAX2(num_layers, 1); +} diff --git a/src/gallium/drivers/zink/zink_framebuffer.h b/src/gallium/drivers/zink/zink_framebuffer.h index 7544074..e129183 100644 --- a/src/gallium/drivers/zink/zink_framebuffer.h +++ b/src/gallium/drivers/zink/zink_framebuffer.h @@ -87,4 +87,6 @@ zink_get_framebuffer(struct zink_context *ctx); void zink_update_framebuffer_state(struct zink_context *ctx); +unsigned +zink_framebuffer_get_num_layers(const struct pipe_framebuffer_state *fb); #endif -- 2.7.4