1// 2// Copyright (c) 2013-2014 The ANGLE Project Authors. All rights reserved. 3// Use of this source code is governed by a BSD-style license that can be 4// found in the LICENSE file. 5// 6 7// loadimage.h: Defines image loading functions 8 9#ifndef LIBGLESV2_RENDERER_LOADIMAGE_H_ 10#define LIBGLESV2_RENDERER_LOADIMAGE_H_ 11 12#include "libGLESv2/angletypes.h" 13 14#include <cstdint> 15 16namespace rx 17{ 18 19void LoadA8ToRGBA8(size_t width, size_t height, size_t depth, 20 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 21 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 22 23void LoadA8ToBGRA8(size_t width, size_t height, size_t depth, 24 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 25 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 26 27void LoadA8ToBGRA8_SSE2(size_t width, size_t height, size_t depth, 28 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 29 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 30 31void LoadA32FToRGBA32F(size_t width, size_t height, size_t depth, 32 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 33 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 34 35void LoadA16FToRGBA16F(size_t width, size_t height, size_t depth, 36 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 37 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 38 39void LoadL8ToRGBA8(size_t width, size_t height, size_t depth, 40 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 41 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 42 43void LoadL8ToBGRA8(size_t width, size_t height, size_t depth, 44 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 45 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 46 47void LoadL32FToRGBA32F(size_t width, size_t height, size_t depth, 48 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 49 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 50 51void LoadL16FToRGBA16F(size_t width, size_t height, size_t depth, 52 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 53 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 54 55void LoadLA8ToRGBA8(size_t width, size_t height, size_t depth, 56 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 57 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 58 59void LoadLA8ToBGRA8(size_t width, size_t height, size_t depth, 60 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 61 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 62 63void LoadLA32FToRGBA32F(size_t width, size_t height, size_t depth, 64 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 65 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 66 67void LoadLA16FToRGBA16F(size_t width, size_t height, size_t depth, 68 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 69 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 70 71void LoadRGB8ToBGRX8(size_t width, size_t height, size_t depth, 72 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 73 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 74 75void LoadRG8ToBGRX8(size_t width, size_t height, size_t depth, 76 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 77 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 78 79void LoadR8ToBGRX8(size_t width, size_t height, size_t depth, 80 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 81 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 82 83void LoadR5G6B5ToBGRA8(size_t width, size_t height, size_t depth, 84 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 85 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 86 87void LoadR5G6B5ToRGBA8(size_t width, size_t height, size_t depth, 88 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 89 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 90 91void LoadRGBA8ToBGRA8_SSE2(size_t width, size_t height, size_t depth, 92 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 93 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 94 95void LoadRGBA8ToBGRA8(size_t width, size_t height, size_t depth, 96 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 97 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 98 99void LoadRGBA4ToBGRA8(size_t width, size_t height, size_t depth, 100 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 101 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 102 103void LoadRGBA4ToRGBA8(size_t width, size_t height, size_t depth, 104 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 105 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 106 107void LoadBGRA4ToBGRA8(size_t width, size_t height, size_t depth, 108 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 109 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 110 111void LoadRGB5A1ToBGRA8(size_t width, size_t height, size_t depth, 112 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 113 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 114 115void LoadRGB5A1ToRGBA8(size_t width, size_t height, size_t depth, 116 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 117 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 118 119void LoadBGR5A1ToBGRA8(size_t width, size_t height, size_t depth, 120 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 121 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 122 123void LoadRGB10A2ToRGBA8(size_t width, size_t height, size_t depth, 124 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 125 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 126 127void LoadRGB16FToRGB9E5(size_t width, size_t height, size_t depth, 128 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 129 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 130 131void LoadRGB32FToRGB9E5(size_t width, size_t height, size_t depth, 132 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 133 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 134 135void LoadRGB16FToRG11B10F(size_t width, size_t height, size_t depth, 136 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 137 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 138 139void LoadRGB32FToRG11B10F(size_t width, size_t height, size_t depth, 140 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 141 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 142 143void LoadG8R24ToR24G8(size_t width, size_t height, size_t depth, 144 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 145 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 146 147template <typename type, size_t componentCount> 148inline void LoadToNative(size_t width, size_t height, size_t depth, 149 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 150 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 151 152template <typename type, uint32_t fourthComponentBits> 153inline void LoadToNative3To4(size_t width, size_t height, size_t depth, 154 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 155 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 156 157template <size_t componentCount> 158inline void Load32FTo16F(size_t width, size_t height, size_t depth, 159 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 160 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 161 162void LoadRGB32FToRGBA16F(size_t width, size_t height, size_t depth, 163 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 164 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 165 166template <size_t blockWidth, size_t blockHeight, size_t blockSize> 167inline void LoadCompressedToNative(size_t width, size_t height, size_t depth, 168 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 169 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 170 171void LoadR32ToR16(size_t width, size_t height, size_t depth, 172 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 173 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 174 175template <typename type, uint32_t firstBits, uint32_t secondBits, uint32_t thirdBits, uint32_t fourthBits> 176inline void Initialize4ComponentData(size_t width, size_t height, size_t depth, 177 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 178 179void LoadR32ToR24G8(size_t width, size_t height, size_t depth, 180 const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 181 uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch); 182 183template <typename T> 184inline T *OffsetDataPointer(uint8_t *data, size_t y, size_t z, size_t rowPitch, size_t depthPitch); 185 186template <typename T> 187inline const T *OffsetDataPointer(const uint8_t *data, size_t y, size_t z, size_t rowPitch, size_t depthPitch); 188 189} 190 191#include "loadimage.inl" 192 193#endif // LIBGLESV2_RENDERER_LOADIMAGE_H_ 194