summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r--src/mesa/drivers/dri/i965/brw_bufmgr.c57
1 files changed, 20 insertions, 37 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.c b/src/mesa/drivers/dri/i965/brw_bufmgr.c
index 74d6d640bf6..2e55363ece0 100644
--- a/src/mesa/drivers/dri/i965/brw_bufmgr.c
+++ b/src/mesa/drivers/dri/i965/brw_bufmgr.c
@@ -639,11 +639,26 @@ brw_bo_unreference(struct brw_bo *bo)
}
}
+static void
+set_domain(struct brw_bo *bo, uint32_t read_domains, uint32_t write_domain)
+{
+ struct drm_i915_gem_set_domain sd = {
+ .handle = bo->gem_handle,
+ .read_domains = read_domains,
+ .write_domain = write_domain,
+ };
+
+ if (drmIoctl(bo->bufmgr->fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &sd) != 0) {
+ DBG("%s:%d: Error setting memory domains %d (%08x %08x): %s.\n",
+ __FILE__, __LINE__, bo->gem_handle, read_domains, write_domain,
+ strerror(errno));
+ }
+}
+
int
brw_bo_map(struct brw_bo *bo, int write_enable)
{
struct brw_bufmgr *bufmgr = bo->bufmgr;
- struct drm_i915_gem_set_domain set_domain;
int ret;
pthread_mutex_lock(&bufmgr->lock);
@@ -672,18 +687,8 @@ brw_bo_map(struct brw_bo *bo, int write_enable)
DBG("bo_map: %d (%s) -> %p\n", bo->gem_handle, bo->name, bo->mem_virtual);
bo->virtual = bo->mem_virtual;
- memclear(set_domain);
- set_domain.handle = bo->gem_handle;
- set_domain.read_domains = I915_GEM_DOMAIN_CPU;
- if (write_enable)
- set_domain.write_domain = I915_GEM_DOMAIN_CPU;
- else
- set_domain.write_domain = 0;
- ret = drmIoctl(bufmgr->fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &set_domain);
- if (ret != 0) {
- DBG("%s:%d: Error setting to CPU domain %d: %s\n",
- __FILE__, __LINE__, bo->gem_handle, strerror(errno));
- }
+ set_domain(bo, I915_GEM_DOMAIN_CPU,
+ write_enable ? I915_GEM_DOMAIN_CPU : 0);
bo_mark_mmaps_incoherent(bo);
VG(VALGRIND_MAKE_MEM_DEFINED(bo->mem_virtual, bo->size));
@@ -742,7 +747,6 @@ int
brw_bo_map_gtt(struct brw_bo *bo)
{
struct brw_bufmgr *bufmgr = bo->bufmgr;
- struct drm_i915_gem_set_domain set_domain;
int ret;
pthread_mutex_lock(&bufmgr->lock);
@@ -762,15 +766,7 @@ brw_bo_map_gtt(struct brw_bo *bo)
* tell it when we're about to use things if we had done
* rendering and it still happens to be bound to the GTT.
*/
- memclear(set_domain);
- set_domain.handle = bo->gem_handle;
- set_domain.read_domains = I915_GEM_DOMAIN_GTT;
- set_domain.write_domain = I915_GEM_DOMAIN_GTT;
- ret = drmIoctl(bufmgr->fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &set_domain);
- if (ret != 0) {
- DBG("%s:%d: Error setting domain %d: %s\n",
- __FILE__, __LINE__, bo->gem_handle, strerror(errno));
- }
+ set_domain(bo, I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
bo_mark_mmaps_incoherent(bo);
VG(VALGRIND_MAKE_MEM_DEFINED(bo->gtt_virtual, bo->size));
@@ -903,20 +899,7 @@ brw_bo_get_subdata(struct brw_bo *bo, unsigned long offset,
void
brw_bo_wait_rendering(struct brw_bo *bo)
{
- struct brw_bufmgr *bufmgr = bo->bufmgr;
- struct drm_i915_gem_set_domain set_domain;
- int ret;
-
- memclear(set_domain);
- set_domain.handle = bo->gem_handle;
- set_domain.read_domains = I915_GEM_DOMAIN_GTT;
- set_domain.write_domain = I915_GEM_DOMAIN_GTT;
- ret = drmIoctl(bufmgr->fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &set_domain);
- if (ret != 0) {
- DBG("%s:%d: Error setting memory domains %d (%08x %08x): %s .\n",
- __FILE__, __LINE__, bo->gem_handle,
- set_domain.read_domains, set_domain.write_domain, strerror(errno));
- }
+ set_domain(bo, I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
}
/**