summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/i915tex/intel_regions.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2007-08-16 14:32:53 -0700
committerEric Anholt <eric@anholt.net>2007-08-16 14:38:33 -0700
commit3e168a0ec840af65863e197f4a884aae905b213e (patch)
tree5d838ff3e80734ff90de6583809a0f0f66d9d8aa /src/mesa/drivers/dri/i915tex/intel_regions.c
parentb6ad5e7de8dc84ee42eeeb62d2112f096413b335 (diff)
Convert TTM code to require the server provide buffers for front/back/depth.
This removes the use of fake buffers from the driver, such that it could probably be removed from the interface. It also should assist in proper synchronization of access.
Diffstat (limited to 'src/mesa/drivers/dri/i915tex/intel_regions.c')
-rw-r--r--src/mesa/drivers/dri/i915tex/intel_regions.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/mesa/drivers/dri/i915tex/intel_regions.c b/src/mesa/drivers/dri/i915tex/intel_regions.c
index 4e3cea5e05..4eac859a13 100644
--- a/src/mesa/drivers/dri/i915tex/intel_regions.c
+++ b/src/mesa/drivers/dri/i915tex/intel_regions.c
@@ -147,6 +147,7 @@ intel_region_release(struct intel_region **region)
struct intel_region *
intel_region_create_static(intelScreenPrivate *intelScreen,
GLuint mem_type,
+ unsigned int bo_handle,
GLuint offset,
void *virtual,
GLuint cpp, GLuint pitch, GLuint height)
@@ -159,9 +160,18 @@ intel_region_create_static(intelScreenPrivate *intelScreen,
region->height = height; /* needed? */
region->refcount = 1;
- region->buffer = dri_bo_alloc_static(intelScreen->bufmgr, "static region",
- offset, pitch * cpp * height, virtual,
- DRM_BO_FLAG_MEM_TT);
+ if (intelScreen->ttm) {
+ assert(bo_handle != -1);
+ region->buffer = dri_ttm_bo_create_from_handle(intelScreen->bufmgr,
+ "static region",
+ bo_handle);
+ } else {
+ region->buffer = dri_bo_alloc_static(intelScreen->bufmgr,
+ "static region",
+ offset, pitch * cpp * height,
+ virtual,
+ DRM_BO_FLAG_MEM_TT);
+ }
return region;
}
@@ -172,6 +182,7 @@ void
intel_region_update_static(intelScreenPrivate *intelScreen,
struct intel_region *region,
GLuint mem_type,
+ unsigned int bo_handle,
GLuint offset,
void *virtual,
GLuint cpp, GLuint pitch, GLuint height)
@@ -188,9 +199,18 @@ intel_region_update_static(intelScreenPrivate *intelScreen,
*/
dri_bo_unreference(region->buffer);
- region->buffer = dri_bo_alloc_static(intelScreen->bufmgr, "static region",
- offset, pitch * cpp * height, virtual,
- DRM_BO_FLAG_MEM_TT);
+ if (intelScreen->ttm) {
+ assert(bo_handle != -1);
+ region->buffer = dri_ttm_bo_create_from_handle(intelScreen->bufmgr,
+ "static region",
+ bo_handle);
+ } else {
+ region->buffer = dri_bo_alloc_static(intelScreen->bufmgr,
+ "static region",
+ offset, pitch * cpp * height,
+ virtual,
+ DRM_BO_FLAG_MEM_TT);
+ }
}