mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-18 04:53:06 +01:00
Fixed skip mips when crating BC textures.
This commit is contained in:
@@ -4095,14 +4095,26 @@ namespace bgfx { namespace d3d11
|
||||
|
||||
if (bimg::imageParse(imageContainer, _mem->data, _mem->size) )
|
||||
{
|
||||
uint8_t numMips = imageContainer.m_numMips;
|
||||
const uint8_t startLod = bx::min<uint8_t>(_skip, numMips-1);
|
||||
numMips -= startLod;
|
||||
const bimg::ImageBlockInfo& blockInfo = bimg::getBlockInfo(bimg::TextureFormat::Enum(imageContainer.m_format) );
|
||||
const uint32_t textureWidth = bx::max<uint32_t>(blockInfo.blockWidth, imageContainer.m_width >>startLod);
|
||||
const uint32_t textureHeight = bx::max<uint32_t>(blockInfo.blockHeight, imageContainer.m_height>>startLod);
|
||||
const uint32_t textureDepth = bx::max<uint32_t>(1, imageContainer.m_depth >>startLod);
|
||||
const uint16_t numLayers = imageContainer.m_numLayers;
|
||||
const uint8_t startLod = bx::min<uint8_t>(_skip, imageContainer.m_numMips-1);
|
||||
|
||||
bimg::TextureInfo ti;
|
||||
imageGetSize(
|
||||
&ti
|
||||
, uint16_t(imageContainer.m_width >>startLod)
|
||||
, uint16_t(imageContainer.m_height>>startLod)
|
||||
, uint16_t(imageContainer.m_depth >>startLod)
|
||||
, imageContainer.m_cubeMap
|
||||
, 1 < imageContainer.m_numMips
|
||||
, imageContainer.m_numLayers
|
||||
, imageContainer.m_format
|
||||
);
|
||||
|
||||
const uint8_t numMips = ti.numMips;
|
||||
const uint32_t textureWidth = ti.width;
|
||||
const uint32_t textureHeight = ti.height;
|
||||
const uint32_t textureDepth = ti.depth;
|
||||
const uint16_t numLayers = ti.numLayers;
|
||||
|
||||
m_flags = _flags;
|
||||
m_width = textureWidth;
|
||||
|
||||
@@ -4578,18 +4578,34 @@ namespace bgfx { namespace d3d12
|
||||
|
||||
if (bimg::imageParse(imageContainer, _mem->data, _mem->size) )
|
||||
{
|
||||
uint8_t numMips = imageContainer.m_numMips;
|
||||
const uint8_t startLod = uint8_t(bx::uint32_min(_skip, numMips-1) );
|
||||
numMips -= startLod;
|
||||
const bimg::ImageBlockInfo& blockInfo = bimg::getBlockInfo(imageContainer.m_format);
|
||||
const uint32_t textureWidth = bx::uint32_max(blockInfo.blockWidth, imageContainer.m_width >>startLod);
|
||||
const uint32_t textureHeight = bx::uint32_max(blockInfo.blockHeight, imageContainer.m_height>>startLod);
|
||||
const uint16_t numLayers = imageContainer.m_numLayers;
|
||||
const uint8_t startLod = bx::min<uint8_t>(_skip, imageContainer.m_numMips-1);
|
||||
|
||||
bimg::TextureInfo ti;
|
||||
imageGetSize(
|
||||
&ti
|
||||
, uint16_t(imageContainer.m_width >>startLod)
|
||||
, uint16_t(imageContainer.m_height>>startLod)
|
||||
, uint16_t(imageContainer.m_depth >>startLod)
|
||||
, imageContainer.m_cubeMap
|
||||
, 1 < imageContainer.m_numMips
|
||||
, imageContainer.m_numLayers
|
||||
, imageContainer.m_format
|
||||
);
|
||||
|
||||
const uint8_t numMips = ti.numMips;
|
||||
const uint32_t textureWidth = ti.width;
|
||||
const uint32_t textureHeight = ti.height;
|
||||
const uint32_t textureDepth = ti.depth;
|
||||
const uint16_t numLayers = ti.numLayers;
|
||||
|
||||
m_flags = _flags;
|
||||
m_width = textureWidth;
|
||||
m_height = textureHeight;
|
||||
m_depth = imageContainer.m_depth;
|
||||
m_depth = 1 < imageContainer.m_depth
|
||||
? textureDepth
|
||||
: imageContainer.m_numLayers
|
||||
;
|
||||
m_requestedFormat = uint8_t(imageContainer.m_format);
|
||||
m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
|
||||
const bool convert = m_textureFormat != m_requestedFormat;
|
||||
|
||||
@@ -2905,17 +2905,32 @@ namespace bgfx { namespace d3d9
|
||||
|
||||
if (bimg::imageParse(imageContainer, _mem->data, _mem->size) )
|
||||
{
|
||||
uint8_t numMips = imageContainer.m_numMips;
|
||||
const uint8_t startLod = uint8_t(bx::uint32_min(_skip, numMips-1) );
|
||||
numMips -= startLod;
|
||||
const bimg::ImageBlockInfo& blockInfo = bimg::getBlockInfo(bimg::TextureFormat::Enum(imageContainer.m_format) );
|
||||
const uint32_t textureWidth = bx::uint32_max(blockInfo.blockWidth, imageContainer.m_width >>startLod);
|
||||
const uint32_t textureHeight = bx::uint32_max(blockInfo.blockHeight, imageContainer.m_height>>startLod);
|
||||
|
||||
const uint8_t startLod = bx::min<uint8_t>(_skip, imageContainer.m_numMips-1);
|
||||
|
||||
bimg::TextureInfo ti;
|
||||
imageGetSize(
|
||||
&ti
|
||||
, uint16_t(imageContainer.m_width >>startLod)
|
||||
, uint16_t(imageContainer.m_height>>startLod)
|
||||
, uint16_t(imageContainer.m_depth >>startLod)
|
||||
, imageContainer.m_cubeMap
|
||||
, 1 < imageContainer.m_numMips
|
||||
, imageContainer.m_numLayers
|
||||
, imageContainer.m_format
|
||||
);
|
||||
|
||||
const uint8_t numMips = ti.numMips;
|
||||
const uint32_t textureWidth = ti.width;
|
||||
const uint32_t textureHeight = ti.height;
|
||||
const uint32_t textureDepth = ti.depth;
|
||||
const uint16_t numLayers = ti.numLayers;
|
||||
|
||||
m_flags = _flags;
|
||||
m_width = textureWidth;
|
||||
m_height = textureHeight;
|
||||
m_depth = imageContainer.m_depth;
|
||||
m_depth = textureDepth;
|
||||
m_numMips = numMips;
|
||||
m_requestedFormat = uint8_t(imageContainer.m_format);
|
||||
m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
|
||||
|
||||
@@ -4721,22 +4721,25 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
|
||||
|
||||
if (bimg::imageParse(imageContainer, _mem->data, _mem->size) )
|
||||
{
|
||||
uint8_t numMips = imageContainer.m_numMips;
|
||||
const uint8_t startLod = uint8_t(bx::uint32_min(_skip, numMips-1) );
|
||||
numMips -= startLod;
|
||||
const uint16_t numLayers = imageContainer.m_numLayers;
|
||||
uint32_t textureWidth;
|
||||
uint32_t textureHeight;
|
||||
uint32_t textureDepth;
|
||||
{
|
||||
const bimg::ImageBlockInfo& ibi = bimg::getBlockInfo(bimg::TextureFormat::Enum(imageContainer.m_format) );
|
||||
textureWidth = bx::uint32_max(ibi.blockWidth, imageContainer.m_width >>startLod);
|
||||
textureHeight = bx::uint32_max(ibi.blockHeight, imageContainer.m_height>>startLod);
|
||||
textureDepth = 1 < imageContainer.m_depth
|
||||
? imageContainer.m_depth
|
||||
: imageContainer.m_numLayers
|
||||
;
|
||||
}
|
||||
const uint8_t startLod = bx::min<uint8_t>(_skip, imageContainer.m_numMips-1);
|
||||
|
||||
bimg::TextureInfo ti;
|
||||
imageGetSize(
|
||||
&ti
|
||||
, uint16_t(imageContainer.m_width >>startLod)
|
||||
, uint16_t(imageContainer.m_height>>startLod)
|
||||
, uint16_t(imageContainer.m_depth >>startLod)
|
||||
, imageContainer.m_cubeMap
|
||||
, 1 < imageContainer.m_numMips
|
||||
, imageContainer.m_numLayers
|
||||
, imageContainer.m_format
|
||||
);
|
||||
|
||||
const uint8_t numMips = ti.numMips;
|
||||
const uint32_t textureWidth = ti.width;
|
||||
const uint32_t textureHeight = ti.height;
|
||||
const uint32_t textureDepth = ti.depth;
|
||||
const uint16_t numLayers = ti.numLayers;
|
||||
|
||||
m_requestedFormat = uint8_t(imageContainer.m_format);
|
||||
m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
|
||||
|
||||
@@ -2577,18 +2577,34 @@ namespace bgfx { namespace mtl
|
||||
|
||||
if (bimg::imageParse(imageContainer, _mem->data, _mem->size) )
|
||||
{
|
||||
uint8_t numMips = imageContainer.m_numMips;
|
||||
const uint8_t startLod = uint8_t(bx::uint32_min(_skip, numMips-1) );
|
||||
numMips -= startLod;
|
||||
const bimg::ImageBlockInfo& blockInfo = getBlockInfo(bimg::TextureFormat::Enum(imageContainer.m_format) );
|
||||
const uint32_t textureWidth = bx::uint32_max(blockInfo.blockWidth, imageContainer.m_width >>startLod);
|
||||
const uint32_t textureHeight = bx::uint32_max(blockInfo.blockHeight, imageContainer.m_height>>startLod);
|
||||
const uint16_t numLayers = imageContainer.m_numLayers;
|
||||
const uint8_t startLod = bx::min<uint8_t>(_skip, imageContainer.m_numMips-1);
|
||||
|
||||
bimg::TextureInfo ti;
|
||||
imageGetSize(
|
||||
&ti
|
||||
, uint16_t(imageContainer.m_width >>startLod)
|
||||
, uint16_t(imageContainer.m_height>>startLod)
|
||||
, uint16_t(imageContainer.m_depth >>startLod)
|
||||
, imageContainer.m_cubeMap
|
||||
, 1 < imageContainer.m_numMips
|
||||
, imageContainer.m_numLayers
|
||||
, imageContainer.m_format
|
||||
);
|
||||
|
||||
const uint8_t numMips = ti.numMips;
|
||||
const uint32_t textureWidth = ti.width;
|
||||
const uint32_t textureHeight = ti.height;
|
||||
const uint32_t textureDepth = ti.depth;
|
||||
const uint16_t numLayers = ti.numLayers;
|
||||
|
||||
m_flags = _flags;
|
||||
m_width = textureWidth;
|
||||
m_height = textureHeight;
|
||||
m_depth = imageContainer.m_depth;
|
||||
m_depth = 1 < imageContainer.m_depth
|
||||
? textureDepth
|
||||
: imageContainer.m_numLayers
|
||||
;
|
||||
m_requestedFormat = uint8_t(imageContainer.m_format);
|
||||
m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
|
||||
const bool convert = m_textureFormat != m_requestedFormat;
|
||||
|
||||
Reference in New Issue
Block a user