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