summaryrefslogtreecommitdiff
path: root/src/gallium/state_trackers/dri/dri2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/state_trackers/dri/dri2.c')
-rw-r--r--src/gallium/state_trackers/dri/dri2.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
index d073141952..e546fc55d5 100644
--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -1597,18 +1597,24 @@ dri2_map_image(__DRIcontext *context, __DRIimage *image,
struct pipe_context *pipe = ctx->st->pipe;
enum pipe_transfer_usage pipe_access = 0;
struct pipe_transfer *trans;
+ struct pipe_box box;
+ unsigned user_stride = 0;
void *map;
if (!image || !data || *data)
return NULL;
if (flags & __DRI_IMAGE_TRANSFER_READ)
- pipe_access |= PIPE_TRANSFER_READ;
+ pipe_access |= PIPE_TRANSFER_READ;
if (flags & __DRI_IMAGE_TRANSFER_WRITE)
- pipe_access |= PIPE_TRANSFER_WRITE;
+ pipe_access |= PIPE_TRANSFER_WRITE;
+ if (flags & __DRI_IMAGE_TRANSFER_USER_STRIDE)
+ user_stride = *stride;
- map = pipe_transfer_map(pipe, image->texture,
- 0, 0, pipe_access, x0, y0, width, height,
+ u_box_2d(x0, y0, width, height, &box);
+
+ map = pipe->transfer_map(pipe, image->texture,
+ 0, pipe_access, &box, user_stride,
&trans);
if (map) {
*data = trans;
@@ -1631,13 +1637,12 @@ static int
dri2_get_capabilities(__DRIscreen *_screen)
{
struct dri_screen *screen = dri_screen(_screen);
-
return (screen->can_share_buffer ? __DRI_IMAGE_CAP_GLOBAL_NAMES : 0);
}
/* The extension is modified during runtime if DRI_PRIME is detected */
static __DRIimageExtension dri2ImageExtension = {
- .base = { __DRI_IMAGE, 17 },
+ .base = { __DRI_IMAGE, 18 },
.createImageFromName = dri2_create_image_from_name,
.createImageFromRenderbuffer = dri2_create_image_from_renderbuffer,