blob: 112a828a6d0363524f105ad80a6e5c4ab78249fb [file] [log] [blame]
Ethan Nicholas7461a4a2017-12-21 14:18:01 -05001/*
Ethan Nicholas130fb3f2018-02-01 12:14:34 -05002 * Copyright 2018 Google Inc.
Ethan Nicholas7461a4a2017-12-21 14:18:01 -05003 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
Ethan Nicholas7461a4a2017-12-21 14:18:01 -05008#ifndef GrYUVtoRGBEffect_DEFINED
9#define GrYUVtoRGBEffect_DEFINED
Robert Phillips94ade752018-10-09 12:32:31 -040010
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "include/core/SkTypes.h"
Robert Phillips94ade752018-10-09 12:32:31 -040012
Brian Salomonca6b2f42020-01-24 11:31:21 -050013#include "include/core/SkYUVAIndex.h"
Mike Kleinc0bd9f92019-04-23 12:05:21 -050014#include "src/gpu/GrCoordTransform.h"
15#include "src/gpu/GrFragmentProcessor.h"
Robert Phillips94ade752018-10-09 12:32:31 -040016
Ethan Nicholas7461a4a2017-12-21 14:18:01 -050017class GrYUVtoRGBEffect : public GrFragmentProcessor {
18public:
Greg Danielc7672092020-02-06 14:32:54 -050019 static std::unique_ptr<GrFragmentProcessor> Make(GrSurfaceProxyView views[],
Robert Phillips94ade752018-10-09 12:32:31 -040020 const SkYUVAIndex indices[4],
Jim Van Verth30e0d7f2018-11-02 13:36:42 -040021 SkYUVColorSpace yuvColorSpace,
Brian Salomond71548a2020-02-29 19:43:30 -050022 GrSamplerState samplerState,
Brian Salomonca6b2f42020-01-24 11:31:21 -050023 const GrCaps&,
Michael Ludwiga6a84002019-04-12 15:03:02 -040024 const SkMatrix& localMatrix = SkMatrix::I(),
Brian Salomond71548a2020-02-29 19:43:30 -050025 const SkRect* subset = nullptr);
Brian Osman9a390ac2018-11-12 09:47:48 -050026#ifdef SK_DEBUG
Robert Phillipsba5c4392018-07-25 12:37:14 -040027 SkString dumpInfo() const override;
Brian Osman9a390ac2018-11-12 09:47:48 -050028#endif
Robert Phillips94ade752018-10-09 12:32:31 -040029
Ethan Nicholas7461a4a2017-12-21 14:18:01 -050030 std::unique_ptr<GrFragmentProcessor> clone() const override;
Brian Salomonfa9232c2019-12-04 16:09:04 -050031
Ethan Nicholas7461a4a2017-12-21 14:18:01 -050032 const char* name() const override { return "YUVtoRGBEffect"; }
33
34private:
Brian Salomonfa9232c2019-12-04 16:09:04 -050035 GrYUVtoRGBEffect(std::unique_ptr<GrFragmentProcessor> planeFPs[4], int numPlanes,
36 const SkYUVAIndex yuvaIndices[4], SkYUVColorSpace yuvColorSpace);
Michael Ludwiga6a84002019-04-12 15:03:02 -040037
Brian Salomonfa9232c2019-12-04 16:09:04 -050038 GrYUVtoRGBEffect(const GrYUVtoRGBEffect& src);
Michael Ludwiga6a84002019-04-12 15:03:02 -040039
Ethan Nicholas7461a4a2017-12-21 14:18:01 -050040 GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
Brian Salomonfa9232c2019-12-04 16:09:04 -050041
Ethan Nicholas7461a4a2017-12-21 14:18:01 -050042 void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
Brian Salomonfa9232c2019-12-04 16:09:04 -050043
Ethan Nicholas7461a4a2017-12-21 14:18:01 -050044 bool onIsEqual(const GrFragmentProcessor&) const override;
Brian Salomonfa9232c2019-12-04 16:09:04 -050045
Ethan Nicholas7461a4a2017-12-21 14:18:01 -050046 GR_DECLARE_FRAGMENT_PROCESSOR_TEST
Robert Phillips94ade752018-10-09 12:32:31 -040047
Robert Phillips94ade752018-10-09 12:32:31 -040048 SkYUVAIndex fYUVAIndices[4];
Robert Phillipsb651aac2019-03-15 12:18:49 -040049 SkYUVColorSpace fYUVColorSpace;
Ethan Nicholas7461a4a2017-12-21 14:18:01 -050050};
51#endif