diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/dri/common/dri_bufmgr_ttm.c | 13 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/i915tex/intel_screen.c | 20 | 
2 files changed, 23 insertions, 10 deletions
| diff --git a/src/mesa/drivers/dri/common/dri_bufmgr_ttm.c b/src/mesa/drivers/dri/common/dri_bufmgr_ttm.c index a721a7ce5c..508d4f5053 100644 --- a/src/mesa/drivers/dri/common/dri_bufmgr_ttm.c +++ b/src/mesa/drivers/dri/common/dri_bufmgr_ttm.c @@ -353,6 +353,7 @@ dri_bufmgr_ttm_init(int fd, unsigned int fence_type,  		    unsigned int fence_type_flush)  {     dri_bufmgr_ttm *bufmgr_ttm; +   dri_bo *test_alloc;     bufmgr_ttm = malloc(sizeof(*bufmgr_ttm));     bufmgr_ttm->fd = fd; @@ -372,5 +373,17 @@ dri_bufmgr_ttm_init(int fd, unsigned int fence_type,     bufmgr_ttm->bufmgr.fence_unreference = dri_ttm_fence_unreference;     bufmgr_ttm->bufmgr.fence_wait = dri_ttm_fence_wait; +   /* Attempt an allocation to make sure that the DRM was actually set up for +    * TTM. +    */ +   test_alloc = dri_bo_alloc((dri_bufmgr *)bufmgr_ttm, "test allocation", +     4096, 4096, DRM_BO_FLAG_MEM_LOCAL | DRM_BO_FLAG_MEM_TT); +   if (test_alloc == NULL) { +      _glthread_DESTROY_MUTEX(bufmgr_ttm->mutex); +      free(bufmgr_ttm); +      return NULL; +   } +   dri_bo_unreference(test_alloc); +     return &bufmgr_ttm->bufmgr;  } diff --git a/src/mesa/drivers/dri/i915tex/intel_screen.c b/src/mesa/drivers/dri/i915tex/intel_screen.c index 4d61407909..1ae2819ae2 100644 --- a/src/mesa/drivers/dri/i915tex/intel_screen.c +++ b/src/mesa/drivers/dri/i915tex/intel_screen.c @@ -123,8 +123,6 @@ intelMapScreenRegions(__DRIscreenPrivate * sPriv)     if (0)        _mesa_printf("TEX 0x%08x ", intelScreen->tex.handle);     if (intelScreen->tex.size != 0) { -      intelScreen->ttm = GL_FALSE; -        if (drmMap(sPriv->fd,  		 intelScreen->tex.handle,  		 intelScreen->tex.size, @@ -132,8 +130,6 @@ intelMapScreenRegions(__DRIscreenPrivate * sPriv)  	 intelUnmapScreenRegions(intelScreen);  	 return GL_FALSE;        } -   } else { -      intelScreen->ttm = GL_TRUE;     }     if (0) @@ -530,12 +526,16 @@ intelInitDriver(__DRIscreenPrivate * sPriv)        (*glx_enable_extension) (psc, "GLX_SGI_make_current_read");     } -   if (intelScreen->ttm) { -      intelScreen->bufmgr = dri_bufmgr_ttm_init(sPriv->fd, -						DRM_FENCE_TYPE_EXE, -						DRM_FENCE_TYPE_EXE | -						DRM_I915_FENCE_TYPE_RW); -   } else { +   intelScreen->bufmgr = dri_bufmgr_ttm_init(sPriv->fd, +					     DRM_FENCE_TYPE_EXE, +					     DRM_FENCE_TYPE_EXE | +					     DRM_I915_FENCE_TYPE_RW); +   if (intelScreen->bufmgr == NULL) { +      if (intelScreen->tex.size == 0) { +	 fprintf(stderr, "[%s:%u] Error initializing buffer manager.\n", +		 __func__, __LINE__); +	 return GL_FALSE; +      }        intelScreen->bufmgr = dri_bufmgr_fake_init(intelScreen->tex.offset,  						 intelScreen->tex.map,  						 intelScreen->tex.size, | 
