mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 08:58:02 +02:00
isl/format: Add some helpers for working with RGB formats
This commit is contained in:
parent
0639f44d0f
commit
603a3a9439
2 changed files with 66 additions and 0 deletions
|
|
@ -823,6 +823,18 @@ isl_format_block_is_1x1x1(enum isl_format fmt)
|
|||
return fmtl->bw == 1 && fmtl->bh == 1 && fmtl->bd == 1;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
isl_format_is_rgb(enum isl_format fmt)
|
||||
{
|
||||
return isl_format_layouts[fmt].channels.r.bits > 0 &&
|
||||
isl_format_layouts[fmt].channels.g.bits > 0 &&
|
||||
isl_format_layouts[fmt].channels.b.bits > 0 &&
|
||||
isl_format_layouts[fmt].channels.a.bits == 0;
|
||||
}
|
||||
|
||||
enum isl_format isl_format_rgb_to_rgba(enum isl_format rgb) ATTRIBUTE_CONST;
|
||||
enum isl_format isl_format_rgb_to_rgbx(enum isl_format rgb) ATTRIBUTE_CONST;
|
||||
|
||||
bool isl_is_storage_image_format(enum isl_format fmt);
|
||||
|
||||
enum isl_format
|
||||
|
|
|
|||
|
|
@ -39,3 +39,57 @@ isl_format_has_sint_channel(enum isl_format fmt)
|
|||
fmtl->channels.p.type == ISL_SINT ||
|
||||
fmtl->channels.g.type == ISL_SINT;
|
||||
}
|
||||
|
||||
enum isl_format
|
||||
isl_format_rgb_to_rgba(enum isl_format rgb)
|
||||
{
|
||||
assert(isl_format_is_rgb(rgb));
|
||||
|
||||
switch (rgb) {
|
||||
case ISL_FORMAT_R32G32B32_FLOAT: return ISL_FORMAT_R32G32B32A32_FLOAT;
|
||||
case ISL_FORMAT_R32G32B32_SINT: return ISL_FORMAT_R32G32B32A32_SINT;
|
||||
case ISL_FORMAT_R32G32B32_UINT: return ISL_FORMAT_R32G32B32A32_UINT;
|
||||
case ISL_FORMAT_R32G32B32_UNORM: return ISL_FORMAT_R32G32B32A32_UNORM;
|
||||
case ISL_FORMAT_R32G32B32_SNORM: return ISL_FORMAT_R32G32B32A32_SNORM;
|
||||
case ISL_FORMAT_R32G32B32_SSCALED: return ISL_FORMAT_R32G32B32A32_SSCALED;
|
||||
case ISL_FORMAT_R32G32B32_USCALED: return ISL_FORMAT_R32G32B32A32_USCALED;
|
||||
case ISL_FORMAT_R32G32B32_SFIXED: return ISL_FORMAT_R32G32B32A32_SFIXED;
|
||||
case ISL_FORMAT_R8G8B8_UNORM: return ISL_FORMAT_R8G8B8A8_UNORM;
|
||||
case ISL_FORMAT_R8G8B8_SNORM: return ISL_FORMAT_R8G8B8A8_SNORM;
|
||||
case ISL_FORMAT_R8G8B8_SSCALED: return ISL_FORMAT_R8G8B8A8_SSCALED;
|
||||
case ISL_FORMAT_R8G8B8_USCALED: return ISL_FORMAT_R8G8B8A8_USCALED;
|
||||
case ISL_FORMAT_R16G16B16_FLOAT: return ISL_FORMAT_R16G16B16A16_FLOAT;
|
||||
case ISL_FORMAT_R16G16B16_UNORM: return ISL_FORMAT_R16G16B16A16_UNORM;
|
||||
case ISL_FORMAT_R16G16B16_SNORM: return ISL_FORMAT_R16G16B16A16_SNORM;
|
||||
case ISL_FORMAT_R16G16B16_SSCALED: return ISL_FORMAT_R16G16B16A16_SSCALED;
|
||||
case ISL_FORMAT_R16G16B16_USCALED: return ISL_FORMAT_R16G16B16A16_USCALED;
|
||||
case ISL_FORMAT_R8G8B8_UNORM_SRGB: return ISL_FORMAT_R8G8B8A8_UNORM_SRGB;
|
||||
case ISL_FORMAT_R16G16B16_UINT: return ISL_FORMAT_R16G16B16A16_UINT;
|
||||
case ISL_FORMAT_R16G16B16_SINT: return ISL_FORMAT_R16G16B16A16_SINT;
|
||||
case ISL_FORMAT_R8G8B8_UINT: return ISL_FORMAT_R8G8B8A8_UINT;
|
||||
case ISL_FORMAT_R8G8B8_SINT: return ISL_FORMAT_R8G8B8A8_SINT;
|
||||
default:
|
||||
return ISL_FORMAT_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
enum isl_format
|
||||
isl_format_rgb_to_rgbx(enum isl_format rgb)
|
||||
{
|
||||
assert(isl_format_is_rgb(rgb));
|
||||
|
||||
switch (rgb) {
|
||||
case ISL_FORMAT_R32G32B32_FLOAT:
|
||||
return ISL_FORMAT_R32G32B32X32_FLOAT;
|
||||
case ISL_FORMAT_R16G16B16_UNORM:
|
||||
return ISL_FORMAT_R16G16B16X16_UNORM;
|
||||
case ISL_FORMAT_R16G16B16_FLOAT:
|
||||
return ISL_FORMAT_R16G16B16X16_FLOAT;
|
||||
case ISL_FORMAT_R8G8B8_UNORM:
|
||||
return ISL_FORMAT_R8G8B8X8_UNORM;
|
||||
case ISL_FORMAT_R8G8B8_UNORM_SRGB:
|
||||
return ISL_FORMAT_R8G8B8X8_UNORM_SRGB;
|
||||
default:
|
||||
return ISL_FORMAT_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue