summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Widawsky <ben@bwidawsk.net>2016-10-20 14:51:53 -0700
committerBen Widawsky <ben@bwidawsk.net>2017-03-09 16:09:58 -0800
commit59d93ef582388f2cc17f0f7a9b8d09bca29a7709 (patch)
treefb89251b3ea851eca6c56699dc2cabd23878071c
parent2ee34bd5dcf30f202c9f37e3d986640f71b8a210 (diff)
i965/dri: Store the screen associated with the image
I intend to need to get to the devinfo structure, and storing the screen is an easy way to do that. It seems to be the consensus that you cannot share an image between multiple screens. Scape-goat: Rob Clark <robdclark@gmail.com> Signed-off-by: Ben Widawsky <ben@bwidawsk.net> Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com> Acked-by: Daniel Stone <daniels@collabora.com>
-rw-r--r--src/mesa/drivers/dri/i965/intel_image.h1
-rw-r--r--src/mesa/drivers/dri/i965/intel_screen.c16
2 files changed, 11 insertions, 6 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_image.h b/src/mesa/drivers/dri/i965/intel_image.h
index 9b3816efd1..fd63919b2d 100644
--- a/src/mesa/drivers/dri/i965/intel_image.h
+++ b/src/mesa/drivers/dri/i965/intel_image.h
@@ -65,6 +65,7 @@ struct intel_image_format {
};
struct __DRIimageRec {
+ struct intel_screen *screen;
drm_intel_bo *bo;
uint32_t pitch; /**< in bytes */
GLenum internal_format;
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index 21786eb54a..439400b3ae 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -323,7 +323,8 @@ static boolean intel_lookup_fourcc(int dri_format, int *fourcc)
}
static __DRIimage *
-intel_allocate_image(int dri_format, void *loaderPrivate)
+intel_allocate_image(struct intel_screen *screen, int dri_format,
+ void *loaderPrivate)
{
__DRIimage *image;
@@ -331,6 +332,7 @@ intel_allocate_image(int dri_format, void *loaderPrivate)
if (image == NULL)
return NULL;
+ image->screen = screen;
image->dri_format = dri_format;
image->offset = 0;
@@ -381,7 +383,7 @@ intel_create_image_from_name(__DRIscreen *dri_screen,
__DRIimage *image;
int cpp;
- image = intel_allocate_image(format, loaderPrivate);
+ image = intel_allocate_image(screen, format, loaderPrivate);
if (image == NULL)
return NULL;
@@ -531,7 +533,7 @@ intel_create_image(__DRIscreen *dri_screen,
if (use & __DRI_IMAGE_USE_LINEAR)
tiling = I915_TILING_NONE;
- image = intel_allocate_image(format, loaderPrivate);
+ image = intel_allocate_image(screen, format, loaderPrivate);
if (image == NULL)
return NULL;
@@ -693,9 +695,11 @@ intel_create_image_from_fds(__DRIscreen *dri_screen,
return NULL;
if (f->nplanes == 1)
- image = intel_allocate_image(f->planes[0].dri_format, loaderPrivate);
+ image = intel_allocate_image(screen, f->planes[0].dri_format,
+ loaderPrivate);
else
- image = intel_allocate_image(__DRI_IMAGE_FORMAT_NONE, loaderPrivate);
+ image = intel_allocate_image(screen, __DRI_IMAGE_FORMAT_NONE,
+ loaderPrivate);
if (image == NULL)
return NULL;
@@ -798,7 +802,7 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate)
offset = parent->offsets[index];
stride = parent->strides[index];
- image = intel_allocate_image(dri_format, loaderPrivate);
+ image = intel_allocate_image(parent->screen, dri_format, loaderPrivate);
if (image == NULL)
return NULL;