1*03ce13f7SAndroid Build Coastguard Worker // Copyright 2016 The SwiftShader Authors. All Rights Reserved. 2*03ce13f7SAndroid Build Coastguard Worker // 3*03ce13f7SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*03ce13f7SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*03ce13f7SAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*03ce13f7SAndroid Build Coastguard Worker // 7*03ce13f7SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 8*03ce13f7SAndroid Build Coastguard Worker // 9*03ce13f7SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*03ce13f7SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*03ce13f7SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*03ce13f7SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*03ce13f7SAndroid Build Coastguard Worker // limitations under the License. 14*03ce13f7SAndroid Build Coastguard Worker 15*03ce13f7SAndroid Build Coastguard Worker #include "Math.hpp" 16*03ce13f7SAndroid Build Coastguard Worker 17*03ce13f7SAndroid Build Coastguard Worker namespace sw { 18*03ce13f7SAndroid Build Coastguard Worker FNV_1a(uint64_t hash,unsigned char data)19*03ce13f7SAndroid Build Coastguard Workerinline uint64_t FNV_1a(uint64_t hash, unsigned char data) 20*03ce13f7SAndroid Build Coastguard Worker { 21*03ce13f7SAndroid Build Coastguard Worker return (hash ^ data) * 1099511628211; 22*03ce13f7SAndroid Build Coastguard Worker } 23*03ce13f7SAndroid Build Coastguard Worker FNV_1a(const unsigned char * data,int size)24*03ce13f7SAndroid Build Coastguard Workeruint64_t FNV_1a(const unsigned char *data, int size) 25*03ce13f7SAndroid Build Coastguard Worker { 26*03ce13f7SAndroid Build Coastguard Worker int64_t hash = 0xCBF29CE484222325; 27*03ce13f7SAndroid Build Coastguard Worker 28*03ce13f7SAndroid Build Coastguard Worker for(int i = 0; i < size; i++) 29*03ce13f7SAndroid Build Coastguard Worker { 30*03ce13f7SAndroid Build Coastguard Worker hash = FNV_1a(hash, data[i]); 31*03ce13f7SAndroid Build Coastguard Worker } 32*03ce13f7SAndroid Build Coastguard Worker 33*03ce13f7SAndroid Build Coastguard Worker return hash; 34*03ce13f7SAndroid Build Coastguard Worker } 35*03ce13f7SAndroid Build Coastguard Worker sRGB8toLinear8(unsigned char value)36*03ce13f7SAndroid Build Coastguard Workerunsigned char sRGB8toLinear8(unsigned char value) 37*03ce13f7SAndroid Build Coastguard Worker { 38*03ce13f7SAndroid Build Coastguard Worker static unsigned char sRGBtoLinearTable[256] = { 255 }; 39*03ce13f7SAndroid Build Coastguard Worker if(sRGBtoLinearTable[0] == 255) 40*03ce13f7SAndroid Build Coastguard Worker { 41*03ce13f7SAndroid Build Coastguard Worker for(int i = 0; i < 256; i++) 42*03ce13f7SAndroid Build Coastguard Worker { 43*03ce13f7SAndroid Build Coastguard Worker sRGBtoLinearTable[i] = static_cast<unsigned char>(sw::sRGBtoLinear(static_cast<float>(i) / 255.0f) * 255.0f + 0.5f); 44*03ce13f7SAndroid Build Coastguard Worker } 45*03ce13f7SAndroid Build Coastguard Worker } 46*03ce13f7SAndroid Build Coastguard Worker 47*03ce13f7SAndroid Build Coastguard Worker return sRGBtoLinearTable[value]; 48*03ce13f7SAndroid Build Coastguard Worker } 49*03ce13f7SAndroid Build Coastguard Worker 50*03ce13f7SAndroid Build Coastguard Worker } // namespace sw 51