Lines Matching refs:block

122  * The size of the source data must be a multiple of the ETC1 block size,
128 * found in the upper left part of the block(s), and the rest of the
130 * placed in the upper half of a 4x4 block, and the lower half of the
131 * pixels in the block will not be accessed.
308 etc2_get_pixel_index(const struct etc2_block *block, int x, int y)
311 int idx = (block->pixel_indices[1] >> bit) & 0x7;
337 etc2_rgb8_parse_block(struct etc2_block *block,
350 block->is_ind_mode = false;
351 block->is_diff_mode = false;
352 block->is_t_mode = false;
353 block->is_h_mode = false;
354 block->is_planar_mode = false;
357 block->opaque = src[3] & 0x2;
363 block->is_ind_mode = true;
369 block->base_colors[0][i] = etc1_base_color_ind_hi(src[i]);
370 block->base_colors[1][i] = etc1_base_color_ind_lo(src[i]);
375 block->is_t_mode = true;
378 block->base_colors[0][i] = etc2_base_color1_t_mode(src, i);
379 block->base_colors[1][i] = etc2_base_color2_t_mode(src, i);
382 block->distance =
387 block->paint_colors[0][i] = etc2_clamp(block->base_colors[0][i]);
388 block->paint_colors[1][i] = etc2_clamp(block->base_colors[1][i] +
389 block->distance);
390 block->paint_colors[2][i] = etc2_clamp(block->base_colors[1][i]);
391 block->paint_colors[3][i] = etc2_clamp(block->base_colors[1][i] -
392 block->distance);
399 block->is_h_mode = true;
402 block->base_colors[0][i] = etc2_base_color1_h_mode(src, i);
403 block->base_colors[1][i] = etc2_base_color2_h_mode(src, i);
406 base_color_1_value = (block->base_colors[0][0] << 16) +
407 (block->base_colors[0][1] << 8) +
408 block->base_colors[0][2];
409 base_color_2_value = (block->base_colors[1][0] << 16) +
410 (block->base_colors[1][1] << 8) +
411 block->base_colors[1][2];
413 block->distance =
419 block->paint_colors[0][i] = etc2_clamp(block->base_colors[0][i] +
420 block->distance);
421 block->paint_colors[1][i] = etc2_clamp(block->base_colors[0][i] -
422 block->distance);
423 block->paint_colors[2][i] = etc2_clamp(block->base_colors[1][i] +
424 block->distance);
425 block->paint_colors[3][i] = etc2_clamp(block->base_colors[1][i] -
426 block->distance);
431 block->is_planar_mode = true;
434 block->opaque = true;
437 block->base_colors[0][i] = etc2_base_color_o_planar(src, i);
438 block->base_colors[1][i] = etc2_base_color_h_planar(src, i);
439 block->base_colors[2][i] = etc2_base_color_v_planar(src, i);
444 block->is_diff_mode = true;
450 block->base_colors[0][i] = etc1_base_color_diff_hi(src[i]);
451 block->base_colors[1][i] = etc1_base_color_diff_lo(src[i]);
455 if (block->is_ind_mode || block->is_diff_mode) {
462 block->modifier_tables[0] = (!punchthrough_alpha || block->opaque) ?
465 block->modifier_tables[1] = (!punchthrough_alpha || block->opaque) ?
469 block->flipped = (src[3] & 0x1);
472 block->pixel_indices[0] =
477 etc2_rgb8_fetch_texel(const struct etc2_block *block,
486 idx = ((block->pixel_indices[0] >> (15 + bit)) & 0x2) |
487 ((block->pixel_indices[0] >> (bit)) & 0x1);
489 if (block->is_ind_mode || block->is_diff_mode) {
492 if (!block->opaque && idx == 2) {
501 blk = (block->flipped) ? (y >= 2) : (x >= 2);
502 base_color = block->base_colors[blk];
503 modifier = block->modifier_tables[blk][idx];
509 else if (block->is_t_mode || block->is_h_mode) {
512 if (!block->opaque && idx == 2) {
521 dst[0] = block->paint_colors[idx][0];
522 dst[1] = block->paint_colors[idx][1];
523 dst[2] = block->paint_colors[idx][2];
525 else if (block->is_planar_mode) {
531 red = (x * (block->base_colors[1][0] - block->base_colors[0][0]) +
532 y * (block->base_colors[2][0] - block->base_colors[0][0]) +
533 4 * block->base_colors[0][0] + 2) >> 2;
535 green = (x * (block->base_colors[1][1] - block->base_colors[0][1]) +
536 y * (block->base_colors[2][1] - block->base_colors[0][1]) +
537 4 * block->base_colors[0][1] + 2) >> 2;
539 blue = (x * (block->base_colors[1][2] - block->base_colors[0][2]) +
540 y * (block->base_colors[2][2] - block->base_colors[0][2]) +
541 4 * block->base_colors[0][2] + 2) >> 2;
552 unreachable("unhandled block mode");
556 etc2_alpha8_fetch_texel(const struct etc2_block *block,
561 idx = etc2_get_pixel_index(block, x, y);
562 modifier = etc2_modifier_tables[block->table_index][idx];
563 alpha = block->base_codeword + modifier * block->multiplier;
568 etc2_r11_fetch_texel(const struct etc2_block *block,
574 idx = etc2_get_pixel_index(block, x, y);
575 modifier = etc2_modifier_tables[block->table_index][idx];
577 if (block->multiplier != 0)
579 color = etc2_clamp2(((block->base_codeword << 3) | 0x4) +
580 ((modifier * block->multiplier) << 3));
582 color = etc2_clamp2(((block->base_codeword << 3) | 0x4) + modifier);
594 etc2_signed_r11_fetch_texel(const struct etc2_block *block,
599 GLbyte base_codeword = (GLbyte) block->base_codeword;
605 idx = etc2_get_pixel_index(block, x, y);
606 modifier = etc2_modifier_tables[block->table_index][idx];
608 if (block->multiplier != 0)
611 ((modifier * block->multiplier) << 3));
632 etc2_alpha8_parse_block(struct etc2_block *block, const uint8_t *src)
634 block->base_codeword = src[0];
635 block->multiplier = (src[1] >> 4) & 0xf;
636 block->table_index = src[1] & 0xf;
637 block->pixel_indices[1] = (((uint64_t)src[2] << 40) |
646 etc2_r11_parse_block(struct etc2_block *block, const uint8_t *src)
649 etc2_alpha8_parse_block(block, src);
653 etc2_rgba8_parse_block(struct etc2_block *block, const uint8_t *src)
656 etc2_rgb8_parse_block(block, src + 8,
659 etc2_alpha8_parse_block(block, src);
663 etc2_rgba8_fetch_texel(const struct etc2_block *block,
666 etc2_rgb8_fetch_texel(block, x, y, dst,
668 etc2_alpha8_fetch_texel(block, x, y, dst);
680 struct etc2_block block;
698 etc2_rgb8_parse_block(&block, src,
704 etc2_rgb8_fetch_texel(&block, i, j, dst,
728 struct etc2_block block;
738 etc2_rgb8_parse_block(&block, src,
745 etc2_rgb8_fetch_texel(&block, i, j, dst,
774 /* If internalformat is COMPRESSED_RGBA8_ETC2_EAC, each 4 × 4 block of
775 * RGBA8888 information is compressed to 128 bits. To decode a block, the
779 struct etc2_block block;
788 etc2_rgba8_parse_block(&block, src);
793 etc2_rgba8_fetch_texel(&block, i, j, dst);
813 /* If internalformat is COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, each 4 × 4 block
814 * of RGBA8888 information is compressed to 128 bits. To decode a block, the
818 struct etc2_block block;
828 etc2_rgba8_parse_block(&block, src);
833 etc2_rgba8_fetch_texel(&block, i, j, dst);
861 /* If internalformat is COMPRESSED_R11_EAC, each 4 × 4 block of
865 struct etc2_block block;
874 etc2_r11_parse_block(&block, src);
879 etc2_r11_fetch_texel(&block, i, j, dst);
898 /* If internalformat is COMPRESSED_RG11_EAC, each 4 × 4 block of
902 struct etc2_block block;
912 etc2_r11_parse_block(&block, src);
918 etc2_r11_fetch_texel(&block, i, j, dst);
923 etc2_r11_parse_block(&block, src + 8);
929 etc2_r11_fetch_texel(&block, i, j, dst + comp_size);
948 /* If internalformat is COMPRESSED_SIGNED_R11_EAC, each 4 × 4 block of
952 struct etc2_block block;
961 etc2_r11_parse_block(&block, src);
967 etc2_signed_r11_fetch_texel(&block, i, j, dst);
986 /* If internalformat is COMPRESSED_SIGNED_RG11_EAC, each 4 × 4 block of
990 struct etc2_block block;
1000 etc2_r11_parse_block(&block, src);
1006 etc2_signed_r11_fetch_texel(&block, i, j, dst);
1011 etc2_r11_parse_block(&block, src + 8);
1017 etc2_signed_r11_fetch_texel(&block, i, j, dst + comp_size);
1037 struct etc2_block block;
1046 etc2_rgb8_parse_block(&block, src,
1051 etc2_rgb8_fetch_texel(&block, i, j, dst,
1074 struct etc2_block block;
1084 etc2_rgb8_parse_block(&block, src,
1089 etc2_rgb8_fetch_texel(&block, i, j, dst,
1207 * The size of the source data must be a multiple of the ETC2 block size
1274 struct etc1_block block;
1280 etc1_parse_block(&block, src);
1281 etc1_fetch_texel(&block, i % 4, j % 4, dst);
1294 struct etc2_block block;
1300 etc2_rgb8_parse_block(&block, src,
1302 etc2_rgb8_fetch_texel(&block, i % 4, j % 4, dst,
1315 struct etc2_block block;
1321 etc2_rgb8_parse_block(&block, src,
1323 etc2_rgb8_fetch_texel(&block, i % 4, j % 4, dst,
1336 struct etc2_block block;
1342 etc2_rgba8_parse_block(&block, src);
1343 etc2_rgba8_fetch_texel(&block, i % 4, j % 4, dst);
1355 struct etc2_block block;
1361 etc2_rgba8_parse_block(&block, src);
1362 etc2_rgba8_fetch_texel(&block, i % 4, j % 4, dst);
1374 struct etc2_block block;
1380 etc2_r11_parse_block(&block, src);
1381 etc2_r11_fetch_texel(&block, i % 4, j % 4, (uint8_t *)&dst);
1393 struct etc2_block block;
1400 etc2_r11_parse_block(&block, src);
1401 etc2_r11_fetch_texel(&block, i % 4, j % 4, (uint8_t *)dst);
1404 etc2_r11_parse_block(&block, src + 8);
1405 etc2_r11_fetch_texel(&block, i % 4, j % 4, (uint8_t *)(dst + 1));
1417 struct etc2_block block;
1423 etc2_r11_parse_block(&block, src);
1424 etc2_signed_r11_fetch_texel(&block, i % 4, j % 4, (uint8_t *)&dst);
1436 struct etc2_block block;
1443 etc2_r11_parse_block(&block, src);
1444 etc2_signed_r11_fetch_texel(&block, i % 4, j % 4, (uint8_t *)dst);
1447 etc2_r11_parse_block(&block, src + 8);
1448 etc2_signed_r11_fetch_texel(&block, i % 4, j % 4, (uint8_t *)(dst + 1));
1461 struct etc2_block block;
1467 etc2_rgb8_parse_block(&block, src,
1469 etc2_rgb8_fetch_texel(&block, i % 4, j % 4, dst,
1482 struct etc2_block block;
1488 etc2_rgb8_parse_block(&block, src,
1490 etc2_rgb8_fetch_texel(&block, i % 4, j % 4, dst,