mirror of
				https://bitbucket.org/mfeemster/fractorium.git
				synced 2025-11-03 17:50:27 -05:00 
			
		
		
		
	--Code changes
-Clean up Michel's PR.
This commit is contained in:
		@ -54,6 +54,13 @@ using namespace EmberNs;
 | 
				
			|||||||
//#define TEST_CL 1
 | 
					//#define TEST_CL 1
 | 
				
			||||||
//#define TEST_CL_BUFFERS 1
 | 
					//#define TEST_CL_BUFFERS 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//This special define is made to fix buggy OpenCL compilers on Mac.
 | 
				
			||||||
 | 
					//Rendering is much slower there for unknown reasons. Michel traced it down
 | 
				
			||||||
 | 
					//to the consec variable which keeps track of how many tries are needed to computer
 | 
				
			||||||
 | 
					//a point which is not a bad value. Strangely, keeping this as a local variable
 | 
				
			||||||
 | 
					//is slower than keeping it as an element in a global array.
 | 
				
			||||||
 | 
					//This is counterintuitive, and lends further weight to the idea that OpenCL on Mac
 | 
				
			||||||
 | 
					//is horribly broken.
 | 
				
			||||||
#ifdef __APPLE__
 | 
					#ifdef __APPLE__
 | 
				
			||||||
	#define KNL_USE_GLOBAL_CONSEC
 | 
						#define KNL_USE_GLOBAL_CONSEC
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -467,7 +467,7 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
 | 
				
			|||||||
#else
 | 
					#else
 | 
				
			||||||
	   "		consec[blockStartThreadIndex] = 0;\n"
 | 
						   "		consec[blockStartThreadIndex] = 0;\n"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
       "\n";
 | 
						   ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ember.XformCount() > 1)
 | 
						if (ember.XformCount() > 1)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
				
			|||||||
@ -727,9 +727,13 @@ bool RendererCL<T, bucketT>::Alloc(bool histOnly)
 | 
				
			|||||||
		if (b && !(b = device->m_Wrapper.AddBuffer(m_HistBufferName, size)))                                           { ErrorStr(loc, "Failed to set histogram buffer", device.get()); break; }//Histogram. Will memset to zero later.
 | 
							if (b && !(b = device->m_Wrapper.AddBuffer(m_HistBufferName, size)))                                           { ErrorStr(loc, "Failed to set histogram buffer", device.get()); break; }//Histogram. Will memset to zero later.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (b && !(b = device->m_Wrapper.AddBuffer(m_PointsBufferName, IterGridKernelCount() * sizeof(PointCL<T>))))   { ErrorStr(loc, "Failed to set points buffer", device.get()); break; }//Points between iter calls.
 | 
							if (b && !(b = device->m_Wrapper.AddBuffer(m_PointsBufferName, IterGridKernelCount() * sizeof(PointCL<T>))))   { ErrorStr(loc, "Failed to set points buffer", device.get()); break; }//Points between iter calls.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef KNL_USE_GLOBAL_CONSEC
 | 
					#ifdef KNL_USE_GLOBAL_CONSEC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (b && !(b = device->m_Wrapper.AddBuffer(m_ConsecBufferName, IterGridKernelCount() * sizeof(cl_uchar))))                     { ErrorStr(loc, "Failed to set consec buffer", device.get()); break; }//Global sequence.
 | 
							if (b && !(b = device->m_Wrapper.AddBuffer(m_ConsecBufferName, IterGridKernelCount() * sizeof(cl_uchar))))                     { ErrorStr(loc, "Failed to set consec buffer", device.get()); break; }//Global sequence.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (m_VarStates.size())
 | 
							if (m_VarStates.size())
 | 
				
			||||||
			if (b && !(b = device->m_Wrapper.AddBuffer(m_VarStateBufferName, SizeOf(m_VarStates))))                        { ErrorStr(loc, "Failed to set variation state buffer", device.get()); break; }//Points between iter calls.
 | 
								if (b && !(b = device->m_Wrapper.AddBuffer(m_VarStateBufferName, SizeOf(m_VarStates))))                        { ErrorStr(loc, "Failed to set variation state buffer", device.get()); break; }//Points between iter calls.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1118,9 +1122,13 @@ bool RendererCL<T, bucketT>::RunIter(size_t iterCount, size_t temporalSample, si
 | 
				
			|||||||
			if (b && !(b = wrapper.SetImageArg (kernelIndex, argIndex++, false, "Palette")))          { ErrorStr(loc, "Setting palette argument failed", m_Devices[dev].get()); }//Palette.
 | 
								if (b && !(b = wrapper.SetImageArg (kernelIndex, argIndex++, false, "Palette")))          { ErrorStr(loc, "Setting palette argument failed", m_Devices[dev].get()); }//Palette.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_PointsBufferName)))        { ErrorStr(loc, "Setting points buffer argument failed", m_Devices[dev].get()); }//Random start points.
 | 
								if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_PointsBufferName)))        { ErrorStr(loc, "Setting points buffer argument failed", m_Devices[dev].get()); }//Random start points.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef KNL_USE_GLOBAL_CONSEC
 | 
					#ifdef KNL_USE_GLOBAL_CONSEC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_ConsecBufferName)))        { ErrorStr(loc, "Setting consec buffer argument failed", m_Devices[dev].get()); }//Global sequence.
 | 
								if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_ConsecBufferName)))        { ErrorStr(loc, "Setting consec buffer argument failed", m_Devices[dev].get()); }//Global sequence.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (b && !(b = wrapper.RunKernel(kernelIndex,
 | 
								if (b && !(b = wrapper.RunKernel(kernelIndex,
 | 
				
			||||||
											 IterGridKernelWidth(),//Total grid dims.
 | 
																 IterGridKernelWidth(),//Total grid dims.
 | 
				
			||||||
											 IterGridKernelHeight(),
 | 
																 IterGridKernelHeight(),
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user