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:
Andrei Alexeyev 2024-09-01 09:07:38 +03:00 committed by GitHub
parent b15d79a35a
commit d4b8072614
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -173,14 +173,9 @@ static inline Uint32 BytesPerRow(
SDL_GPUTextureFormat format)
{
Uint32 blocksPerRow = width;
Uint32 pixelRowsPerBlock = Texture_GetBlockSize(format);
if (format == SDL_GPU_TEXTUREFORMAT_BC1_UNORM ||
format == SDL_GPU_TEXTUREFORMAT_BC2_UNORM ||
format == SDL_GPU_TEXTUREFORMAT_BC3_UNORM ||
format == SDL_GPU_TEXTUREFORMAT_BC7_UNORM) {
blocksPerRow = (width + 3) / 4;
}
blocksPerRow = (width + pixelRowsPerBlock - 1) / pixelRowsPerBlock;
return blocksPerRow * SDL_GPUTextureFormatTexelBlockSize(format);
}
@ -191,15 +186,11 @@ static inline Sint32 BytesPerImage(
{
Uint32 blocksPerRow = width;
Uint32 blocksPerColumn = height;
Uint32 pixelRowsPerBlock = Texture_GetBlockSize(format);
Uint32 pixelColumnsPerBlock = pixelRowsPerBlock;
if (format == SDL_GPU_TEXTUREFORMAT_BC1_UNORM ||
format == SDL_GPU_TEXTUREFORMAT_BC2_UNORM ||
format == SDL_GPU_TEXTUREFORMAT_BC3_UNORM ||
format == SDL_GPU_TEXTUREFORMAT_BC7_UNORM) {
blocksPerRow = (width + 3) / 4;
blocksPerColumn = (height + 3) / 4;
}
blocksPerRow = (width + pixelRowsPerBlock - 1) / pixelRowsPerBlock;
blocksPerColumn = (height + pixelColumnsPerBlock - 1) / pixelColumnsPerBlock;
return blocksPerRow * blocksPerColumn * SDL_GPUTextureFormatTexelBlockSize(format);
}