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