|
@@ -22,7 +22,7 @@ namespace nvtt
|
|
|
{
|
|
{
|
|
|
using namespace nv;
|
|
using namespace nv;
|
|
|
|
|
|
|
|
- void compressBC6H(const void* _input, uint32_t _width, uint32_t _height, uint32_t _stride, void* _output)
|
|
|
|
|
|
|
+ void compressBC6H(const void* _input, uint32_t _width, uint32_t _height, uint32_t _srcStride, void* _output)
|
|
|
{
|
|
{
|
|
|
const uint8_t* src = (const uint8_t*)_input;
|
|
const uint8_t* src = (const uint8_t*)_input;
|
|
|
char* dst = (char*)_output;
|
|
char* dst = (char*)_output;
|
|
@@ -31,35 +31,35 @@ namespace nvtt
|
|
|
{
|
|
{
|
|
|
for (uint32_t xx = 0; xx < _width; xx += 4)
|
|
for (uint32_t xx = 0; xx < _width; xx += 4)
|
|
|
{
|
|
{
|
|
|
- const Vector4* rgba = (const Vector4*)&src[yy*_stride + xx*sizeof(float)*4];
|
|
|
|
|
|
|
+ const uint32_t bytesPerPixel = sizeof(float)*4;
|
|
|
|
|
+ const Vector4* srcRgba = (const Vector4*)&src[yy*_srcStride + xx*bytesPerPixel];
|
|
|
|
|
+ const uint32_t srcRgbaStride = _srcStride/bytesPerPixel;
|
|
|
|
|
|
|
|
- ZOH::Utils::FORMAT = ZOH::UNSIGNED_F16;
|
|
|
|
|
|
|
+ ZOH::Utils::FORMAT = ZOH::SIGNED_F16;
|
|
|
ZOH::Tile zohTile(4, 4);
|
|
ZOH::Tile zohTile(4, 4);
|
|
|
|
|
|
|
|
- memset(zohTile.data, 0, sizeof(zohTile.data) );
|
|
|
|
|
- memset(zohTile.importance_map, 0, sizeof(zohTile.importance_map) );
|
|
|
|
|
|
|
+ bx::memSet(zohTile.data, 0, sizeof(zohTile.data) );
|
|
|
|
|
+ bx::memSet(zohTile.importance_map, 0, sizeof(zohTile.importance_map) );
|
|
|
|
|
|
|
|
for (uint32_t blockY = 0; blockY < 4; ++blockY)
|
|
for (uint32_t blockY = 0; blockY < 4; ++blockY)
|
|
|
{
|
|
{
|
|
|
for (uint32_t blockX = 0; blockX < 4; ++blockX)
|
|
for (uint32_t blockX = 0; blockX < 4; ++blockX)
|
|
|
{
|
|
{
|
|
|
- Vector4 color = rgba[blockY*4 + blockX];
|
|
|
|
|
- uint16 rHalf = bx::halfFromFloat(color.x);
|
|
|
|
|
- uint16 gHalf = bx::halfFromFloat(color.y);
|
|
|
|
|
- uint16 bHalf = bx::halfFromFloat(color.z);
|
|
|
|
|
- zohTile.data[blockY][blockX].x = ZOH::Tile::half2float(rHalf);
|
|
|
|
|
- zohTile.data[blockY][blockX].y = ZOH::Tile::half2float(gHalf);
|
|
|
|
|
- zohTile.data[blockY][blockX].z = ZOH::Tile::half2float(bHalf);
|
|
|
|
|
- zohTile.importance_map[blockY][blockX] = 1.0f;
|
|
|
|
|
|
|
+ Vector4 color = srcRgba[blockY*srcRgbaStride + blockX];
|
|
|
|
|
+ zohTile.data[blockY][blockX].x = color.x;
|
|
|
|
|
+ zohTile.data[blockY][blockX].y = color.y;
|
|
|
|
|
+ zohTile.data[blockY][blockX].z = color.z;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- ZOH::compress(zohTile, &dst[( (yy*_width) + xx)/4 * 16]);
|
|
|
|
|
|
|
+ zohTile.generate_importance_map();
|
|
|
|
|
+ ZOH::compress(zohTile, dst);
|
|
|
|
|
+ dst += ZOH::BLOCKSIZE;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void compressBC7(const void* _input, uint32_t _width, uint32_t _height, uint32_t _stride, void* _output)
|
|
|
|
|
|
|
+ void compressBC7(const void* _input, uint32_t _width, uint32_t _height, uint32_t _srcStride, void* _output)
|
|
|
{
|
|
{
|
|
|
const uint8_t* src = (const uint8_t*)_input;
|
|
const uint8_t* src = (const uint8_t*)_input;
|
|
|
char* dst = (char*)_output;
|
|
char* dst = (char*)_output;
|
|
@@ -68,7 +68,9 @@ namespace nvtt
|
|
|
{
|
|
{
|
|
|
for (uint32_t xx = 0; xx < _width; xx += 4)
|
|
for (uint32_t xx = 0; xx < _width; xx += 4)
|
|
|
{
|
|
{
|
|
|
- const Vector4* rgba = (const Vector4*)&src[yy*_stride + xx*sizeof(float)*4];
|
|
|
|
|
|
|
+ const uint32_t bytesPerPixel = sizeof(float) * 4;
|
|
|
|
|
+ const Vector4* srcRgba = (const Vector4*)&src[yy*_srcStride + xx*bytesPerPixel];
|
|
|
|
|
+ const uint32_t srcRgbaStride = _srcStride / bytesPerPixel;
|
|
|
|
|
|
|
|
AVPCL::mode_rgb = false;
|
|
AVPCL::mode_rgb = false;
|
|
|
AVPCL::flag_premult = false;
|
|
AVPCL::flag_premult = false;
|
|
@@ -76,18 +78,19 @@ namespace nvtt
|
|
|
AVPCL::flag_nonuniform_ati = false;
|
|
AVPCL::flag_nonuniform_ati = false;
|
|
|
|
|
|
|
|
AVPCL::Tile avpclTile(4, 4);
|
|
AVPCL::Tile avpclTile(4, 4);
|
|
|
- memset(avpclTile.data, 0, sizeof(avpclTile.data) );
|
|
|
|
|
|
|
+ bx::memSet(avpclTile.data, 0, sizeof(avpclTile.data) );
|
|
|
for (uint32_t blockY = 0; blockY < 4; ++blockY)
|
|
for (uint32_t blockY = 0; blockY < 4; ++blockY)
|
|
|
{
|
|
{
|
|
|
for (uint32_t blockX = 0; blockX < 4; ++blockX)
|
|
for (uint32_t blockX = 0; blockX < 4; ++blockX)
|
|
|
{
|
|
{
|
|
|
- Vector4 color = rgba[blockY*4 + blockX];
|
|
|
|
|
|
|
+ Vector4 color = srcRgba[blockY*srcRgbaStride + blockX];
|
|
|
avpclTile.data[blockY][blockX] = color * 255.0f;
|
|
avpclTile.data[blockY][blockX] = color * 255.0f;
|
|
|
avpclTile.importance_map[blockY][blockX] = 1.0f;
|
|
avpclTile.importance_map[blockY][blockX] = 1.0f;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- AVPCL::compress(avpclTile, &dst[( (yy*_width) + xx)/4 * 16]);
|
|
|
|
|
|
|
+ AVPCL::compress(avpclTile, dst);
|
|
|
|
|
+ dst += AVPCL::BLOCKSIZE;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|