summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/common/dri_bufmgr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers/dri/common/dri_bufmgr.c')
-rw-r--r--src/mesa/drivers/dri/common/dri_bufmgr.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/mesa/drivers/dri/common/dri_bufmgr.c b/src/mesa/drivers/dri/common/dri_bufmgr.c
index 5967d7dafb..19ea2a8f86 100644
--- a/src/mesa/drivers/dri/common/dri_bufmgr.c
+++ b/src/mesa/drivers/dri/common/dri_bufmgr.c
@@ -90,28 +90,41 @@ dri_bo_unmap(dri_bo *buf)
return buf->bufmgr->bo_unmap(buf);
}
-void
+int
dri_bo_subdata(dri_bo *bo, unsigned long offset,
unsigned long size, const void *data)
{
+ int ret;
+ if (bo->bufmgr->bo_subdata)
+ return bo->bufmgr->bo_subdata(bo, offset, size, data);
if (size == 0 || data == NULL)
- return;
+ return 0;
- dri_bo_map(bo, GL_TRUE);
+ ret = dri_bo_map(bo, GL_TRUE);
+ if (ret)
+ return ret;
memcpy((unsigned char *)bo->virtual + offset, data, size);
dri_bo_unmap(bo);
+ return 0;
}
-void
+int
dri_bo_get_subdata(dri_bo *bo, unsigned long offset,
unsigned long size, void *data)
{
+ int ret;
+ if (bo->bufmgr->bo_subdata)
+ return bo->bufmgr->bo_get_subdata(bo, offset, size, data);
+
if (size == 0 || data == NULL)
- return;
+ return 0;
- dri_bo_map(bo, GL_FALSE);
+ ret = dri_bo_map(bo, GL_FALSE);
+ if (ret)
+ return ret;
memcpy(data, (unsigned char *)bo->virtual + offset, size);
dri_bo_unmap(bo);
+ return 0;
}
void