| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483 |
- /*
- Copyright (c) 2013, Intel Corporation
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of Intel Corporation nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #include "ispc_texcomp.h"
- #include "kernel_ispc.h"
- #include <memory.h> // ESENTHEL
- void GetProfile_ultrafast(bc7_enc_settings* settings)
- {
- settings->channels = 3;
- // mode02
- settings->mode_selection[0] = false;
- settings->skip_mode2 = true;
- settings->refineIterations[0] = 2;
- settings->refineIterations[2] = 2;
- // mode13
- settings->mode_selection[1] = false;
- settings->fastSkipTreshold_mode1 = 3;
- settings->fastSkipTreshold_mode3 = 1;
- settings->fastSkipTreshold_mode7 = 0;
- settings->refineIterations[1] = 2;
- settings->refineIterations[3] = 1;
- // mode45
- settings->mode_selection[2] = false;
- settings->mode45_channel0 = 0;
- settings->refineIterations_channel = 0;
- settings->refineIterations[4] = 2;
- settings->refineIterations[5] = 2;
- // mode6
- settings->mode_selection[3] = true;
- settings->refineIterations[6] = 1;
- }
- void GetProfile_veryfast(bc7_enc_settings* settings)
- {
- settings->channels = 3;
- // mode02
- settings->mode_selection[0] = false;
- settings->skip_mode2 = true;
- settings->refineIterations[0] = 2;
- settings->refineIterations[2] = 2;
- // mode13
- settings->mode_selection[1] = true;
- settings->fastSkipTreshold_mode1 = 3;
- settings->fastSkipTreshold_mode3 = 1;
- settings->fastSkipTreshold_mode7 = 0;
- settings->refineIterations[1] = 2;
- settings->refineIterations[3] = 1;
- // mode45
- settings->mode_selection[2] = false;
- settings->mode45_channel0 = 0;
- settings->refineIterations_channel = 0;
- settings->refineIterations[4] = 2;
- settings->refineIterations[5] = 2;
- // mode6
- settings->mode_selection[3] = true;
- settings->refineIterations[6] = 1;
- }
- void GetProfile_fast(bc7_enc_settings* settings)
- {
- settings->channels = 3;
- // mode02
- settings->mode_selection[0] = false;
- settings->skip_mode2 = true;
- settings->refineIterations[0] = 2;
- settings->refineIterations[2] = 2;
- // mode13
- settings->mode_selection[1] = true;
- settings->fastSkipTreshold_mode1 = 12;
- settings->fastSkipTreshold_mode3 = 4;
- settings->fastSkipTreshold_mode7 = 0;
- settings->refineIterations[1] = 2;
- settings->refineIterations[3] = 1;
- // mode45
- settings->mode_selection[2] = false;
- settings->mode45_channel0 = 0;
- settings->refineIterations_channel = 0;
- settings->refineIterations[4] = 2;
- settings->refineIterations[5] = 2;
- // mode6
- settings->mode_selection[3] = true;
- settings->refineIterations[6] = 2;
- }
- void GetProfile_basic(bc7_enc_settings* settings)
- {
- settings->channels = 3;
- // mode02
- settings->mode_selection[0] = true;
- settings->skip_mode2 = true;
- settings->refineIterations[0] = 2;
- settings->refineIterations[2] = 2;
- // mode13
- settings->mode_selection[1] = true;
- settings->fastSkipTreshold_mode1 = 8+4;
- settings->fastSkipTreshold_mode3 = 8;
- settings->fastSkipTreshold_mode7 = 0;
- settings->refineIterations[1] = 2;
- settings->refineIterations[3] = 2;
- // mode45
- settings->mode_selection[2] = true;
- settings->mode45_channel0 = 0;
- settings->refineIterations_channel = 2;
- settings->refineIterations[4] = 2;
- settings->refineIterations[5] = 2;
- // mode6
- settings->mode_selection[3] = true;
- settings->refineIterations[6] = 2;
- }
- void GetProfile_slow(bc7_enc_settings* settings)
- {
- settings->channels = 3;
- int moreRefine = 2;
- // mode02
- settings->mode_selection[0] = true;
- settings->skip_mode2 = false;
- settings->refineIterations[0] = 2+moreRefine;
- settings->refineIterations[2] = 2+moreRefine;
- // mode13
- settings->mode_selection[1] = true;
- settings->fastSkipTreshold_mode1 = 64;
- settings->fastSkipTreshold_mode3 = 64;
- settings->fastSkipTreshold_mode7 = 0;
- settings->refineIterations[1] = 2+moreRefine;
- settings->refineIterations[3] = 2+moreRefine;
- // mode45
- settings->mode_selection[2] = true;
- settings->mode45_channel0 = 0;
- settings->refineIterations_channel = 2+moreRefine;
- settings->refineIterations[4] = 2+moreRefine;
- settings->refineIterations[5] = 2+moreRefine;
- // mode6
- settings->mode_selection[3] = true;
- settings->refineIterations[6] = 2+moreRefine;
- }
- void GetProfile_alpha_ultrafast(bc7_enc_settings* settings)
- {
- settings->channels = 4;
- // mode02
- settings->mode_selection[0] = false;
- settings->skip_mode2 = true;
- settings->refineIterations[0] = 2;
- settings->refineIterations[2] = 2;
- // mode137
- settings->mode_selection[1] = false;
- settings->fastSkipTreshold_mode1 = 0;
- settings->fastSkipTreshold_mode3 = 0;
- settings->fastSkipTreshold_mode7 = 4;
- settings->refineIterations[1] = 1;
- settings->refineIterations[3] = 1;
- settings->refineIterations[7] = 2;
- // mode45
- settings->mode_selection[2] = true;
-
- settings->mode45_channel0 = 3;
- settings->refineIterations_channel = 1;
- settings->refineIterations[4] = 1;
- settings->refineIterations[5] = 1;
- // mode6
- settings->mode_selection[3] = true;
- settings->refineIterations[6] = 2;
- }
- void GetProfile_alpha_veryfast(bc7_enc_settings* settings)
- {
- settings->channels = 4;
- // mode02
- settings->mode_selection[0] = false;
- settings->skip_mode2 = true;
- settings->refineIterations[0] = 2;
- settings->refineIterations[2] = 2;
- // mode137
- settings->mode_selection[1] = true;
- settings->fastSkipTreshold_mode1 = 0;
- settings->fastSkipTreshold_mode3 = 0;
- settings->fastSkipTreshold_mode7 = 4;
- settings->refineIterations[1] = 1;
- settings->refineIterations[3] = 1;
- settings->refineIterations[7] = 2;
- // mode45
- settings->mode_selection[2] = true;
-
- settings->mode45_channel0 = 3;
- settings->refineIterations_channel = 2;
- settings->refineIterations[4] = 2;
- settings->refineIterations[5] = 2;
- // mode6
- settings->mode_selection[3] = true;
- settings->refineIterations[6] = 2;
- }
- void GetProfile_alpha_fast(bc7_enc_settings* settings)
- {
- settings->channels = 4;
- // mode02
- settings->mode_selection[0] = false;
- settings->skip_mode2 = true;
- settings->refineIterations[0] = 2;
- settings->refineIterations[2] = 2;
- // mode137
- settings->mode_selection[1] = true;
- settings->fastSkipTreshold_mode1 = 4;
- settings->fastSkipTreshold_mode3 = 4;
- settings->fastSkipTreshold_mode7 = 8;
- settings->refineIterations[1] = 1;
- settings->refineIterations[3] = 1;
- settings->refineIterations[7] = 2;
- // mode45
- settings->mode_selection[2] = true;
-
- settings->mode45_channel0 = 3;
- settings->refineIterations_channel = 2;
- settings->refineIterations[4] = 2;
- settings->refineIterations[5] = 2;
- // mode6
- settings->mode_selection[3] = true;
- settings->refineIterations[6] = 2;
- }
- void GetProfile_alpha_basic(bc7_enc_settings* settings)
- {
- settings->channels = 4;
- // mode02
- settings->mode_selection[0] = true;
- settings->skip_mode2 = true;
- settings->refineIterations[0] = 2;
- settings->refineIterations[2] = 2;
- // mode137
- settings->mode_selection[1] = true;
- settings->fastSkipTreshold_mode1 = 8+4;
- settings->fastSkipTreshold_mode3 = 8;
- settings->fastSkipTreshold_mode7 = 8;
- settings->refineIterations[1] = 2;
- settings->refineIterations[3] = 2;
- settings->refineIterations[7] = 2;
- // mode45
- settings->mode_selection[2] = true;
-
- settings->mode45_channel0 = 0;
- settings->refineIterations_channel = 2;
- settings->refineIterations[4] = 2;
- settings->refineIterations[5] = 2;
- // mode6
- settings->mode_selection[3] = true;
- settings->refineIterations[6] = 2;
- }
- void GetProfile_alpha_slow(bc7_enc_settings* settings)
- {
- settings->channels = 4;
- int moreRefine = 2;
- // mode02
- settings->mode_selection[0] = true;
- settings->skip_mode2 = false;
- settings->refineIterations[0] = 2+moreRefine;
- settings->refineIterations[2] = 2+moreRefine;
- // mode137
- settings->mode_selection[1] = true;
- settings->fastSkipTreshold_mode1 = 64;
- settings->fastSkipTreshold_mode3 = 64;
- settings->fastSkipTreshold_mode7 = 64;
- settings->refineIterations[1] = 2+moreRefine;
- settings->refineIterations[3] = 2+moreRefine;
- settings->refineIterations[7] = 2+moreRefine;
- // mode45
- settings->mode_selection[2] = true;
- settings->mode45_channel0 = 0;
- settings->refineIterations_channel = 2+moreRefine;
- settings->refineIterations[4] = 2+moreRefine;
- settings->refineIterations[5] = 2+moreRefine;
- // mode6
- settings->mode_selection[3] = true;
- settings->refineIterations[6] = 2+moreRefine;
- }
- void GetProfile_bc6h_veryfast(bc6h_enc_settings* settings)
- {
- settings->slow_mode = false;
- settings->fast_mode = true;
- settings->fastSkipTreshold = 0;
- settings->refineIterations_1p = 0;
- settings->refineIterations_2p = 0;
- }
- void GetProfile_bc6h_fast(bc6h_enc_settings* settings)
- {
- settings->slow_mode = false;
- settings->fast_mode = true;
- settings->fastSkipTreshold = 2;
- settings->refineIterations_1p = 0;
- settings->refineIterations_2p = 1;
- }
- void GetProfile_bc6h_basic(bc6h_enc_settings* settings)
- {
- settings->slow_mode = false;
- settings->fast_mode = false;
- settings->fastSkipTreshold = 4;
- settings->refineIterations_1p = 2;
- settings->refineIterations_2p = 2;
- }
- void GetProfile_bc6h_slow(bc6h_enc_settings* settings)
- {
- settings->slow_mode = true;
- settings->fast_mode = false;
- settings->fastSkipTreshold = 10;
- settings->refineIterations_1p = 2;
- settings->refineIterations_2p = 2;
- }
- void GetProfile_bc6h_veryslow(bc6h_enc_settings* settings)
- {
- settings->slow_mode = true;
- settings->fast_mode = false;
- settings->fastSkipTreshold = 32;
- settings->refineIterations_1p = 2;
- settings->refineIterations_2p = 2;
- }
- void GetProfile_etc_slow(etc_enc_settings* settings)
- {
- settings->fastSkipTreshold = 6;
- }
- void ReplicateBorders(rgba_surface* dst_slice, const rgba_surface* src_tex, int start_x, int start_y, int bpp)
- {
- int bytes_per_pixel = bpp >> 3;
-
- bool aliasing = false;
- if (&src_tex->ptr[src_tex->stride * start_y + bytes_per_pixel * start_x] == dst_slice->ptr) aliasing = true;
- for (int y = 0; y < dst_slice->height; y++)
- for (int x = 0; x < dst_slice->width; x++)
- {
- int xx = start_x + x;
- int yy = start_y + y;
- if (aliasing && xx < src_tex->width && yy < src_tex->height) continue;
- if (xx >= src_tex->width) xx = src_tex->width - 1;
- if (yy >= src_tex->height) yy = src_tex->height - 1;
- void* dst = &dst_slice->ptr[dst_slice->stride * y + bytes_per_pixel * x];
- void* src = &src_tex->ptr[src_tex->stride * yy + bytes_per_pixel * xx];
- memcpy(dst, src, bytes_per_pixel);
- }
- }
- void CompressBlocksBC1(const rgba_surface* src, uint8_t* dst)
- {
- ispc::CompressBlocksBC1_ispc((ispc::rgba_surface*)src, dst);
- }
- void CompressBlocksBC3(const rgba_surface* src, uint8_t* dst)
- {
- ispc::CompressBlocksBC3_ispc((ispc::rgba_surface*)src, dst);
- }
- void CompressBlocksBC7(const rgba_surface* src, uint8_t* dst, bc7_enc_settings* settings)
- {
- ispc::CompressBlocksBC7_ispc((ispc::rgba_surface*)src, dst, (ispc::bc7_enc_settings*)settings);
- }
- void CompressBlocksBC6H(const rgba_surface* src, uint8_t* dst, bc6h_enc_settings* settings)
- {
- ispc::CompressBlocksBC6H_ispc((ispc::rgba_surface*)src, dst, (ispc::bc6h_enc_settings*)settings);
- }
- void CompressBlocksETC1(const rgba_surface* src, uint8_t* dst, etc_enc_settings* settings)
- {
- ispc::CompressBlocksETC1_ispc((ispc::rgba_surface*)src, dst, (ispc::etc_enc_settings*)settings);
- }
|