static void ufo_fftmult_task_setup (UfoTask *task, UfoResources *resources, GError **error) { UfoFftmultTaskPrivate *priv; priv = UFO_FFTMULT_TASK_GET_PRIVATE (task); priv->resources = resources; priv->k_fftmult = ufo_resources_get_kernel (resources, "fftmult.cl", "mult", error); if (priv->k_fftmult != NULL) UFO_RESOURCES_CHECK_CLERR (clRetainKernel (priv->k_fftmult)); }
/** * ufo_resources_get_cached_kernel: * @resources: A #UfoResources object * @filename: Name of the .cl kernel file * @kernel: Name of a kernel, or %NULL * @error: Return location for a GError from #UfoResourcesError, or %NULL * * Loads a and builds a kernel from a file. The file is searched in the current * working directory and all paths added through ufo_resources_add_paths (). If * @kernel is %NULL, the first encountered kernel is returned. The kernel object * is cached and should not be used by two threads concurrently. * * Returns: (transfer none): a cl_kernel object that is load from @filename or %NULL on error */ gpointer ufo_resources_get_cached_kernel (UfoResources *resources, const gchar *filename, const gchar *kernelname, GError **error) { UfoResourcesPrivate *priv; cl_kernel kernel; g_return_val_if_fail (UFO_IS_RESOURCES (resources) && (filename != NULL), NULL); priv = resources->priv; if (kernelname != NULL) { gchar *cache_key; cache_key = create_cache_key (filename, kernelname); kernel = g_hash_table_lookup (priv->kernel_cache, cache_key); if (kernel != NULL) { g_free (cache_key); return kernel; } } kernel = ufo_resources_get_kernel (resources, filename, kernelname, error); if (kernel != NULL && kernelname != NULL) { gchar *cache_key; cache_key = create_cache_key (filename, kernelname); g_hash_table_insert (priv->kernel_cache, cache_key, kernel); } return kernel; }