Mesa (main): zink: enable PIPE_TEXTURE_TRANSFER_COMPUTE on non-cpu drivers
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Nov 18 22:27:03 UTC 2021
Module: Mesa
Branch: main
Commit: 04cc1b93b139bab2e19b8221859c765719a225e0
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=04cc1b93b139bab2e19b8221859c765719a225e0
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Thu Aug 5 11:32:52 2021 -0400
zink: enable PIPE_TEXTURE_TRANSFER_COMPUTE on non-cpu drivers
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13859>
---
src/gallium/drivers/zink/zink_screen.c | 29 +++++++++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index 79067b26f24..3457d9be209 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -544,8 +544,15 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
return screen->info.props.limits.minTexelBufferOffsetAlignment;
- case PIPE_CAP_TEXTURE_TRANSFER_MODES:
- return PIPE_TEXTURE_TRANSFER_BLIT;
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES: {
+ enum pipe_texture_transfer_mode mode = PIPE_TEXTURE_TRANSFER_BLIT;
+ if (!screen->is_cpu &&
+ screen->info.have_KHR_8bit_storage &&
+ screen->info.have_KHR_16bit_storage &&
+ screen->info.have_KHR_shader_float16_int8)
+ mode |= PIPE_TEXTURE_TRANSFER_COMPUTE;
+ return mode;
+ }
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
return MIN2(get_smallest_buffer_heap(screen),
@@ -979,6 +986,23 @@ vk_sample_count_flags(uint32_t sample_count)
}
}
+static bool
+zink_is_compute_copy_faster(struct pipe_screen *pscreen,
+ enum pipe_format src_format,
+ enum pipe_format dst_format,
+ unsigned width,
+ unsigned height,
+ unsigned depth,
+ bool cpu)
+{
+ if (cpu)
+ /* very basic for now, probably even worse for some cases,
+ * but fixes lots of others
+ */
+ return width * height * depth > 64 * 64;
+ return false;
+}
+
static bool
zink_is_format_supported(struct pipe_screen *pscreen,
enum pipe_format format,
@@ -1980,6 +2004,7 @@ zink_internal_create_screen(const struct pipe_screen_config *config)
screen->base.get_shader_param = zink_get_shader_param;
screen->base.get_compiler_options = zink_get_compiler_options;
screen->base.get_sample_pixel_grid = zink_get_sample_pixel_grid;
+ screen->base.is_compute_copy_faster = zink_is_compute_copy_faster;
screen->base.is_format_supported = zink_is_format_supported;
screen->base.query_dmabuf_modifiers = zink_query_dmabuf_modifiers;
screen->base.is_dmabuf_modifier_supported = zink_is_dmabuf_modifier_supported;
More information about the mesa-commit
mailing list