blob: 80824fe0763693fbad4dce5c3c55a696e4b8ee1a [file] [log] [blame]
Ethan Nicholas68990be2017-07-13 09:36:52 -04001/*
2 * Copyright 2017 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8in uniform sampler2D image;
9in uniform colorSpaceXform colorXform;
Brian Salomon1d816b92017-08-17 11:07:59 -040010in float4x4 matrix;
Ethan Nicholas68990be2017-07-13 09:36:52 -040011
12@constructorParams {
13 GrSamplerParams samplerParams
14}
15
16@coordTransform(image) {
17 matrix
18}
19
20@samplerParams(image) {
21 samplerParams
22}
23
24@make {
Brian Salomonaff329b2017-08-11 09:40:37 -040025 static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy,
26 sk_sp<GrColorSpaceXform> colorSpaceXform,
27 const SkMatrix& matrix) {
28 return std::unique_ptr<GrFragmentProcessor>(
Ethan Nicholas68990be2017-07-13 09:36:52 -040029 new GrSimpleTextureEffect(std::move(proxy), std::move(colorSpaceXform), matrix,
30 GrSamplerParams(SkShader::kClamp_TileMode, GrSamplerParams::kNone_FilterMode)));
31 }
32
33 /* clamp mode */
Brian Salomonaff329b2017-08-11 09:40:37 -040034 static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy,
35 sk_sp<GrColorSpaceXform> colorSpaceXform,
36 const SkMatrix& matrix,
37 GrSamplerParams::FilterMode filterMode) {
38 return std::unique_ptr<GrFragmentProcessor>(
Ethan Nicholas68990be2017-07-13 09:36:52 -040039 new GrSimpleTextureEffect(std::move(proxy), std::move(colorSpaceXform), matrix,
40 GrSamplerParams(SkShader::kClamp_TileMode, filterMode)));
41 }
42
Brian Salomonaff329b2017-08-11 09:40:37 -040043 static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy,
44 sk_sp<GrColorSpaceXform> colorSpaceXform,
45 const SkMatrix& matrix,
46 const GrSamplerParams& p) {
47 return std::unique_ptr<GrFragmentProcessor>(
Ethan Nicholas68990be2017-07-13 09:36:52 -040048 new GrSimpleTextureEffect(std::move(proxy), std::move(colorSpaceXform), matrix, p));
49 }
50}
51
52@optimizationFlags {
53 kCompatibleWithCoverageAsAlpha_OptimizationFlag |
54 (GrPixelConfigIsOpaque(image->config()) ? kPreservesOpaqueInput_OptimizationFlag :
55 kNone_OptimizationFlags)
56}
57
58void main() {
59 sk_OutColor = sk_InColor * texture(image, sk_TransformedCoords2D[0], colorXform);
60}
61
62@test(testData) {
63 int texIdx = testData->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
64 : GrProcessorUnitTest::kAlphaTextureIdx;
65 static const SkShader::TileMode kTileModes[] = {
66 SkShader::kClamp_TileMode,
67 SkShader::kRepeat_TileMode,
68 SkShader::kMirror_TileMode,
69 };
70 SkShader::TileMode tileModes[] = {
71 kTileModes[testData->fRandom->nextULessThan(SK_ARRAY_COUNT(kTileModes))],
72 kTileModes[testData->fRandom->nextULessThan(SK_ARRAY_COUNT(kTileModes))],
73 };
74 GrSamplerParams params(tileModes, testData->fRandom->nextBool()
75 ? GrSamplerParams::kBilerp_FilterMode
76 : GrSamplerParams::kNone_FilterMode);
77
78 const SkMatrix& matrix = GrTest::TestMatrix(testData->fRandom);
79 sk_sp<GrColorSpaceXform> colorSpaceXform = GrTest::TestColorXform(testData->fRandom);
80 return GrSimpleTextureEffect::Make(testData->textureProxy(texIdx), std::move(colorSpaceXform),
81 matrix);
82}