GPU: Fix and generalize BytesPerRow() and BytesPerImage() (#10663)
These functions had special cases for a few BC formats, but all block-compressed formats should need the same logic. Furthermore they weren't handling the sRGB variants of those formats.
This commit is contained in:
parent
b15d79a35a
commit
d4b8072614
1 changed files with 6 additions and 15 deletions
|
@ -173,14 +173,9 @@ static inline Uint32 BytesPerRow(
|
||||||
SDL_GPUTextureFormat format)
|
SDL_GPUTextureFormat format)
|
||||||
{
|
{
|
||||||
Uint32 blocksPerRow = width;
|
Uint32 blocksPerRow = width;
|
||||||
|
Uint32 pixelRowsPerBlock = Texture_GetBlockSize(format);
|
||||||
|
|
||||||
if (format == SDL_GPU_TEXTUREFORMAT_BC1_UNORM ||
|
blocksPerRow = (width + pixelRowsPerBlock - 1) / pixelRowsPerBlock;
|
||||||
format == SDL_GPU_TEXTUREFORMAT_BC2_UNORM ||
|
|
||||||
format == SDL_GPU_TEXTUREFORMAT_BC3_UNORM ||
|
|
||||||
format == SDL_GPU_TEXTUREFORMAT_BC7_UNORM) {
|
|
||||||
blocksPerRow = (width + 3) / 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
return blocksPerRow * SDL_GPUTextureFormatTexelBlockSize(format);
|
return blocksPerRow * SDL_GPUTextureFormatTexelBlockSize(format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,15 +186,11 @@ static inline Sint32 BytesPerImage(
|
||||||
{
|
{
|
||||||
Uint32 blocksPerRow = width;
|
Uint32 blocksPerRow = width;
|
||||||
Uint32 blocksPerColumn = height;
|
Uint32 blocksPerColumn = height;
|
||||||
|
Uint32 pixelRowsPerBlock = Texture_GetBlockSize(format);
|
||||||
|
Uint32 pixelColumnsPerBlock = pixelRowsPerBlock;
|
||||||
|
|
||||||
if (format == SDL_GPU_TEXTUREFORMAT_BC1_UNORM ||
|
blocksPerRow = (width + pixelRowsPerBlock - 1) / pixelRowsPerBlock;
|
||||||
format == SDL_GPU_TEXTUREFORMAT_BC2_UNORM ||
|
blocksPerColumn = (height + pixelColumnsPerBlock - 1) / pixelColumnsPerBlock;
|
||||||
format == SDL_GPU_TEXTUREFORMAT_BC3_UNORM ||
|
|
||||||
format == SDL_GPU_TEXTUREFORMAT_BC7_UNORM) {
|
|
||||||
blocksPerRow = (width + 3) / 4;
|
|
||||||
blocksPerColumn = (height + 3) / 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
return blocksPerRow * blocksPerColumn * SDL_GPUTextureFormatTexelBlockSize(format);
|
return blocksPerRow * blocksPerColumn * SDL_GPUTextureFormatTexelBlockSize(format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue