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