[Mesa-dev] [PATCH 3/4] i965: enable INTEL_blackhole_render on haswell+
Lionel Landwerlin
lionel.g.landwerlin at intel.com
Thu Mar 15 14:24:32 UTC 2018
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
---
src/mesa/drivers/dri/i965/brw_context.h | 2 ++
src/mesa/drivers/dri/i965/brw_defines.h | 8 ++++++-
src/mesa/drivers/dri/i965/brw_misc_state.c | 33 +++++++++++++++++++++++++++
src/mesa/drivers/dri/i965/brw_state.h | 1 +
src/mesa/drivers/dri/i965/brw_state_upload.c | 2 ++
src/mesa/drivers/dri/i965/genX_state_upload.c | 3 +++
src/mesa/drivers/dri/i965/intel_extensions.c | 3 +++
7 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
index 177273c3645..ded1f1085c3 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -216,6 +216,7 @@ enum brw_state_id {
BRW_STATE_CONSERVATIVE_RASTERIZATION,
BRW_STATE_DRAW_CALL,
BRW_STATE_AUX,
+ BRW_STATE_BLACKHOLE_RENDER,
BRW_NUM_STATE_BITS
};
@@ -307,6 +308,7 @@ enum brw_state_id {
#define BRW_NEW_CONSERVATIVE_RASTERIZATION (1ull << BRW_STATE_CONSERVATIVE_RASTERIZATION)
#define BRW_NEW_DRAW_CALL (1ull << BRW_STATE_DRAW_CALL)
#define BRW_NEW_AUX_STATE (1ull << BRW_STATE_AUX)
+#define BRW_NEW_BLACKHOLE_RENDER (1ull << BRW_STATE_BLACKHOLE_RENDER)
struct brw_state_flags {
/** State update flags signalled by mesa internals */
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 8bf6f68b67c..c8a597c8ad0 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -1650,11 +1650,17 @@ enum brw_pixel_shader_coverage_mask_mode {
#define GEN10_CACHE_MODE_SS 0x0e420
#define GEN10_FLOAT_BLEND_OPTIMIZATION_ENABLE (1 << 4)
-#define INSTPM 0x20c0
+#define INSTPM 0x20c0 /* Gen6-8 */
# define INSTPM_CONSTANT_BUFFER_ADDRESS_OFFSET_DISABLE (1 << 6)
+# define INSTPM_GLOBAL_DEBUG_ENABLE (1 << 4)
+# define INSTPM_MEDIA_INSTRUCTION_DISABLE (1 << 3)
+# define INSTPM_3D_RENDERER_INSTRUCTION_DISABLE (1 << 2)
+# define INSTPM_3D_STATE_INSTRUCTION_DISABLE (1 << 1)
#define CS_DEBUG_MODE2 0x20d8 /* Gen9+ */
# define CSDBG2_CONSTANT_BUFFER_ADDRESS_OFFSET_DISABLE (1 << 4)
+# define CSDBG2_MEDIA_INSTRUCTION_DISABLE (1 << 1)
+# define CSDBG2_3D_RENDERER_INSTRUCTION_DISABLE (1 << 0)
#define SLICE_COMMON_ECO_CHICKEN1 0x731c /* Gen9+ */
# define GLK_SCEC_BARRIER_MODE_GPGPU (0 << 7)
diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c
index 29d74876c27..583578d2a2f 100644
--- a/src/mesa/drivers/dri/i965/brw_misc_state.c
+++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
@@ -766,3 +766,36 @@ brw_upload_state_base_address(struct brw_context *brw)
brw->ctx.NewDriverState |= BRW_NEW_STATE_BASE_ADDRESS;
brw->batch.state_base_address_emitted = true;
}
+
+static void
+brw_emit_blackhole_render(struct brw_context *brw)
+{
+ const struct gen_device_info *devinfo = &brw->screen->devinfo;
+ struct gl_context *ctx = &brw->ctx;
+ uint32_t reg_offset = devinfo->gen >= 9 ? CS_DEBUG_MODE2 : INSTPM;
+ uint32_t reg_mask = devinfo->gen >= 9 ?
+ REG_MASK(CSDBG2_3D_RENDERER_INSTRUCTION_DISABLE |
+ CSDBG2_MEDIA_INSTRUCTION_DISABLE) :
+ REG_MASK(INSTPM_3D_RENDERER_INSTRUCTION_DISABLE |
+ INSTPM_MEDIA_INSTRUCTION_DISABLE);
+ uint32_t reg_value = 0;
+
+ if (ctx->IntelBlackholeRender) {
+ reg_value = devinfo->gen >= 9 ?
+ (CSDBG2_3D_RENDERER_INSTRUCTION_DISABLE |
+ CSDBG2_MEDIA_INSTRUCTION_DISABLE) :
+ (INSTPM_3D_RENDERER_INSTRUCTION_DISABLE |
+ INSTPM_MEDIA_INSTRUCTION_DISABLE);
+ }
+
+ brw_load_register_imm32(brw, reg_offset, reg_mask | reg_value);
+ brw_emit_pipe_control_flush(brw, PIPE_CONTROL_LRI_WRITE_IMMEDIATE);
+}
+
+const struct brw_tracked_state brw_blackhole_render = {
+ .dirty = {
+ .mesa = 0,
+ .brw = BRW_NEW_BLACKHOLE_RENDER,
+ },
+ .emit = brw_emit_blackhole_render,
+};
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index 9acb6257401..e5e60985517 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -95,6 +95,7 @@ extern const struct brw_tracked_state gen7_push_constant_space;
extern const struct brw_tracked_state gen7_urb;
extern const struct brw_tracked_state gen8_pma_fix;
extern const struct brw_tracked_state brw_cs_work_groups_surface;
+extern const struct brw_tracked_state brw_blackhole_render;
static inline bool
brw_state_dirty(const struct brw_context *brw,
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index d8273aa5734..70a8526e952 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -234,6 +234,7 @@ void brw_init_state( struct brw_context *brw )
ctx->DriverFlags.NewImageUnits = BRW_NEW_IMAGE_UNITS;
ctx->DriverFlags.NewDefaultTessLevels = BRW_NEW_DEFAULT_TESS_LEVELS;
ctx->DriverFlags.NewIntelConservativeRasterization = BRW_NEW_CONSERVATIVE_RASTERIZATION;
+ ctx->DriverFlags.NewIntelBlackholeRender = BRW_NEW_BLACKHOLE_RENDER;
}
@@ -369,6 +370,7 @@ static struct dirty_bit_map brw_bits[] = {
DEFINE_BIT(BRW_NEW_CONSERVATIVE_RASTERIZATION),
DEFINE_BIT(BRW_NEW_DRAW_CALL),
DEFINE_BIT(BRW_NEW_AUX_STATE),
+ DEFINE_BIT(BRW_NEW_BLACKHOLE_RENDER),
{0, 0, 0}
};
diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c
index a69a496f1db..b4ec30434b6 100644
--- a/src/mesa/drivers/dri/i965/genX_state_upload.c
+++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
@@ -5616,6 +5616,7 @@ genX(init_atoms)(struct brw_context *brw)
#if GEN_IS_HASWELL
&genX(cut_index),
+ &brw_blackhole_render,
#endif
};
#elif GEN_GEN >= 8
@@ -5709,6 +5710,7 @@ genX(init_atoms)(struct brw_context *brw)
&genX(cut_index),
&gen8_pma_fix,
+ &brw_blackhole_render,
};
#endif
@@ -5728,6 +5730,7 @@ genX(init_atoms)(struct brw_context *brw)
&brw_cs_work_groups_surface,
&genX(cs_samplers),
&genX(cs_state),
+ &brw_blackhole_render,
};
STATIC_ASSERT(ARRAY_SIZE(compute_atoms) <= ARRAY_SIZE(brw->compute_atoms));
diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c b/src/mesa/drivers/dri/i965/intel_extensions.c
index 73a6c73f537..12d22e12eee 100644
--- a/src/mesa/drivers/dri/i965/intel_extensions.c
+++ b/src/mesa/drivers/dri/i965/intel_extensions.c
@@ -279,6 +279,9 @@ intelInitExtensions(struct gl_context *ctx)
ctx->Extensions.OES_copy_image = true;
}
+ if (devinfo->gen >= 8 || devinfo->is_haswell)
+ ctx->Extensions.INTEL_blackhole_render = true;
+
if (devinfo->gen >= 8) {
ctx->Extensions.ARB_gpu_shader_int64 = devinfo->has_64bit_types;
/* requires ARB_gpu_shader_int64 */
--
2.16.2
More information about the mesa-dev
mailing list