diff --git a/SConstruct b/SConstruct index 3cf4891640..79cee49bb3 100644 --- a/SConstruct +++ b/SConstruct @@ -110,6 +110,7 @@ vars.AddVariables( BoolVariable('noao', 'Build without AO', False), BoolVariable('wxgl', 'Set For Building with WX GL libs (WIP)', False), BoolVariable('jittest', 'temp don\'t use (WIP)', False), + BoolVariable('opencl', 'Build with OpenCL', False), BoolVariable('nojit', 'Remove entire jit cores', False), EnumVariable('flavor', 'Choose a build flavor', 'release', allowed_values = ('release', 'devel', 'debug', 'fastlog', 'prof'), @@ -240,9 +241,6 @@ if sys.platform == 'darwin': env['HAVE_SDL'] = conf.CheckSDL('1.0.0') -# OpenCL -env['HAVE_OPENCL'] = conf.CheckPKG('opencl') - # Bluetooth for wii support env['HAVE_BLUEZ'] = conf.CheckPKG('bluez') @@ -257,6 +255,11 @@ else: env['HAVE_OPENAL'] = conf.CheckPKG('openal') env['HAVE_ALSA'] = conf.CheckPKG('alsa') +# OpenCL +if env['opencl']: + env['HAVE_OPENCL'] = conf.CheckPKG('opencl') +else: + env['HAVE_OPENCL'] = 0 if sys.platform != 'darwin': # needed for mic diff --git a/Source/Core/VideoCommon/Src/OpenCL/TextureDecoder.cpp b/Source/Core/VideoCommon/Src/OpenCL/TextureDecoder.cpp index 17e4b9a520..a062c10fc4 100644 --- a/Source/Core/VideoCommon/Src/OpenCL/TextureDecoder.cpp +++ b/Source/Core/VideoCommon/Src/OpenCL/TextureDecoder.cpp @@ -46,21 +46,24 @@ struct sDecoders cl_kernel kernel; // compute kernel const char **cKernel; }; -const char *Kernel = "\n" \ -"__kernel void Decode( __local unsigned char *dst, __local const unsigned char *src, \n" \ -" int width, int height) \n" \ -" int id = get_global_id(0); \n" \ -" for (int xy = 0; xy < height*width; xy += 4)" -" for (int iy = 0; iy < 4; iy++, src += 8)" -" {" -" u16 *ptr = (u16 *)dst + ((xy / width) + iy) * width + (xy % width);" -" u16 *s = (u16 *)src;" -" for(int j = 0; j < 4; j++)" -" *ptr++ = Common::swap16(*s++);" -" }" \ +const char *Kernel = " \ +__kernel void Decode(__local unsigned char *dst, \ + __local const unsigned char *src, \ + int width, int height) \ +{ \ + int id = get_global_id(0); \ + for (int xy = 0; xy < height*width; xy += 4) \ + for (int iy = 0; iy < 4; iy++, src += 8) { \ + u16 *ptr = (u16 *)dst + ((xy / width) + iy) * \ + width + (xy % width); \ + u16 *s = (u16 *)src; \ + for(int j = 0; j < 4; j++) \ + *ptr++ = Common::swap16(*s++); \ + } +}"; sDecoders Decoders[] = { {NULL, NULL, &Kernel}, -}; + bool Inited = false; // TODO: Deinit (clRelease...) diff --git a/Source/Core/VideoCommon/Src/TextureDecoder.cpp b/Source/Core/VideoCommon/Src/TextureDecoder.cpp index ed15472433..ead79400ca 100644 --- a/Source/Core/VideoCommon/Src/TextureDecoder.cpp +++ b/Source/Core/VideoCommon/Src/TextureDecoder.cpp @@ -21,7 +21,7 @@ #include "CPUDetect.h" #include "TextureDecoder.h" -#ifdef HAVE_OPENCL +#if defined(HAVE_OPENCL) && HAVE_OPENCL #include "OpenCL/TextureDecoder.h" #endif @@ -581,11 +581,11 @@ void TexDecoder_SetTexFmtOverlayOptions(bool enable, bool center) PC_TexFormat TexDecoder_Decode(u8 *dst, const u8 *src, int width, int height, int texformat, int tlutaddr, int tlutfmt) { - #ifdef HAVE_OPENCL +#if defined(HAVE_OPENCL) && HAVE_OPENCL PC_TexFormat retval = TexDecoder_Decode_OpenCL(dst, src, width, height, texformat, tlutaddr, tlutfmt); - #else +#else PC_TexFormat retval = TexDecoder_Decode_real(dst,src,width,height,texformat,tlutaddr,tlutfmt); - #endif +#endif if ((!TexFmt_Overlay_Enable)|| (retval == PC_TEX_FMT_NONE)) return retval;