You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
447 lines
11 KiB
C++
447 lines
11 KiB
C++
/*
|
|
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"
|
|
|
|
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 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);
|
|
} |