xref: /aosp_15_r20/external/mesa3d/src/gallium/frontends/nine/threadpool.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2012 Intel Corporation
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #ifndef _THREADPOOL_H_
7*61046927SAndroid Build Coastguard Worker #define _THREADPOOL_H_
8*61046927SAndroid Build Coastguard Worker 
9*61046927SAndroid Build Coastguard Worker #include <pthread.h>
10*61046927SAndroid Build Coastguard Worker 
11*61046927SAndroid Build Coastguard Worker struct NineSwapChain9;
12*61046927SAndroid Build Coastguard Worker 
13*61046927SAndroid Build Coastguard Worker #define MAXTHREADS 1
14*61046927SAndroid Build Coastguard Worker 
15*61046927SAndroid Build Coastguard Worker struct threadpool {
16*61046927SAndroid Build Coastguard Worker     pthread_mutex_t m;
17*61046927SAndroid Build Coastguard Worker     pthread_cond_t new_work;
18*61046927SAndroid Build Coastguard Worker 
19*61046927SAndroid Build Coastguard Worker     HANDLE wthread;
20*61046927SAndroid Build Coastguard Worker     pthread_t pthread;
21*61046927SAndroid Build Coastguard Worker     struct threadpool_task *workqueue;
22*61046927SAndroid Build Coastguard Worker     BOOL shutdown;
23*61046927SAndroid Build Coastguard Worker };
24*61046927SAndroid Build Coastguard Worker 
25*61046927SAndroid Build Coastguard Worker typedef void (*threadpool_task_func)(void *data);
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker struct threadpool_task {
28*61046927SAndroid Build Coastguard Worker     threadpool_task_func work;
29*61046927SAndroid Build Coastguard Worker     void *data;
30*61046927SAndroid Build Coastguard Worker     struct threadpool_task *next;
31*61046927SAndroid Build Coastguard Worker     pthread_cond_t finish;
32*61046927SAndroid Build Coastguard Worker     BOOL finished;
33*61046927SAndroid Build Coastguard Worker };
34*61046927SAndroid Build Coastguard Worker 
35*61046927SAndroid Build Coastguard Worker struct threadpool *_mesa_threadpool_create(struct NineSwapChain9 *swapchain);
36*61046927SAndroid Build Coastguard Worker void _mesa_threadpool_destroy(struct NineSwapChain9 *swapchain, struct threadpool *pool);
37*61046927SAndroid Build Coastguard Worker struct threadpool_task *_mesa_threadpool_queue_task(struct threadpool *pool,
38*61046927SAndroid Build Coastguard Worker                                                     threadpool_task_func func,
39*61046927SAndroid Build Coastguard Worker                                                     void *data);
40*61046927SAndroid Build Coastguard Worker void _mesa_threadpool_wait_for_task(struct threadpool *pool,
41*61046927SAndroid Build Coastguard Worker                                     struct threadpool_task **task);
42*61046927SAndroid Build Coastguard Worker #endif
43