Mesa (master): lavapipe: add basic vulkan device group support.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Dec 23 22:45:20 UTC 2020
Module: Mesa
Branch: master
Commit: 6af87193c4f7fe1dbdc15553ecd453cfe913c64e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6af87193c4f7fe1dbdc15553ecd453cfe913c64e
Author: Dave Airlie <airlied at redhat.com>
Date: Fri Dec 18 12:29:59 2020 +1000
lavapipe: add basic vulkan device group support.
This just add the basic for vulkan device group support, base
dispatch, and dummy funcs
Reviewed-by: Adam Jackson <ajax at redhat.com>
Reviewed-by: Roland Scheidegger <sroland at vmware.com>
Reviweed-by: Eric Anholt <eric at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8154>
---
src/gallium/frontends/lavapipe/lvp_cmd_buffer.c | 36 ++++++++++++++++++++++++
src/gallium/frontends/lavapipe/lvp_execute.c | 3 ++
src/gallium/frontends/lavapipe/lvp_extensions.py | 4 +--
src/gallium/frontends/lavapipe/lvp_pipeline.c | 1 +
src/gallium/frontends/lavapipe/lvp_private.h | 3 ++
5 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c b/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c
index b024cd73c01..3871990bae1 100644
--- a/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c
+++ b/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c
@@ -793,6 +793,9 @@ void lvp_CmdDispatch(
cmd->u.dispatch.x = x;
cmd->u.dispatch.y = y;
cmd->u.dispatch.z = z;
+ cmd->u.dispatch.base_x = 0;
+ cmd->u.dispatch.base_y = 0;
+ cmd->u.dispatch.base_z = 0;
cmd_buf_queue(cmd_buffer, cmd);
}
@@ -1764,3 +1767,36 @@ void lvp_CmdDrawIndirectByteCountEXT(
cmd_buf_queue(cmd_buffer, cmd);
}
+
+void lvp_CmdSetDeviceMask(
+ VkCommandBuffer commandBuffer,
+ uint32_t deviceMask)
+{
+ /* No-op */
+}
+
+void lvp_CmdDispatchBase(
+ VkCommandBuffer commandBuffer,
+ uint32_t base_x,
+ uint32_t base_y,
+ uint32_t base_z,
+ uint32_t x,
+ uint32_t y,
+ uint32_t z)
+{
+ LVP_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, commandBuffer);
+ struct lvp_cmd_buffer_entry *cmd;
+
+ cmd = cmd_buf_entry_alloc(cmd_buffer, LVP_CMD_DISPATCH);
+ if (!cmd)
+ return;
+
+ cmd->u.dispatch.x = x;
+ cmd->u.dispatch.y = y;
+ cmd->u.dispatch.z = z;
+ cmd->u.dispatch.base_x = base_x;
+ cmd->u.dispatch.base_y = base_y;
+ cmd->u.dispatch.base_z = base_z;
+
+ cmd_buf_queue(cmd_buffer, cmd);
+}
diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c
index 960e07170f9..cfc77ae38a9 100644
--- a/src/gallium/frontends/lavapipe/lvp_execute.c
+++ b/src/gallium/frontends/lavapipe/lvp_execute.c
@@ -1948,6 +1948,9 @@ static void handle_dispatch(struct lvp_cmd_buffer_entry *cmd,
state->dispatch_info.grid[0] = cmd->u.dispatch.x;
state->dispatch_info.grid[1] = cmd->u.dispatch.y;
state->dispatch_info.grid[2] = cmd->u.dispatch.z;
+ state->dispatch_info.grid_base[0] = cmd->u.dispatch.base_x;
+ state->dispatch_info.grid_base[1] = cmd->u.dispatch.base_y;
+ state->dispatch_info.grid_base[2] = cmd->u.dispatch.base_z;
state->dispatch_info.indirect = NULL;
state->pctx->launch_grid(state->pctx, &state->dispatch_info);
}
diff --git a/src/gallium/frontends/lavapipe/lvp_extensions.py b/src/gallium/frontends/lavapipe/lvp_extensions.py
index 2189fcd5453..408d2572211 100644
--- a/src/gallium/frontends/lavapipe/lvp_extensions.py
+++ b/src/gallium/frontends/lavapipe/lvp_extensions.py
@@ -63,8 +63,8 @@ EXTENSIONS = [
Extension('VK_KHR_dedicated_allocation', 1, True),
Extension('VK_KHR_depth_stencil_resolve', 1, False),
Extension('VK_KHR_descriptor_update_template', 1, True),
- Extension('VK_KHR_device_group', 1, False),
- Extension('VK_KHR_device_group_creation', 1, False),
+ Extension('VK_KHR_device_group', 1, True),
+ Extension('VK_KHR_device_group_creation', 1, True),
Extension('VK_KHR_draw_indirect_count', 1, True),
Extension('VK_KHR_driver_properties', 1, True),
Extension('VK_KHR_external_fence', 1, False),
diff --git a/src/gallium/frontends/lavapipe/lvp_pipeline.c b/src/gallium/frontends/lavapipe/lvp_pipeline.c
index cac750934e7..28aa1ddbe57 100644
--- a/src/gallium/frontends/lavapipe/lvp_pipeline.c
+++ b/src/gallium/frontends/lavapipe/lvp_pipeline.c
@@ -510,6 +510,7 @@ lvp_shader_compile_to_ir(struct lvp_pipeline *pipeline,
.post_depth_coverage = true,
.transform_feedback = true,
.geometry_streams = true,
+ .device_group = true,
},
.ubo_addr_format = nir_address_format_32bit_index_offset,
.ssbo_addr_format = nir_address_format_32bit_index_offset,
diff --git a/src/gallium/frontends/lavapipe/lvp_private.h b/src/gallium/frontends/lavapipe/lvp_private.h
index 6860373bc5f..472ff9c5fc6 100644
--- a/src/gallium/frontends/lavapipe/lvp_private.h
+++ b/src/gallium/frontends/lavapipe/lvp_private.h
@@ -756,6 +756,9 @@ struct lvp_cmd_dispatch {
uint32_t x;
uint32_t y;
uint32_t z;
+ uint32_t base_x;
+ uint32_t base_y;
+ uint32_t base_z;
};
struct lvp_cmd_dispatch_indirect {
More information about the mesa-commit
mailing list