summaryrefslogtreecommitdiff
path: root/src/gallium/winsys/drm
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/winsys/drm')
-rw-r--r--src/gallium/winsys/drm/intel/common/intel_be_device.c2
-rw-r--r--src/gallium/winsys/drm/intel/common/intel_be_device.h2
-rw-r--r--src/gallium/winsys/drm/intel/egl/Makefile3
-rw-r--r--src/gallium/winsys/drm/intel/gem/intel_be_batchbuffer.c21
-rw-r--r--src/gallium/winsys/drm/intel/gem/intel_be_context.c6
-rw-r--r--src/gallium/winsys/drm/intel/gem/intel_be_device.c2
-rw-r--r--src/gallium/winsys/drm/intel/gem/intel_be_device.h2
-rw-r--r--src/gallium/winsys/drm/nouveau/common/nouveau_context.c2
-rw-r--r--src/gallium/winsys/drm/nouveau/common/nouveau_fence.c9
-rw-r--r--src/gallium/winsys/drm/nouveau/common/nouveau_winsys.c4
-rw-r--r--src/gallium/winsys/drm/nouveau/common/nouveau_winsys_pipe.c2
-rw-r--r--src/gallium/winsys/drm/nouveau/common/nouveau_winsys_pipe.h2
-rw-r--r--src/gallium/winsys/drm/nouveau/common/nouveau_winsys_softpipe.c2
13 files changed, 36 insertions, 23 deletions
diff --git a/src/gallium/winsys/drm/intel/common/intel_be_device.c b/src/gallium/winsys/drm/intel/common/intel_be_device.c
index 14aeaf61db..85ab1a2684 100644
--- a/src/gallium/winsys/drm/intel/common/intel_be_device.c
+++ b/src/gallium/winsys/drm/intel/common/intel_be_device.c
@@ -10,7 +10,7 @@
#include "ws_dri_bufpool.h"
#include "ws_dri_fencemgr.h"
-#include "pipe/p_winsys.h"
+#include "pipe/internal/p_winsys_screen.h"
#include "pipe/p_defines.h"
#include "pipe/p_state.h"
#include "pipe/p_inlines.h"
diff --git a/src/gallium/winsys/drm/intel/common/intel_be_device.h b/src/gallium/winsys/drm/intel/common/intel_be_device.h
index 3f8b3f585c..534d638b6a 100644
--- a/src/gallium/winsys/drm/intel/common/intel_be_device.h
+++ b/src/gallium/winsys/drm/intel/common/intel_be_device.h
@@ -1,7 +1,7 @@
#ifndef INTEL_DRM_DEVICE_H
#define INTEL_DRM_DEVICE_H
-#include "pipe/p_winsys.h"
+#include "pipe/internal/p_winsys_screen.h"
#include "pipe/p_context.h"
/*
diff --git a/src/gallium/winsys/drm/intel/egl/Makefile b/src/gallium/winsys/drm/intel/egl/Makefile
index 4b22d17ccf..7147d89e0d 100644
--- a/src/gallium/winsys/drm/intel/egl/Makefile
+++ b/src/gallium/winsys/drm/intel/egl/Makefile
@@ -4,10 +4,11 @@ include $(TOP)/configs/current
LIBNAME = EGL_i915.so
PIPE_DRIVERS = \
+ ../gem/libinteldrm.a \
$(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \
$(TOP)/src/gallium/drivers/i915simple/libi915simple.a \
$(TOP)/src/gallium/state_trackers/egl/libegldrm.a \
- ../gem/libinteldrm.a
+
DRIVER_SOURCES = \
intel_context.c \
diff --git a/src/gallium/winsys/drm/intel/gem/intel_be_batchbuffer.c b/src/gallium/winsys/drm/intel/gem/intel_be_batchbuffer.c
index e83a4c42cd..d9556e1f38 100644
--- a/src/gallium/winsys/drm/intel/gem/intel_be_batchbuffer.c
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_batchbuffer.c
@@ -1,4 +1,5 @@
+#include "i915simple/i915_debug.h"
#include "intel_be_batchbuffer.h"
#include "intel_be_context.h"
#include "intel_be_device.h"
@@ -66,13 +67,15 @@ intel_be_offset_relocation(struct intel_be_batchbuffer *batch,
assert(batch->base.relocs < batch->base.max_relocs);
offset = (unsigned)(batch->base.ptr - batch->base.map);
- batch->base.ptr += 4;
- ret = drm_intel_bo_emit_reloc(bo, pre_add,
- batch->bo, offset,
+ ret = drm_intel_bo_emit_reloc(batch->bo, offset,
+ bo, pre_add,
read_domains,
write_domain);
+ ((uint32_t*)batch->base.ptr)[0] = bo->offset + pre_add;
+ batch->base.ptr += 4;
+
if (!ret)
batch->base.relocs++;
@@ -93,14 +96,12 @@ intel_be_batchbuffer_flush(struct intel_be_batchbuffer *batch,
assert((used & 3) == 0);
if (used & 4) {
- ((uint32_t *) batch->base.ptr)[0] = ((0<<29)|(4<<23)); // MI_FLUSH;
- ((uint32_t *) batch->base.ptr)[1] = 0;
- ((uint32_t *) batch->base.ptr)[2] = (0xA<<23); // MI_BATCH_BUFFER_END;
- batch->base.ptr += 12;
+ i915_batchbuffer_dword(i915, (0x0<<29)|(0x4<<23)|(1<<0)); // MI_FLUSH | FLUSH_MAP_CACHE;
+ i915_batchbuffer_dword(i915, (0x0<<29)|(0x0<<23)); // MI_NOOP
+ i915_batchbuffer_dword(i915, (0x0<<29)|(0xA<<23)); // MI_BATCH_BUFFER_END;
} else {
- ((uint32_t *) batch->base.ptr)[0] = ((0<<29)|(4<<23)); // MI_FLUSH;
- ((uint32_t *) batch->base.ptr)[1] = (0xA<<23); // MI_BATCH_BUFFER_END;
- batch->base.ptr += 8;
+ i915_batchbuffer_dword(i915, (0x0<<29)|(0x4<<23)|(1<<0)); //MI_FLUSH | FLUSH_MAP_CACHE;
+ i915_batchbuffer_dword(i915, (0x0<<29)|(0xA<<23)); // MI_BATCH_BUFFER_END;
}
used = batch->base.ptr - batch->base.map;
diff --git a/src/gallium/winsys/drm/intel/gem/intel_be_context.c b/src/gallium/winsys/drm/intel/gem/intel_be_context.c
index 3e472e1e43..95e761d78d 100644
--- a/src/gallium/winsys/drm/intel/gem/intel_be_context.c
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_context.c
@@ -26,11 +26,11 @@ intel_be_batch_reloc(struct i915_winsys *sws,
if (access_flags & I915_BUFFER_ACCESS_WRITE) {
write = I915_GEM_DOMAIN_RENDER;
+ read = I915_GEM_DOMAIN_RENDER;
}
if (access_flags & I915_BUFFER_ACCESS_READ) {
- read = I915_GEM_DOMAIN_SAMPLER |
- I915_GEM_DOMAIN_VERTEX;
+ read |= I915_GEM_DOMAIN_VERTEX;
}
ret = intel_be_offset_relocation(intel->batch,
@@ -38,6 +38,8 @@ intel_be_batch_reloc(struct i915_winsys *sws,
bo,
read,
write);
+ assert(ret == 0);
+
/* TODO change return type */
/* return ret; */
}
diff --git a/src/gallium/winsys/drm/intel/gem/intel_be_device.c b/src/gallium/winsys/drm/intel/gem/intel_be_device.c
index 5406636bcb..82c1cb2f32 100644
--- a/src/gallium/winsys/drm/intel/gem/intel_be_device.c
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_device.c
@@ -1,7 +1,7 @@
#include "intel_be_device.h"
-#include "pipe/p_winsys.h"
+#include "pipe/internal/p_winsys_screen.h"
#include "pipe/p_defines.h"
#include "pipe/p_state.h"
#include "pipe/p_inlines.h"
diff --git a/src/gallium/winsys/drm/intel/gem/intel_be_device.h b/src/gallium/winsys/drm/intel/gem/intel_be_device.h
index 96e94c47e7..f06890163c 100644
--- a/src/gallium/winsys/drm/intel/gem/intel_be_device.h
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_device.h
@@ -2,7 +2,7 @@
#ifndef INTEL_DRM_DEVICE_H
#define INTEL_DRM_DEVICE_H
-#include "pipe/p_winsys.h"
+#include "pipe/internal/p_winsys_screen.h"
#include "pipe/p_context.h"
#include "drm.h"
diff --git a/src/gallium/winsys/drm/nouveau/common/nouveau_context.c b/src/gallium/winsys/drm/nouveau/common/nouveau_context.c
index 2f245046d4..e093877381 100644
--- a/src/gallium/winsys/drm/nouveau/common/nouveau_context.c
+++ b/src/gallium/winsys/drm/nouveau/common/nouveau_context.c
@@ -84,6 +84,8 @@ nouveau_context_init(struct nouveau_screen *nv_screen,
int i;
switch (dev->chipset & 0xf0) {
+ case 0x00:
+ /* NV04 */
case 0x10:
case 0x20:
/* NV10 */
diff --git a/src/gallium/winsys/drm/nouveau/common/nouveau_fence.c b/src/gallium/winsys/drm/nouveau/common/nouveau_fence.c
index e7b0b4ff07..451011e112 100644
--- a/src/gallium/winsys/drm/nouveau/common/nouveau_fence.c
+++ b/src/gallium/winsys/drm/nouveau/common/nouveau_fence.c
@@ -148,9 +148,12 @@ nouveau_fence_emit(struct nouveau_fence *fence)
NOUVEAU_ERR("AII wrap unhandled\n");
/*XXX: assumes subc 0 is populated */
- RING_SPACE_CH(fence->channel, 2);
- OUT_RING_CH (fence->channel, 0x00040050);
- OUT_RING_CH (fence->channel, nvfence->sequence);
+ /* Not the way to fence on nv4 */
+ if (nvchan->base.device->chipset >= 0x10) {
+ RING_SPACE_CH(fence->channel, 2);
+ OUT_RING_CH (fence->channel, 0x00040050);
+ OUT_RING_CH (fence->channel, nvfence->sequence);
+ }
if (nvchan->fence_tail) {
nouveau_fence(nvchan->fence_tail)->next = fence;
diff --git a/src/gallium/winsys/drm/nouveau/common/nouveau_winsys.c b/src/gallium/winsys/drm/nouveau/common/nouveau_winsys.c
index 364340e1d3..722694e4a4 100644
--- a/src/gallium/winsys/drm/nouveau/common/nouveau_winsys.c
+++ b/src/gallium/winsys/drm/nouveau/common/nouveau_winsys.c
@@ -100,6 +100,10 @@ nouveau_pipe_create(struct nouveau_context *nv)
return NULL;
switch (chipset & 0xf0) {
+ case 0x00:
+ hws_create = nv04_screen_create;
+ hw_create = nv04_create;
+ break;
case 0x10:
hws_create = nv10_screen_create;
hw_create = nv10_create;
diff --git a/src/gallium/winsys/drm/nouveau/common/nouveau_winsys_pipe.c b/src/gallium/winsys/drm/nouveau/common/nouveau_winsys_pipe.c
index 5b3101fbba..8e889b9f36 100644
--- a/src/gallium/winsys/drm/nouveau/common/nouveau_winsys_pipe.c
+++ b/src/gallium/winsys/drm/nouveau/common/nouveau_winsys_pipe.c
@@ -1,4 +1,4 @@
-#include <pipe/p_winsys.h>
+#include "pipe/internal/p_winsys_screen.h"
#include <pipe/p_defines.h>
#include <pipe/p_inlines.h>
#include <util/u_memory.h>
diff --git a/src/gallium/winsys/drm/nouveau/common/nouveau_winsys_pipe.h b/src/gallium/winsys/drm/nouveau/common/nouveau_winsys_pipe.h
index 14c728690d..d97ffdf337 100644
--- a/src/gallium/winsys/drm/nouveau/common/nouveau_winsys_pipe.h
+++ b/src/gallium/winsys/drm/nouveau/common/nouveau_winsys_pipe.h
@@ -2,7 +2,7 @@
#define NOUVEAU_PIPE_WINSYS_H
#include "pipe/p_context.h"
-#include "pipe/p_winsys.h"
+#include "pipe/internal/p_winsys_screen.h"
#include "nouveau_context.h"
struct nouveau_pipe_buffer {
diff --git a/src/gallium/winsys/drm/nouveau/common/nouveau_winsys_softpipe.c b/src/gallium/winsys/drm/nouveau/common/nouveau_winsys_softpipe.c
index 04def600f4..396e4f2a2e 100644
--- a/src/gallium/winsys/drm/nouveau/common/nouveau_winsys_softpipe.c
+++ b/src/gallium/winsys/drm/nouveau/common/nouveau_winsys_softpipe.c
@@ -29,7 +29,7 @@
* Authors: Keith Whitwell <keithw-at-tungstengraphics-dot-com>
*/
-#include <pipe/p_winsys.h>
+#include "pipe/internal/p_winsys_screen.h"
#include <pipe/p_screen.h>
#include <pipe/p_defines.h>
#include <pipe/p_format.h>