intel: Remove non-GEM support.
This really isn't supported at this point. GEM's been in the kernel for a year, and the fake bufmgr never really worked.
This commit is contained in:
parent
667760f53c
commit
827ba44f6e
|
@ -243,14 +243,6 @@ static void wrap_buffers( struct brw_context *brw,
|
||||||
dri_bo_unreference(brw->vb.upload.bo);
|
dri_bo_unreference(brw->vb.upload.bo);
|
||||||
brw->vb.upload.bo = dri_bo_alloc(brw->intel.bufmgr, "temporary VBO",
|
brw->vb.upload.bo = dri_bo_alloc(brw->intel.bufmgr, "temporary VBO",
|
||||||
size, 1);
|
size, 1);
|
||||||
|
|
||||||
/* Set the internal VBO\ to no-backing-store. We only use them as a
|
|
||||||
* temporary within a brw_try_draw_prims while the lock is held.
|
|
||||||
*/
|
|
||||||
/* DON'T DO THIS AS IF WE HAVE TO RE-ORG MEMORY WE NEED SOMEWHERE WITH
|
|
||||||
FAKE TO PUSH THIS STUFF */
|
|
||||||
// if (!brw->intel.ttm)
|
|
||||||
// dri_bo_fake_disable_backing_store(brw->vb.upload.bo, NULL, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_space( struct brw_context *brw,
|
static void get_space( struct brw_context *brw,
|
||||||
|
|
|
@ -80,7 +80,7 @@ intel_batchbuffer_reset(struct intel_batchbuffer *batch)
|
||||||
batch->buf = NULL;
|
batch->buf = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!batch->buffer && intel->ttm == GL_TRUE)
|
if (!batch->buffer)
|
||||||
batch->buffer = malloc (intel->maxBatchSize);
|
batch->buffer = malloc (intel->maxBatchSize);
|
||||||
|
|
||||||
batch->buf = dri_bo_alloc(intel->bufmgr, "batchbuffer",
|
batch->buf = dri_bo_alloc(intel->bufmgr, "batchbuffer",
|
||||||
|
@ -212,7 +212,7 @@ _intel_batchbuffer_flush(struct intel_batchbuffer *batch, const char *file,
|
||||||
|
|
||||||
batch->reserved_space = 0;
|
batch->reserved_space = 0;
|
||||||
/* Emit a flush if the bufmgr doesn't do it for us. */
|
/* Emit a flush if the bufmgr doesn't do it for us. */
|
||||||
if (intel->always_flush_cache || !intel->ttm) {
|
if (intel->always_flush_cache) {
|
||||||
intel_batchbuffer_emit_mi_flush(batch);
|
intel_batchbuffer_emit_mi_flush(batch);
|
||||||
used = batch->ptr - batch->map;
|
used = batch->ptr - batch->map;
|
||||||
}
|
}
|
||||||
|
|
|
@ -176,9 +176,7 @@ intelGetString(GLcontext * ctx, GLenum name)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
(void) driGetRendererString(buffer, chipset,
|
(void) driGetRendererString(buffer, chipset, DRIVER_DATE_GEM, 0);
|
||||||
(intel->ttm) ? DRIVER_DATE_GEM : DRIVER_DATE,
|
|
||||||
0);
|
|
||||||
return (GLubyte *) buffer;
|
return (GLubyte *) buffer;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -601,6 +599,7 @@ intelInitContext(struct intel_context *intel,
|
||||||
__DRIscreenPrivate *sPriv = driContextPriv->driScreenPriv;
|
__DRIscreenPrivate *sPriv = driContextPriv->driScreenPriv;
|
||||||
intelScreenPrivate *intelScreen = (intelScreenPrivate *) sPriv->private;
|
intelScreenPrivate *intelScreen = (intelScreenPrivate *) sPriv->private;
|
||||||
int fthrottle_mode;
|
int fthrottle_mode;
|
||||||
|
int bo_reuse_mode;
|
||||||
|
|
||||||
if (!_mesa_initialize_context(&intel->ctx, mesaVis, shareCtx,
|
if (!_mesa_initialize_context(&intel->ctx, mesaVis, shareCtx,
|
||||||
functions, (void *) intel)) {
|
functions, (void *) intel)) {
|
||||||
|
@ -635,18 +634,14 @@ intelInitContext(struct intel_context *intel,
|
||||||
intel->maxBatchSize = BATCH_SZ;
|
intel->maxBatchSize = BATCH_SZ;
|
||||||
|
|
||||||
intel->bufmgr = intelScreen->bufmgr;
|
intel->bufmgr = intelScreen->bufmgr;
|
||||||
intel->ttm = intelScreen->ttm;
|
|
||||||
if (intel->ttm) {
|
|
||||||
int bo_reuse_mode;
|
|
||||||
|
|
||||||
bo_reuse_mode = driQueryOptioni(&intel->optionCache, "bo_reuse");
|
bo_reuse_mode = driQueryOptioni(&intel->optionCache, "bo_reuse");
|
||||||
switch (bo_reuse_mode) {
|
switch (bo_reuse_mode) {
|
||||||
case DRI_CONF_BO_REUSE_DISABLED:
|
case DRI_CONF_BO_REUSE_DISABLED:
|
||||||
break;
|
break;
|
||||||
case DRI_CONF_BO_REUSE_ALL:
|
case DRI_CONF_BO_REUSE_ALL:
|
||||||
intel_bufmgr_gem_enable_reuse(intel->bufmgr);
|
intel_bufmgr_gem_enable_reuse(intel->bufmgr);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This doesn't yet catch all non-conformant rendering, but it's a
|
/* This doesn't yet catch all non-conformant rendering, but it's a
|
||||||
|
@ -1052,21 +1047,6 @@ intelContendedLock(struct intel_context *intel, GLuint flags)
|
||||||
sarea->ctxOwner = me;
|
sarea->ctxOwner = me;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the last consumer of the texture memory wasn't us, notify the fake
|
|
||||||
* bufmgr and record the new owner. We should have the memory shared
|
|
||||||
* between contexts of a single fake bufmgr, but this will at least make
|
|
||||||
* things correct for now.
|
|
||||||
*/
|
|
||||||
if (!intel->ttm && sarea->texAge != intel->hHWContext) {
|
|
||||||
sarea->texAge = intel->hHWContext;
|
|
||||||
intel_bufmgr_fake_contended_lock_take(intel->bufmgr);
|
|
||||||
if (INTEL_DEBUG & DEBUG_BATCH)
|
|
||||||
intel_decode_context_reset();
|
|
||||||
if (INTEL_DEBUG & DEBUG_BUFMGR)
|
|
||||||
fprintf(stderr, "Lost Textures: sarea->texAge %x hw context %x\n",
|
|
||||||
sarea->ctxOwner, intel->hHWContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Drawable changed?
|
/* Drawable changed?
|
||||||
*/
|
*/
|
||||||
if (dPriv && intel->lastStamp != dPriv->lastStamp) {
|
if (dPriv && intel->lastStamp != dPriv->lastStamp) {
|
||||||
|
|
|
@ -181,12 +181,6 @@ struct intel_context
|
||||||
struct intel_region *back_region;
|
struct intel_region *back_region;
|
||||||
struct intel_region *depth_region;
|
struct intel_region *depth_region;
|
||||||
|
|
||||||
/**
|
|
||||||
* This value indicates that the kernel memory manager is being used
|
|
||||||
* instead of the fake client-side memory manager.
|
|
||||||
*/
|
|
||||||
GLboolean ttm;
|
|
||||||
|
|
||||||
struct intel_batchbuffer *batch;
|
struct intel_batchbuffer *batch;
|
||||||
drm_intel_bo *first_post_swapbuffers_batch;
|
drm_intel_bo *first_post_swapbuffers_batch;
|
||||||
GLboolean no_batch_wrap;
|
GLboolean no_batch_wrap;
|
||||||
|
|
|
@ -79,6 +79,7 @@ static const struct dri_extension card_extensions[] = {
|
||||||
{ "GL_ARB_half_float_pixel", NULL },
|
{ "GL_ARB_half_float_pixel", NULL },
|
||||||
{ "GL_ARB_map_buffer_range", GL_ARB_map_buffer_range_functions },
|
{ "GL_ARB_map_buffer_range", GL_ARB_map_buffer_range_functions },
|
||||||
{ "GL_ARB_multitexture", NULL },
|
{ "GL_ARB_multitexture", NULL },
|
||||||
|
{ "GL_ARB_pixel_buffer_object", NULL },
|
||||||
{ "GL_ARB_point_parameters", GL_ARB_point_parameters_functions },
|
{ "GL_ARB_point_parameters", GL_ARB_point_parameters_functions },
|
||||||
{ "GL_ARB_point_sprite", NULL },
|
{ "GL_ARB_point_sprite", NULL },
|
||||||
{ "GL_ARB_shader_objects", GL_ARB_shader_objects_functions },
|
{ "GL_ARB_shader_objects", GL_ARB_shader_objects_functions },
|
||||||
|
@ -104,6 +105,8 @@ static const struct dri_extension card_extensions[] = {
|
||||||
{ "GL_EXT_blend_logic_op", NULL },
|
{ "GL_EXT_blend_logic_op", NULL },
|
||||||
{ "GL_EXT_blend_subtract", NULL },
|
{ "GL_EXT_blend_subtract", NULL },
|
||||||
{ "GL_EXT_cull_vertex", GL_EXT_cull_vertex_functions },
|
{ "GL_EXT_cull_vertex", GL_EXT_cull_vertex_functions },
|
||||||
|
{ "GL_EXT_framebuffer_blit", GL_EXT_framebuffer_blit_functions },
|
||||||
|
{ "GL_EXT_framebuffer_object", GL_EXT_framebuffer_object_functions },
|
||||||
{ "GL_EXT_fog_coord", GL_EXT_fog_coord_functions },
|
{ "GL_EXT_fog_coord", GL_EXT_fog_coord_functions },
|
||||||
{ "GL_EXT_gpu_program_parameters", GL_EXT_gpu_program_parameters_functions },
|
{ "GL_EXT_gpu_program_parameters", GL_EXT_gpu_program_parameters_functions },
|
||||||
{ "GL_EXT_packed_depth_stencil", NULL },
|
{ "GL_EXT_packed_depth_stencil", NULL },
|
||||||
|
@ -176,14 +179,6 @@ static const struct dri_extension arb_oq_extensions[] = {
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static const struct dri_extension ttm_extensions[] = {
|
|
||||||
{ "GL_ARB_pixel_buffer_object", NULL },
|
|
||||||
{ "GL_EXT_framebuffer_blit", GL_EXT_framebuffer_blit_functions },
|
|
||||||
{ "GL_EXT_framebuffer_object", GL_EXT_framebuffer_object_functions },
|
|
||||||
{ NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct dri_extension fragment_shader_extensions[] = {
|
static const struct dri_extension fragment_shader_extensions[] = {
|
||||||
{ "GL_ARB_fragment_shader", NULL },
|
{ "GL_ARB_fragment_shader", NULL },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
|
@ -202,9 +197,6 @@ intelInitExtensions(GLcontext *ctx)
|
||||||
*/
|
*/
|
||||||
driInitExtensions(ctx, card_extensions, GL_FALSE);
|
driInitExtensions(ctx, card_extensions, GL_FALSE);
|
||||||
|
|
||||||
if (intel->ttm)
|
|
||||||
driInitExtensions(ctx, ttm_extensions, GL_FALSE);
|
|
||||||
|
|
||||||
if (IS_965(intel->intelScreen->deviceID))
|
if (IS_965(intel->intelScreen->deviceID))
|
||||||
driInitExtensions(ctx, brw_extensions, GL_FALSE);
|
driInitExtensions(ctx, brw_extensions, GL_FALSE);
|
||||||
|
|
||||||
|
|
|
@ -224,16 +224,12 @@ int intel_miptree_pitch_align (struct intel_context *intel,
|
||||||
if (!mt->compressed) {
|
if (!mt->compressed) {
|
||||||
int pitch_align;
|
int pitch_align;
|
||||||
|
|
||||||
if (intel->ttm) {
|
/* XXX: Align pitch to multiple of 64 bytes for now to allow
|
||||||
/* XXX: Align pitch to multiple of 64 bytes for now to allow
|
* render-to-texture to work in all cases. This should probably be
|
||||||
* render-to-texture to work in all cases. This should probably be
|
* replaced at some point by some scheme to only do this when really
|
||||||
* replaced at some point by some scheme to only do this when really
|
* necessary.
|
||||||
* necessary.
|
*/
|
||||||
*/
|
pitch_align = 64;
|
||||||
pitch_align = 64;
|
|
||||||
} else {
|
|
||||||
pitch_align = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tiling == I915_TILING_X)
|
if (tiling == I915_TILING_X)
|
||||||
pitch_align = 512;
|
pitch_align = 512;
|
||||||
|
|
|
@ -542,55 +542,18 @@ intel_recreate_static(struct intel_context *intel,
|
||||||
region->buffer = NULL;
|
region->buffer = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (intel->ttm) {
|
assert(region_desc->bo_handle != -1);
|
||||||
assert(region_desc->bo_handle != -1);
|
region->buffer = intel_bo_gem_create_from_name(intel->bufmgr,
|
||||||
region->buffer = intel_bo_gem_create_from_name(intel->bufmgr,
|
|
||||||
name,
|
|
||||||
region_desc->bo_handle);
|
|
||||||
|
|
||||||
ret = dri_bo_get_tiling(region->buffer, ®ion->tiling,
|
|
||||||
®ion->bit_6_swizzle);
|
|
||||||
if (ret != 0) {
|
|
||||||
fprintf(stderr, "Couldn't get tiling of buffer %d (%s): %s\n",
|
|
||||||
region_desc->bo_handle, name, strerror(-ret));
|
|
||||||
intel_region_release(®ion);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (region->classic_map != NULL) {
|
|
||||||
drmUnmap(region->classic_map,
|
|
||||||
region->pitch * region->cpp * region->height);
|
|
||||||
region->classic_map = NULL;
|
|
||||||
}
|
|
||||||
ret = drmMap(intel->driFd, region_desc->handle,
|
|
||||||
region->pitch * region->cpp * region->height,
|
|
||||||
®ion->classic_map);
|
|
||||||
if (ret != 0) {
|
|
||||||
fprintf(stderr, "Failed to drmMap %s buffer\n", name);
|
|
||||||
free(region);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
region->buffer = intel_bo_fake_alloc_static(intel->bufmgr,
|
|
||||||
name,
|
name,
|
||||||
region_desc->offset,
|
region_desc->bo_handle);
|
||||||
region->pitch * region->cpp *
|
|
||||||
region->height,
|
|
||||||
region->classic_map);
|
|
||||||
|
|
||||||
/* The sarea just gives us a boolean for whether it's tiled or not,
|
ret = dri_bo_get_tiling(region->buffer, ®ion->tiling,
|
||||||
* instead of which tiling mode it is. Guess.
|
®ion->bit_6_swizzle);
|
||||||
*/
|
if (ret != 0) {
|
||||||
if (region_desc->tiled) {
|
fprintf(stderr, "Couldn't get tiling of buffer %d (%s): %s\n",
|
||||||
if (intel->gen >= 4 && region_desc == &intelScreen->depth)
|
region_desc->bo_handle, name, strerror(-ret));
|
||||||
region->tiling = I915_TILING_Y;
|
intel_region_release(®ion);
|
||||||
else
|
return NULL;
|
||||||
region->tiling = I915_TILING_X;
|
|
||||||
} else {
|
|
||||||
region->tiling = I915_TILING_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
region->bit_6_swizzle = I915_BIT_6_SWIZZLE_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(region->buffer != NULL);
|
assert(region->buffer != NULL);
|
||||||
|
|
|
@ -605,7 +605,6 @@ intelFillInModes(__DRIscreenPrivate *psp,
|
||||||
static GLboolean
|
static GLboolean
|
||||||
intel_init_bufmgr(intelScreenPrivate *intelScreen)
|
intel_init_bufmgr(intelScreenPrivate *intelScreen)
|
||||||
{
|
{
|
||||||
GLboolean gem_disable = getenv("INTEL_NO_GEM") != NULL;
|
|
||||||
int gem_kernel = 0;
|
int gem_kernel = 0;
|
||||||
GLboolean gem_supported;
|
GLboolean gem_supported;
|
||||||
struct drm_i915_getparam gp;
|
struct drm_i915_getparam gp;
|
||||||
|
@ -622,43 +621,24 @@ intel_init_bufmgr(intelScreenPrivate *intelScreen)
|
||||||
/* If we've got a new enough DDX that's initializing GEM and giving us
|
/* If we've got a new enough DDX that's initializing GEM and giving us
|
||||||
* object handles for the shared buffers, use that.
|
* object handles for the shared buffers, use that.
|
||||||
*/
|
*/
|
||||||
intelScreen->ttm = GL_FALSE;
|
|
||||||
if (intelScreen->driScrnPriv->dri2.enabled)
|
if (intelScreen->driScrnPriv->dri2.enabled)
|
||||||
gem_supported = GL_TRUE;
|
gem_supported = GL_TRUE;
|
||||||
else if (intelScreen->driScrnPriv->ddx_version.minor >= 9 &&
|
else if (intelScreen->driScrnPriv->ddx_version.minor >= 9 &&
|
||||||
gem_kernel &&
|
gem_kernel &&
|
||||||
intelScreen->front.bo_handle != -1)
|
intelScreen->front.bo_handle != -1)
|
||||||
gem_supported = GL_TRUE;
|
gem_supported = GL_TRUE;
|
||||||
else
|
else {
|
||||||
gem_supported = GL_FALSE;
|
fprintf(stderr, "[%s:%u] Error initializing GEM.\n",
|
||||||
|
__func__, __LINE__);
|
||||||
if (!gem_disable && gem_supported) {
|
return GL_FALSE;
|
||||||
intelScreen->bufmgr = intel_bufmgr_gem_init(spriv->fd, BATCH_SZ);
|
|
||||||
if (intelScreen->bufmgr != NULL)
|
|
||||||
intelScreen->ttm = GL_TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
intelScreen->bufmgr = intel_bufmgr_gem_init(spriv->fd, BATCH_SZ);
|
||||||
/* Otherwise, use the classic buffer manager. */
|
/* Otherwise, use the classic buffer manager. */
|
||||||
if (intelScreen->bufmgr == NULL) {
|
if (intelScreen->bufmgr == NULL) {
|
||||||
if (gem_disable) {
|
fprintf(stderr, "[%s:%u] Error initializing buffer manager.\n",
|
||||||
_mesa_warning(NULL, "GEM disabled. Using classic.");
|
__func__, __LINE__);
|
||||||
} else {
|
return GL_FALSE;
|
||||||
_mesa_warning(NULL,
|
|
||||||
"Failed to initialize GEM. Falling back to classic.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (intelScreen->tex.size == 0) {
|
|
||||||
fprintf(stderr, "[%s:%u] Error initializing buffer manager.\n",
|
|
||||||
__func__, __LINE__);
|
|
||||||
return GL_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
intelScreen->bufmgr =
|
|
||||||
intel_bufmgr_fake_init(spriv->fd,
|
|
||||||
intelScreen->tex.offset,
|
|
||||||
intelScreen->tex.map,
|
|
||||||
intelScreen->tex.size,
|
|
||||||
(unsigned int * volatile)
|
|
||||||
&intelScreen->sarea->last_dispatch);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (intel_get_param(spriv, I915_PARAM_NUM_FENCES_AVAIL, &num_fences))
|
if (intel_get_param(spriv, I915_PARAM_NUM_FENCES_AVAIL, &num_fences))
|
||||||
|
|
|
@ -77,7 +77,6 @@ typedef struct
|
||||||
GLboolean no_hw;
|
GLboolean no_hw;
|
||||||
|
|
||||||
GLboolean no_vbo;
|
GLboolean no_vbo;
|
||||||
int ttm;
|
|
||||||
dri_bufmgr *bufmgr;
|
dri_bufmgr *bufmgr;
|
||||||
GLboolean kernel_exec_fencing;
|
GLboolean kernel_exec_fencing;
|
||||||
|
|
||||||
|
|
|
@ -613,15 +613,7 @@ intel_set_span_functions(struct intel_context *intel,
|
||||||
struct gl_renderbuffer *rb)
|
struct gl_renderbuffer *rb)
|
||||||
{
|
{
|
||||||
struct intel_renderbuffer *irb = (struct intel_renderbuffer *) rb;
|
struct intel_renderbuffer *irb = (struct intel_renderbuffer *) rb;
|
||||||
uint32_t tiling;
|
uint32_t tiling = irb->region->tiling;
|
||||||
|
|
||||||
/* If in GEM mode, we need to do the tile address swizzling ourselves,
|
|
||||||
* instead of the fence registers handling it.
|
|
||||||
*/
|
|
||||||
if (intel->ttm)
|
|
||||||
tiling = irb->region->tiling;
|
|
||||||
else
|
|
||||||
tiling = I915_TILING_NONE;
|
|
||||||
|
|
||||||
if (intel->intelScreen->kernel_exec_fencing) {
|
if (intel->intelScreen->kernel_exec_fencing) {
|
||||||
switch (irb->texformat) {
|
switch (irb->texformat) {
|
||||||
|
@ -673,6 +665,9 @@ intel_set_span_functions(struct intel_context *intel,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If in GEM mode, we need to do the tile address swizzling ourselves,
|
||||||
|
* instead of the fence registers handling it.
|
||||||
|
*/
|
||||||
switch (irb->texformat) {
|
switch (irb->texformat) {
|
||||||
case MESA_FORMAT_RGB565:
|
case MESA_FORMAT_RGB565:
|
||||||
switch (tiling) {
|
switch (tiling) {
|
||||||
|
|
Loading…
Reference in New Issue