MCPcopy Create free account
hub / github.com/ARM-software/astc-encoder / floatx4_array_from_astc_img

Function floatx4_array_from_astc_img

Source/astcenccli_image.cpp:258–329  ·  view source on GitHub ↗

See header for documentation. */

Source from the content-addressed store, hash-verified

256
257/* See header for documentation. */
258std::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;

Callers 2

store_hdr_image_with_stbFunction · 0.85

Calls 2

float16_to_floatFunction · 0.70
storeFunction · 0.70

Tested by

no test coverage detected