zink: add a target param to create_ivci()
allow creating views of different types than the base resource Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10703>
This commit is contained in:
parent
438f0b31e2
commit
b243b1d963
|
@ -34,13 +34,14 @@
|
||||||
VkImageViewCreateInfo
|
VkImageViewCreateInfo
|
||||||
create_ivci(struct zink_screen *screen,
|
create_ivci(struct zink_screen *screen,
|
||||||
struct zink_resource *res,
|
struct zink_resource *res,
|
||||||
const struct pipe_surface *templ)
|
const struct pipe_surface *templ,
|
||||||
|
enum pipe_texture_target target)
|
||||||
{
|
{
|
||||||
VkImageViewCreateInfo ivci = {};
|
VkImageViewCreateInfo ivci = {};
|
||||||
ivci.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
ivci.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||||
ivci.image = res->obj->image;
|
ivci.image = res->obj->image;
|
||||||
|
|
||||||
switch (res->base.b.target) {
|
switch (target) {
|
||||||
case PIPE_TEXTURE_1D:
|
case PIPE_TEXTURE_1D:
|
||||||
ivci.viewType = VK_IMAGE_VIEW_TYPE_1D;
|
ivci.viewType = VK_IMAGE_VIEW_TYPE_1D;
|
||||||
break;
|
break;
|
||||||
|
@ -175,7 +176,7 @@ zink_create_surface(struct pipe_context *pctx,
|
||||||
{
|
{
|
||||||
|
|
||||||
VkImageViewCreateInfo ivci = create_ivci(zink_screen(pctx->screen),
|
VkImageViewCreateInfo ivci = create_ivci(zink_screen(pctx->screen),
|
||||||
zink_resource(pres), templ);
|
zink_resource(pres), templ, pres->target);
|
||||||
if (pres->target == PIPE_TEXTURE_3D)
|
if (pres->target == PIPE_TEXTURE_3D)
|
||||||
ivci.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
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)
|
if (surface->simage_view)
|
||||||
return false;
|
return false;
|
||||||
VkImageViewCreateInfo ivci = create_ivci(screen,
|
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);
|
uint32_t hash = hash_ivci(&ivci);
|
||||||
|
|
||||||
simple_mtx_lock(&screen->surface_mtx);
|
simple_mtx_lock(&screen->surface_mtx);
|
||||||
|
|
|
@ -69,7 +69,8 @@ zink_context_surface_init(struct pipe_context *context);
|
||||||
VkImageViewCreateInfo
|
VkImageViewCreateInfo
|
||||||
create_ivci(struct zink_screen *screen,
|
create_ivci(struct zink_screen *screen,
|
||||||
struct zink_resource *res,
|
struct zink_resource *res,
|
||||||
const struct pipe_surface *templ);
|
const struct pipe_surface *templ,
|
||||||
|
enum pipe_texture_target target);
|
||||||
|
|
||||||
struct pipe_surface *
|
struct pipe_surface *
|
||||||
zink_get_surface(struct zink_context *ctx,
|
zink_get_surface(struct zink_context *ctx,
|
||||||
|
|
Loading…
Reference in New Issue