1630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski/* 2630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski * Copyright 2014 Google Inc. 3630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski * 4630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski * Use of this source code is governed by a BSD-style license that can be 5630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski * found in the LICENSE file. 6630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski */ 7630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski 8630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski#include "SkTextureCompression_opts.h" 9630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski#include "SkTextureCompression_opts_neon.h" 10630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski#include "SkUtilsArm.h" 11630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski 12630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevskiSkTextureCompressor::CompressionProc 13630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevskiSkTextureCompressorGetPlatformProc(SkColorType colorType, SkTextureCompressor::Format fmt) { 14630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski#if SK_ARM_NEON_IS_NONE 15630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski return NULL; 16630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski#else 17630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski#if SK_ARM_NEON_IS_DYNAMIC 18630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski if (!sk_cpu_arm_has_neon()) { 19630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski return NULL; 20630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski } 21630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski#endif 22630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski switch (colorType) { 23630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski case kAlpha_8_SkColorType: 24630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski { 25630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski switch (fmt) { 26630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski case SkTextureCompressor::kR11_EAC_Format: 27630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski return CompressA8toR11EAC_NEON; 28630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski default: 29630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski return NULL; 30630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski } 31630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski } 32630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski break; 33630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski 34630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski default: 35630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski return NULL; 36630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski } 37630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski#endif 38630598cbb87edda47aa26bc7b7f93865b34cd8dekrajcevski} 3925a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski 4025a67bcb7ac70d3077e91126c4b8924a53557a38krajcevskibool SkTextureCompressorGetPlatformDims(SkTextureCompressor::Format fmt, int* dimX, int* dimY) { 4125a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski#if SK_ARM_NEON_IS_NONE 4225a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski return false; 4325a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski#else 4425a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski#if SK_ARM_NEON_IS_DYNAMIC 4525a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski if (!sk_cpu_arm_has_neon()) { 4625a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski return false; 4725a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski } 4825a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski#endif 4925a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski switch (fmt) { 5025a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski case SkTextureCompressor::kR11_EAC_Format: 5125a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski *dimX = 16; 5225a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski *dimY = 4; 5325a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski return true; 5425a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski default: 5525a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski return false; 5625a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski } 5725a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski return false; 5825a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski#endif 5925a67bcb7ac70d3077e91126c4b8924a53557a38krajcevski} 60