diff options
Diffstat (limited to 'include/private/GrTypesPriv.h')
-rw-r--r-- | include/private/GrTypesPriv.h | 247 |
1 files changed, 215 insertions, 32 deletions
diff --git a/include/private/GrTypesPriv.h b/include/private/GrTypesPriv.h index e35d1f5b56..1c28c400d0 100644 --- a/include/private/GrTypesPriv.h +++ b/include/private/GrTypesPriv.h @@ -9,9 +9,10 @@ #define GrTypesPriv_DEFINED #include <chrono> +#include "GrSharedEnums.h" #include "GrTypes.h" +#include "SkImageInfo.h" #include "SkRefCnt.h" -#include "GrSharedEnums.h" class GrCaps; @@ -761,37 +762,6 @@ static constexpr GrPixelConfig kGray_8_as_Lum_GrPixelConfig = kPrivateConfig4_Gr static constexpr GrPixelConfig kGray_8_as_Red_GrPixelConfig = kPrivateConfig5_GrPixelConfig; /** - * Utility functions for GrPixelConfig - */ -// Returns true if the pixel config is 32 bits per pixel -static inline bool GrPixelConfigIs8888Unorm(GrPixelConfig config) { - switch (config) { - case kRGBA_8888_GrPixelConfig: - case kBGRA_8888_GrPixelConfig: - case kSRGBA_8888_GrPixelConfig: - case kSBGRA_8888_GrPixelConfig: - return true; - case kUnknown_GrPixelConfig: - case kAlpha_8_GrPixelConfig: - case kAlpha_8_as_Alpha_GrPixelConfig: - case kAlpha_8_as_Red_GrPixelConfig: - case kGray_8_GrPixelConfig: - case kGray_8_as_Lum_GrPixelConfig: - case kGray_8_as_Red_GrPixelConfig: - case kRGB_565_GrPixelConfig: - case kRGBA_4444_GrPixelConfig: - case kRGBA_float_GrPixelConfig: - case kRG_float_GrPixelConfig: - case kAlpha_half_GrPixelConfig: - case kAlpha_half_as_Red_GrPixelConfig: - case kRGBA_half_GrPixelConfig: - return false; - } - SK_ABORT("Invalid pixel config"); - return false; -} - -/** * Refers to the encoding of a GPU buffer as it will be interpreted by the GPU when sampling and * blending. */ @@ -806,6 +776,10 @@ enum class GrSRGBConversion { kLinearToSRGB, }; +/** + * Utility functions for GrPixelConfig + */ + // Returns whether the config's color channels are sRGB encoded. static inline GrSRGBEncoded GrPixelConfigIsSRGBEncoded(GrPixelConfig config) { switch (config) { @@ -1045,6 +1019,215 @@ static inline GrPixelConfigIsClamped GrGetPixelConfigIsClamped(GrPixelConfig con : GrPixelConfigIsClamped::kYes; } +/** + * Like SkColorType this describes a layout of pixel data in CPU memory. It specifies the channels, + * their type, and width. This exists so that the GPU backend can have private types that have no + * analog in the public facing SkColorType enum and omit types not implemented in the GPU backend. + * It does not refer to a texture format and the mapping to texture formats may be many-to-many. + * It does not specify the sRGB encding of the stored values. + */ +enum class GrColorType { + kUnknown, + kAlpha_8, + kRGB_565, + kABGR_4444, // This name differs from SkColorType. kARGB_4444_SkColorType is misnamed. + kRGBA_8888, + kBGRA_8888, + kGray_8, + kAlpha_F16, + kRGBA_F16, + kRG_F32, + kRGBA_F32, +}; + +static inline SkColorType GrColorTypeToSkColorType(GrColorType ct) { + switch (ct) { + case GrColorType::kUnknown: return kUnknown_SkColorType; + case GrColorType::kAlpha_8: return kAlpha_8_SkColorType; + case GrColorType::kRGB_565: return kRGB_565_SkColorType; + case GrColorType::kABGR_4444: return kARGB_4444_SkColorType; + case GrColorType::kRGBA_8888: return kRGBA_8888_SkColorType; + case GrColorType::kBGRA_8888: return kBGRA_8888_SkColorType; + case GrColorType::kGray_8: return kGray_8_SkColorType; + case GrColorType::kAlpha_F16: return kUnknown_SkColorType; + case GrColorType::kRGBA_F16: return kRGBA_F16_SkColorType; + case GrColorType::kRG_F32: return kUnknown_SkColorType; + case GrColorType::kRGBA_F32: return kUnknown_SkColorType; + } + SK_ABORT("Invalid GrColorType"); + return kUnknown_SkColorType; +} + +static inline GrColorType SkColorTypeToGrColorType(SkColorType ct) { + switch (ct) { + case kUnknown_SkColorType: return GrColorType::kUnknown; + case kAlpha_8_SkColorType: return GrColorType::kAlpha_8; + case kRGB_565_SkColorType: return GrColorType::kRGB_565; + case kARGB_4444_SkColorType: return GrColorType::kABGR_4444; + case kRGBA_8888_SkColorType: return GrColorType::kRGBA_8888; + case kBGRA_8888_SkColorType: return GrColorType::kBGRA_8888; + case kRGB_888x_SkColorType: return GrColorType::kUnknown; + case kGray_8_SkColorType: return GrColorType::kGray_8; + case kRGBA_F16_SkColorType: return GrColorType::kRGBA_F16; + case kRGBA_1010102_SkColorType: return GrColorType::kUnknown; + case kRGB_101010x_SkColorType: return GrColorType::kUnknown; + } + SK_ABORT("Invalid SkColorType"); + return GrColorType::kUnknown; +} + +static inline int GrColorTypeBytesPerPixel(GrColorType ct) { + switch (ct) { + case GrColorType::kUnknown: return 0; + case GrColorType::kAlpha_8: return 1; + case GrColorType::kRGB_565: return 2; + case GrColorType::kABGR_4444: return 2; + case GrColorType::kRGBA_8888: return 4; + case GrColorType::kBGRA_8888: return 4; + case GrColorType::kGray_8: return 1; + case GrColorType::kAlpha_F16: return 2; + case GrColorType::kRGBA_F16: return 8; + case GrColorType::kRG_F32: return 8; + case GrColorType::kRGBA_F32: return 16; + } + SK_ABORT("Invalid GrColorType"); + return 0; +} + +static inline int GrColorTypeIsAlphaOnly(GrColorType ct) { + switch (ct) { + case GrColorType::kUnknown: return false; + case GrColorType::kAlpha_8: return true; + case GrColorType::kRGB_565: return false; + case GrColorType::kABGR_4444: return false; + case GrColorType::kRGBA_8888: return false; + case GrColorType::kBGRA_8888: return false; + case GrColorType::kGray_8: return false; + case GrColorType::kAlpha_F16: return true; + case GrColorType::kRGBA_F16: return false; + case GrColorType::kRG_F32: return false; + case GrColorType::kRGBA_F32: return false; + } + SK_ABORT("Invalid GrColorType"); + return false; +} + +static inline GrColorType GrPixelConfigToColorTypeAndEncoding(GrPixelConfig config, + GrSRGBEncoded* srgbEncoded) { + SkASSERT(srgbEncoded); + switch (config) { + case kUnknown_GrPixelConfig: + return GrColorType::kUnknown; + case kAlpha_8_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kAlpha_8; + case kGray_8_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kGray_8; + case kRGB_565_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kRGB_565; + case kRGBA_4444_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kABGR_4444; + case kRGBA_8888_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kRGBA_8888; + case kBGRA_8888_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kBGRA_8888; + case kSRGBA_8888_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kYes; + return GrColorType::kRGBA_8888; + case kSBGRA_8888_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kYes; + return GrColorType::kBGRA_8888; + case kRGBA_float_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kRGBA_F32; + case kRG_float_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kRG_F32; + case kAlpha_half_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kAlpha_F16; + case kRGBA_half_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kRGBA_F16; + case kAlpha_8_as_Alpha_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kAlpha_8; + case kAlpha_8_as_Red_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kAlpha_8; + case kAlpha_half_as_Red_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kAlpha_F16; + case kGray_8_as_Lum_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kGray_8; + case kGray_8_as_Red_GrPixelConfig: + *srgbEncoded = GrSRGBEncoded::kNo; + return GrColorType::kGray_8; + } + SK_ABORT("Invalid GrPixelConfig"); + return GrColorType::kUnknown; +} + +static inline GrColorType GrPixelConfigToColorType(GrPixelConfig config) { + GrSRGBEncoded bogusEncoded; + return GrPixelConfigToColorTypeAndEncoding(config, &bogusEncoded); +} + +static inline GrPixelConfig GrColorTypeToPixelConfig(GrColorType config, + GrSRGBEncoded srgbEncoded) { + switch (config) { + case GrColorType::kUnknown: + return kUnknown_GrPixelConfig; + case GrColorType::kAlpha_8: + return (GrSRGBEncoded::kYes == srgbEncoded) ? kUnknown_GrPixelConfig + : kAlpha_8_GrPixelConfig; + + case GrColorType::kGray_8: + return (GrSRGBEncoded::kYes == srgbEncoded) ? kUnknown_GrPixelConfig + : kGray_8_GrPixelConfig; + + case GrColorType::kRGB_565: + return (GrSRGBEncoded::kYes == srgbEncoded) ? kUnknown_GrPixelConfig + : kRGB_565_GrPixelConfig; + + case GrColorType::kABGR_4444: + return (GrSRGBEncoded::kYes == srgbEncoded) ? kUnknown_GrPixelConfig + : kRGBA_4444_GrPixelConfig; + + case GrColorType::kRGBA_8888: + return (GrSRGBEncoded::kYes == srgbEncoded) ? kSRGBA_8888_GrPixelConfig + : kRGBA_8888_GrPixelConfig; + + case GrColorType::kBGRA_8888: + return (GrSRGBEncoded::kYes == srgbEncoded) ? kSBGRA_8888_GrPixelConfig + : kBGRA_8888_GrPixelConfig; + + case GrColorType::kRGBA_F32: + return (GrSRGBEncoded::kYes == srgbEncoded) ? kUnknown_GrPixelConfig + : kRGBA_float_GrPixelConfig; + + case GrColorType::kRG_F32: + return (GrSRGBEncoded::kYes == srgbEncoded) ? kUnknown_GrPixelConfig + : kRG_float_GrPixelConfig; + + case GrColorType::kAlpha_F16: + return (GrSRGBEncoded::kYes == srgbEncoded) ? kUnknown_GrPixelConfig + : kAlpha_half_GrPixelConfig; + + case GrColorType::kRGBA_F16: + return (GrSRGBEncoded::kYes == srgbEncoded) ? kUnknown_GrPixelConfig + : kRGBA_half_GrPixelConfig; + } + SK_ABORT("Invalid GrColorType"); + return kUnknown_GrPixelConfig; +} + class GrReleaseProcHelper : public SkRefCnt { public: // These match the definitions in SkImage, from whence they came |