GPU: Add RGB10_A2 format support
Nice format to output high definition normals or normalized colors.
This commit is contained in:
		@@ -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:
 | 
			
		||||
 
 | 
			
		||||
@@ -115,14 +115,14 @@ typedef enum eGPUTextureFormat {
 | 
			
		||||
  GPU_R16, /* Max texture buffer format. */
 | 
			
		||||
 | 
			
		||||
  /* Special formats texture & renderbuffer */
 | 
			
		||||
#if 0
 | 
			
		||||
  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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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:
 | 
			
		||||
 
 | 
			
		||||
@@ -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:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user