add tiling support for intel_image_write() all drm image can be written from app --- src/mesa/drivers/dri/intel/intel_screen.c | 17 +++++++++++++++-- 1 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c index 6daeb05..3ce9a46 100644 --- a/src/mesa/drivers/dri/intel/intel_screen.c +++ b/src/mesa/drivers/dri/intel/intel_screen.c @@ -324,10 +324,13 @@ intel_create_image(__DRIscreen *screen, tiling = I915_TILING_NONE; } +#if 0 + // add tiling support in intel_image_write(), so all drm images are ok for write /* We only support write for cursor drm images */ if ((use & __DRI_IMAGE_USE_WRITE) && use != (__DRI_IMAGE_USE_WRITE | __DRI_IMAGE_USE_CURSOR)) return NULL; +#endif image = intel_allocate_image(format, loaderPrivate); image->usage = use; @@ -417,9 +420,19 @@ intel_image_write(__DRIimage *image, const void *buf, size_t count) if (!(image->usage & __DRI_IMAGE_USE_WRITE)) return -1; - drm_intel_bo_map(image->region->bo, true); + int tiling, swizzle; + dri_bo_get_tiling(image->region->bo, &tiling, &swizzle); + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_map_gtt(image->region->bo); + else + drm_intel_bo_map(image->region->bo, true); + memcpy(image->region->bo->virtual, buf, count); - drm_intel_bo_unmap(image->region->bo); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_unmap_gtt(image->region->bo); + else + drm_intel_bo_unmap(image->region->bo); return 0; } -- 1.7.5.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev