Mesa (main): intel/blorp: Add option to emit packets that disable Mesh

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Nov 4 21:57:07 UTC 2021


Module: Mesa
Branch: main
Commit: 8fc6a11f0e446c429e1215db954db64fd34c918b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8fc6a11f0e446c429e1215db954db64fd34c918b

Author: Caio Oliveira <caio.oliveira at intel.com>
Date:   Thu Apr 29 15:10:57 2021 -0700

intel/blorp: Add option to emit packets that disable Mesh

If a driver doesn't support Mesh, don't emit anything.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13660>

---

 src/gallium/drivers/crocus/crocus_blorp.c |  2 +-
 src/gallium/drivers/iris/iris_blorp.c     |  2 +-
 src/intel/blorp/blorp.c                   |  6 +++++-
 src/intel/blorp/blorp.h                   |  8 +++++++-
 src/intel/blorp/blorp_genX_exec.h         | 13 +++++++++++++
 src/intel/vulkan/anv_blorp.c              |  7 ++++++-
 src/mesa/drivers/dri/i965/brw_blorp.c     |  2 +-
 7 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/crocus/crocus_blorp.c b/src/gallium/drivers/crocus/crocus_blorp.c
index 4bf7523da55..7c09ab6cdc5 100644
--- a/src/gallium/drivers/crocus/crocus_blorp.c
+++ b/src/gallium/drivers/crocus/crocus_blorp.c
@@ -406,7 +406,7 @@ genX(crocus_init_blorp)(struct crocus_context *ice)
 {
    struct crocus_screen *screen = (struct crocus_screen *)ice->ctx.screen;
 
-   blorp_init(&ice->blorp, ice, &screen->isl_dev);
+   blorp_init(&ice->blorp, ice, &screen->isl_dev, NULL);
    ice->blorp.compiler = screen->compiler;
    ice->blorp.lookup_shader = crocus_blorp_lookup_shader;
    ice->blorp.upload_shader = crocus_blorp_upload_shader;
diff --git a/src/gallium/drivers/iris/iris_blorp.c b/src/gallium/drivers/iris/iris_blorp.c
index 1a9ff91364c..1d9e7af94e4 100644
--- a/src/gallium/drivers/iris/iris_blorp.c
+++ b/src/gallium/drivers/iris/iris_blorp.c
@@ -407,7 +407,7 @@ genX(init_blorp)(struct iris_context *ice)
 {
    struct iris_screen *screen = (struct iris_screen *)ice->ctx.screen;
 
-   blorp_init(&ice->blorp, ice, &screen->isl_dev);
+   blorp_init(&ice->blorp, ice, &screen->isl_dev, NULL);
    ice->blorp.compiler = screen->compiler;
    ice->blorp.lookup_shader = iris_blorp_lookup_shader;
    ice->blorp.upload_shader = iris_blorp_upload_shader;
diff --git a/src/intel/blorp/blorp.c b/src/intel/blorp/blorp.c
index 03a951aa65a..1a6b12e8d43 100644
--- a/src/intel/blorp/blorp.c
+++ b/src/intel/blorp/blorp.c
@@ -48,10 +48,14 @@ blorp_shader_type_to_name(enum blorp_shader_type type)
 
 void
 blorp_init(struct blorp_context *blorp, void *driver_ctx,
-           struct isl_device *isl_dev)
+           struct isl_device *isl_dev, const struct blorp_config *config)
 {
+   memset(blorp, 0, sizeof(*blorp));
+
    blorp->driver_ctx = driver_ctx;
    blorp->isl_dev = isl_dev;
+   if (config)
+      blorp->config = *config;
 }
 
 void
diff --git a/src/intel/blorp/blorp.h b/src/intel/blorp/blorp.h
index 37574931f5c..72eb3d90b87 100644
--- a/src/intel/blorp/blorp.h
+++ b/src/intel/blorp/blorp.h
@@ -38,6 +38,10 @@ extern "C" {
 struct blorp_batch;
 struct blorp_params;
 
+struct blorp_config {
+   bool use_mesh_shading;
+};
+
 struct blorp_context {
    void *driver_ctx;
 
@@ -56,10 +60,12 @@ struct blorp_context {
                          uint32_t prog_data_size,
                          uint32_t *kernel_out, void *prog_data_out);
    void (*exec)(struct blorp_batch *batch, const struct blorp_params *params);
+
+   struct blorp_config config;
 };
 
 void blorp_init(struct blorp_context *blorp, void *driver_ctx,
-                struct isl_device *isl_dev);
+                struct isl_device *isl_dev, const struct blorp_config *config);
 void blorp_finish(struct blorp_context *blorp);
 
 enum blorp_batch_flags {
diff --git a/src/intel/blorp/blorp_genX_exec.h b/src/intel/blorp/blorp_genX_exec.h
index edc7f1ff1c3..8f87fa6edf8 100644
--- a/src/intel/blorp/blorp_genX_exec.h
+++ b/src/intel/blorp/blorp_genX_exec.h
@@ -1388,6 +1388,19 @@ blorp_emit_pipeline(struct blorp_batch *batch,
    /* Disable Primitive Replication. */
    blorp_emit(batch, GENX(3DSTATE_PRIMITIVE_REPLICATION), pr);
 #endif
+
+   if (batch->blorp->config.use_mesh_shading) {
+#if GFX_VERx10 >= 125
+      blorp_emit(batch, GENX(3DSTATE_URB_ALLOC_MESH), zero);
+      blorp_emit(batch, GENX(3DSTATE_URB_ALLOC_TASK), zero);
+
+      blorp_emit(batch, GENX(3DSTATE_MESH_SHADER), zero);
+      blorp_emit(batch, GENX(3DSTATE_TASK_SHADER), zero);
+
+      blorp_emit(batch, GENX(3DSTATE_MESH_CONTROL), zero);
+      blorp_emit(batch, GENX(3DSTATE_TASK_CONTROL), zero);
+#endif
+   }
 }
 
 /******** This is the end of the pipeline setup code ********/
diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
index ba24bd5a1ce..f14716c154c 100644
--- a/src/intel/vulkan/anv_blorp.c
+++ b/src/intel/vulkan/anv_blorp.c
@@ -92,7 +92,12 @@ upload_blorp_shader(struct blorp_batch *batch, uint32_t stage,
 void
 anv_device_init_blorp(struct anv_device *device)
 {
-   blorp_init(&device->blorp, device, &device->isl_dev);
+   const struct intel_device_info *devinfo = &device->info;
+   const struct blorp_config config = {
+      .use_mesh_shading = devinfo->has_mesh_shading,
+   };
+
+   blorp_init(&device->blorp, device, &device->isl_dev, &config);
    device->blorp.compiler = device->physical->compiler;
    device->blorp.lookup_shader = lookup_blorp_shader;
    device->blorp.upload_shader = upload_blorp_shader;
diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c b/src/mesa/drivers/dri/i965/brw_blorp.c
index 60ba4b80cad..678ed1dcd6e 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp.c
+++ b/src/mesa/drivers/dri/i965/brw_blorp.c
@@ -72,7 +72,7 @@ brw_blorp_init(struct brw_context *brw)
 {
    const struct intel_device_info *devinfo = &brw->screen->devinfo;
 
-   blorp_init(&brw->blorp, brw, &brw->isl_dev);
+   blorp_init(&brw->blorp, brw, &brw->isl_dev, NULL);
 
    brw->blorp.compiler = brw->screen->compiler;
 



More information about the mesa-commit mailing list