dri2: Make createImageFromName() take a __DRIscreen instead of __DRIcontext
We can't expect to have a context when this is called, and we don't need one so just require a __DRIscreen instead. Reported by Yu Dai <yu.dai@intel.com>
This commit is contained in:
@@ -805,7 +805,7 @@ typedef struct __DRIimageExtensionRec __DRIimageExtension;
|
|||||||
struct __DRIimageExtensionRec {
|
struct __DRIimageExtensionRec {
|
||||||
__DRIextension base;
|
__DRIextension base;
|
||||||
|
|
||||||
__DRIimage *(*createImageFromName)(__DRIcontext *context,
|
__DRIimage *(*createImageFromName)(__DRIscreen *screen,
|
||||||
int width, int height, int format,
|
int width, int height, int format,
|
||||||
int name, int pitch,
|
int name, int pitch,
|
||||||
void *loaderPrivate);
|
void *loaderPrivate);
|
||||||
|
@@ -1509,7 +1509,6 @@ dri2_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx,
|
|||||||
EGLClientBuffer buffer, const EGLint *attr_list)
|
EGLClientBuffer buffer, const EGLint *attr_list)
|
||||||
{
|
{
|
||||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||||
struct dri2_egl_context *dri2_ctx = dri2_egl_context(ctx);
|
|
||||||
struct dri2_egl_image *dri2_img;
|
struct dri2_egl_image *dri2_img;
|
||||||
unsigned int attachments[1];
|
unsigned int attachments[1];
|
||||||
xcb_drawable_t drawable;
|
xcb_drawable_t drawable;
|
||||||
@@ -1577,7 +1576,7 @@ dri2_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx,
|
|||||||
|
|
||||||
stride = buffers[0].pitch / buffers[0].cpp;
|
stride = buffers[0].pitch / buffers[0].cpp;
|
||||||
dri2_img->dri_image =
|
dri2_img->dri_image =
|
||||||
dri2_dpy->image->createImageFromName(dri2_ctx->dri_context,
|
dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen,
|
||||||
buffers_reply->width,
|
buffers_reply->width,
|
||||||
buffers_reply->height,
|
buffers_reply->height,
|
||||||
format,
|
format,
|
||||||
@@ -1628,7 +1627,6 @@ dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, _EGLContext *ctx,
|
|||||||
EGLClientBuffer buffer, const EGLint *attr_list)
|
EGLClientBuffer buffer, const EGLint *attr_list)
|
||||||
{
|
{
|
||||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||||
struct dri2_egl_context *dri2_ctx = dri2_egl_context(ctx);
|
|
||||||
struct dri2_egl_image *dri2_img;
|
struct dri2_egl_image *dri2_img;
|
||||||
EGLint width, height, format, name, stride, pitch, i, err;
|
EGLint width, height, format, name, stride, pitch, i, err;
|
||||||
|
|
||||||
@@ -1697,7 +1695,7 @@ dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, _EGLContext *ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
dri2_img->dri_image =
|
dri2_img->dri_image =
|
||||||
dri2_dpy->image->createImageFromName(dri2_ctx->dri_context,
|
dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
format,
|
format,
|
||||||
|
@@ -305,11 +305,11 @@ dri2_lookup_egl_image(struct dri_context *ctx, void *handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static __DRIimage *
|
static __DRIimage *
|
||||||
dri2_create_image_from_name(__DRIcontext *context,
|
dri2_create_image_from_name(__DRIscreen *_screen,
|
||||||
int width, int height, int format,
|
int width, int height, int format,
|
||||||
int name, int pitch, void *loaderPrivate)
|
int name, int pitch, void *loaderPrivate)
|
||||||
{
|
{
|
||||||
struct dri_screen *screen = dri_screen(context->driScreenPriv);
|
struct dri_screen *screen = dri_screen(_screen);
|
||||||
__DRIimage *img;
|
__DRIimage *img;
|
||||||
struct pipe_resource templ;
|
struct pipe_resource templ;
|
||||||
struct winsys_handle whandle;
|
struct winsys_handle whandle;
|
||||||
|
@@ -123,12 +123,12 @@ static const struct __DRI2flushExtensionRec intelFlushExtension = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static __DRIimage *
|
static __DRIimage *
|
||||||
intel_create_image_from_name(__DRIcontext *context,
|
intel_create_image_from_name(__DRIscreen *screen,
|
||||||
int width, int height, int format,
|
int width, int height, int format,
|
||||||
int name, int pitch, void *loaderPrivate)
|
int name, int pitch, void *loaderPrivate)
|
||||||
{
|
{
|
||||||
|
struct intel_screen *intelScreen = screen->private;
|
||||||
__DRIimage *image;
|
__DRIimage *image;
|
||||||
struct intel_context *intel = context->driverPrivate;
|
|
||||||
int cpp;
|
int cpp;
|
||||||
|
|
||||||
image = CALLOC(sizeof *image);
|
image = CALLOC(sizeof *image);
|
||||||
@@ -159,7 +159,7 @@ intel_create_image_from_name(__DRIcontext *context,
|
|||||||
image->data = loaderPrivate;
|
image->data = loaderPrivate;
|
||||||
cpp = _mesa_get_format_bytes(image->format);
|
cpp = _mesa_get_format_bytes(image->format);
|
||||||
|
|
||||||
image->region = intel_region_alloc_for_handle(intel->intelScreen,
|
image->region = intel_region_alloc_for_handle(intelScreen,
|
||||||
cpp, width, height,
|
cpp, width, height,
|
||||||
pitch, name, "image");
|
pitch, name, "image");
|
||||||
if (image->region == NULL) {
|
if (image->region == NULL) {
|
||||||
|
Reference in New Issue
Block a user