summaryrefslogtreecommitdiff
path: root/src/lcms2_internal.h
diff options
context:
space:
mode:
authorMarti Maria <marti.maria@littlecms.com>2022-06-05 13:07:27 +0200
committerMarti Maria <marti.maria@littlecms.com>2022-06-05 13:07:27 +0200
commit07c005ca20309432d9a857a3f4c1f4a5f8ff303f (patch)
tree33dac670aff16a8d24d8317e6fb1e72beac2b286 /src/lcms2_internal.h
parent6ae2e99a3535417ca5c95b602eb61fdd29d294d0 (diff)
downloadlcms2-07c005ca20309432d9a857a3f4c1f4a5f8ff303f.tar.gz
A very preliminar new plug-in on multithreaded transforms
This is just the first try to get a new plugin type and a working example. Manuals are still missing. Basically a plug-in of this type adds multicore capabilities. May be used for GPU in future.
Diffstat (limited to 'src/lcms2_internal.h')
-rw-r--r--src/lcms2_internal.h81
1 files changed, 54 insertions, 27 deletions
diff --git a/src/lcms2_internal.h b/src/lcms2_internal.h
index ecb5baf..94282a4 100644
--- a/src/lcms2_internal.h
+++ b/src/lcms2_internal.h
@@ -283,38 +283,38 @@ typedef CRITICAL_SECTION _cmsMutex;
cmsINLINE int _cmsLockPrimitive(_cmsMutex *m)
{
- EnterCriticalSection(m);
- return 0;
+ EnterCriticalSection(m);
+ return 0;
}
cmsINLINE int _cmsUnlockPrimitive(_cmsMutex *m)
{
- LeaveCriticalSection(m);
- return 0;
+ LeaveCriticalSection(m);
+ return 0;
}
-
+
cmsINLINE int _cmsInitMutexPrimitive(_cmsMutex *m)
{
- InitializeCriticalSection(m);
- return 0;
+ InitializeCriticalSection(m);
+ return 0;
}
cmsINLINE int _cmsDestroyMutexPrimitive(_cmsMutex *m)
{
- DeleteCriticalSection(m);
- return 0;
+ DeleteCriticalSection(m);
+ return 0;
}
cmsINLINE int _cmsEnterCriticalSectionPrimitive(_cmsMutex *m)
{
- EnterCriticalSection(m);
- return 0;
+ EnterCriticalSection(m);
+ return 0;
}
cmsINLINE int _cmsLeaveCriticalSectionPrimitive(_cmsMutex *m)
{
- LeaveCriticalSection(m);
- return 0;
+ LeaveCriticalSection(m);
+ return 0;
}
#else
@@ -328,32 +328,32 @@ typedef pthread_mutex_t _cmsMutex;
cmsINLINE int _cmsLockPrimitive(_cmsMutex *m)
{
- return pthread_mutex_lock(m);
+ return pthread_mutex_lock(m);
}
cmsINLINE int _cmsUnlockPrimitive(_cmsMutex *m)
{
- return pthread_mutex_unlock(m);
+ return pthread_mutex_unlock(m);
}
-
+
cmsINLINE int _cmsInitMutexPrimitive(_cmsMutex *m)
{
- return pthread_mutex_init(m, NULL);
+ return pthread_mutex_init(m, NULL);
}
cmsINLINE int _cmsDestroyMutexPrimitive(_cmsMutex *m)
{
- return pthread_mutex_destroy(m);
+ return pthread_mutex_destroy(m);
}
cmsINLINE int _cmsEnterCriticalSectionPrimitive(_cmsMutex *m)
{
- return pthread_mutex_lock(m);
+ return pthread_mutex_lock(m);
}
cmsINLINE int _cmsLeaveCriticalSectionPrimitive(_cmsMutex *m)
{
- return pthread_mutex_unlock(m);
+ return pthread_mutex_unlock(m);
}
#endif
@@ -366,37 +366,37 @@ typedef int _cmsMutex;
cmsINLINE int _cmsLockPrimitive(_cmsMutex *m)
{
cmsUNUSED_PARAMETER(m);
- return 0;
+ return 0;
}
cmsINLINE int _cmsUnlockPrimitive(_cmsMutex *m)
{
cmsUNUSED_PARAMETER(m);
- return 0;
+ return 0;
}
-
+
cmsINLINE int _cmsInitMutexPrimitive(_cmsMutex *m)
{
cmsUNUSED_PARAMETER(m);
- return 0;
+ return 0;
}
cmsINLINE int _cmsDestroyMutexPrimitive(_cmsMutex *m)
{
cmsUNUSED_PARAMETER(m);
- return 0;
+ return 0;
}
cmsINLINE int _cmsEnterCriticalSectionPrimitive(_cmsMutex *m)
{
cmsUNUSED_PARAMETER(m);
- return 0;
+ return 0;
}
cmsINLINE int _cmsLeaveCriticalSectionPrimitive(_cmsMutex *m)
{
cmsUNUSED_PARAMETER(m);
- return 0;
+ return 0;
}
#endif
@@ -438,6 +438,9 @@ cmsBool _cmsRegisterTransformPlugin(cmsContext ContextID, cmsPluginBase* Plugin
// Mutex
cmsBool _cmsRegisterMutexPlugin(cmsContext ContextID, cmsPluginBase* Plugin);
+// Paralellization
+cmsBool _cmsRegisterParallelizationPlugin(cmsContext ContextID, cmsPluginBase* Plugin);
+
// ---------------------------------------------------------------------------------------------------------
// Suballocators.
@@ -485,6 +488,7 @@ typedef enum {
OptimizationPlugin,
TransformPlugin,
MutexPlugin,
+ ParallelizationPlugin,
// Last in list
MemoryClientMax
@@ -720,6 +724,24 @@ extern _cmsMutexPluginChunkType _cmsMutexPluginChunk;
void _cmsAllocMutexPluginChunk(struct _cmsContext_struct* ctx,
const struct _cmsContext_struct* src);
+// Container for parallelization plug-in
+typedef struct {
+
+ cmsInt32Number MaxWorkers; // Number of workers to do as maximum
+ cmsInt32Number WorkerFlags; // reserved
+ _cmsTransform2Fn SchedulerFn; // callback to setup functions
+
+} _cmsParallelizationPluginChunkType;
+
+// The global Context0 storage for parallelization plug-in
+extern _cmsParallelizationPluginChunkType _cmsParallelizationPluginChunk;
+
+// Allocate parallelization container.
+void _cmsAllocParallelizationPluginChunk(struct _cmsContext_struct* ctx,
+ const struct _cmsContext_struct* src);
+
+
+
// ----------------------------------------------------------------------------------
// MLU internal representation
typedef struct {
@@ -1081,6 +1103,11 @@ typedef struct _cmstransform_struct {
// A way to provide backwards compatibility with full xform plugins
_cmsTransformFn OldXform;
+ // A one-worker transform entry for parallelization
+ _cmsTransform2Fn Worker;
+ cmsInt32Number MaxWorkers;
+ cmsUInt32Number WorkerFlags;
+
} _cmsTRANSFORM;
// Copies extra channels from input to output if the original flags in the transform structure