Mesa (master): i965/screen: Use ISL for doing image import checks
Jason Ekstrand
jekstrand at kemper.freedesktop.org
Thu Jul 13 04:16:21 UTC 2017
Module: Mesa
Branch: master
Commit: b29c364f0d9386125c31784cf798cb355c0ba5e7
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b29c364f0d9386125c31784cf798cb355c0ba5e7
Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date: Mon Jun 12 18:57:32 2017 -0700
i965/screen: Use ISL for doing image import checks
Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
Reviewed-by: Chad Versace <chadversary at chromium.org>
---
src/mesa/drivers/dri/i965/intel_screen.c | 32 ++++++++++++++++++++++++++++----
1 file changed, 28 insertions(+), 4 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index fd9bbb11b9..d2620dc9ed 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -860,8 +860,8 @@ intel_create_image_from_fds_common(__DRIscreen *dri_screen,
struct intel_screen *screen = dri_screen->driverPrivate;
struct intel_image_format *f;
__DRIimage *image;
- unsigned tiled_height;
int i, index;
+ bool ok;
if (fds == NULL || num_fds < 1)
return NULL;
@@ -912,7 +912,6 @@ intel_create_image_from_fds_common(__DRIscreen *dri_screen,
image->modifier = modifier;
else
image->modifier = tiling_to_modifier(image->bo->tiling_mode);
- tiled_height = get_tiled_height(image->modifier, height);
int size = 0;
for (i = 0; i < f->nplanes; i++) {
@@ -920,8 +919,33 @@ intel_create_image_from_fds_common(__DRIscreen *dri_screen,
image->offsets[index] = offsets[index];
image->strides[index] = strides[index];
- const int plane_height = tiled_height >> f->planes[i].height_shift;
- const int end = offsets[index] + plane_height * strides[index];
+ const struct isl_drm_modifier_info *mod_info =
+ isl_drm_modifier_get_info(image->modifier);
+
+ mesa_format format = driImageFormatToGLFormat(f->planes[i].dri_format);
+
+ struct isl_surf surf;
+ ok = isl_surf_init(&screen->isl_dev, &surf,
+ .dim = ISL_SURF_DIM_2D,
+ .format = brw_isl_format_for_mesa_format(format),
+ .width = image->width >> f->planes[i].width_shift,
+ .height = image->height >> f->planes[i].height_shift,
+ .depth = 1,
+ .levels = 1,
+ .array_len = 1,
+ .samples = 1,
+ .row_pitch = strides[index],
+ .usage = ISL_SURF_USAGE_RENDER_TARGET_BIT |
+ ISL_SURF_USAGE_TEXTURE_BIT |
+ ISL_SURF_USAGE_STORAGE_BIT,
+ .tiling_flags = (1 << mod_info->tiling));
+ if (!ok) {
+ brw_bo_unreference(image->bo);
+ free(image);
+ return NULL;
+ }
+
+ const int end = offsets[index] + surf.size;
if (size < end)
size = end;
}
More information about the mesa-commit
mailing list