summaryrefslogtreecommitdiff
path: root/cogl/cogl-pipeline-hash-table.h
Commit message (Collapse)AuthorAgeFilesLines
* Tightly integrate ulib (was eglib)wip/ulibRobert Bragg2014-03-101-1/+1
| | | | | | | | | | | | | | Instead of maintaining optional support for using deps/eglib instead of glib we now always use this code. This way the code is always being tested so we are less likely to break support for building Cogl without glib, and because the api no longer needs to be swappable we are free to make Cogl specific changes to the api. So that we can still support glib integration the eglib library has been renamed to ulib and symbols are prefixed with 'u_' or 'U_' so that they don't clash with glib. GLib integration for GError and GType continues to be supported.
* This re-licenses Cogl under the MIT licenseRobert Bragg2014-01-141-11/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This follows up on the proposal that was sent to the Cogl mailing list to re-license from the LGPL to the MIT license: http://lists.freedesktop.org/archives/cogl/2013-December/001465.html Note: there was a copyright assignment policy in place for Clutter (and therefore Cogl which was part of Clutter at the time) until the 11th of June 2010 and so we only checked the details after that point (commit 0bbf50f905) For each file, authors were identified via this Git command: $ git blame -p -C -C -C20 -M -M10 0bbf50f905..HEAD We received blanket approvals for re-licensing all Red Hat and Collabora contributions which reduced how many people needed to be contacted individually: - http://lists.freedesktop.org/archives/cogl/2013-December/001470.html - http://lists.freedesktop.org/archives/cogl/2014-January/001536.html Individual approval requests were sent to all the other identified authors who all confirmed the re-license on the Cogl mailinglist: http://lists.freedesktop.org/archives/cogl/2014-January As well as updating the copyright header in all sources files, the COPYING file has been updated to reflect the license change and also document the other licenses used in Cogl such as the SGI Free Software License B, version 2.0 and the 3-clause BSD license.
* pipeline-cache: Prune old unused pipelines when the cache gets too bigNeil Roberts2014-01-141-2/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously when a pipeline is added to the cache it would never be removed. If the application is generating a lot of unique pipelines this can end up effectively leaking a large number of resources including the GL program objects. Arguably this isn't really a problem because if the application is generating that many unique pipelines then it is doing something wrong anyway. It also implies that it will be recompiling shaders very often so the cache leaking will likely be the least of the problems. This patch makes it keep track of which pipelines in the cache are in use. The cache now returns a struct representing the entry instead of directly returning the pipeline. This entry contains a usage counter which the pipeline backends can use to mark when there is a pipeline alive that is using the cache entry. When the hash table decides that it's a good time to prune some entries, it will make a list of all of the pipelines that are not in use and then remove the least recently used half of the pipelines. That way it is less likely to remove pipelines that the application is actually regenerating often even if they aren't in use all of the time. When the cache is pruned the hash table makes a note of how small the cache could be if it removed all of the unused pipelines. The hash table starts pruning when there are more entries than twice this minimum expected size. The idea is that if that case it hit then the hash table is more than half full of useless pipelines so the application is generating lots of redundant pipelines and it is a good time to remove them. Reviewed-by: Robert Bragg <robert@linux.intel.com>
* pipeline-cache: Use a shared hash table wrapperNeil Roberts2013-04-041-0/+69
The pipeline cache contains three separate hash tables, one for the state affecting the vertex shaders, one for the fragment shaders and one for the resulting combined program. Previously these hash tables had a fair bit of duplicated code to calculate the hashes, check for equality and copy the pipeline when it is added. This patch moves the common bits of code to a new type called CoglPipelineHashTable which just wraps a GHashTable with a given set of state flags to use for hashing and checking for equality. Reviewed-by: Robert Bragg <robert@linux.intel.com>