gallium: add new pipe_screen::can_create_resource() function
authorBrian Paul <brianp@vmware.com>
Mon, 17 Sep 2012 01:40:13 +0000 (19:40 -0600)
committerBrian Paul <brianp@vmware.com>
Tue, 18 Sep 2012 01:49:27 +0000 (19:49 -0600)
Used to implement proxy textures.  If a gallium driver doesn't implement
this function we'll just continue to use the core Mesa fallback code.

Without this hook we really have no good way to implement OpenGL proxy
textures with gallium drivers.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/docs/source/screen.rst
src/gallium/include/pipe/p_screen.h

index 4eb5b32edcfee97f34e52a9bc7c5eebb32e60e16..540d30861b268e0cac5c904b18b54aed10ea055f 100644 (file)
@@ -358,6 +358,16 @@ the maximum allowed legal value is 32.
 
 Returns TRUE if all usages can be satisfied.
 
+
+can_create_resource
+^^^^^^^^^^^^^^^^^^^
+
+Check if a resource can actually be created (but don't actually allocate any
+memory).  This is used to implement OpenGL's proxy textures.  Typically, a
+driver will simply check if the total size of the given resource is less than
+some limit.
+
+
 .. _resource_create:
 
 resource_create
index fdf6fa2d3f956a6114c522cb6fe58120ec211c57..dff503676f84f2fc8a678939e25f7192d3413518 100644 (file)
@@ -137,6 +137,14 @@ struct pipe_screen {
                                          enum pipe_format format,
                                          enum pipe_video_profile profile );
 
+   /**
+    * Check if we can actually create the given resource (test the dimension,
+    * overall size, etc).  Used to implement proxy textures.
+    * \return TRUE if size is OK, FALSE if too large.
+    */
+   boolean (*can_create_resource)(struct pipe_screen *screen,
+                                  const struct pipe_resource *templat);
+                               
    /**
     * Create a new texture object, using the given template info.
     */