mirror of
https://github.com/bkaradzic/bimg.git
synced 2026-02-17 20:52:38 +01:00
Fixed imageSwizzleBgra8.
This commit is contained in:
@@ -333,10 +333,11 @@ namespace bimg
|
||||
///
|
||||
void imageSwizzleBgra8(
|
||||
void* _dst
|
||||
, uint32_t _dstPitch
|
||||
, uint32_t _width
|
||||
, uint32_t _height
|
||||
, uint32_t _srcPitch
|
||||
, const void* _src
|
||||
, uint32_t _srcPitch
|
||||
);
|
||||
|
||||
///
|
||||
|
||||
@@ -629,14 +629,16 @@ namespace bimg
|
||||
imageRgba32fDownsample2x2NormalMapRef(_dst, _width, _height, _srcPitch, _src);
|
||||
}
|
||||
|
||||
void imageSwizzleBgra8Ref(void* _dst, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src)
|
||||
void imageSwizzleBgra8Ref(void* _dst, uint32_t _dstPitch, uint32_t _width, uint32_t _height, const void* _src, uint32_t _srcPitch)
|
||||
{
|
||||
const uint8_t* src = (uint8_t*) _src;
|
||||
const uint8_t* next = src + _srcPitch;
|
||||
uint8_t* dst = (uint8_t*)_dst;
|
||||
const uint8_t* srcData = (uint8_t*) _src;
|
||||
uint8_t* dstData = (uint8_t*)_dst;
|
||||
|
||||
for (uint32_t yy = 0; yy < _height; ++yy, src = next, next += _srcPitch)
|
||||
for (uint32_t yy = 0; yy < _height; ++yy, srcData += _srcPitch, dstData += _dstPitch)
|
||||
{
|
||||
const uint8_t* src = srcData;
|
||||
uint8_t* dst = dstData;
|
||||
|
||||
for (uint32_t xx = 0; xx < _width; ++xx, src += 4, dst += 4)
|
||||
{
|
||||
uint8_t rr = src[0];
|
||||
@@ -651,7 +653,7 @@ namespace bimg
|
||||
}
|
||||
}
|
||||
|
||||
void imageSwizzleBgra8(void* _dst, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src)
|
||||
void imageSwizzleBgra8(void* _dst, uint32_t _dstPitch, uint32_t _width, uint32_t _height, const void* _src, uint32_t _srcPitch)
|
||||
{
|
||||
// Test can we do four 4-byte pixels at the time.
|
||||
if (0 != (_width&0x3)
|
||||
@@ -663,7 +665,7 @@ namespace bimg
|
||||
BX_WARN(bx::isAligned(_src, 16), "Source %p is not 16-byte aligned.", _src);
|
||||
BX_WARN(bx::isAligned(_dst, 16), "Destination %p is not 16-byte aligned.", _dst);
|
||||
BX_WARN(_width < 4, "Image width must be multiple of 4 (width %d).", _width);
|
||||
imageSwizzleBgra8Ref(_dst, _width, _height, _srcPitch, _src);
|
||||
imageSwizzleBgra8Ref(_dst, _dstPitch, _width, _height, _src, _srcPitch);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -671,14 +673,16 @@ namespace bimg
|
||||
|
||||
const simd128_t mf0f0 = simd_isplat(0xff00ff00);
|
||||
const simd128_t m0f0f = simd_isplat(0x00ff00ff);
|
||||
const uint8_t* src = (uint8_t*) _src;
|
||||
const uint8_t* next = src + _srcPitch;
|
||||
uint8_t* dst = (uint8_t*)_dst;
|
||||
const uint32_t width = _width/4;
|
||||
|
||||
const uint32_t width = _width/4;
|
||||
const uint8_t* srcData = (uint8_t*) _src;
|
||||
uint8_t* dstData = (uint8_t*)_dst;
|
||||
|
||||
for (uint32_t yy = 0; yy < _height; ++yy, src = next, next += _srcPitch)
|
||||
for (uint32_t yy = 0; yy < _height; ++yy, srcData += _srcPitch, dstData += _dstPitch)
|
||||
{
|
||||
const uint8_t* src = srcData;
|
||||
uint8_t* dst = dstData;
|
||||
|
||||
for (uint32_t xx = 0; xx < width; ++xx, src += 16, dst += 16)
|
||||
{
|
||||
const simd128_t tabgr = simd_ld(src);
|
||||
@@ -2964,11 +2968,18 @@ namespace bimg
|
||||
break;
|
||||
|
||||
case TextureFormat::RGBA8:
|
||||
imageSwizzleBgra8(_dst, _width, _height, _dstPitch, _src);
|
||||
{
|
||||
const uint32_t srcPitch = _width * 4;
|
||||
imageSwizzleBgra8(_dst, _dstPitch, _width, _height, _src, srcPitch);
|
||||
}
|
||||
break;
|
||||
|
||||
case TextureFormat::BGRA8:
|
||||
bx::memCopy(_dst, _src, _dstPitch*_height);
|
||||
{
|
||||
const uint32_t srcPitch = _width * 4;
|
||||
const uint32_t size = bx::uint32_min(srcPitch, _dstPitch);
|
||||
bx::memCopy(_dst, _src, size, _height, srcPitch, _dstPitch);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -2990,16 +3001,26 @@ namespace bimg
|
||||
switch (_srcFormat)
|
||||
{
|
||||
case TextureFormat::RGBA8:
|
||||
bx::memCopy(_dst, _src, _dstPitch*_height);
|
||||
{
|
||||
const uint32_t srcPitch = _width * 4;
|
||||
const uint32_t size = bx::uint32_min(srcPitch, _dstPitch);
|
||||
bx::memCopy(_dst, _src, size, _height, srcPitch, _dstPitch);
|
||||
}
|
||||
break;
|
||||
|
||||
case TextureFormat::BGRA8:
|
||||
imageSwizzleBgra8(_dst, _width, _height, _dstPitch, _src);
|
||||
{
|
||||
const uint32_t srcPitch = _width * 4;
|
||||
imageSwizzleBgra8(_dst, _dstPitch, _width, _height, _src, srcPitch);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
imageDecodeToBgra8(_dst, _src, _width, _height, _dstPitch, _srcFormat);
|
||||
imageSwizzleBgra8(_dst, _width, _height, _dstPitch, _dst);
|
||||
{
|
||||
const uint32_t srcPitch = _width * 4;
|
||||
imageDecodeToBgra8(_dst, _src, _width, _height, _dstPitch, _srcFormat);
|
||||
imageSwizzleBgra8(_dst, _dstPitch, _width, _height, _dst, srcPitch);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user