gallium/intel/gem: Use softpipe rather than i915simple if INTEL_SOFTPIPE is set.
authorMichel Dänzer <daenzer@vmware.com>
Thu, 23 Apr 2009 11:57:46 +0000 (12:57 +0100)
committerMichel Dänzer <daenzer@vmware.com>
Thu, 23 Apr 2009 11:57:46 +0000 (12:57 +0100)
src/gallium/drivers/softpipe/sp_texture.c
src/gallium/drivers/softpipe/sp_winsys.h
src/gallium/winsys/drm/intel/gem/intel_be_context.c
src/gallium/winsys/drm/intel/gem/intel_be_device.c
src/gallium/winsys/drm/intel/xorg/Makefile

index c0113c47adb37dd7bc0c8429666a3067f79bca7e..9e19745889ee28643b0da9143559a4d614b9eab3 100644 (file)
@@ -399,3 +399,22 @@ softpipe_init_screen_texture_funcs(struct pipe_screen *screen)
    screen->transfer_map = softpipe_transfer_map;
    screen->transfer_unmap = softpipe_transfer_unmap;
 }
+
+
+boolean
+softpipe_get_texture_buffer( struct pipe_texture *texture,
+                             struct pipe_buffer **buf,
+                             unsigned *stride )
+{
+   struct softpipe_texture *tex = (struct softpipe_texture *)texture;
+
+   if (!tex)
+      return FALSE;
+
+   pipe_buffer_reference(buf, tex->buffer);
+
+   if (stride)
+      *stride = tex->stride[0];
+
+   return TRUE;
+}
index cf91e7782bcababdb21f84cd60a925fc7c9dca74..9e571862b7516f7a0fbd33119c8fb78532be9ff0 100644 (file)
@@ -52,6 +52,12 @@ struct pipe_screen *
 softpipe_create_screen(struct pipe_winsys *);
 
 
+boolean
+softpipe_get_texture_buffer( struct pipe_texture *texture,
+                             struct pipe_buffer **buf,
+                             unsigned *stride );
+
+
 #ifdef __cplusplus
 }
 #endif
index bb6f1b916c270ded609372c804f87de07daeda17..cfe8c884660d1dbf4d63c9a02050652214c2cd24 100644 (file)
@@ -1,6 +1,8 @@
 
 #include "pipe/p_screen.h"
 
+#include "softpipe/sp_winsys.h"
+
 #include "intel_be_device.h"
 #include "intel_be_context.h"
 #include "intel_be_batchbuffer.h"
@@ -106,13 +108,13 @@ intel_be_create_context(struct pipe_screen *screen)
 
        intel_be_init_context(intel, device);
 
-#if 0
-       pipe = intel_create_softpipe(intel, screen->winsys);
-#else
-       pipe = i915_create_context(screen, &device->base, &intel->base);
-#endif
+       if (getenv("INTEL_SOFTPIPE"))
+               pipe = softpipe_create(screen);
+       else
+               pipe = i915_create_context(screen, &device->base, &intel->base);
 
-       pipe->priv = intel;
+       if (pipe)
+               pipe->priv = intel;
 
        return pipe;
 }
index 0f6300323b0f460e08a6f3e33cf5a5ba854a0697..8979f0ae15297cefa5e72756ff0925519ec2fc7c 100644 (file)
@@ -10,6 +10,7 @@
 #include "intel_be_fence.h"
 
 #include "i915simple/i915_winsys.h"
+#include "softpipe/sp_winsys.h"
 
 #include "intel_be_api.h"
 
@@ -302,7 +303,11 @@ intel_be_create_screen(int drmFD, int deviceID)
 
        intel_be_init_device(dev, drmFD, deviceID);
 
-       screen = i915_create_screen(&dev->base, deviceID);
+       if (getenv("INTEL_SOFTPIPE")) {
+               screen = softpipe_create_screen(&dev->base);
+               drm_api_hooks.buffer_from_texture = softpipe_get_texture_buffer;
+       } else
+               screen = i915_create_screen(&dev->base, deviceID);
 
        return screen;
 }
index a45ca570db19b9e434ec12e7746ed1e83371e3b9..b1b6b9362b66f63b9db0a626902234afb00ddbe8 100644 (file)
@@ -21,6 +21,7 @@ LIBS = \
        $(GALLIUMDIR)/state_trackers/xorg/libxorgtracker.a \
        $(GALLIUMDIR)/winsys/drm/intel/gem/libinteldrm.a \
        $(TOP)/src/gallium/drivers/i915simple/libi915simple.a \
+       $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \
        $(GALLIUM_AUXILIARIES)
 
 #############################################
@@ -29,7 +30,7 @@ LIBS = \
 
 all default: $(TARGET)
 
-$(TARGET): $(OBJECTS) Makefile $(GALLIUMDIR)/state_trackers/xorg/libxorgtracker.a
+$(TARGET): $(OBJECTS) Makefile $(GALLIUMDIR)/state_trackers/xorg/libxorgtracker.a $(LIBS)
        $(TOP)/bin/mklib -noprefix -o $@ \
        $(OBJECTS) $(LIBS) $(shell pkg-config --libs libdrm) -ldrm_intel