1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2021 Google LLC 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "gm/gm.h" 9cb93a386Sopenharmony_ci#include "include/core/SkBitmap.h" 10cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 11cb93a386Sopenharmony_ci#include "include/core/SkData.h" 12cb93a386Sopenharmony_ci#include "include/core/SkFont.h" 13cb93a386Sopenharmony_ci#include "include/core/SkPaint.h" 14cb93a386Sopenharmony_ci#include "include/core/SkSize.h" 15cb93a386Sopenharmony_ci#include "include/core/SkString.h" 16cb93a386Sopenharmony_ci#include "include/core/SkSurface.h" 17cb93a386Sopenharmony_ci#include "include/effects/SkGradientShader.h" 18cb93a386Sopenharmony_ci#include "include/effects/SkImageFilters.h" 19cb93a386Sopenharmony_ci#include "include/effects/SkRuntimeEffect.h" 20cb93a386Sopenharmony_ci#include "include/private/SkSLDefines.h" // for kDefaultInlineThreshold 21cb93a386Sopenharmony_ci#include "include/utils/SkRandom.h" 22cb93a386Sopenharmony_ci#include "src/core/SkRuntimeEffectPriv.h" 23cb93a386Sopenharmony_ci#include "src/gpu/GrCaps.h" 24cb93a386Sopenharmony_ci#include "src/gpu/GrDirectContextPriv.h" 25cb93a386Sopenharmony_ci#include "tests/Test.h" 26cb93a386Sopenharmony_ci#include "tools/Resources.h" 27cb93a386Sopenharmony_ci#include "tools/ToolUtils.h" 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_cistatic constexpr int kWidth = 2; 30cb93a386Sopenharmony_cistatic constexpr int kHeight = 2; 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_citemplate <typename T> 33cb93a386Sopenharmony_cistatic void set_uniform(SkRuntimeShaderBuilder* builder, const char* name, const T& value) { 34cb93a386Sopenharmony_ci SkRuntimeShaderBuilder::BuilderUniform uniform = builder->uniform(name); 35cb93a386Sopenharmony_ci if (uniform.fVar) { 36cb93a386Sopenharmony_ci uniform = value; 37cb93a386Sopenharmony_ci } 38cb93a386Sopenharmony_ci} 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_citemplate <typename T> 41cb93a386Sopenharmony_cistatic void set_uniform_array(SkRuntimeShaderBuilder* builder, const char* name, SkSpan<T> values) { 42cb93a386Sopenharmony_ci SkRuntimeShaderBuilder::BuilderUniform uniform = builder->uniform(name); 43cb93a386Sopenharmony_ci if (uniform.fVar) { 44cb93a386Sopenharmony_ci uniform.set(values.data(), values.size()); 45cb93a386Sopenharmony_ci } 46cb93a386Sopenharmony_ci} 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_cistatic void test_one_permutation(skiatest::Reporter* r, 49cb93a386Sopenharmony_ci SkSurface* surface, 50cb93a386Sopenharmony_ci const char* testFile, 51cb93a386Sopenharmony_ci const char* permutationSuffix, 52cb93a386Sopenharmony_ci const SkRuntimeEffect::Options& options) { 53cb93a386Sopenharmony_ci SkString resourcePath = SkStringPrintf("sksl/%s", testFile); 54cb93a386Sopenharmony_ci sk_sp<SkData> shaderData = GetResourceAsData(resourcePath.c_str()); 55cb93a386Sopenharmony_ci if (!shaderData) { 56cb93a386Sopenharmony_ci ERRORF(r, "%s%s: Unable to load file", testFile, permutationSuffix); 57cb93a386Sopenharmony_ci return; 58cb93a386Sopenharmony_ci } 59cb93a386Sopenharmony_ci 60cb93a386Sopenharmony_ci SkString shaderString{reinterpret_cast<const char*>(shaderData->bytes()), shaderData->size()}; 61cb93a386Sopenharmony_ci SkRuntimeEffect::Result result = SkRuntimeEffect::MakeForShader(shaderString, options); 62cb93a386Sopenharmony_ci if (!result.effect) { 63cb93a386Sopenharmony_ci ERRORF(r, "%s%s: %s", testFile, permutationSuffix, result.errorText.c_str()); 64cb93a386Sopenharmony_ci return; 65cb93a386Sopenharmony_ci } 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_ci static constexpr float kArray[5] = {1, 2, 3, 4, 5}; 68cb93a386Sopenharmony_ci 69cb93a386Sopenharmony_ci SkRuntimeShaderBuilder builder(result.effect); 70cb93a386Sopenharmony_ci set_uniform(&builder, "colorBlack", SkV4{0, 0, 0, 1}); 71cb93a386Sopenharmony_ci set_uniform(&builder, "colorRed", SkV4{1, 0, 0, 1}); 72cb93a386Sopenharmony_ci set_uniform(&builder, "colorGreen", SkV4{0, 1, 0, 1}); 73cb93a386Sopenharmony_ci set_uniform(&builder, "colorBlue", SkV4{0, 0, 1, 1}); 74cb93a386Sopenharmony_ci set_uniform(&builder, "colorWhite", SkV4{1, 1, 1, 1}); 75cb93a386Sopenharmony_ci set_uniform(&builder, "testInputs", SkV4{-1.25, 0, 0.75, 2.25}); 76cb93a386Sopenharmony_ci set_uniform(&builder, "testMatrix2x2", std::array<float,4>{1, 2, 77cb93a386Sopenharmony_ci 3, 4}); 78cb93a386Sopenharmony_ci set_uniform(&builder, "testMatrix3x3", std::array<float,9>{1, 2, 3, 79cb93a386Sopenharmony_ci 4, 5, 6, 80cb93a386Sopenharmony_ci 7, 8, 9}); 81cb93a386Sopenharmony_ci set_uniform(&builder, "unknownInput", 1.0f); 82cb93a386Sopenharmony_ci set_uniform(&builder, "testMatrix2x2", std::array<float,4>{1, 2, 83cb93a386Sopenharmony_ci 3, 4}); 84cb93a386Sopenharmony_ci set_uniform(&builder, "testMatrix3x3", std::array<float,9>{1, 2, 3, 85cb93a386Sopenharmony_ci 4, 5, 6, 86cb93a386Sopenharmony_ci 7, 8, 9}); 87cb93a386Sopenharmony_ci set_uniform_array(&builder, "testArray", SkMakeSpan(kArray)); 88cb93a386Sopenharmony_ci 89cb93a386Sopenharmony_ci sk_sp<SkShader> shader = builder.makeShader(/*localMatrix=*/nullptr, /*isOpaque=*/true); 90cb93a386Sopenharmony_ci if (!shader) { 91cb93a386Sopenharmony_ci ERRORF(r, "%s%s: Unable to build shader", testFile, permutationSuffix); 92cb93a386Sopenharmony_ci return; 93cb93a386Sopenharmony_ci } 94cb93a386Sopenharmony_ci 95cb93a386Sopenharmony_ci SkPaint paintShader; 96cb93a386Sopenharmony_ci paintShader.setShader(shader); 97cb93a386Sopenharmony_ci surface->getCanvas()->drawRect(SkRect::MakeWH(kWidth, kHeight), paintShader); 98cb93a386Sopenharmony_ci 99cb93a386Sopenharmony_ci SkBitmap bitmap; 100cb93a386Sopenharmony_ci REPORTER_ASSERT(r, bitmap.tryAllocPixels(surface->imageInfo())); 101cb93a386Sopenharmony_ci REPORTER_ASSERT(r, surface->readPixels(bitmap.info(), bitmap.getPixels(), bitmap.rowBytes(), 102cb93a386Sopenharmony_ci /*srcX=*/0, /*srcY=*/0)); 103cb93a386Sopenharmony_ci 104cb93a386Sopenharmony_ci bool success = true; 105cb93a386Sopenharmony_ci SkColor color[kHeight][kWidth]; 106cb93a386Sopenharmony_ci for (int y = 0; y < kHeight; ++y) { 107cb93a386Sopenharmony_ci for (int x = 0; x < kWidth; ++x) { 108cb93a386Sopenharmony_ci color[y][x] = bitmap.getColor(x, y); 109cb93a386Sopenharmony_ci if (color[y][x] != SkColorSetARGB(0xFF, 0x00, 0xFF, 0x00)) { 110cb93a386Sopenharmony_ci success = false; 111cb93a386Sopenharmony_ci } 112cb93a386Sopenharmony_ci } 113cb93a386Sopenharmony_ci } 114cb93a386Sopenharmony_ci 115cb93a386Sopenharmony_ci if (!success) { 116cb93a386Sopenharmony_ci static_assert(kWidth == 2); 117cb93a386Sopenharmony_ci static_assert(kHeight == 2); 118cb93a386Sopenharmony_ci ERRORF(r, "Expected: solid green. Actual:\n" 119cb93a386Sopenharmony_ci "RRGGBBAA RRGGBBAA\n" 120cb93a386Sopenharmony_ci "%02X%02X%02X%02X %02X%02X%02X%02X\n" 121cb93a386Sopenharmony_ci "%02X%02X%02X%02X %02X%02X%02X%02X", 122cb93a386Sopenharmony_ci SkColorGetR(color[0][0]), SkColorGetG(color[0][0]), 123cb93a386Sopenharmony_ci SkColorGetB(color[0][0]), SkColorGetA(color[0][0]), 124cb93a386Sopenharmony_ci 125cb93a386Sopenharmony_ci SkColorGetR(color[0][1]), SkColorGetG(color[0][1]), 126cb93a386Sopenharmony_ci SkColorGetB(color[0][1]), SkColorGetA(color[0][1]), 127cb93a386Sopenharmony_ci 128cb93a386Sopenharmony_ci SkColorGetR(color[1][0]), SkColorGetG(color[1][0]), 129cb93a386Sopenharmony_ci SkColorGetB(color[1][0]), SkColorGetA(color[1][0]), 130cb93a386Sopenharmony_ci 131cb93a386Sopenharmony_ci SkColorGetR(color[1][1]), SkColorGetG(color[1][1]), 132cb93a386Sopenharmony_ci SkColorGetB(color[1][1]), SkColorGetA(color[1][1])); 133cb93a386Sopenharmony_ci } 134cb93a386Sopenharmony_ci} 135cb93a386Sopenharmony_ci 136cb93a386Sopenharmony_cistatic void test_permutations(skiatest::Reporter* r, 137cb93a386Sopenharmony_ci SkSurface* surface, 138cb93a386Sopenharmony_ci const char* testFile, 139cb93a386Sopenharmony_ci bool worksInES2) { 140cb93a386Sopenharmony_ci SkRuntimeEffect::Options options = 141cb93a386Sopenharmony_ci worksInES2 ? SkRuntimeEffect::Options{} : SkRuntimeEffectPriv::ES3Options(); 142cb93a386Sopenharmony_ci options.forceNoInline = false; 143cb93a386Sopenharmony_ci test_one_permutation(r, surface, testFile, "", options); 144cb93a386Sopenharmony_ci 145cb93a386Sopenharmony_ci options.forceNoInline = true; 146cb93a386Sopenharmony_ci test_one_permutation(r, surface, testFile, " (NoInline)", options); 147cb93a386Sopenharmony_ci} 148cb93a386Sopenharmony_ci 149cb93a386Sopenharmony_cistatic void test_cpu(skiatest::Reporter* r, const char* testFile) { 150cb93a386Sopenharmony_ci const SkImageInfo info = SkImageInfo::MakeN32Premul(kWidth, kHeight); 151cb93a386Sopenharmony_ci sk_sp<SkSurface> surface(SkSurface::MakeRaster(info)); 152cb93a386Sopenharmony_ci 153cb93a386Sopenharmony_ci test_permutations(r, surface.get(), testFile, /*worksInES2=*/true); 154cb93a386Sopenharmony_ci} 155cb93a386Sopenharmony_ci 156cb93a386Sopenharmony_cistatic void test_gpu(skiatest::Reporter* r, GrDirectContext* ctx, const char* testFile) { 157cb93a386Sopenharmony_ci const SkImageInfo info = SkImageInfo::MakeN32Premul(kWidth, kHeight); 158cb93a386Sopenharmony_ci sk_sp<SkSurface> surface(SkSurface::MakeRenderTarget(ctx, SkBudgeted::kNo, info)); 159cb93a386Sopenharmony_ci 160cb93a386Sopenharmony_ci test_permutations(r, surface.get(), testFile, /*worksInES2=*/true); 161cb93a386Sopenharmony_ci} 162cb93a386Sopenharmony_ci 163cb93a386Sopenharmony_cistatic void test_es3(skiatest::Reporter* r, GrDirectContext* ctx, const char* testFile) { 164cb93a386Sopenharmony_ci if (!ctx->priv().caps()->shaderCaps()->supportsSkSLES3()) { 165cb93a386Sopenharmony_ci return; 166cb93a386Sopenharmony_ci } 167cb93a386Sopenharmony_ci // ES3-only tests never run on the CPU, because SkVM lacks support for many non-ES2 features. 168cb93a386Sopenharmony_ci const SkImageInfo info = SkImageInfo::MakeN32Premul(kWidth, kHeight); 169cb93a386Sopenharmony_ci sk_sp<SkSurface> surface(SkSurface::MakeRenderTarget(ctx, SkBudgeted::kNo, info)); 170cb93a386Sopenharmony_ci 171cb93a386Sopenharmony_ci test_permutations(r, surface.get(), testFile, /*worksInES2=*/false); 172cb93a386Sopenharmony_ci} 173cb93a386Sopenharmony_ci 174cb93a386Sopenharmony_ci#define SKSL_TEST_CPU(name, path) \ 175cb93a386Sopenharmony_ci DEF_TEST(name ## _CPU, r) { \ 176cb93a386Sopenharmony_ci test_cpu(r, path); \ 177cb93a386Sopenharmony_ci } 178cb93a386Sopenharmony_ci#define SKSL_TEST_GPU(name, path) \ 179cb93a386Sopenharmony_ci DEF_GPUTEST_FOR_RENDERING_CONTEXTS(name ## _GPU, r, ctxInfo) { \ 180cb93a386Sopenharmony_ci test_gpu(r, ctxInfo.directContext(), path); \ 181cb93a386Sopenharmony_ci } 182cb93a386Sopenharmony_ci#define SKSL_TEST_ES3(name, path) \ 183cb93a386Sopenharmony_ci DEF_GPUTEST_FOR_RENDERING_CONTEXTS(name ## _GPU, r, ctxInfo) { \ 184cb93a386Sopenharmony_ci test_es3(r, ctxInfo.directContext(), path); \ 185cb93a386Sopenharmony_ci } 186cb93a386Sopenharmony_ci#define SKSL_TEST(name, path) SKSL_TEST_CPU(name, path) SKSL_TEST_GPU(name, path) 187cb93a386Sopenharmony_ci 188cb93a386Sopenharmony_ciSKSL_TEST(SkSLArraySizeFolding, "folding/ArraySizeFolding.sksl") 189cb93a386Sopenharmony_ciSKSL_TEST(SkSLAssignmentOps, "folding/AssignmentOps.sksl") 190cb93a386Sopenharmony_ciSKSL_TEST(SkSLBoolFolding, "folding/BoolFolding.sksl") 191cb93a386Sopenharmony_ciSKSL_TEST(SkSLCastFolding, "folding/CastFolding.sksl") 192cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntFoldingES2, "folding/IntFoldingES2.sksl") 193cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntFoldingES3, "folding/IntFoldingES3.sksl") 194cb93a386Sopenharmony_ciSKSL_TEST(SkSLFloatFolding, "folding/FloatFolding.sksl") 195cb93a386Sopenharmony_ci// skbug.com/11919: Fails on Nexus5/7, and Intel GPUs 196cb93a386Sopenharmony_ciSKSL_TEST_CPU(SkSLMatrixFoldingES2, "folding/MatrixFoldingES2.sksl") 197cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLMatrixFoldingES3, "folding/MatrixFoldingES3.sksl") 198cb93a386Sopenharmony_ciSKSL_TEST(SkSLSelfAssignment, "folding/SelfAssignment.sksl") 199cb93a386Sopenharmony_ciSKSL_TEST(SkSLShortCircuitBoolFolding, "folding/ShortCircuitBoolFolding.sksl") 200cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwizzleFolding, "folding/SwizzleFolding.sksl") 201cb93a386Sopenharmony_ciSKSL_TEST(SkSLVectorScalarFolding, "folding/VectorScalarFolding.sksl") 202cb93a386Sopenharmony_ciSKSL_TEST(SkSLVectorVectorFolding, "folding/VectorVectorFolding.sksl") 203cb93a386Sopenharmony_ci 204cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLDoWhileBodyMustBeInlinedIntoAScope, 205cb93a386Sopenharmony_ci "inliner/DoWhileBodyMustBeInlinedIntoAScope.sksl") 206cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLDoWhileTestCannotBeInlined, "inliner/DoWhileTestCannotBeInlined.sksl") 207cb93a386Sopenharmony_ciSKSL_TEST(SkSLForBodyMustBeInlinedIntoAScope, "inliner/ForBodyMustBeInlinedIntoAScope.sksl") 208cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLForInitializerExpressionsCanBeInlined, 209cb93a386Sopenharmony_ci "inliner/ForInitializerExpressionsCanBeInlined.sksl") 210cb93a386Sopenharmony_ciSKSL_TEST(SkSLForWithoutReturnInsideCanBeInlined, "inliner/ForWithoutReturnInsideCanBeInlined.sksl") 211cb93a386Sopenharmony_ciSKSL_TEST(SkSLForWithReturnInsideCannotBeInlined, "inliner/ForWithReturnInsideCannotBeInlined.sksl") 212cb93a386Sopenharmony_ciSKSL_TEST(SkSLIfBodyMustBeInlinedIntoAScope, "inliner/IfBodyMustBeInlinedIntoAScope.sksl") 213cb93a386Sopenharmony_ciSKSL_TEST(SkSLIfElseBodyMustBeInlinedIntoAScope, "inliner/IfElseBodyMustBeInlinedIntoAScope.sksl") 214cb93a386Sopenharmony_ciSKSL_TEST(SkSLIfElseChainWithReturnsCanBeInlined, "inliner/IfElseChainWithReturnsCanBeInlined.sksl") 215cb93a386Sopenharmony_ciSKSL_TEST(SkSLIfTestCanBeInlined, "inliner/IfTestCanBeInlined.sksl") 216cb93a386Sopenharmony_ciSKSL_TEST(SkSLIfWithReturnsCanBeInlined, "inliner/IfWithReturnsCanBeInlined.sksl") 217cb93a386Sopenharmony_ciSKSL_TEST(SkSLInlineKeywordOverridesThreshold, "inliner/InlineKeywordOverridesThreshold.sksl") 218cb93a386Sopenharmony_ciSKSL_TEST(SkSLInlinerAvoidsVariableNameOverlap, "inliner/InlinerAvoidsVariableNameOverlap.sksl") 219cb93a386Sopenharmony_ciSKSL_TEST(SkSLInlinerElidesTempVarForReturnsInsideBlock, 220cb93a386Sopenharmony_ci "inliner/InlinerElidesTempVarForReturnsInsideBlock.sksl") 221cb93a386Sopenharmony_ciSKSL_TEST(SkSLInlinerUsesTempVarForMultipleReturns, 222cb93a386Sopenharmony_ci "inliner/InlinerUsesTempVarForMultipleReturns.sksl") 223cb93a386Sopenharmony_ciSKSL_TEST(SkSLInlinerUsesTempVarForReturnsInsideBlockWithVar, 224cb93a386Sopenharmony_ci "inliner/InlinerUsesTempVarForReturnsInsideBlockWithVar.sksl") 225cb93a386Sopenharmony_ciSKSL_TEST(SkSLInlineThreshold, "inliner/InlineThreshold.sksl") 226cb93a386Sopenharmony_ci// skbug.com/11919: Fails on Adreno + Vulkan 227cb93a386Sopenharmony_ciSKSL_TEST_CPU(SkSLInlineWithInoutArgument, "inliner/InlineWithInoutArgument.sksl") 228cb93a386Sopenharmony_ciSKSL_TEST(SkSLInlineWithModifiedArgument, "inliner/InlineWithModifiedArgument.sksl") 229cb93a386Sopenharmony_ciSKSL_TEST(SkSLInlineWithNestedBigCalls, "inliner/InlineWithNestedBigCalls.sksl") 230cb93a386Sopenharmony_ciSKSL_TEST(SkSLInlineWithUnmodifiedArgument, "inliner/InlineWithUnmodifiedArgument.sksl") 231cb93a386Sopenharmony_ciSKSL_TEST(SkSLInlineWithUnnecessaryBlocks, "inliner/InlineWithUnnecessaryBlocks.sksl") 232cb93a386Sopenharmony_ciSKSL_TEST(SkSLNoInline, "inliner/NoInline.sksl") 233cb93a386Sopenharmony_ciSKSL_TEST(SkSLShortCircuitEvaluationsCannotInlineRightHandSide, 234cb93a386Sopenharmony_ci "inliner/ShortCircuitEvaluationsCannotInlineRightHandSide.sksl") 235cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLStaticSwitchInline, "inliner/StaticSwitch.sksl") 236cb93a386Sopenharmony_ciSKSL_TEST(SkSLStructsCanBeInlinedSafely, "inliner/StructsCanBeInlinedSafely.sksl") 237cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwizzleCanBeInlinedDirectly, "inliner/SwizzleCanBeInlinedDirectly.sksl") 238cb93a386Sopenharmony_ciSKSL_TEST(SkSLTernaryResultsCannotBeInlined, "inliner/TernaryResultsCannotBeInlined.sksl") 239cb93a386Sopenharmony_ciSKSL_TEST(SkSLTernaryTestCanBeInlined, "inliner/TernaryTestCanBeInlined.sksl") 240cb93a386Sopenharmony_ciSKSL_TEST(SkSLTrivialArgumentsInlineDirectly, "inliner/TrivialArgumentsInlineDirectly.sksl") 241cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLWhileBodyMustBeInlinedIntoAScope, 242cb93a386Sopenharmony_ci "inliner/WhileBodyMustBeInlinedIntoAScope.sksl") 243cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLWhileTestCannotBeInlined, "inliner/WhileTestCannotBeInlined.sksl") 244cb93a386Sopenharmony_ci 245cb93a386Sopenharmony_ci// TODO(skia:11052): SPIR-V does not yet honor `out` param semantics correctly 246cb93a386Sopenharmony_ciSKSL_TEST_CPU(SkSLInlinerHonorsGLSLOutParamSemantics, 247cb93a386Sopenharmony_ci "inliner/InlinerHonorsGLSLOutParamSemantics.sksl") 248cb93a386Sopenharmony_ci 249cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntrinsicAbsFloat, "intrinsics/AbsFloat.sksl") 250cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntrinsicCeil, "intrinsics/Ceil.sksl") 251cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicDeterminant, "intrinsics/Determinant.sksl") 252cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicDFdx, "intrinsics/DFdx.sksl") 253cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicDFdy, "intrinsics/DFdy.sksl") 254cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicFloatBitsToInt, "intrinsics/FloatBitsToInt.sksl") 255cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicFloatBitsToUint, "intrinsics/FloatBitsToUint.sksl") 256cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicFwidth, "intrinsics/Fwidth.sksl") 257cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicIntBitsToFloat, "intrinsics/IntBitsToFloat.sksl") 258cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicIsInf, "intrinsics/IsInf.sksl") 259cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicClampInt, "intrinsics/ClampInt.sksl") 260cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicClampUInt, "intrinsics/ClampUInt.sksl") 261cb93a386Sopenharmony_ci// Fails on Adreno 6xx + Vulkan 262cb93a386Sopenharmony_ciSKSL_TEST_CPU(SkSLIntrinsicClampFloat, "intrinsics/ClampFloat.sksl") 263cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntrinsicMatrixCompMultES2, "intrinsics/MatrixCompMultES2.sksl") 264cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicMatrixCompMultES3, "intrinsics/MatrixCompMultES3.sksl") 265cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntrinsicMaxFloat, "intrinsics/MaxFloat.sksl") 266cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntrinsicMinFloat, "intrinsics/MinFloat.sksl") 267cb93a386Sopenharmony_ci// Fails on Adreno + Vulkan (skia:11919) 268cb93a386Sopenharmony_ciSKSL_TEST_CPU(SkSLIntrinsicMixFloat, "intrinsics/MixFloat.sksl") 269cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicModf, "intrinsics/Modf.sksl") 270cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicOuterProduct, "intrinsics/OuterProduct.sksl") 271cb93a386Sopenharmony_ci// Fails on Mac OpenGL + Radeon 5300M (skia:12434) 272cb93a386Sopenharmony_ci//SKSL_TEST_ES3(SkSLIntrinsicPackUnorm2x16, "intrinsics/PackUnorm2x16.sksl") 273cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicRound, "intrinsics/Round.sksl") 274cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicRoundEven, "intrinsics/RoundEven.sksl") 275cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntrinsicSignFloat, "intrinsics/SignFloat.sksl") 276cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntrinsicStep, "intrinsics/Step.sksl") 277cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicTrunc, "intrinsics/Trunc.sksl") 278cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicTranspose, "intrinsics/Transpose.sksl") 279cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLIntrinsicUintBitsToFloat, "intrinsics/UintBitsToFloat.sksl") 280cb93a386Sopenharmony_ci 281cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLArrayNarrowingConversions, "runtime/ArrayNarrowingConversions.rts") 282cb93a386Sopenharmony_ciSKSL_TEST(SkSLLoopFloat, "runtime/LoopFloat.rts") 283cb93a386Sopenharmony_ciSKSL_TEST(SkSLLoopInt, "runtime/LoopInt.rts") 284cb93a386Sopenharmony_ciSKSL_TEST(SkSLQualifierOrder, "runtime/QualifierOrder.rts") 285cb93a386Sopenharmony_ciSKSL_TEST(SkSLPrecisionQualifiers, "runtime/PrecisionQualifiers.rts") 286cb93a386Sopenharmony_ci 287cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLArrayComparison, "shared/ArrayComparison.sksl") 288cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLArrayConstructors, "shared/ArrayConstructors.sksl") 289cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLArrayCast, "shared/ArrayCast.sksl") 290cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLArrayFollowedByScalar, "shared/ArrayFollowedByScalar.sksl") 291cb93a386Sopenharmony_ciSKSL_TEST(SkSLArrayTypes, "shared/ArrayTypes.sksl") 292cb93a386Sopenharmony_ciSKSL_TEST(SkSLAssignment, "shared/Assignment.sksl") 293cb93a386Sopenharmony_ciSKSL_TEST(SkSLCastsRoundTowardZero, "shared/CastsRoundTowardZero.sksl") 294cb93a386Sopenharmony_ciSKSL_TEST(SkSLCommaMixedTypes, "shared/CommaMixedTypes.sksl") 295cb93a386Sopenharmony_ci// This test causes the Adreno 330 driver to crash, and does not pass on Quadro P400 in wasm. 296cb93a386Sopenharmony_ci// The CPU test confirms that we can get it right, even if not all drivers do. 297cb93a386Sopenharmony_ciSKSL_TEST_CPU(SkSLCommaSideEffects, "shared/CommaSideEffects.sksl") 298cb93a386Sopenharmony_ciSKSL_TEST(SkSLConstantIf, "shared/ConstantIf.sksl") 299cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLConstArray, "shared/ConstArray.sksl") 300cb93a386Sopenharmony_ciSKSL_TEST(SkSLConstVariableComparison, "shared/ConstVariableComparison.sksl") 301cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLDeadLoopVariable, "shared/DeadLoopVariable.sksl") 302cb93a386Sopenharmony_ciSKSL_TEST(SkSLDeadIfStatement, "shared/DeadIfStatement.sksl") 303cb93a386Sopenharmony_ciSKSL_TEST(SkSLDeadReturn, "shared/DeadReturn.sksl") 304cb93a386Sopenharmony_ci// TODO(skia:12012): some Radeons crash when compiling this code; disable them 305cb93a386Sopenharmony_ci//SKSL_TEST_ES3(SkSLDeadReturnES3, "shared/DeadReturnES3.sksl") 306cb93a386Sopenharmony_ciSKSL_TEST(SkSLDeadStripFunctions, "shared/DeadStripFunctions.sksl") 307cb93a386Sopenharmony_ciSKSL_TEST(SkSLDependentInitializers, "shared/DependentInitializers.sksl") 308cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLDoWhileControlFlow, "shared/DoWhileControlFlow.sksl") 309cb93a386Sopenharmony_ciSKSL_TEST(SkSLEmptyBlocksES2, "shared/EmptyBlocksES2.sksl") 310cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLEmptyBlocksES3, "shared/EmptyBlocksES3.sksl") 311cb93a386Sopenharmony_ciSKSL_TEST(SkSLForLoopControlFlow, "shared/ForLoopControlFlow.sksl") 312cb93a386Sopenharmony_ciSKSL_TEST(SkSLFunctionArgTypeMatch, "shared/FunctionArgTypeMatch.sksl") 313cb93a386Sopenharmony_ciSKSL_TEST(SkSLFunctionReturnTypeMatch, "shared/FunctionReturnTypeMatch.sksl") 314cb93a386Sopenharmony_ciSKSL_TEST(SkSLFunctions, "shared/Functions.sksl") 315cb93a386Sopenharmony_ciSKSL_TEST(SkSLFunctionPrototype, "shared/FunctionPrototype.sksl") 316cb93a386Sopenharmony_ciSKSL_TEST(SkSLGeometricIntrinsics, "shared/GeometricIntrinsics.sksl") 317cb93a386Sopenharmony_ciSKSL_TEST(SkSLHelloWorld, "shared/HelloWorld.sksl") 318cb93a386Sopenharmony_ciSKSL_TEST(SkSLHex, "shared/Hex.sksl") 319cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLHexUnsigned, "shared/HexUnsigned.sksl") 320cb93a386Sopenharmony_ciSKSL_TEST(SkSLMatrices, "shared/Matrices.sksl") 321cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLMatricesNonsquare, "shared/MatricesNonsquare.sksl") 322cb93a386Sopenharmony_ciSKSL_TEST(SkSLMatrixConstructorsES2, "shared/MatrixConstructorsES2.sksl") 323cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLMatrixConstructorsES3, "shared/MatrixConstructorsES3.sksl") 324cb93a386Sopenharmony_ciSKSL_TEST(SkSLMatrixEquality, "shared/MatrixEquality.sksl") 325cb93a386Sopenharmony_ciSKSL_TEST(SkSLMatrixScalarSplat, "shared/MatrixScalarSplat.sksl") 326cb93a386Sopenharmony_ciSKSL_TEST(SkSLMatrixToVectorCast, "shared/MatrixToVectorCast.sksl") 327cb93a386Sopenharmony_ciSKSL_TEST(SkSLMultipleAssignments, "shared/MultipleAssignments.sksl") 328cb93a386Sopenharmony_ciSKSL_TEST(SkSLNegation, "shared/Negation.sksl") 329cb93a386Sopenharmony_ciSKSL_TEST(SkSLNumberCasts, "shared/NumberCasts.sksl") 330cb93a386Sopenharmony_ciSKSL_TEST(SkSLOperatorsES2, "shared/OperatorsES2.sksl") 331cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLOperatorsES3, "shared/OperatorsES3.sksl") 332cb93a386Sopenharmony_ciSKSL_TEST(SkSLOssfuzz36852, "shared/Ossfuzz36852.sksl") 333cb93a386Sopenharmony_ci 334cb93a386Sopenharmony_ci// skbug.com/11919: Fails on Adreno + Vulkan 335cb93a386Sopenharmony_ciSKSL_TEST_CPU(SkSLOutParams, "shared/OutParams.sksl") 336cb93a386Sopenharmony_ciSKSL_TEST_CPU(SkSLOutParamsNoInline, "shared/OutParamsNoInline.sksl") 337cb93a386Sopenharmony_ciSKSL_TEST_CPU(SkSLOutParamsTricky, "shared/OutParamsTricky.sksl") 338cb93a386Sopenharmony_ci 339cb93a386Sopenharmony_ciSKSL_TEST(SkSLResizeMatrix, "shared/ResizeMatrix.sksl") 340cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLResizeMatrixNonsquare, "shared/ResizeMatrixNonsquare.sksl") 341cb93a386Sopenharmony_ciSKSL_TEST(SkSLReturnsValueOnEveryPathES2, "shared/ReturnsValueOnEveryPathES2.sksl") 342cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLReturnsValueOnEveryPathES3, "shared/ReturnsValueOnEveryPathES3.sksl") 343cb93a386Sopenharmony_ciSKSL_TEST(SkSLScalarConversionConstructorsES2, "shared/ScalarConversionConstructorsES2.sksl") 344cb93a386Sopenharmony_ciSKSL_TEST(SkSLScopedSymbol, "shared/ScopedSymbol.sksl") 345cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLScalarConversionConstructorsES3, "shared/ScalarConversionConstructorsES3.sksl") 346cb93a386Sopenharmony_ciSKSL_TEST(SkSLStackingVectorCasts, "shared/StackingVectorCasts.sksl") 347cb93a386Sopenharmony_ciSKSL_TEST(SkSLStaticIf, "shared/StaticIf.sksl") 348cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLStaticSwitch, "shared/StaticSwitch.sksl") 349cb93a386Sopenharmony_ciSKSL_TEST(SkSLStructArrayFollowedByScalar, "shared/StructArrayFollowedByScalar.sksl") 350cb93a386Sopenharmony_ciSKSL_TEST(SkSLStructsInFunctions, "shared/StructsInFunctions.sksl") 351cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwitch, "shared/Switch.sksl") 352cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwitchDefaultOnly, "shared/SwitchDefaultOnly.sksl") 353cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwitchWithFallthrough, "shared/SwitchWithFallthrough.sksl") 354cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwitchWithLoops, "shared/SwitchWithLoops.sksl") 355cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwizzleBoolConstants, "shared/SwizzleBoolConstants.sksl") 356cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwizzleByConstantIndex, "shared/SwizzleByConstantIndex.sksl") 357cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLSwizzleByIndex, "shared/SwizzleByIndex.sksl") 358cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwizzleConstants, "shared/SwizzleConstants.sksl") 359cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwizzleLTRB, "shared/SwizzleLTRB.sksl") 360cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwizzleOpt, "shared/SwizzleOpt.sksl") 361cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwizzleScalar, "shared/SwizzleScalar.sksl") 362cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwizzleScalarBool, "shared/SwizzleScalarBool.sksl") 363cb93a386Sopenharmony_ciSKSL_TEST(SkSLSwizzleScalarInt, "shared/SwizzleScalarInt.sksl") 364cb93a386Sopenharmony_ciSKSL_TEST(SkSLTernaryAsLValueEntirelyFoldable, "shared/TernaryAsLValueEntirelyFoldable.sksl") 365cb93a386Sopenharmony_ciSKSL_TEST(SkSLTernaryAsLValueFoldableTest, "shared/TernaryAsLValueFoldableTest.sksl") 366cb93a386Sopenharmony_ciSKSL_TEST(SkSLTernaryExpression, "shared/TernaryExpression.sksl") 367cb93a386Sopenharmony_ciSKSL_TEST(SkSLUnaryPositiveNegative, "shared/UnaryPositiveNegative.sksl") 368cb93a386Sopenharmony_ciSKSL_TEST(SkSLUniformArray, "shared/UniformArray.sksl") 369cb93a386Sopenharmony_ciSKSL_TEST(SkSLUnusedVariables, "shared/UnusedVariables.sksl") 370cb93a386Sopenharmony_ciSKSL_TEST(SkSLVectorConstructors, "shared/VectorConstructors.sksl") 371cb93a386Sopenharmony_ciSKSL_TEST(SkSLVectorToMatrixCast, "shared/VectorToMatrixCast.sksl") 372cb93a386Sopenharmony_ci// skbug.com/11919: Fails on Nexus5/7, and Intel GPUs 373cb93a386Sopenharmony_ciSKSL_TEST_CPU(SkSLVectorScalarMath, "shared/VectorScalarMath.sksl") 374cb93a386Sopenharmony_ciSKSL_TEST_ES3(SkSLWhileLoopControlFlow, "shared/WhileLoopControlFlow.sksl") 375cb93a386Sopenharmony_ci 376cb93a386Sopenharmony_ci/* 377cb93a386Sopenharmony_ciTODO(skia:11209): enable these tests when Runtime Effects have support for ES3 378cb93a386Sopenharmony_ci 379cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntrinsicAbsInt, "intrinsics/AbsInt.sksl") 380cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntrinsicMaxInt, "intrinsics/MaxInt.sksl") 381cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntrinsicMinInt, "intrinsics/MinInt.sksl") 382cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntrinsicMixBool, "intrinsics/MixBool.sksl") 383cb93a386Sopenharmony_ciSKSL_TEST(SkSLIntrinsicSignInt, "intrinsics/SignInt.sksl") 384cb93a386Sopenharmony_ci*/ 385