From: Kevin Rogovin <kevin.rogovin@xxxxxxxxx> --- src/intel/common/gen_debug.c | 1 + src/intel/common/gen_debug.h | 1 + src/mesa/drivers/dri/i965/intel_screen.c | 26 ++++++++++++++++++++++++++ src/mesa/drivers/dri/i965/intel_screen.h | 12 ++++++++++++ 4 files changed, 40 insertions(+) diff --git a/src/intel/common/gen_debug.c b/src/intel/common/gen_debug.c index f58c593c44..7bd6723311 100644 --- a/src/intel/common/gen_debug.c +++ b/src/intel/common/gen_debug.c @@ -84,6 +84,7 @@ static const struct debug_control debug_control[] = { { "nohiz", DEBUG_NO_HIZ }, { "color", DEBUG_COLOR }, { "reemit", DEBUG_REEMIT }, + { "check_scratch", DEBUG_CHECK_SCRATH }, { NULL, 0 } }; diff --git a/src/intel/common/gen_debug.h b/src/intel/common/gen_debug.h index e418e3fb16..5e224a45f0 100644 --- a/src/intel/common/gen_debug.h +++ b/src/intel/common/gen_debug.h @@ -83,6 +83,7 @@ extern uint64_t INTEL_DEBUG; #define DEBUG_NO_HIZ (1ull << 39) #define DEBUG_COLOR (1ull << 40) #define DEBUG_REEMIT (1ull << 41) +#define DEBUG_CHECK_SCRATH (1ull << 42) #ifdef HAVE_ANDROID_PLATFORM #define LOG_TAG "INTEL-MESA" diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index 38769babf0..044be8fe85 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -1557,6 +1557,12 @@ intelDestroyScreen(__DRIscreen * sPriv) brw_bufmgr_destroy(screen->bufmgr); driDestroyOptionInfo(&screen->optionCache); + if (screen->debug_batchbuffer.enabled) { + simple_mtx_destroy(&screen->debug_batchbuffer.mutex); + free(screen->debug_batchbuffer.noise_values); + free(screen->debug_batchbuffer.tmp); + } + ralloc_free(screen); sPriv->driverPrivate = NULL; } @@ -2610,6 +2616,26 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen) } } + screen->debug_batchbuffer.enabled = false; + if (INTEL_DEBUG & DEBUG_CHECK_SCRATH) { + struct drm_i915_scratch_page sc; + int err; + + sc.buffer_size = 0; + sc.buffer_ptr = 0; + err = drmIoctl(dri_screen->fd, DRM_IOCTL_I915_READ_SCRATCH_PAGE, &sc); + if (err == 0) { + screen->debug_batchbuffer.enabled = true; + simple_mtx_init(&screen->debug_batchbuffer.mutex, mtx_plain); + screen->debug_batchbuffer.buffer_size = sc.buffer_size; + screen->debug_batchbuffer.noise_values = calloc(screen->debug_batchbuffer.buffer_size, 1); + screen->debug_batchbuffer.tmp = calloc(screen->debug_batchbuffer.buffer_size, 1); + for (uint64_t i = 0; i < screen->debug_batchbuffer.buffer_size; ++i) { + screen->debug_batchbuffer.noise_values[i] = rand() & 0xFF; + } + } + } + return (const __DRIconfig**) intel_screen_make_configs(dri_screen); } diff --git a/src/mesa/drivers/dri/i965/intel_screen.h b/src/mesa/drivers/dri/i965/intel_screen.h index 7948617b7f..7d56106aa2 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.h +++ b/src/mesa/drivers/dri/i965/intel_screen.h @@ -37,6 +37,7 @@ #include "common/gen_device_info.h" #include "i915_drm.h" #include "util/xmlconfig.h" +#include "util/simple_mtx.h" #include "isl/isl.h" @@ -114,6 +115,17 @@ struct intel_screen */ int eu_total; + /** + * Struct to perform out-of-bound GEM BO write checking + */ + struct { + bool enabled; + simple_mtx_t mutex; + uint32_t buffer_size; + uint8_t *noise_values; + uint8_t *tmp; + } debug_batchbuffer; + bool mesa_format_supports_texture[MESA_FORMAT_COUNT]; bool mesa_format_supports_render[MESA_FORMAT_COUNT]; enum isl_format mesa_to_isl_render_format[MESA_FORMAT_COUNT]; -- 2.15.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx