mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02:00
zink: use VkImageViewUsageCreateInfo to remove attachment bits
this avoids issues where the driver may not support attachment bits for texture views Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14719>
This commit is contained in:
parent
c639e82f18
commit
3e12cb9ad9
2 changed files with 22 additions and 6 deletions
|
|
@ -2187,11 +2187,13 @@ begin_render_pass(struct zink_context *ctx)
|
||||||
if (ctx->fb_state.cbufs[i]) {
|
if (ctx->fb_state.cbufs[i]) {
|
||||||
struct zink_surface *surf = zink_csurface(ctx->fb_state.cbufs[i]);
|
struct zink_surface *surf = zink_csurface(ctx->fb_state.cbufs[i]);
|
||||||
struct zink_surface *transient = zink_transient_surface(ctx->fb_state.cbufs[i]);
|
struct zink_surface *transient = zink_transient_surface(ctx->fb_state.cbufs[i]);
|
||||||
if (transient) {
|
if (surf->base.format == ctx->fb_state.cbufs[i]->format) {
|
||||||
assert(zink_resource(transient->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[i].usage);
|
if (transient) {
|
||||||
assert(zink_resource(surf->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[cresolve_offset].usage);
|
assert(zink_resource(transient->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[i].usage);
|
||||||
} else {
|
assert(zink_resource(surf->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[cresolve_offset].usage);
|
||||||
assert(zink_resource(surf->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[i].usage);
|
} else {
|
||||||
|
assert(zink_resource(surf->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[i].usage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -106,8 +106,9 @@ create_ivci(struct zink_screen *screen,
|
||||||
static void
|
static void
|
||||||
init_surface_info(struct zink_surface *surface, struct zink_resource *res, VkImageViewCreateInfo *ivci)
|
init_surface_info(struct zink_surface *surface, struct zink_resource *res, VkImageViewCreateInfo *ivci)
|
||||||
{
|
{
|
||||||
|
VkImageViewUsageCreateInfo *usage_info = (VkImageViewUsageCreateInfo *)ivci->pNext;
|
||||||
surface->info.flags = res->obj->vkflags;
|
surface->info.flags = res->obj->vkflags;
|
||||||
surface->info.usage = res->obj->vkusage;
|
surface->info.usage = usage_info ? usage_info->usage : res->obj->vkusage;
|
||||||
surface->info.width = surface->base.width;
|
surface->info.width = surface->base.width;
|
||||||
surface->info.height = surface->base.height;
|
surface->info.height = surface->base.height;
|
||||||
surface->info.layerCount = ivci->subresourceRange.layerCount;
|
surface->info.layerCount = ivci->subresourceRange.layerCount;
|
||||||
|
|
@ -129,6 +130,19 @@ create_surface(struct pipe_context *pctx,
|
||||||
if (!surface)
|
if (!surface)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
VkImageViewUsageCreateInfo usage_info;
|
||||||
|
usage_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO;
|
||||||
|
usage_info.pNext = NULL;
|
||||||
|
VkFormatFeatureFlags feats = res->optimal_tiling ?
|
||||||
|
screen->format_props[templ->format].optimalTilingFeatures :
|
||||||
|
screen->format_props[templ->format].linearTilingFeatures;
|
||||||
|
VkImageUsageFlags attachment = (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT);
|
||||||
|
usage_info.usage = res->obj->vkusage & ~attachment;
|
||||||
|
if ((res->obj->vkusage & attachment) &&
|
||||||
|
!(feats & (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT))) {
|
||||||
|
ivci->pNext = &usage_info;
|
||||||
|
}
|
||||||
|
|
||||||
pipe_resource_reference(&surface->base.texture, pres);
|
pipe_resource_reference(&surface->base.texture, pres);
|
||||||
pipe_reference_init(&surface->base.reference, 1);
|
pipe_reference_init(&surface->base.reference, 1);
|
||||||
surface->base.context = pctx;
|
surface->base.context = pctx;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue