1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2013 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker 7*8975f5c5SAndroid Build Coastguard Worker // copyvertex.h: Defines vertex buffer copying and conversion functions 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_COPYVERTEX_H_ 10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_COPYVERTEX_H_ 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Worker #include "common/mathutil.h" 13*8975f5c5SAndroid Build Coastguard Worker 14*8975f5c5SAndroid Build Coastguard Worker namespace rx 15*8975f5c5SAndroid Build Coastguard Worker { 16*8975f5c5SAndroid Build Coastguard Worker 17*8975f5c5SAndroid Build Coastguard Worker using VertexCopyFunction = void (*)(const uint8_t *input, 18*8975f5c5SAndroid Build Coastguard Worker size_t stride, 19*8975f5c5SAndroid Build Coastguard Worker size_t count, 20*8975f5c5SAndroid Build Coastguard Worker uint8_t *output); 21*8975f5c5SAndroid Build Coastguard Worker 22*8975f5c5SAndroid Build Coastguard Worker // 'alphaDefaultValueBits' gives the default value for the alpha channel (4th component) 23*8975f5c5SAndroid Build Coastguard Worker template <typename T, 24*8975f5c5SAndroid Build Coastguard Worker size_t inputComponentCount, 25*8975f5c5SAndroid Build Coastguard Worker size_t outputComponentCount, 26*8975f5c5SAndroid Build Coastguard Worker uint32_t alphaDefaultValueBits> 27*8975f5c5SAndroid Build Coastguard Worker void CopyNativeVertexData(const uint8_t *input, size_t stride, size_t count, uint8_t *output); 28*8975f5c5SAndroid Build Coastguard Worker 29*8975f5c5SAndroid Build Coastguard Worker template <size_t inputComponentCount, size_t outputComponentCount> 30*8975f5c5SAndroid Build Coastguard Worker void Copy8SintTo16SintVertexData(const uint8_t *input, 31*8975f5c5SAndroid Build Coastguard Worker size_t stride, 32*8975f5c5SAndroid Build Coastguard Worker size_t count, 33*8975f5c5SAndroid Build Coastguard Worker uint8_t *output); 34*8975f5c5SAndroid Build Coastguard Worker 35*8975f5c5SAndroid Build Coastguard Worker template <size_t componentCount> 36*8975f5c5SAndroid Build Coastguard Worker void Copy8SnormTo16SnormVertexData(const uint8_t *input, 37*8975f5c5SAndroid Build Coastguard Worker size_t stride, 38*8975f5c5SAndroid Build Coastguard Worker size_t count, 39*8975f5c5SAndroid Build Coastguard Worker uint8_t *output); 40*8975f5c5SAndroid Build Coastguard Worker 41*8975f5c5SAndroid Build Coastguard Worker template <size_t inputComponentCount, size_t outputComponentCount> 42*8975f5c5SAndroid Build Coastguard Worker void Copy32FixedTo32FVertexData(const uint8_t *input, size_t stride, size_t count, uint8_t *output); 43*8975f5c5SAndroid Build Coastguard Worker 44*8975f5c5SAndroid Build Coastguard Worker template <typename T, 45*8975f5c5SAndroid Build Coastguard Worker size_t inputComponentCount, 46*8975f5c5SAndroid Build Coastguard Worker size_t outputComponentCount, 47*8975f5c5SAndroid Build Coastguard Worker bool normalized, 48*8975f5c5SAndroid Build Coastguard Worker bool toHalf> 49*8975f5c5SAndroid Build Coastguard Worker void CopyToFloatVertexData(const uint8_t *input, size_t stride, size_t count, uint8_t *output); 50*8975f5c5SAndroid Build Coastguard Worker 51*8975f5c5SAndroid Build Coastguard Worker template <size_t inputComponentCount, size_t outputComponentCount> 52*8975f5c5SAndroid Build Coastguard Worker void Copy32FTo16FVertexData(const uint8_t *input, size_t stride, size_t count, uint8_t *output); 53*8975f5c5SAndroid Build Coastguard Worker 54*8975f5c5SAndroid Build Coastguard Worker void CopyXYZ32FToXYZ9E5(const uint8_t *input, size_t stride, size_t count, uint8_t *output); 55*8975f5c5SAndroid Build Coastguard Worker 56*8975f5c5SAndroid Build Coastguard Worker void CopyXYZ32FToX11Y11B10F(const uint8_t *input, size_t stride, size_t count, uint8_t *output); 57*8975f5c5SAndroid Build Coastguard Worker 58*8975f5c5SAndroid Build Coastguard Worker template <bool isSigned, bool normalized, bool toFloat, bool toHalf> 59*8975f5c5SAndroid Build Coastguard Worker void CopyXYZ10W2ToXYZWFloatVertexData(const uint8_t *input, 60*8975f5c5SAndroid Build Coastguard Worker size_t stride, 61*8975f5c5SAndroid Build Coastguard Worker size_t count, 62*8975f5c5SAndroid Build Coastguard Worker uint8_t *output); 63*8975f5c5SAndroid Build Coastguard Worker 64*8975f5c5SAndroid Build Coastguard Worker template <bool isSigned, bool normalized, bool toHalf> 65*8975f5c5SAndroid Build Coastguard Worker void CopyXYZ10ToXYZWFloatVertexData(const uint8_t *input, 66*8975f5c5SAndroid Build Coastguard Worker size_t stride, 67*8975f5c5SAndroid Build Coastguard Worker size_t count, 68*8975f5c5SAndroid Build Coastguard Worker uint8_t *output); 69*8975f5c5SAndroid Build Coastguard Worker 70*8975f5c5SAndroid Build Coastguard Worker template <bool isSigned, bool normalized, bool toHalf> 71*8975f5c5SAndroid Build Coastguard Worker void CopyW2XYZ10ToXYZWFloatVertexData(const uint8_t *input, 72*8975f5c5SAndroid Build Coastguard Worker size_t stride, 73*8975f5c5SAndroid Build Coastguard Worker size_t count, 74*8975f5c5SAndroid Build Coastguard Worker uint8_t *output); 75*8975f5c5SAndroid Build Coastguard Worker 76*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 77*8975f5c5SAndroid Build Coastguard Worker 78*8975f5c5SAndroid Build Coastguard Worker #include "copyvertex.inc.h" 79*8975f5c5SAndroid Build Coastguard Worker 80*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_COPYVERTEX_H_ 81