mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-23 20:30:30 +01:00
gallium: add red-alpha texture formats and a couple of util functions
This is for glGetTexImage and it will be used for samplers only (which some drivers already implement by reading util_format_description). v2: incorporate Brian's suggestion Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
974b482aca
commit
cd41833b44
3 changed files with 141 additions and 0 deletions
|
|
@ -360,3 +360,15 @@ PIPE_FORMAT_R16G16B16X16_SINT , plain, 1, 1, sp16, sp16, sp16, x16, xyz1,
|
|||
PIPE_FORMAT_R32G32B32X32_FLOAT , plain, 1, 1, f32, f32, f32, x32, xyz1, rgb
|
||||
PIPE_FORMAT_R32G32B32X32_UINT , plain, 1, 1, up32, up32, up32, x32, xyz1, rgb
|
||||
PIPE_FORMAT_R32G32B32X32_SINT , plain, 1, 1, sp32, sp32, sp32, x32, xyz1, rgb
|
||||
|
||||
PIPE_FORMAT_R8A8_SNORM , plain, 1, 1, sn8 , sn8 , , , x00y, rgb
|
||||
PIPE_FORMAT_R16A16_UNORM , plain, 1, 1, un16 , un16 , , , x00y, rgb
|
||||
PIPE_FORMAT_R16A16_SNORM , plain, 1, 1, sn16 , sn16 , , , x00y, rgb
|
||||
PIPE_FORMAT_R16A16_FLOAT , plain, 1, 1, f16 , f16 , , , x00y, rgb
|
||||
PIPE_FORMAT_R32A32_FLOAT , plain, 1, 1, f32 , f32 , , , x00y, rgb
|
||||
PIPE_FORMAT_R8A8_UINT , plain, 1, 1, up8 , up8 , , , x00y, rgb
|
||||
PIPE_FORMAT_R8A8_SINT , plain, 1, 1, sp8 , sp8 , , , x00y, rgb
|
||||
PIPE_FORMAT_R16A16_UINT , plain, 1, 1, up16 , up16 , , , x00y, rgb
|
||||
PIPE_FORMAT_R16A16_SINT , plain, 1, 1, sp16 , sp16 , , , x00y, rgb
|
||||
PIPE_FORMAT_R32A32_UINT , plain, 1, 1, up32 , up32 , , , x00y, rgb
|
||||
PIPE_FORMAT_R32A32_SINT , plain, 1, 1, sp32 , sp32 , , , x00y, rgb
|
||||
|
|
|
|||
|
Can't render this file because it contains an unexpected character in line 8 and column 3.
|
|
|
@ -887,6 +887,123 @@ util_format_stencil_only(enum pipe_format format)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts PIPE_FORMAT_*I* to PIPE_FORMAT_*R*.
|
||||
* This is identity for non-intensity formats.
|
||||
*/
|
||||
static INLINE enum pipe_format
|
||||
util_format_intensity_to_red(enum pipe_format format)
|
||||
{
|
||||
switch (format) {
|
||||
case PIPE_FORMAT_I8_UNORM:
|
||||
return PIPE_FORMAT_R8_UNORM;
|
||||
case PIPE_FORMAT_I8_SNORM:
|
||||
return PIPE_FORMAT_R8_SNORM;
|
||||
case PIPE_FORMAT_I16_UNORM:
|
||||
return PIPE_FORMAT_R16_UNORM;
|
||||
case PIPE_FORMAT_I16_SNORM:
|
||||
return PIPE_FORMAT_R16_SNORM;
|
||||
case PIPE_FORMAT_I16_FLOAT:
|
||||
return PIPE_FORMAT_R16_FLOAT;
|
||||
case PIPE_FORMAT_I32_FLOAT:
|
||||
return PIPE_FORMAT_R32_FLOAT;
|
||||
case PIPE_FORMAT_I8_UINT:
|
||||
return PIPE_FORMAT_R8_UINT;
|
||||
case PIPE_FORMAT_I8_SINT:
|
||||
return PIPE_FORMAT_R8_SINT;
|
||||
case PIPE_FORMAT_I16_UINT:
|
||||
return PIPE_FORMAT_R16_UINT;
|
||||
case PIPE_FORMAT_I16_SINT:
|
||||
return PIPE_FORMAT_R16_SINT;
|
||||
case PIPE_FORMAT_I32_UINT:
|
||||
return PIPE_FORMAT_R32_UINT;
|
||||
case PIPE_FORMAT_I32_SINT:
|
||||
return PIPE_FORMAT_R32_SINT;
|
||||
default:
|
||||
assert(!util_format_is_intensity(format));
|
||||
return format;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts PIPE_FORMAT_*L* to PIPE_FORMAT_*R*.
|
||||
* This is identity for non-luminance formats.
|
||||
*/
|
||||
static INLINE enum pipe_format
|
||||
util_format_luminance_to_red(enum pipe_format format)
|
||||
{
|
||||
switch (format) {
|
||||
case PIPE_FORMAT_L8_UNORM:
|
||||
return PIPE_FORMAT_R8_UNORM;
|
||||
case PIPE_FORMAT_L8_SNORM:
|
||||
return PIPE_FORMAT_R8_SNORM;
|
||||
case PIPE_FORMAT_L16_UNORM:
|
||||
return PIPE_FORMAT_R16_UNORM;
|
||||
case PIPE_FORMAT_L16_SNORM:
|
||||
return PIPE_FORMAT_R16_SNORM;
|
||||
case PIPE_FORMAT_L16_FLOAT:
|
||||
return PIPE_FORMAT_R16_FLOAT;
|
||||
case PIPE_FORMAT_L32_FLOAT:
|
||||
return PIPE_FORMAT_R32_FLOAT;
|
||||
case PIPE_FORMAT_L8_UINT:
|
||||
return PIPE_FORMAT_R8_UINT;
|
||||
case PIPE_FORMAT_L8_SINT:
|
||||
return PIPE_FORMAT_R8_SINT;
|
||||
case PIPE_FORMAT_L16_UINT:
|
||||
return PIPE_FORMAT_R16_UINT;
|
||||
case PIPE_FORMAT_L16_SINT:
|
||||
return PIPE_FORMAT_R16_SINT;
|
||||
case PIPE_FORMAT_L32_UINT:
|
||||
return PIPE_FORMAT_R32_UINT;
|
||||
case PIPE_FORMAT_L32_SINT:
|
||||
return PIPE_FORMAT_R32_SINT;
|
||||
|
||||
case PIPE_FORMAT_LATC1_UNORM:
|
||||
return PIPE_FORMAT_RGTC1_UNORM;
|
||||
case PIPE_FORMAT_LATC1_SNORM:
|
||||
return PIPE_FORMAT_RGTC1_SNORM;
|
||||
|
||||
case PIPE_FORMAT_L4A4_UNORM:
|
||||
/* XXX A4R4 is defined as x00y in u_format.csv */
|
||||
return PIPE_FORMAT_A4R4_UNORM;
|
||||
|
||||
case PIPE_FORMAT_L8A8_UNORM:
|
||||
return PIPE_FORMAT_R8A8_UNORM;
|
||||
case PIPE_FORMAT_L8A8_SNORM:
|
||||
return PIPE_FORMAT_R8A8_SNORM;
|
||||
case PIPE_FORMAT_L16A16_UNORM:
|
||||
return PIPE_FORMAT_R16A16_UNORM;
|
||||
case PIPE_FORMAT_L16A16_SNORM:
|
||||
return PIPE_FORMAT_R16A16_SNORM;
|
||||
case PIPE_FORMAT_L16A16_FLOAT:
|
||||
return PIPE_FORMAT_R16A16_FLOAT;
|
||||
case PIPE_FORMAT_L32A32_FLOAT:
|
||||
return PIPE_FORMAT_R32A32_FLOAT;
|
||||
case PIPE_FORMAT_L8A8_UINT:
|
||||
return PIPE_FORMAT_R8A8_UINT;
|
||||
case PIPE_FORMAT_L8A8_SINT:
|
||||
return PIPE_FORMAT_R8A8_SINT;
|
||||
case PIPE_FORMAT_L16A16_UINT:
|
||||
return PIPE_FORMAT_R16A16_UINT;
|
||||
case PIPE_FORMAT_L16A16_SINT:
|
||||
return PIPE_FORMAT_R16A16_SINT;
|
||||
case PIPE_FORMAT_L32A32_UINT:
|
||||
return PIPE_FORMAT_R32A32_UINT;
|
||||
case PIPE_FORMAT_L32A32_SINT:
|
||||
return PIPE_FORMAT_R32A32_SINT;
|
||||
|
||||
/* We don't have compressed red-alpha variants for these. */
|
||||
case PIPE_FORMAT_LATC2_UNORM:
|
||||
case PIPE_FORMAT_LATC2_SNORM:
|
||||
return PIPE_FORMAT_NONE;
|
||||
|
||||
default:
|
||||
assert(!util_format_is_luminance(format) &&
|
||||
!util_format_is_luminance_alpha(format));
|
||||
return format;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of components stored.
|
||||
* Formats with block size != 1x1 will always have 1 component (the block).
|
||||
|
|
|
|||
|
|
@ -328,6 +328,18 @@ enum pipe_format {
|
|||
PIPE_FORMAT_R32G32B32X32_UINT = 240,
|
||||
PIPE_FORMAT_R32G32B32X32_SINT = 241,
|
||||
|
||||
PIPE_FORMAT_R8A8_SNORM = 242,
|
||||
PIPE_FORMAT_R16A16_UNORM = 243,
|
||||
PIPE_FORMAT_R16A16_SNORM = 244,
|
||||
PIPE_FORMAT_R16A16_FLOAT = 245,
|
||||
PIPE_FORMAT_R32A32_FLOAT = 246,
|
||||
PIPE_FORMAT_R8A8_UINT = 247,
|
||||
PIPE_FORMAT_R8A8_SINT = 248,
|
||||
PIPE_FORMAT_R16A16_UINT = 249,
|
||||
PIPE_FORMAT_R16A16_SINT = 250,
|
||||
PIPE_FORMAT_R32A32_UINT = 251,
|
||||
PIPE_FORMAT_R32A32_SINT = 252,
|
||||
|
||||
PIPE_FORMAT_COUNT
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue