diff options
Diffstat (limited to 'chromium/third_party/skia/tools/skpdiff/SkCLImageDiffer.h')
-rw-r--r-- | chromium/third_party/skia/tools/skpdiff/SkCLImageDiffer.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/chromium/third_party/skia/tools/skpdiff/SkCLImageDiffer.h b/chromium/third_party/skia/tools/skpdiff/SkCLImageDiffer.h new file mode 100644 index 00000000000..6e9c2dc0cf6 --- /dev/null +++ b/chromium/third_party/skia/tools/skpdiff/SkCLImageDiffer.h @@ -0,0 +1,97 @@ +/* + * Copyright 2013 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkCLImageDiffer_DEFINED +#define SkCLImageDiffer_DEFINED + +#if SK_BUILD_FOR_MAC +# include <OpenCL/cl.h> +#else +# include <CL/cl.h> +#endif +#include "SkTDArray.h" + +#include "SkImageDiffer.h" + +class SkStream; + +/** + * An SkImageDiffer that requires initialization with an OpenCL device and context. + */ +class SkCLImageDiffer : public SkImageDiffer { +public: + SkCLImageDiffer(); + + virtual bool requiresOpenCL() const SK_OVERRIDE { return true; } + + /** + * Initializes the OpenCL resources this differ needs to work + * @param device An OpenCL device + * @param context An OpenCL context of the given device + * @return True on success, false otherwise + */ + virtual bool init(cl_device_id device, cl_context context); + +protected: + /** + * Called by init after fDevice, fContext, and fCommandQueue are successfully initialized + * @return True on success, false otherwise + */ + virtual bool onInit() = 0; + + /** + * Loads an OpenCL kernel from the file with the given named entry point. This only works after + * init is called. + * @param file The file path of the kernel + * @param name The name of the entry point of the desired kernel in the file + * @param kernel A pointer to return the loaded kernel into + * @return True on success, false otherwise + */ + bool loadKernelFile(const char file[], const char name[], cl_kernel* kernel); + + /** + * Loads an OpenCL kernel from the stream with the given named entry point. This only works + * after init is called. + * @param stream The stream that contains the kernel + * @param name The name of the entry point of the desired kernel in the stream + * @param kernel A pointer to return the loaded kernel into + * @return True on success, false otherwise + */ + bool loadKernelStream(SkStream* stream, const char name[], cl_kernel* kernel); + + /** + * Loads an OpenCL kernel from the source string with the given named entry point. This only + * works after init is called. + * @param source The string that contains the kernel + * @param name The name of the entry point of the desired kernel in the source string + * @param kernel A pointer to return the loaded kernel into + * @return True on success, false otherwise + */ + bool loadKernelSource(const char source[], const char name[], cl_kernel* kernel); + + /** + * Loads a read only copy of the given bitmap into device memory and returns the block of + * memory. This only works after init is called. + * @param bitmap The bitmap to load into memory + * @param image A pointer to return the allocated image to + * @return True on success, false otherwise + */ + bool makeImage2D(SkBitmap* bitmap, cl_mem* image) const; + + cl_device_id fDevice; + cl_context fContext; + cl_command_queue fCommandQueue; + +protected: + bool fIsGood; + +private: + + typedef SkImageDiffer INHERITED; +}; + +#endif |