- libdrm-intel-gtt.patch: Fix GTT maps for intel.
This commit is contained in:
parent
0f9597b15b
commit
a04c208607
153
libdrm-intel-gtt.patch
Normal file
153
libdrm-intel-gtt.patch
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
diff -up libdrm-2.4.5/libdrm/intel/intel_bufmgr_gem.c.jx libdrm-2.4.5/libdrm/intel/intel_bufmgr_gem.c
|
||||||
|
--- libdrm-2.4.5/libdrm/intel/intel_bufmgr_gem.c.jx 2009-02-21 12:56:29.000000000 -0500
|
||||||
|
+++ libdrm-2.4.5/libdrm/intel/intel_bufmgr_gem.c 2009-03-26 16:38:02.000000000 -0400
|
||||||
|
@@ -145,7 +145,9 @@ struct _drm_intel_bo_gem {
|
||||||
|
/** Number of entries in relocs */
|
||||||
|
int reloc_count;
|
||||||
|
/** Mapped address for the buffer, saved across map/unmap cycles */
|
||||||
|
- void *virtual;
|
||||||
|
+ void *mem_virtual;
|
||||||
|
+ /** GTT virtual address for the buffer, saved across map/unmap cycles */
|
||||||
|
+ void *gtt_virtual;
|
||||||
|
|
||||||
|
/** BO cache list */
|
||||||
|
drmMMListHead head;
|
||||||
|
@@ -524,8 +526,10 @@ drm_intel_gem_bo_free(drm_intel_bo *bo)
|
||||||
|
struct drm_gem_close close;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
- if (bo_gem->virtual)
|
||||||
|
- munmap (bo_gem->virtual, bo_gem->bo.size);
|
||||||
|
+ if (bo_gem->mem_virtual)
|
||||||
|
+ munmap (bo_gem->mem_virtual, bo_gem->bo.size);
|
||||||
|
+ if (bo_gem->gtt_virtual)
|
||||||
|
+ munmap (bo_gem->gtt_virtual, bo_gem->bo.size);
|
||||||
|
|
||||||
|
/* Close this object */
|
||||||
|
memset(&close, 0, sizeof(close));
|
||||||
|
@@ -609,7 +613,7 @@ drm_intel_gem_bo_map(drm_intel_bo *bo, i
|
||||||
|
/* Allow recursive mapping. Mesa may recursively map buffers with
|
||||||
|
* nested display loops.
|
||||||
|
*/
|
||||||
|
- if (!bo_gem->virtual) {
|
||||||
|
+ if (!bo_gem->mem_virtual) {
|
||||||
|
struct drm_i915_gem_mmap mmap_arg;
|
||||||
|
|
||||||
|
DBG("bo_map: %d (%s)\n", bo_gem->gem_handle, bo_gem->name);
|
||||||
|
@@ -626,12 +630,12 @@ drm_intel_gem_bo_map(drm_intel_bo *bo, i
|
||||||
|
pthread_mutex_unlock(&bufmgr_gem->lock);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
- bo_gem->virtual = (void *)(uintptr_t)mmap_arg.addr_ptr;
|
||||||
|
+ bo_gem->mem_virtual = (void *)(uintptr_t)mmap_arg.addr_ptr;
|
||||||
|
bo_gem->swrast = 0;
|
||||||
|
}
|
||||||
|
DBG("bo_map: %d (%s) -> %p\n", bo_gem->gem_handle, bo_gem->name,
|
||||||
|
- bo_gem->virtual);
|
||||||
|
- bo->virtual = bo_gem->virtual;
|
||||||
|
+ bo_gem->mem_virtual);
|
||||||
|
+ bo->virtual = bo_gem->mem_virtual;
|
||||||
|
|
||||||
|
if (bo_gem->global_name != 0 || !bo_gem->swrast) {
|
||||||
|
set_domain.handle = bo_gem->gem_handle;
|
||||||
|
@@ -669,7 +673,7 @@ drm_intel_gem_bo_map_gtt(drm_intel_bo *b
|
||||||
|
pthread_mutex_lock(&bufmgr_gem->lock);
|
||||||
|
|
||||||
|
/* Get a mapping of the buffer if we haven't before. */
|
||||||
|
- if (bo_gem->virtual == NULL) {
|
||||||
|
+ if (bo_gem->gtt_virtual == NULL) {
|
||||||
|
struct drm_i915_gem_mmap_gtt mmap_arg;
|
||||||
|
|
||||||
|
DBG("bo_map_gtt: %d (%s)\n", bo_gem->gem_handle, bo_gem->name);
|
||||||
|
@@ -690,10 +694,10 @@ drm_intel_gem_bo_map_gtt(drm_intel_bo *b
|
||||||
|
}
|
||||||
|
|
||||||
|
/* and mmap it */
|
||||||
|
- bo_gem->virtual = mmap(0, bo->size, PROT_READ | PROT_WRITE,
|
||||||
|
- MAP_SHARED, bufmgr_gem->fd,
|
||||||
|
- mmap_arg.offset);
|
||||||
|
- if (bo_gem->virtual == MAP_FAILED) {
|
||||||
|
+ bo_gem->gtt_virtual = mmap(0, bo->size, PROT_READ | PROT_WRITE,
|
||||||
|
+ MAP_SHARED, bufmgr_gem->fd,
|
||||||
|
+ mmap_arg.offset);
|
||||||
|
+ if (bo_gem->gtt_virtual == MAP_FAILED) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s:%d: Error mapping buffer %d (%s): %s .\n",
|
||||||
|
__FILE__, __LINE__,
|
||||||
|
@@ -704,10 +708,10 @@ drm_intel_gem_bo_map_gtt(drm_intel_bo *b
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- bo->virtual = bo_gem->virtual;
|
||||||
|
+ bo->virtual = bo_gem->gtt_virtual;
|
||||||
|
|
||||||
|
DBG("bo_map: %d (%s) -> %p\n", bo_gem->gem_handle, bo_gem->name,
|
||||||
|
- bo_gem->virtual);
|
||||||
|
+ bo_gem->gtt_virtual);
|
||||||
|
|
||||||
|
/* Now move it to the GTT domain so that the CPU caches are flushed */
|
||||||
|
set_domain.handle = bo_gem->gem_handle;
|
||||||
|
@@ -719,7 +723,7 @@ drm_intel_gem_bo_map_gtt(drm_intel_bo *b
|
||||||
|
} while (ret == -1 && errno == EINTR);
|
||||||
|
|
||||||
|
if (ret != 0) {
|
||||||
|
- fprintf (stderr, "%s:%d: Error setting swrast %d: %s\n",
|
||||||
|
+ fprintf (stderr, "%s:%d: Error setting domain %d: %s\n",
|
||||||
|
__FILE__, __LINE__, bo_gem->gem_handle, strerror (errno));
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -728,6 +732,26 @@ drm_intel_gem_bo_map_gtt(drm_intel_bo *b
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+int
|
||||||
|
+drm_intel_gem_bo_unmap_gtt(drm_intel_bo *bo)
|
||||||
|
+{
|
||||||
|
+ drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bo->bufmgr;
|
||||||
|
+ drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *)bo;
|
||||||
|
+ struct drm_i915_gem_sw_finish sw_finish;
|
||||||
|
+ int ret = 0;
|
||||||
|
+
|
||||||
|
+ if (bo == NULL)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ assert(bo_gem->gtt_virtual != NULL);
|
||||||
|
+
|
||||||
|
+ pthread_mutex_lock(&bufmgr_gem->lock);
|
||||||
|
+ bo->virtual = NULL;
|
||||||
|
+ pthread_mutex_unlock(&bufmgr_gem->lock);
|
||||||
|
+
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int
|
||||||
|
drm_intel_gem_bo_unmap(drm_intel_bo *bo)
|
||||||
|
{
|
||||||
|
@@ -739,7 +763,7 @@ drm_intel_gem_bo_unmap(drm_intel_bo *bo)
|
||||||
|
if (bo == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
- assert(bo_gem->virtual != NULL);
|
||||||
|
+ assert(bo_gem->mem_virtual != NULL);
|
||||||
|
|
||||||
|
pthread_mutex_lock(&bufmgr_gem->lock);
|
||||||
|
if (bo_gem->swrast) {
|
||||||
|
@@ -750,6 +774,7 @@ drm_intel_gem_bo_unmap(drm_intel_bo *bo)
|
||||||
|
} while (ret == -1 && errno == EINTR);
|
||||||
|
bo_gem->swrast = 0;
|
||||||
|
}
|
||||||
|
+ bo->virtual = NULL;
|
||||||
|
pthread_mutex_unlock(&bufmgr_gem->lock);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
diff -up libdrm-2.4.5/libdrm/intel/intel_bufmgr.h.jx libdrm-2.4.5/libdrm/intel/intel_bufmgr.h
|
||||||
|
--- libdrm-2.4.5/libdrm/intel/intel_bufmgr.h.jx 2009-02-21 12:54:48.000000000 -0500
|
||||||
|
+++ libdrm-2.4.5/libdrm/intel/intel_bufmgr.h 2009-03-26 16:38:02.000000000 -0400
|
||||||
|
@@ -115,6 +115,7 @@ drm_intel_bo *drm_intel_bo_gem_create_fr
|
||||||
|
unsigned int handle);
|
||||||
|
void drm_intel_bufmgr_gem_enable_reuse(drm_intel_bufmgr *bufmgr);
|
||||||
|
int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo);
|
||||||
|
+int drm_intel_gem_bo_unmap_gtt(drm_intel_bo *bo);
|
||||||
|
void drm_intel_gem_bo_start_gtt_access(drm_intel_bo *bo, int write_enable);
|
||||||
|
|
||||||
|
/* drm_intel_bufmgr_fake.c */
|
@ -3,7 +3,7 @@
|
|||||||
Summary: Direct Rendering Manager runtime library
|
Summary: Direct Rendering Manager runtime library
|
||||||
Name: libdrm
|
Name: libdrm
|
||||||
Version: 2.4.5
|
Version: 2.4.5
|
||||||
Release: 2%{?dist}
|
Release: 3%{?dist}
|
||||||
License: MIT
|
License: MIT
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
URL: http://dri.sourceforge.net
|
URL: http://dri.sourceforge.net
|
||||||
@ -32,6 +32,9 @@ Patch9: nouveau-missing-headers.patch
|
|||||||
Patch10: radeon-bo-name.patch
|
Patch10: radeon-bo-name.patch
|
||||||
# nouveau fixes from drm.git
|
# nouveau fixes from drm.git
|
||||||
Patch11: nouveau-updates.patch
|
Patch11: nouveau-updates.patch
|
||||||
|
# intel gtt map fixes
|
||||||
|
# http://lists.freedesktop.org/archives/intel-gfx/2009-March/001869.html
|
||||||
|
Patch12: libdrm-intel-gtt.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Direct Rendering Manager runtime library
|
Direct Rendering Manager runtime library
|
||||||
@ -54,6 +57,7 @@ Direct Rendering Manager development package
|
|||||||
%patch9 -p1 -b .nouveau
|
%patch9 -p1 -b .nouveau
|
||||||
%patch10 -p1 -b .boname
|
%patch10 -p1 -b .boname
|
||||||
%patch11 -p1 -b .nouveau-updates
|
%patch11 -p1 -b .nouveau-updates
|
||||||
|
%patch12 -p1 -b .intel-gtt
|
||||||
|
|
||||||
%build
|
%build
|
||||||
autoreconf -v --install || exit 1
|
autoreconf -v --install || exit 1
|
||||||
@ -113,6 +117,9 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%{_libdir}/pkgconfig/libdrm_nouveau.pc
|
%{_libdir}/pkgconfig/libdrm_nouveau.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Mar 26 2009 Adam Jackson <ajax@redhat.com> 2.4.5-3
|
||||||
|
- libdrm-intel-gtt.patch: Fix GTT maps for intel.
|
||||||
|
|
||||||
* Wed Mar 25 2009 Ben Skeggs <bskeggs@redhat.com> 2.4.5-2
|
* Wed Mar 25 2009 Ben Skeggs <bskeggs@redhat.com> 2.4.5-2
|
||||||
- pull in nouveau fixes from drm.git
|
- pull in nouveau fixes from drm.git
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user