aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Widawsky <[email protected]>2016-10-20 14:51:53 -0700
committerBen Widawsky <[email protected]>2017-03-21 14:48:11 -0700
commitfc1e9f0cb221b9b41f7bea2f83991910a2afe82b (patch)
tree0a1547ea8b60c55de3a714171158b3bd676b234d
parent2a16de9e4bb7d2f0e67fab42eb3f8a667393d04d (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 <[email protected]> Signed-off-by: Ben Widawsky <[email protected]> Reviewed-by: Eric Engestrom <[email protected]> Acked-by: Daniel Stone <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
-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 9b3816efd13..fd63919b2d2 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 b77933e100e..90223bab2b1 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;
@@ -557,7 +559,7 @@ intel_create_image_common(__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;
@@ -740,9 +742,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;
@@ -845,7 +849,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;