From b243b1d963657cdf7b27435bc0342f08080c391e Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Sat, 3 Apr 2021 10:57:33 -0400 Subject: [PATCH] zink: add a target param to create_ivci() allow creating views of different types than the base resource Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_surface.c | 9 +++++---- src/gallium/drivers/zink/zink_surface.h | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/zink/zink_surface.c b/src/gallium/drivers/zink/zink_surface.c index 4cae6fd11ec..e61ccb2f3dd 100644 --- a/src/gallium/drivers/zink/zink_surface.c +++ b/src/gallium/drivers/zink/zink_surface.c @@ -34,13 +34,14 @@ VkImageViewCreateInfo create_ivci(struct zink_screen *screen, struct zink_resource *res, - const struct pipe_surface *templ) + const struct pipe_surface *templ, + enum pipe_texture_target target) { VkImageViewCreateInfo ivci = {}; ivci.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; ivci.image = res->obj->image; - switch (res->base.b.target) { + switch (target) { case PIPE_TEXTURE_1D: ivci.viewType = VK_IMAGE_VIEW_TYPE_1D; break; @@ -175,7 +176,7 @@ zink_create_surface(struct pipe_context *pctx, { VkImageViewCreateInfo ivci = create_ivci(zink_screen(pctx->screen), - zink_resource(pres), templ); + zink_resource(pres), templ, pres->target); if (pres->target == PIPE_TEXTURE_3D) ivci.viewType = VK_IMAGE_VIEW_TYPE_2D; @@ -248,7 +249,7 @@ zink_rebind_surface(struct zink_context *ctx, struct pipe_surface **psurface) if (surface->simage_view) return false; VkImageViewCreateInfo ivci = create_ivci(screen, - zink_resource((*psurface)->texture), (*psurface)); + zink_resource((*psurface)->texture), (*psurface), surface->base.texture->target); uint32_t hash = hash_ivci(&ivci); simple_mtx_lock(&screen->surface_mtx); diff --git a/src/gallium/drivers/zink/zink_surface.h b/src/gallium/drivers/zink/zink_surface.h index c8931ca32fe..4f29509835e 100644 --- a/src/gallium/drivers/zink/zink_surface.h +++ b/src/gallium/drivers/zink/zink_surface.h @@ -69,7 +69,8 @@ zink_context_surface_init(struct pipe_context *context); VkImageViewCreateInfo create_ivci(struct zink_screen *screen, struct zink_resource *res, - const struct pipe_surface *templ); + const struct pipe_surface *templ, + enum pipe_texture_target target); struct pipe_surface * zink_get_surface(struct zink_context *ctx,