gallium/u_transfer_helper: clean up boolean flags
Whenever we add or remove a flag here, we need to update a bunch of drivers in a fragile way. Moving to flags here instead should make this a bit easier to maintain in the future. Reviewed-by: Alyssa Rosenzweig <alyssa@collabora.com> Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com> Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Reviewed-by: Juan A. Suarez <jasuarez@igalia.com> Reviewed-by: Yonggang Luo <luoyonggang@gmail.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17959>
This commit is contained in:
committed by
Marge Bot
parent
9b843f8e4a
commit
c5a01854df
@@ -553,20 +553,16 @@ u_transfer_helper_transfer_unmap(struct pipe_context *pctx,
|
||||
|
||||
struct u_transfer_helper *
|
||||
u_transfer_helper_create(const struct u_transfer_vtbl *vtbl,
|
||||
bool separate_z32s8,
|
||||
bool separate_stencil,
|
||||
bool fake_rgtc,
|
||||
bool msaa_map,
|
||||
bool z24_in_z32f)
|
||||
enum u_transfer_helper_flags flags)
|
||||
{
|
||||
struct u_transfer_helper *helper = calloc(1, sizeof(*helper));
|
||||
|
||||
helper->vtbl = vtbl;
|
||||
helper->separate_z32s8 = separate_z32s8;
|
||||
helper->separate_stencil = separate_stencil;
|
||||
helper->fake_rgtc = fake_rgtc;
|
||||
helper->msaa_map = msaa_map;
|
||||
helper->z24_in_z32f = z24_in_z32f;
|
||||
helper->separate_z32s8 = flags & U_TRANSFER_HELPER_SEPARATE_Z32S8;
|
||||
helper->separate_stencil = flags & U_TRANSFER_HELPER_SEPARATE_STENCIL;
|
||||
helper->fake_rgtc = flags & U_TRANSFER_HELPER_FAKE_RGTC;
|
||||
helper->msaa_map = flags & U_TRANSFER_HELPER_MSAA_MAP;
|
||||
helper->z24_in_z32f = flags & U_TRANSFER_HELPER_Z24_IN_Z32F;
|
||||
|
||||
return helper;
|
||||
}
|
||||
|
||||
@@ -98,6 +98,14 @@ struct u_transfer_vtbl {
|
||||
struct pipe_resource *(*get_stencil)(struct pipe_resource *prsc);
|
||||
};
|
||||
|
||||
enum u_transfer_helper_flags {
|
||||
U_TRANSFER_HELPER_SEPARATE_Z32S8 = (1 << 0),
|
||||
U_TRANSFER_HELPER_SEPARATE_STENCIL = (1 << 1),
|
||||
U_TRANSFER_HELPER_FAKE_RGTC = (1 << 2),
|
||||
U_TRANSFER_HELPER_MSAA_MAP = (1 << 3),
|
||||
U_TRANSFER_HELPER_Z24_IN_Z32F = (1 << 4),
|
||||
};
|
||||
|
||||
struct pipe_resource *u_transfer_helper_resource_create(
|
||||
struct pipe_screen *pscreen, const struct pipe_resource *templ);
|
||||
|
||||
@@ -121,12 +129,9 @@ void u_transfer_helper_transfer_unmap(struct pipe_context *pctx,
|
||||
|
||||
struct u_transfer_helper;
|
||||
|
||||
struct u_transfer_helper * u_transfer_helper_create(const struct u_transfer_vtbl *vtbl,
|
||||
bool separate_z32s8,
|
||||
bool separate_stencil,
|
||||
bool fake_rgtc,
|
||||
bool msaa_map,
|
||||
bool z24_in_z32f);
|
||||
struct u_transfer_helper *
|
||||
u_transfer_helper_create(const struct u_transfer_vtbl *vtbl,
|
||||
enum u_transfer_helper_flags flags);
|
||||
|
||||
void u_transfer_helper_destroy(struct u_transfer_helper *helper);
|
||||
|
||||
|
||||
@@ -1217,8 +1217,10 @@ agx_screen_create(struct sw_winsys *winsys)
|
||||
screen->resource_create = u_transfer_helper_resource_create;
|
||||
screen->resource_destroy = u_transfer_helper_resource_destroy;
|
||||
screen->transfer_helper = u_transfer_helper_create(&transfer_vtbl,
|
||||
true, true, false, true,
|
||||
true);
|
||||
U_TRANSFER_HELPER_SEPARATE_Z32S8 |
|
||||
U_TRANSFER_HELPER_SEPARATE_STENCIL |
|
||||
U_TRANSFER_HELPER_MSAA_MAP |
|
||||
U_TRANSFER_HELPER_Z24_IN_Z32F);
|
||||
|
||||
agx_internal_shaders(&agx_screen->dev);
|
||||
|
||||
|
||||
@@ -2007,9 +2007,15 @@ crocus_init_screen_resource_functions(struct pipe_screen *pscreen)
|
||||
pscreen->resource_destroy = u_transfer_helper_resource_destroy;
|
||||
pscreen->memobj_create_from_handle = crocus_memobj_create_from_handle;
|
||||
pscreen->memobj_destroy = crocus_memobj_destroy;
|
||||
|
||||
enum u_transfer_helper_flags transfer_flags = U_TRANSFER_HELPER_MSAA_MAP;
|
||||
if (screen->devinfo.ver >= 6) {
|
||||
transfer_flags |= U_TRANSFER_HELPER_SEPARATE_Z32S8 |
|
||||
U_TRANSFER_HELPER_SEPARATE_STENCIL;
|
||||
}
|
||||
|
||||
pscreen->transfer_helper =
|
||||
u_transfer_helper_create(&transfer_vtbl, screen->devinfo.ver >= 6,
|
||||
screen->devinfo.ver >= 6, false, true, false);
|
||||
u_transfer_helper_create(&transfer_vtbl, transfer_flags);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -1666,7 +1666,10 @@ fd_resource_screen_init(struct pipe_screen *pscreen)
|
||||
pscreen->resource_destroy = u_transfer_helper_resource_destroy;
|
||||
|
||||
pscreen->transfer_helper =
|
||||
u_transfer_helper_create(&transfer_vtbl, true, false, fake_rgtc, true, false);
|
||||
u_transfer_helper_create(&transfer_vtbl,
|
||||
U_TRANSFER_HELPER_SEPARATE_Z32S8 |
|
||||
U_TRANSFER_HELPER_MSAA_MAP |
|
||||
(fake_rgtc ? U_TRANSFER_HELPER_FAKE_RGTC : 0));
|
||||
|
||||
if (!screen->layout_resource_for_modifier)
|
||||
screen->layout_resource_for_modifier = fd_layout_resource_for_modifier;
|
||||
|
||||
@@ -2693,7 +2693,10 @@ iris_init_screen_resource_functions(struct pipe_screen *pscreen)
|
||||
pscreen->memobj_create_from_handle = iris_memobj_create_from_handle;
|
||||
pscreen->memobj_destroy = iris_memobj_destroy;
|
||||
pscreen->transfer_helper =
|
||||
u_transfer_helper_create(&transfer_vtbl, true, true, false, true, false);
|
||||
u_transfer_helper_create(&transfer_vtbl,
|
||||
U_TRANSFER_HELPER_SEPARATE_Z32S8 |
|
||||
U_TRANSFER_HELPER_SEPARATE_STENCIL |
|
||||
U_TRANSFER_HELPER_MSAA_MAP);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -934,9 +934,7 @@ lima_resource_screen_init(struct lima_screen *screen)
|
||||
screen->base.resource_get_param = lima_resource_get_param;
|
||||
screen->base.set_damage_region = lima_resource_set_damage_region;
|
||||
screen->base.transfer_helper = u_transfer_helper_create(&transfer_vtbl,
|
||||
false, false,
|
||||
false, true,
|
||||
false);
|
||||
U_TRANSFER_HELPER_MSAA_MAP);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -1461,8 +1461,9 @@ panfrost_resource_screen_init(struct pipe_screen *pscreen)
|
||||
pscreen->resource_get_handle = panfrost_resource_get_handle;
|
||||
pscreen->resource_get_param = panfrost_resource_get_param;
|
||||
pscreen->transfer_helper = u_transfer_helper_create(&transfer_vtbl,
|
||||
true, false,
|
||||
fake_rgtc, true, false);
|
||||
U_TRANSFER_HELPER_SEPARATE_Z32S8 |
|
||||
U_TRANSFER_HELPER_MSAA_MAP |
|
||||
(fake_rgtc ? U_TRANSFER_HELPER_FAKE_RGTC : 0));
|
||||
}
|
||||
void
|
||||
panfrost_resource_screen_destroy(struct pipe_screen *pscreen)
|
||||
|
||||
@@ -1178,9 +1178,9 @@ v3d_resource_screen_init(struct pipe_screen *pscreen)
|
||||
pscreen->resource_get_param = v3d_resource_get_param;
|
||||
pscreen->resource_destroy = u_transfer_helper_resource_destroy;
|
||||
pscreen->transfer_helper = u_transfer_helper_create(&transfer_vtbl,
|
||||
true, false,
|
||||
true, true,
|
||||
false);
|
||||
U_TRANSFER_HELPER_SEPARATE_Z32S8 |
|
||||
U_TRANSFER_HELPER_FAKE_RGTC |
|
||||
U_TRANSFER_HELPER_MSAA_MAP);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -1138,9 +1138,7 @@ vc4_resource_screen_init(struct pipe_screen *pscreen)
|
||||
pscreen->resource_get_param = vc4_resource_get_param;
|
||||
pscreen->resource_destroy = vc4_resource_destroy;
|
||||
pscreen->transfer_helper = u_transfer_helper_create(&transfer_vtbl,
|
||||
false, false,
|
||||
false, true,
|
||||
false);
|
||||
U_TRANSFER_HELPER_MSAA_MAP);
|
||||
|
||||
/* Test if the kernel has GET_TILING; it will return -EINVAL if the
|
||||
* ioctl does not exist, but -ENOENT if we pass an impossible handle.
|
||||
|
||||
@@ -2270,7 +2270,9 @@ zink_screen_resource_init(struct pipe_screen *pscreen)
|
||||
pscreen->resource_create_with_modifiers = zink_resource_create_with_modifiers;
|
||||
pscreen->resource_create_drawable = zink_resource_create_drawable;
|
||||
pscreen->resource_destroy = zink_resource_destroy;
|
||||
pscreen->transfer_helper = u_transfer_helper_create(&transfer_vtbl, true, true, false, false, !screen->have_D24_UNORM_S8_UINT);
|
||||
pscreen->transfer_helper = u_transfer_helper_create(&transfer_vtbl,
|
||||
U_TRANSFER_HELPER_SEPARATE_Z32S8 | U_TRANSFER_HELPER_SEPARATE_STENCIL |
|
||||
(!screen->have_D24_UNORM_S8_UINT ? U_TRANSFER_HELPER_Z24_IN_Z32F : 0));
|
||||
|
||||
if (screen->info.have_KHR_external_memory_fd || screen->info.have_KHR_external_memory_win32) {
|
||||
pscreen->resource_get_handle = zink_resource_get_handle;
|
||||
|
||||
Reference in New Issue
Block a user