diff options
Diffstat (limited to 'source/blender/compositor/intern/COM_WorkScheduler.cpp')
-rw-r--r-- | source/blender/compositor/intern/COM_WorkScheduler.cpp | 130 |
1 files changed, 65 insertions, 65 deletions
diff --git a/source/blender/compositor/intern/COM_WorkScheduler.cpp b/source/blender/compositor/intern/COM_WorkScheduler.cpp index 619c5bea71e..c49ac24e018 100644 --- a/source/blender/compositor/intern/COM_WorkScheduler.cpp +++ b/source/blender/compositor/intern/COM_WorkScheduler.cpp @@ -43,24 +43,24 @@ /// @brief list of all CPUDevices. for every hardware thread an instance of CPUDevice is created -static vector<CPUDevice *> cpudevices; +static vector<CPUDevice *> g_cpudevices; #if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE /// @brief list of all thread for every CPUDevice in cpudevices a thread exists -static ListBase cputhreads; +static ListBase g_cputhreads; /// @brief all scheduled work for the cpu -static ThreadQueue *cpuqueue; -static ThreadQueue *gpuqueue; +static ThreadQueue *g_cpuqueue; +static ThreadQueue *g_gpuqueue; #ifdef COM_OPENCL_ENABLED -static cl_context context; -static cl_program program; +static cl_context g_context; +static cl_program g_program; /// @brief list of all OpenCLDevices. for every OpenCL GPU device an instance of OpenCLDevice is created -static vector<OpenCLDevice *> gpudevices; +static vector<OpenCLDevice *> g_gpudevices; /// @brief list of all thread for every GPUDevice in cpudevices a thread exists -static ListBase gputhreads; +static ListBase g_gputhreads; /// @brief all scheduled work for the gpu #ifdef COM_OPENCL_ENABLED -static bool openclActive = false; +static bool g_openclActive = false; #endif #endif #endif @@ -72,7 +72,7 @@ void *WorkScheduler::thread_execute_cpu(void *data) Device *device = (Device *)data; WorkPackage *work; - while ((work = (WorkPackage *)BLI_thread_queue_pop(cpuqueue))) { + while ((work = (WorkPackage *)BLI_thread_queue_pop(g_cpuqueue))) { device->execute(work); delete work; } @@ -85,7 +85,7 @@ void *WorkScheduler::thread_execute_gpu(void *data) Device *device = (Device *)data; WorkPackage *work; - while ((work = (WorkPackage *)BLI_thread_queue_pop(gpuqueue))) { + while ((work = (WorkPackage *)BLI_thread_queue_pop(g_gpuqueue))) { device->execute(work); delete work; } @@ -105,11 +105,11 @@ void WorkScheduler::schedule(ExecutionGroup *group, int chunkNumber) delete package; #elif COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE #ifdef COM_OPENCL_ENABLED - if (group->isOpenCL() && openclActive) { - BLI_thread_queue_push(gpuqueue, package); + if (group->isOpenCL() && g_openclActive) { + BLI_thread_queue_push(g_gpuqueue, package); } else { - BLI_thread_queue_push(cpuqueue, package); + BLI_thread_queue_push(g_cpuqueue, package); } #else BLI_thread_queue_push(cpuqueue, package); @@ -121,24 +121,24 @@ void WorkScheduler::start(CompositorContext &context) { #if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE unsigned int index; - cpuqueue = BLI_thread_queue_init(); - BLI_init_threads(&cputhreads, thread_execute_cpu, cpudevices.size()); - for (index = 0; index < cpudevices.size(); index++) { - Device *device = cpudevices[index]; - BLI_insert_thread(&cputhreads, device); + g_cpuqueue = BLI_thread_queue_init(); + BLI_init_threads(&g_cputhreads, thread_execute_cpu, g_cpudevices.size()); + for (index = 0; index < g_cpudevices.size(); index++) { + Device *device = g_cpudevices[index]; + BLI_insert_thread(&g_cputhreads, device); } #ifdef COM_OPENCL_ENABLED if (context.getHasActiveOpenCLDevices()) { - gpuqueue = BLI_thread_queue_init(); - BLI_init_threads(&gputhreads, thread_execute_gpu, gpudevices.size()); - for (index = 0; index < gpudevices.size(); index++) { - Device *device = gpudevices[index]; - BLI_insert_thread(&gputhreads, device); + g_gpuqueue = BLI_thread_queue_init(); + BLI_init_threads(&g_gputhreads, thread_execute_gpu, g_gpudevices.size()); + for (index = 0; index < g_gpudevices.size(); index++) { + Device *device = g_gpudevices[index]; + BLI_insert_thread(&g_gputhreads, device); } - openclActive = true; + g_openclActive = true; } else { - openclActive = false; + g_openclActive = false; } #endif #endif @@ -147,12 +147,12 @@ void WorkScheduler::finish() { #if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE #ifdef COM_OPENCL_ENABLED - if (openclActive) { - BLI_thread_queue_wait_finish(gpuqueue); - BLI_thread_queue_wait_finish(cpuqueue); + if (g_openclActive) { + BLI_thread_queue_wait_finish(g_gpuqueue); + BLI_thread_queue_wait_finish(g_cpuqueue); } else { - BLI_thread_queue_wait_finish(cpuqueue); + BLI_thread_queue_wait_finish(g_cpuqueue); } #else BLI_thread_queue_wait_finish(cpuqueue); @@ -162,16 +162,16 @@ void WorkScheduler::finish() void WorkScheduler::stop() { #if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE - BLI_thread_queue_nowait(cpuqueue); - BLI_end_threads(&cputhreads); - BLI_thread_queue_free(cpuqueue); - cpuqueue = NULL; + BLI_thread_queue_nowait(g_cpuqueue); + BLI_end_threads(&g_cputhreads); + BLI_thread_queue_free(g_cpuqueue); + g_cpuqueue = NULL; #ifdef COM_OPENCL_ENABLED - if (openclActive) { - BLI_thread_queue_nowait(gpuqueue); - BLI_end_threads(&gputhreads); - BLI_thread_queue_free(gpuqueue); - gpuqueue = NULL; + if (g_openclActive) { + BLI_thread_queue_nowait(g_gpuqueue); + BLI_end_threads(&g_gputhreads); + BLI_thread_queue_free(g_gpuqueue); + g_gpuqueue = NULL; } #endif #endif @@ -181,7 +181,7 @@ bool WorkScheduler::hasGPUDevices() { #if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE #ifdef COM_OPENCL_ENABLED - return gpudevices.size() > 0; + return g_gpudevices.size() > 0; #else return 0; #endif @@ -203,11 +203,11 @@ void WorkScheduler::initialize() for (int index = 0; index < numberOfCPUThreads; index++) { CPUDevice *device = new CPUDevice(); device->initialize(); - cpudevices.push_back(device); + g_cpudevices.push_back(device); } #ifdef COM_OPENCL_ENABLED - context = NULL; - program = NULL; + g_context = NULL; + g_program = NULL; if (clCreateContextFromType) { cl_uint numberOfPlatforms = 0; cl_int error; @@ -225,18 +225,18 @@ void WorkScheduler::initialize() cl_device_id *cldevices = new cl_device_id[numberOfDevices]; clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, numberOfDevices, cldevices, 0); - context = clCreateContext(NULL, numberOfDevices, cldevices, clContextError, NULL, &error); + g_context = clCreateContext(NULL, numberOfDevices, cldevices, clContextError, NULL, &error); if (error != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); } - program = clCreateProgramWithSource(context, 1, &clkernelstoh_COM_OpenCLKernels_cl, 0, &error); - error = clBuildProgram(program, numberOfDevices, cldevices, 0, 0, 0); + g_program = clCreateProgramWithSource(g_context, 1, &clkernelstoh_COM_OpenCLKernels_cl, 0, &error); + error = clBuildProgram(g_program, numberOfDevices, cldevices, 0, 0, 0); if (error != CL_SUCCESS) { cl_int error2; size_t ret_val_size = 0; printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); - error2 = clGetProgramBuildInfo(program, cldevices[0], CL_PROGRAM_BUILD_LOG, 0, NULL, &ret_val_size); + error2 = clGetProgramBuildInfo(g_program, cldevices[0], CL_PROGRAM_BUILD_LOG, 0, NULL, &ret_val_size); if (error2 != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); } char *build_log = new char[ret_val_size + 1]; - error2 = clGetProgramBuildInfo(program, cldevices[0], CL_PROGRAM_BUILD_LOG, ret_val_size, build_log, NULL); + error2 = clGetProgramBuildInfo(g_program, cldevices[0], CL_PROGRAM_BUILD_LOG, ret_val_size, build_log, NULL); if (error2 != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); } build_log[ret_val_size] = '\0'; printf("%s", build_log); @@ -247,14 +247,14 @@ void WorkScheduler::initialize() for (indexDevices = 0; indexDevices < numberOfDevices; indexDevices++) { cl_device_id device = cldevices[indexDevices]; cl_int vendorID = 0; - cl_int error = clGetDeviceInfo(device, CL_DEVICE_VENDOR_ID, sizeof(cl_int), &vendorID, NULL); - if (error!= CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); } - OpenCLDevice *clDevice = new OpenCLDevice(context, device, program, vendorID); + cl_int error2 = clGetDeviceInfo(device, CL_DEVICE_VENDOR_ID, sizeof(cl_int), &vendorID, NULL); + if (error2 != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error2, clewErrorString(error2)); } + OpenCLDevice *clDevice = new OpenCLDevice(g_context, device, g_program, vendorID); clDevice->initialize(); - gpudevices.push_back(clDevice); + g_gpudevices.push_back(clDevice); } } - delete cldevices; + delete[] cldevices; } } delete[] platforms; @@ -267,26 +267,26 @@ void WorkScheduler::deinitialize() { #if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE Device *device; - while (cpudevices.size() > 0) { - device = cpudevices.back(); - cpudevices.pop_back(); + while (g_cpudevices.size() > 0) { + device = g_cpudevices.back(); + g_cpudevices.pop_back(); device->deinitialize(); delete device; } #ifdef COM_OPENCL_ENABLED - while (gpudevices.size() > 0) { - device = gpudevices.back(); - gpudevices.pop_back(); + while (g_gpudevices.size() > 0) { + device = g_gpudevices.back(); + g_gpudevices.pop_back(); device->deinitialize(); delete device; } - if (program) { - clReleaseProgram(program); - program = NULL; + if (g_program) { + clReleaseProgram(g_program); + g_program = NULL; } - if (context) { - clReleaseContext(context); - context = NULL; + if (g_context) { + clReleaseContext(g_context); + g_context = NULL; } #endif #endif |