summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/i915simple/i915_texture.c3
-rw-r--r--src/gallium/drivers/i915simple/i915_winsys.h4
-rw-r--r--src/gallium/drivers/softpipe/sp_texture.c3
-rw-r--r--src/gallium/drivers/softpipe/sp_winsys.h5
-rw-r--r--src/gallium/winsys/drm/intel/gem/intel_be_api.c2
-rw-r--r--src/gallium/winsys/drm/intel/gem/intel_be_device.c19
-rw-r--r--src/gallium/winsys/drm/intel/gem/intel_be_device.h9
7 files changed, 33 insertions, 12 deletions
diff --git a/src/gallium/drivers/i915simple/i915_texture.c b/src/gallium/drivers/i915simple/i915_texture.c
index 211ba09fda8..ca8e87af8d1 100644
--- a/src/gallium/drivers/i915simple/i915_texture.c
+++ b/src/gallium/drivers/i915simple/i915_texture.c
@@ -738,8 +738,7 @@ i915_init_screen_texture_functions(struct pipe_screen *screen)
screen->tex_surface_destroy = i915_tex_surface_destroy;
}
-boolean i915_get_texture_buffer( struct drm_api *api,
- struct pipe_texture *texture,
+boolean i915_get_texture_buffer( struct pipe_texture *texture,
struct pipe_buffer **buf,
unsigned *stride )
{
diff --git a/src/gallium/drivers/i915simple/i915_winsys.h b/src/gallium/drivers/i915simple/i915_winsys.h
index 58599daa805..ff5b34f193a 100644
--- a/src/gallium/drivers/i915simple/i915_winsys.h
+++ b/src/gallium/drivers/i915simple/i915_winsys.h
@@ -61,7 +61,6 @@ struct pipe_buffer;
struct pipe_fence_handle;
struct pipe_winsys;
struct pipe_screen;
-struct drm_api;
/**
@@ -133,8 +132,7 @@ struct pipe_context *i915_create_context( struct pipe_screen *screen,
*
* This is needed for example kms.
*/
-boolean i915_get_texture_buffer( struct drm_api *api,
- struct pipe_texture *texture,
+boolean i915_get_texture_buffer( struct pipe_texture *texture,
struct pipe_buffer **buf,
unsigned *stride );
diff --git a/src/gallium/drivers/softpipe/sp_texture.c b/src/gallium/drivers/softpipe/sp_texture.c
index 41d8a0f93e2..7a533dad9f0 100644
--- a/src/gallium/drivers/softpipe/sp_texture.c
+++ b/src/gallium/drivers/softpipe/sp_texture.c
@@ -403,8 +403,7 @@ softpipe_init_screen_texture_funcs(struct pipe_screen *screen)
boolean
-softpipe_get_texture_buffer( struct drm_api *api,
- struct pipe_texture *texture,
+softpipe_get_texture_buffer( struct pipe_texture *texture,
struct pipe_buffer **buf,
unsigned *stride )
{
diff --git a/src/gallium/drivers/softpipe/sp_winsys.h b/src/gallium/drivers/softpipe/sp_winsys.h
index 3edcbeb558f..9e571862b75 100644
--- a/src/gallium/drivers/softpipe/sp_winsys.h
+++ b/src/gallium/drivers/softpipe/sp_winsys.h
@@ -39,7 +39,7 @@
extern "C" {
#endif
-struct drm_api;
+
struct pipe_screen;
struct pipe_winsys;
struct pipe_context;
@@ -53,8 +53,7 @@ softpipe_create_screen(struct pipe_winsys *);
boolean
-softpipe_get_texture_buffer( struct drm_api *api,
- struct pipe_texture *texture,
+softpipe_get_texture_buffer( struct pipe_texture *texture,
struct pipe_buffer **buf,
unsigned *stride );
diff --git a/src/gallium/winsys/drm/intel/gem/intel_be_api.c b/src/gallium/winsys/drm/intel/gem/intel_be_api.c
index d22d11e7237..09d4ba47290 100644
--- a/src/gallium/winsys/drm/intel/gem/intel_be_api.c
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_api.c
@@ -14,7 +14,7 @@ struct drm_api intel_be_drm_api =
.create_context = intel_be_create_context,
/* intel_be_device.c */
.create_screen = intel_be_create_screen,
- .buffer_from_texture = i915_get_texture_buffer,
+ .buffer_from_texture = intel_be_get_texture_buffer,
.buffer_from_handle = intel_be_buffer_from_handle,
.handle_from_buffer = intel_be_handle_from_buffer,
.global_handle_from_buffer = intel_be_global_handle_from_buffer,
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 2d531279f77..e3630f5d120 100644
--- a/src/gallium/winsys/drm/intel/gem/intel_be_device.c
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_device.c
@@ -142,6 +142,24 @@ err:
return NULL;
}
+boolean
+intel_be_get_texture_buffer(struct drm_api *api,
+ struct pipe_texture *texture,
+ struct pipe_buffer **buffer,
+ unsigned *stride)
+{
+ struct intel_be_device *dev;
+
+ if (!texture)
+ return FALSE;
+
+ dev = intel_be_device(texture->screen->winsys);
+ if (dev->softpipe)
+ return softpipe_get_texture_buffer(texture, buffer, stride);
+ else
+ return i915_get_texture_buffer(texture, buffer, stride);
+}
+
struct pipe_buffer *
intel_be_buffer_from_handle(struct drm_api *api,
struct pipe_screen *screen,
@@ -344,7 +362,6 @@ intel_be_create_screen(struct drm_api *api, int drmFD,
if (dev->softpipe) {
screen = softpipe_create_screen(&dev->base);
- intel_be_drm_api.buffer_from_texture = softpipe_get_texture_buffer;
} else
screen = i915_create_screen(&dev->base, deviceID);
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 777161daca0..56d95bd7fe0 100644
--- a/src/gallium/winsys/drm/intel/gem/intel_be_device.h
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_device.h
@@ -52,6 +52,15 @@ struct intel_be_buffer {
unsigned flink;
};
+/*
+ * Wrapper for driver get_texture_buffer functions.
+ */
+boolean
+intel_be_get_texture_buffer(struct drm_api *api,
+ struct pipe_texture *texture,
+ struct pipe_buffer **buffer,
+ unsigned *stride);
+
/**
* Create a be buffer from a drm bo handle.
*