| 
									
										
										
										
											2019-06-24 11:32:41 +08:00
										 |  |  | //
 | 
					
						
							|  |  |  | //  GLUtils.cpp
 | 
					
						
							|  |  |  | //  MNN
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  Created by MNN on 2019/01/31.
 | 
					
						
							|  |  |  | //  Copyright © 2018, Alibaba Group Holding Limited
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2019-12-27 22:16:57 +08:00
										 |  |  | #include "backend/opengl/GLUtils.hpp"
 | 
					
						
							|  |  |  | #include "backend/opengl/GLBackend.hpp"
 | 
					
						
							| 
									
										
										
										
											2019-06-24 11:32:41 +08:00
										 |  |  | #include <sstream>
 | 
					
						
							|  |  |  | namespace MNN { | 
					
						
							|  |  |  | namespace OpenGL { | 
					
						
							|  |  |  |     void setLocalSize(std::vector<std::string>& prefix, int* localSize, int setLocalSizeX, int setLocalSizeY, int setLocalSizeZ){ | 
					
						
							| 
									
										
										
										
											2019-12-27 22:16:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-24 11:32:41 +08:00
										 |  |  |         GLint maxLocalSizeX, maxLocalSizeY, maxLocalSizeZ; | 
					
						
							|  |  |  |         glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_SIZE, 0, &maxLocalSizeX); | 
					
						
							|  |  |  |         glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_SIZE, 1, &maxLocalSizeY); | 
					
						
							|  |  |  |         glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_SIZE, 2, &maxLocalSizeZ); | 
					
						
							|  |  |  |         localSize[0]     = setLocalSizeX < maxLocalSizeX ? setLocalSizeX : maxLocalSizeX; | 
					
						
							|  |  |  |         localSize[1]     = setLocalSizeY < maxLocalSizeY ? setLocalSizeY : maxLocalSizeY; | 
					
						
							|  |  |  |         localSize[2]     = setLocalSizeZ < maxLocalSizeZ ? setLocalSizeZ : maxLocalSizeZ; | 
					
						
							| 
									
										
										
										
											2019-12-27 22:16:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-24 11:32:41 +08:00
										 |  |  |         { | 
					
						
							|  |  |  |             std::ostringstream os; | 
					
						
							|  |  |  |             os << "#define XLOCAL " << localSize[0]; | 
					
						
							|  |  |  |             prefix.push_back(os.str()); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             std::ostringstream os; | 
					
						
							|  |  |  |             os << "#define YLOCAL " << localSize[1]; | 
					
						
							|  |  |  |             prefix.push_back(os.str()); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             std::ostringstream os; | 
					
						
							|  |  |  |             os << "#define ZLOCAL " << localSize[2]; | 
					
						
							|  |  |  |             prefix.push_back(os.str()); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } // namespace OpenGL
 | 
					
						
							|  |  |  | } // namespace MNN
 |