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:
Erik Faye-Lund
2022-08-09 13:22:59 +02:00
committed by Marge Bot
parent 9b843f8e4a
commit c5a01854df
11 changed files with 48 additions and 34 deletions
+6 -10
View File
@@ -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;
}
+11 -6
View File
@@ -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);
+4 -2
View File
@@ -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);
+8 -2
View File
@@ -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;
+4 -1
View File
@@ -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
+1 -3
View File
@@ -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
+3 -2
View File
@@ -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)
+3 -3
View File
@@ -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
+1 -3
View File
@@ -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.
+3 -1
View File
@@ -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;