See header for documentation. */
| 256 | |
| 257 | /* See header for documentation. */ |
| 258 | std::vector<float> floatx4_array_from_astc_img( |
| 259 | const astcenc_image* img, |
| 260 | bool y_flip, |
| 261 | unsigned int z_index |
| 262 | ) { |
| 263 | size_t dim_x = img->dim_x; |
| 264 | size_t dim_y = img->dim_y; |
| 265 | std::vector<float> buf(4 * dim_x * dim_y); |
| 266 | float* buf_data = buf.data(); |
| 267 | |
| 268 | assert(z_index < img->dim_z); |
| 269 | |
| 270 | if (img->data_type == ASTCENC_TYPE_U8) |
| 271 | { |
| 272 | uint8_t* data8 = static_cast<uint8_t*>(img->data[z_index]); |
| 273 | for (size_t y = 0; y < dim_y; y++) |
| 274 | { |
| 275 | size_t mod_y = y_flip ? dim_y - y - 1 : y; |
| 276 | float* dst = buf_data + y * dim_x * 4; |
| 277 | |
| 278 | for (size_t x = 0; x < dim_x; x++) |
| 279 | { |
| 280 | dst[4 * x ] = data8[(4 * dim_x * mod_y) + (4 * x )] * (1.0f / 255.0f); |
| 281 | dst[4 * x + 1] = data8[(4 * dim_x * mod_y) + (4 * x + 1)] * (1.0f / 255.0f); |
| 282 | dst[4 * x + 2] = data8[(4 * dim_x * mod_y) + (4 * x + 2)] * (1.0f / 255.0f); |
| 283 | dst[4 * x + 3] = data8[(4 * dim_x * mod_y) + (4 * x + 3)] * (1.0f / 255.0f); |
| 284 | } |
| 285 | } |
| 286 | } |
| 287 | else if (img->data_type == ASTCENC_TYPE_F16) |
| 288 | { |
| 289 | uint16_t* data16 = static_cast<uint16_t*>(img->data[z_index]); |
| 290 | for (size_t y = 0; y < dim_y; y++) |
| 291 | { |
| 292 | size_t mod_y = y_flip ? dim_y - y - 1 : y; |
| 293 | float *dst = buf_data + y * dim_x * 4; |
| 294 | |
| 295 | for (size_t x = 0; x < dim_x; x++) |
| 296 | { |
| 297 | vint4 colori( |
| 298 | data16[(4 * dim_x * mod_y) + (4 * x )], |
| 299 | data16[(4 * dim_x * mod_y) + (4 * x + 1)], |
| 300 | data16[(4 * dim_x * mod_y) + (4 * x + 2)], |
| 301 | data16[(4 * dim_x * mod_y) + (4 * x + 3)] |
| 302 | ); |
| 303 | |
| 304 | vfloat4 color = float16_to_float(colori); |
| 305 | store(color, dst + 4 * x); |
| 306 | } |
| 307 | } |
| 308 | } |
| 309 | else // if (img->data_type == ASTCENC_TYPE_F32) |
| 310 | { |
| 311 | assert(img->data_type == ASTCENC_TYPE_F32); |
| 312 | float* data32 = static_cast<float*>(img->data[z_index]); |
| 313 | for (size_t y = 0; y < dim_y; y++) |
| 314 | { |
| 315 | size_t mod_y = y_flip ? dim_y - y - 1 : y; |
no test coverage detected