GPU: Add RGB10_A2 format support

Nice format to output high definition normals or normalized colors.
This commit is contained in:
Clément Foucault 2021-02-20 17:01:28 +01:00
parent 1a9fe57a9f
commit 6fa984a1af
4 changed files with 18 additions and 4 deletions

View File

@ -43,6 +43,7 @@ static bool drw_texture_format_supports_framebuffer(eGPUTextureFormat format)
case GPU_RG16F:
case GPU_RG16I:
case GPU_RG32F:
case GPU_RGB10_A2:
case GPU_R11F_G11F_B10F:
case GPU_RGBA8:
case GPU_RGBA16:

View File

@ -114,15 +114,15 @@ typedef enum eGPUTextureFormat {
GPU_R16F,
GPU_R16, /* Max texture buffer format. */
/* Special formats texture & renderbuffer */
#if 0
/* Special formats texture & renderbuffer */
GPU_RGB10_A2,
GPU_RGB10_A2UI,
#endif
GPU_R11F_G11F_B10F,
GPU_DEPTH32F_STENCIL8,
GPU_DEPTH24_STENCIL8,
GPU_SRGB8_A8,
#if 0
GPU_RGB10_A2UI,
#endif
/* Texture only format */
GPU_RGB16F,
@ -175,6 +175,7 @@ typedef enum eGPUDataFormat {
GPU_DATA_UBYTE,
GPU_DATA_UINT_24_8,
GPU_DATA_10_11_11_REV,
GPU_DATA_2_10_10_10_REV,
} eGPUDataFormat;
unsigned int GPU_texture_memory_usage_get(void);

View File

@ -283,6 +283,7 @@ inline size_t to_bytesize(eGPUTextureFormat format)
case GPU_RGBA8UI:
case GPU_RGBA8:
case GPU_SRGB8_A8:
case GPU_RGB10_A2:
case GPU_R11F_G11F_B10F:
case GPU_R32F:
case GPU_R32UI:
@ -368,6 +369,7 @@ inline int to_component_len(eGPUTextureFormat format)
case GPU_RGBA16:
case GPU_RGBA32F:
case GPU_SRGB8_A8:
case GPU_RGB10_A2:
return 4;
case GPU_RGB16F:
case GPU_R11F_G11F_B10F:
@ -395,6 +397,7 @@ inline size_t to_bytesize(eGPUDataFormat data_format)
return 4;
case GPU_DATA_UINT_24_8:
case GPU_DATA_10_11_11_REV:
case GPU_DATA_2_10_10_10_REV:
return 4;
default:
BLI_assert(!"Data format incorrect or unsupported\n");
@ -432,6 +435,8 @@ inline bool validate_data_format(eGPUTextureFormat tex_format, eGPUDataFormat da
case GPU_RGBA8UI:
case GPU_SRGB8_A8:
return ELEM(data_format, GPU_DATA_UBYTE, GPU_DATA_FLOAT);
case GPU_RGB10_A2:
return ELEM(data_format, GPU_DATA_2_10_10_10_REV, GPU_DATA_FLOAT);
case GPU_R11F_G11F_B10F:
return ELEM(data_format, GPU_DATA_10_11_11_REV, GPU_DATA_FLOAT);
default:
@ -464,6 +469,8 @@ inline eGPUDataFormat to_data_format(eGPUTextureFormat tex_format)
case GPU_RGBA8UI:
case GPU_SRGB8_A8:
return GPU_DATA_UBYTE;
case GPU_RGB10_A2:
return GPU_DATA_2_10_10_10_REV;
case GPU_R11F_G11F_B10F:
return GPU_DATA_10_11_11_REV;
default:

View File

@ -158,6 +158,8 @@ inline GLenum to_gl_internal_format(eGPUTextureFormat format)
case GPU_R16:
return GL_R16;
/* Special formats texture & renderbuffer */
case GPU_RGB10_A2:
return GL_RGB10_A2;
case GPU_R11F_G11F_B10F:
return GL_R11F_G11F_B10F;
case GPU_DEPTH32F_STENCIL8:
@ -280,6 +282,8 @@ inline GLenum to_gl(eGPUDataFormat format)
return GL_UNSIGNED_BYTE;
case GPU_DATA_UINT_24_8:
return GL_UNSIGNED_INT_24_8;
case GPU_DATA_2_10_10_10_REV:
return GL_UNSIGNED_INT_2_10_10_10_REV;
case GPU_DATA_10_11_11_REV:
return GL_UNSIGNED_INT_10F_11F_11F_REV;
default:
@ -333,6 +337,7 @@ inline GLenum to_gl_data_format(eGPUTextureFormat format)
case GPU_RGBA16:
case GPU_RGBA16F:
case GPU_RGBA32F:
case GPU_RGB10_A2:
return GL_RGBA;
case GPU_DEPTH24_STENCIL8:
case GPU_DEPTH32F_STENCIL8: