Generate a table of config->glformat info. Precursor to lifting this to caps.
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1527383003 Review URL: https://codereview.chromium.org/1527383003
This commit is contained in:
parent
78e0aef610
commit
54c6fe8519
@ -285,35 +285,35 @@
|
|||||||
#define GR_GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E
|
#define GR_GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E
|
||||||
#define GR_GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F
|
#define GR_GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F
|
||||||
|
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0
|
#define GR_GL_COMPRESSED_RGBA_ASTC_4x4 0x93B0
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1
|
#define GR_GL_COMPRESSED_RGBA_ASTC_5x4 0x93B1
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2
|
#define GR_GL_COMPRESSED_RGBA_ASTC_5x5 0x93B2
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3
|
#define GR_GL_COMPRESSED_RGBA_ASTC_6x5 0x93B3
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4
|
#define GR_GL_COMPRESSED_RGBA_ASTC_6x6 0x93B4
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5
|
#define GR_GL_COMPRESSED_RGBA_ASTC_8x5 0x93B5
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6
|
#define GR_GL_COMPRESSED_RGBA_ASTC_8x6 0x93B6
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7
|
#define GR_GL_COMPRESSED_RGBA_ASTC_8x8 0x93B7
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8
|
#define GR_GL_COMPRESSED_RGBA_ASTC_10x5 0x93B8
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9
|
#define GR_GL_COMPRESSED_RGBA_ASTC_10x6 0x93B9
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA
|
#define GR_GL_COMPRESSED_RGBA_ASTC_10x8 0x93BA
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB
|
#define GR_GL_COMPRESSED_RGBA_ASTC_10x10 0x93BB
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC
|
#define GR_GL_COMPRESSED_RGBA_ASTC_12x10 0x93BC
|
||||||
#define GR_GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD
|
#define GR_GL_COMPRESSED_RGBA_ASTC_12x12 0x93BD
|
||||||
|
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4 0x93D0
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4 0x93D1
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5 0x93D2
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5 0x93D3
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6 0x93D4
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5 0x93D5
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6 0x93D6
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8 0x93D7
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5 0x93D8
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6 0x93D9
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8 0x93DA
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10 0x93DB
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10 0x93DC
|
||||||
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD
|
#define GR_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12 0x93DD
|
||||||
|
|
||||||
/* HintMode */
|
/* HintMode */
|
||||||
#define GR_GL_DONT_CARE 0x1100
|
#define GR_GL_DONT_CARE 0x1100
|
||||||
|
@ -195,6 +195,7 @@ GrGLGpu::GrGLGpu(GrGLContext* ctx, GrContext* context)
|
|||||||
, fGLContext(ctx) {
|
, fGLContext(ctx) {
|
||||||
SkASSERT(ctx);
|
SkASSERT(ctx);
|
||||||
fCaps.reset(SkRef(ctx->caps()));
|
fCaps.reset(SkRef(ctx->caps()));
|
||||||
|
this->generateConfigTable();
|
||||||
|
|
||||||
fHWBoundTextureUniqueIDs.reset(this->glCaps().maxFragmentTextureUnits());
|
fHWBoundTextureUniqueIDs.reset(this->glCaps().maxFragmentTextureUnits());
|
||||||
|
|
||||||
@ -2683,191 +2684,178 @@ void GrGLGpu::flushDrawFace(GrPipelineBuilder::DrawFace face) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GrGLGpu::generateConfigTable() {
|
||||||
|
fConfigTable[kUnknown_GrPixelConfig].fBaseInternalFormat = 0;
|
||||||
|
fConfigTable[kUnknown_GrPixelConfig].fSizedInternalFormat = 0;
|
||||||
|
fConfigTable[kUnknown_GrPixelConfig].fExternalFormat = 0;
|
||||||
|
fConfigTable[kUnknown_GrPixelConfig].fExternalType = 0;
|
||||||
|
|
||||||
|
fConfigTable[kRGBA_8888_GrPixelConfig].fBaseInternalFormat = GR_GL_RGBA;
|
||||||
|
fConfigTable[kRGBA_8888_GrPixelConfig].fSizedInternalFormat = GR_GL_RGBA8;
|
||||||
|
fConfigTable[kRGBA_8888_GrPixelConfig].fExternalFormat = GR_GL_RGBA;
|
||||||
|
fConfigTable[kRGBA_8888_GrPixelConfig].fExternalType = GR_GL_UNSIGNED_BYTE;
|
||||||
|
|
||||||
|
if (this->glCaps().bgraIsInternalFormat()) {
|
||||||
|
fConfigTable[kBGRA_8888_GrPixelConfig].fBaseInternalFormat = GR_GL_BGRA;
|
||||||
|
fConfigTable[kBGRA_8888_GrPixelConfig].fSizedInternalFormat = GR_GL_BGRA8;
|
||||||
|
} else {
|
||||||
|
fConfigTable[kBGRA_8888_GrPixelConfig].fBaseInternalFormat = GR_GL_RGBA;
|
||||||
|
fConfigTable[kBGRA_8888_GrPixelConfig].fSizedInternalFormat = GR_GL_RGBA8;
|
||||||
|
}
|
||||||
|
fConfigTable[kBGRA_8888_GrPixelConfig].fExternalFormat= GR_GL_BGRA;
|
||||||
|
fConfigTable[kBGRA_8888_GrPixelConfig].fExternalType = GR_GL_UNSIGNED_BYTE;
|
||||||
|
|
||||||
|
|
||||||
|
fConfigTable[kSRGBA_8888_GrPixelConfig].fBaseInternalFormat = GR_GL_SRGB_ALPHA;
|
||||||
|
fConfigTable[kSRGBA_8888_GrPixelConfig].fSizedInternalFormat = GR_GL_SRGB8_ALPHA8;
|
||||||
|
// OpenGL ES 2.0 + GL_EXT_sRGB allows GL_SRGB_ALPHA to be specified as the <format>
|
||||||
|
// param to Tex(Sub)Image2D. ES 2.0 requires the internalFormat and format to match.
|
||||||
|
// Thus, on ES 2.0 we will use GL_SRGB_ALPHA as the externalFormat. However,
|
||||||
|
// onReadPixels needs code to override that because GL_SRGB_ALPHA is not allowed as a
|
||||||
|
// glReadPixels format.
|
||||||
|
// On OpenGL and ES 3.0 GL_SRGB_ALPHA does not work for the <format> param to
|
||||||
|
// glReadPixels nor does it work with Tex(Sub)Image2D So we always set the externalFormat
|
||||||
|
// return to GL_RGBA.
|
||||||
|
if (this->glStandard() == kGLES_GrGLStandard &&
|
||||||
|
this->glVersion() == GR_GL_VER(2,0)) {
|
||||||
|
fConfigTable[kSRGBA_8888_GrPixelConfig].fExternalFormat = GR_GL_SRGB_ALPHA;
|
||||||
|
} else {
|
||||||
|
fConfigTable[kSRGBA_8888_GrPixelConfig].fExternalFormat = GR_GL_RGBA;
|
||||||
|
}
|
||||||
|
fConfigTable[kSRGBA_8888_GrPixelConfig].fExternalType = GR_GL_UNSIGNED_BYTE;
|
||||||
|
|
||||||
|
|
||||||
|
fConfigTable[kRGB_565_GrPixelConfig].fBaseInternalFormat = GR_GL_RGB;
|
||||||
|
if (this->glCaps().ES2CompatibilitySupport()) {
|
||||||
|
fConfigTable[kRGB_565_GrPixelConfig].fSizedInternalFormat = GR_GL_RGB565;
|
||||||
|
} else {
|
||||||
|
fConfigTable[kRGB_565_GrPixelConfig].fSizedInternalFormat = GR_GL_RGB5;
|
||||||
|
}
|
||||||
|
fConfigTable[kRGB_565_GrPixelConfig].fExternalFormat = GR_GL_RGB;
|
||||||
|
fConfigTable[kRGB_565_GrPixelConfig].fExternalType = GR_GL_UNSIGNED_SHORT_5_6_5;
|
||||||
|
|
||||||
|
fConfigTable[kRGBA_4444_GrPixelConfig].fBaseInternalFormat = GR_GL_RGBA;
|
||||||
|
fConfigTable[kRGBA_4444_GrPixelConfig].fSizedInternalFormat = GR_GL_RGBA4;
|
||||||
|
fConfigTable[kRGBA_4444_GrPixelConfig].fExternalFormat = GR_GL_RGBA;
|
||||||
|
fConfigTable[kRGBA_4444_GrPixelConfig].fExternalType = GR_GL_UNSIGNED_SHORT_4_4_4_4;
|
||||||
|
|
||||||
|
|
||||||
|
if (this->glCaps().textureRedSupport()) {
|
||||||
|
fConfigTable[kAlpha_8_GrPixelConfig].fBaseInternalFormat = GR_GL_RED;
|
||||||
|
fConfigTable[kAlpha_8_GrPixelConfig].fSizedInternalFormat = GR_GL_R8;
|
||||||
|
fConfigTable[kAlpha_8_GrPixelConfig].fExternalFormat = GR_GL_RED;
|
||||||
|
} else {
|
||||||
|
fConfigTable[kAlpha_8_GrPixelConfig].fBaseInternalFormat = GR_GL_ALPHA;
|
||||||
|
fConfigTable[kAlpha_8_GrPixelConfig].fSizedInternalFormat = GR_GL_ALPHA8;
|
||||||
|
fConfigTable[kAlpha_8_GrPixelConfig].fExternalFormat = GR_GL_ALPHA;
|
||||||
|
}
|
||||||
|
fConfigTable[kAlpha_8_GrPixelConfig].fExternalType = GR_GL_UNSIGNED_BYTE;
|
||||||
|
|
||||||
|
fConfigTable[kRGBA_float_GrPixelConfig].fBaseInternalFormat = GR_GL_RGBA;
|
||||||
|
fConfigTable[kRGBA_float_GrPixelConfig].fSizedInternalFormat = GR_GL_RGBA32F;
|
||||||
|
fConfigTable[kRGBA_float_GrPixelConfig].fExternalFormat = GR_GL_RGBA;
|
||||||
|
fConfigTable[kRGBA_float_GrPixelConfig].fExternalType = GR_GL_FLOAT;
|
||||||
|
|
||||||
|
if (this->glCaps().textureRedSupport()) {
|
||||||
|
fConfigTable[kAlpha_half_GrPixelConfig].fBaseInternalFormat = GR_GL_RED;
|
||||||
|
fConfigTable[kAlpha_half_GrPixelConfig].fSizedInternalFormat = GR_GL_R16F;
|
||||||
|
fConfigTable[kAlpha_half_GrPixelConfig].fExternalFormat = GR_GL_RED;
|
||||||
|
} else {
|
||||||
|
fConfigTable[kAlpha_half_GrPixelConfig].fBaseInternalFormat = GR_GL_ALPHA;
|
||||||
|
fConfigTable[kAlpha_half_GrPixelConfig].fSizedInternalFormat = GR_GL_ALPHA16F;
|
||||||
|
fConfigTable[kAlpha_half_GrPixelConfig].fExternalFormat = GR_GL_ALPHA;
|
||||||
|
}
|
||||||
|
if (kGL_GrGLStandard == this->glStandard() || this->glVersion() >= GR_GL_VER(3, 0)) {
|
||||||
|
fConfigTable[kAlpha_half_GrPixelConfig].fExternalType = GR_GL_HALF_FLOAT;
|
||||||
|
} else {
|
||||||
|
fConfigTable[kAlpha_half_GrPixelConfig].fExternalType = GR_GL_HALF_FLOAT_OES;
|
||||||
|
}
|
||||||
|
|
||||||
|
fConfigTable[kRGBA_half_GrPixelConfig].fBaseInternalFormat = GR_GL_RGBA;
|
||||||
|
fConfigTable[kRGBA_half_GrPixelConfig].fSizedInternalFormat = GR_GL_RGBA16F;
|
||||||
|
fConfigTable[kRGBA_half_GrPixelConfig].fExternalFormat = GR_GL_RGBA;
|
||||||
|
if (kGL_GrGLStandard == this->glStandard() || this->glVersion() >= GR_GL_VER(3, 0)) {
|
||||||
|
fConfigTable[kRGBA_half_GrPixelConfig].fExternalType = GR_GL_HALF_FLOAT;
|
||||||
|
} else {
|
||||||
|
fConfigTable[kRGBA_half_GrPixelConfig].fExternalType = GR_GL_HALF_FLOAT_OES;
|
||||||
|
}
|
||||||
|
|
||||||
|
// No sized/unsized internal format distinction for compressed formats, no external format.
|
||||||
|
|
||||||
|
fConfigTable[kIndex_8_GrPixelConfig].fBaseInternalFormat = GR_GL_PALETTE8_RGBA8;
|
||||||
|
fConfigTable[kIndex_8_GrPixelConfig].fSizedInternalFormat = GR_GL_PALETTE8_RGBA8;
|
||||||
|
fConfigTable[kIndex_8_GrPixelConfig].fExternalFormat = 0;
|
||||||
|
fConfigTable[kIndex_8_GrPixelConfig].fExternalType = 0;
|
||||||
|
|
||||||
|
switch(this->glCaps().latcAlias()) {
|
||||||
|
case GrGLCaps::kLATC_LATCAlias:
|
||||||
|
fConfigTable[kLATC_GrPixelConfig].fBaseInternalFormat =
|
||||||
|
GR_GL_COMPRESSED_LUMINANCE_LATC1;
|
||||||
|
fConfigTable[kLATC_GrPixelConfig].fSizedInternalFormat =
|
||||||
|
GR_GL_COMPRESSED_LUMINANCE_LATC1;
|
||||||
|
break;
|
||||||
|
case GrGLCaps::kRGTC_LATCAlias:
|
||||||
|
fConfigTable[kLATC_GrPixelConfig].fBaseInternalFormat = GR_GL_COMPRESSED_RED_RGTC1;
|
||||||
|
fConfigTable[kLATC_GrPixelConfig].fSizedInternalFormat = GR_GL_COMPRESSED_RED_RGTC1;
|
||||||
|
break;
|
||||||
|
case GrGLCaps::k3DC_LATCAlias:
|
||||||
|
fConfigTable[kLATC_GrPixelConfig].fBaseInternalFormat = GR_GL_COMPRESSED_3DC_X;
|
||||||
|
fConfigTable[kLATC_GrPixelConfig].fSizedInternalFormat = GR_GL_COMPRESSED_3DC_X;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fConfigTable[kLATC_GrPixelConfig].fExternalFormat = 0;
|
||||||
|
fConfigTable[kLATC_GrPixelConfig].fExternalType = 0;
|
||||||
|
|
||||||
|
fConfigTable[kETC1_GrPixelConfig].fBaseInternalFormat = GR_GL_COMPRESSED_ETC1_RGB8;
|
||||||
|
fConfigTable[kETC1_GrPixelConfig].fSizedInternalFormat = GR_GL_COMPRESSED_ETC1_RGB8;
|
||||||
|
fConfigTable[kETC1_GrPixelConfig].fExternalFormat = 0;
|
||||||
|
fConfigTable[kETC1_GrPixelConfig].fExternalType = 0;
|
||||||
|
|
||||||
|
fConfigTable[kR11_EAC_GrPixelConfig].fBaseInternalFormat = GR_GL_COMPRESSED_R11_EAC;
|
||||||
|
fConfigTable[kR11_EAC_GrPixelConfig].fSizedInternalFormat = GR_GL_COMPRESSED_R11_EAC;
|
||||||
|
fConfigTable[kR11_EAC_GrPixelConfig].fExternalFormat = 0;
|
||||||
|
fConfigTable[kR11_EAC_GrPixelConfig].fExternalType = 0;
|
||||||
|
|
||||||
|
fConfigTable[kASTC_12x12_GrPixelConfig].fBaseInternalFormat = GR_GL_COMPRESSED_RGBA_ASTC_12x12;
|
||||||
|
fConfigTable[kASTC_12x12_GrPixelConfig].fSizedInternalFormat = GR_GL_COMPRESSED_RGBA_ASTC_12x12;
|
||||||
|
fConfigTable[kASTC_12x12_GrPixelConfig].fExternalFormat = 0;
|
||||||
|
fConfigTable[kASTC_12x12_GrPixelConfig].fExternalType = 0;
|
||||||
|
|
||||||
|
#ifdef SK_DEBUG
|
||||||
|
// Make sure we initialized everything.
|
||||||
|
ConfigEntry defaultEntry;
|
||||||
|
for (int i = 0; i < kLast_GrPixelConfig; ++i) {
|
||||||
|
SkASSERT(defaultEntry.fBaseInternalFormat != fConfigTable[i].fBaseInternalFormat);
|
||||||
|
SkASSERT(defaultEntry.fSizedInternalFormat != fConfigTable[i].fSizedInternalFormat);
|
||||||
|
SkASSERT(defaultEntry.fExternalFormat != fConfigTable[i].fExternalFormat);
|
||||||
|
SkASSERT(defaultEntry.fExternalType != fConfigTable[i].fExternalType);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
bool GrGLGpu::configToGLFormats(GrPixelConfig config,
|
bool GrGLGpu::configToGLFormats(GrPixelConfig config,
|
||||||
bool getSizedInternalFormat,
|
bool getSizedInternalFormat,
|
||||||
GrGLenum* internalFormat,
|
GrGLenum* internalFormat,
|
||||||
GrGLenum* externalFormat,
|
GrGLenum* externalFormat,
|
||||||
GrGLenum* externalType) const {
|
GrGLenum* externalType) const {
|
||||||
GrGLenum dontCare;
|
|
||||||
if (nullptr == internalFormat) {
|
|
||||||
internalFormat = &dontCare;
|
|
||||||
}
|
|
||||||
if (nullptr == externalFormat) {
|
|
||||||
externalFormat = &dontCare;
|
|
||||||
}
|
|
||||||
if (nullptr == externalType) {
|
|
||||||
externalType = &dontCare;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!this->glCaps().isConfigTexturable(config)) {
|
if(!this->glCaps().isConfigTexturable(config)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (config) {
|
if (nullptr != internalFormat) {
|
||||||
case kRGBA_8888_GrPixelConfig:
|
if (getSizedInternalFormat) {
|
||||||
*internalFormat = GR_GL_RGBA;
|
*internalFormat = fConfigTable[config].fSizedInternalFormat;
|
||||||
*externalFormat = GR_GL_RGBA;
|
} else {
|
||||||
if (getSizedInternalFormat) {
|
*internalFormat = fConfigTable[config].fBaseInternalFormat;
|
||||||
*internalFormat = GR_GL_RGBA8;
|
}
|
||||||
} else {
|
|
||||||
*internalFormat = GR_GL_RGBA;
|
|
||||||
}
|
|
||||||
*externalType = GR_GL_UNSIGNED_BYTE;
|
|
||||||
break;
|
|
||||||
case kBGRA_8888_GrPixelConfig:
|
|
||||||
if (this->glCaps().bgraIsInternalFormat()) {
|
|
||||||
if (getSizedInternalFormat) {
|
|
||||||
*internalFormat = GR_GL_BGRA8;
|
|
||||||
} else {
|
|
||||||
*internalFormat = GR_GL_BGRA;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (getSizedInternalFormat) {
|
|
||||||
*internalFormat = GR_GL_RGBA8;
|
|
||||||
} else {
|
|
||||||
*internalFormat = GR_GL_RGBA;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*externalFormat = GR_GL_BGRA;
|
|
||||||
*externalType = GR_GL_UNSIGNED_BYTE;
|
|
||||||
break;
|
|
||||||
case kSRGBA_8888_GrPixelConfig:
|
|
||||||
if (getSizedInternalFormat) {
|
|
||||||
*internalFormat = GR_GL_SRGB8_ALPHA8;
|
|
||||||
} else {
|
|
||||||
*internalFormat = GR_GL_SRGB_ALPHA;
|
|
||||||
}
|
|
||||||
// OpenGL ES 2.0 + GL_EXT_sRGB allows GL_SRGB_ALPHA to be specified as the <format>
|
|
||||||
// param to Tex(Sub)Image2D. ES 2.0 requires the internalFormat and format to match.
|
|
||||||
// Thus, on ES 2.0 we will use GL_SRGB_ALPHA as the externalFormat. However,
|
|
||||||
// onReadPixels needs code to override that because GL_SRGB_ALPHA is not allowed as a
|
|
||||||
// glReadPixels format.
|
|
||||||
// On OpenGL and ES 3.0 GL_SRGB_ALPHA does not work for the <format> param to
|
|
||||||
// glReadPixels nor does it work with Tex(Sub)Image2D So we always set the externalFormat
|
|
||||||
// return to GL_RGBA.
|
|
||||||
if (this->glStandard() == kGLES_GrGLStandard &&
|
|
||||||
this->glVersion() == GR_GL_VER(2,0)) {
|
|
||||||
*externalFormat = GR_GL_SRGB_ALPHA;
|
|
||||||
} else {
|
|
||||||
*externalFormat = GR_GL_RGBA;
|
|
||||||
}
|
|
||||||
*externalType = GR_GL_UNSIGNED_BYTE;
|
|
||||||
break;
|
|
||||||
case kRGB_565_GrPixelConfig:
|
|
||||||
*internalFormat = GR_GL_RGB;
|
|
||||||
*externalFormat = GR_GL_RGB;
|
|
||||||
if (getSizedInternalFormat) {
|
|
||||||
if (!this->glCaps().ES2CompatibilitySupport()) {
|
|
||||||
*internalFormat = GR_GL_RGB5;
|
|
||||||
} else {
|
|
||||||
*internalFormat = GR_GL_RGB565;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
*internalFormat = GR_GL_RGB;
|
|
||||||
}
|
|
||||||
*externalType = GR_GL_UNSIGNED_SHORT_5_6_5;
|
|
||||||
break;
|
|
||||||
case kRGBA_4444_GrPixelConfig:
|
|
||||||
*internalFormat = GR_GL_RGBA;
|
|
||||||
*externalFormat = GR_GL_RGBA;
|
|
||||||
if (getSizedInternalFormat) {
|
|
||||||
*internalFormat = GR_GL_RGBA4;
|
|
||||||
} else {
|
|
||||||
*internalFormat = GR_GL_RGBA;
|
|
||||||
}
|
|
||||||
*externalType = GR_GL_UNSIGNED_SHORT_4_4_4_4;
|
|
||||||
break;
|
|
||||||
case kIndex_8_GrPixelConfig:
|
|
||||||
// no sized/unsized internal format distinction here
|
|
||||||
*internalFormat = GR_GL_PALETTE8_RGBA8;
|
|
||||||
break;
|
|
||||||
case kAlpha_8_GrPixelConfig:
|
|
||||||
if (this->glCaps().textureRedSupport()) {
|
|
||||||
*internalFormat = GR_GL_RED;
|
|
||||||
*externalFormat = GR_GL_RED;
|
|
||||||
if (getSizedInternalFormat) {
|
|
||||||
*internalFormat = GR_GL_R8;
|
|
||||||
} else {
|
|
||||||
*internalFormat = GR_GL_RED;
|
|
||||||
}
|
|
||||||
*externalType = GR_GL_UNSIGNED_BYTE;
|
|
||||||
} else {
|
|
||||||
*internalFormat = GR_GL_ALPHA;
|
|
||||||
*externalFormat = GR_GL_ALPHA;
|
|
||||||
if (getSizedInternalFormat) {
|
|
||||||
*internalFormat = GR_GL_ALPHA8;
|
|
||||||
} else {
|
|
||||||
*internalFormat = GR_GL_ALPHA;
|
|
||||||
}
|
|
||||||
*externalType = GR_GL_UNSIGNED_BYTE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case kETC1_GrPixelConfig:
|
|
||||||
*internalFormat = GR_GL_COMPRESSED_ETC1_RGB8;
|
|
||||||
break;
|
|
||||||
case kLATC_GrPixelConfig:
|
|
||||||
switch(this->glCaps().latcAlias()) {
|
|
||||||
case GrGLCaps::kLATC_LATCAlias:
|
|
||||||
*internalFormat = GR_GL_COMPRESSED_LUMINANCE_LATC1;
|
|
||||||
break;
|
|
||||||
case GrGLCaps::kRGTC_LATCAlias:
|
|
||||||
*internalFormat = GR_GL_COMPRESSED_RED_RGTC1;
|
|
||||||
break;
|
|
||||||
case GrGLCaps::k3DC_LATCAlias:
|
|
||||||
*internalFormat = GR_GL_COMPRESSED_3DC_X;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case kR11_EAC_GrPixelConfig:
|
|
||||||
*internalFormat = GR_GL_COMPRESSED_R11_EAC;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case kASTC_12x12_GrPixelConfig:
|
|
||||||
*internalFormat = GR_GL_COMPRESSED_RGBA_ASTC_12x12_KHR;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case kRGBA_float_GrPixelConfig:
|
|
||||||
*internalFormat = GR_GL_RGBA32F;
|
|
||||||
*externalFormat = GR_GL_RGBA;
|
|
||||||
*externalType = GR_GL_FLOAT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case kAlpha_half_GrPixelConfig:
|
|
||||||
if (this->glCaps().textureRedSupport()) {
|
|
||||||
if (getSizedInternalFormat) {
|
|
||||||
*internalFormat = GR_GL_R16F;
|
|
||||||
} else {
|
|
||||||
*internalFormat = GR_GL_RED;
|
|
||||||
}
|
|
||||||
*externalFormat = GR_GL_RED;
|
|
||||||
} else {
|
|
||||||
if (getSizedInternalFormat) {
|
|
||||||
*internalFormat = GR_GL_ALPHA16F;
|
|
||||||
} else {
|
|
||||||
*internalFormat = GR_GL_ALPHA;
|
|
||||||
}
|
|
||||||
*externalFormat = GR_GL_ALPHA;
|
|
||||||
}
|
|
||||||
if (kGL_GrGLStandard == this->glStandard() || this->glVersion() >= GR_GL_VER(3, 0)) {
|
|
||||||
*externalType = GR_GL_HALF_FLOAT;
|
|
||||||
} else {
|
|
||||||
*externalType = GR_GL_HALF_FLOAT_OES;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case kRGBA_half_GrPixelConfig:
|
|
||||||
*internalFormat = GR_GL_RGBA16F;
|
|
||||||
*externalFormat = GR_GL_RGBA;
|
|
||||||
if (kGL_GrGLStandard == this->glStandard() || this->glVersion() >= GR_GL_VER(3, 0)) {
|
|
||||||
*externalType = GR_GL_HALF_FLOAT;
|
|
||||||
} else {
|
|
||||||
*externalType = GR_GL_HALF_FLOAT_OES;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
if (nullptr != externalFormat) {
|
||||||
|
*externalFormat = fConfigTable[config].fExternalFormat;
|
||||||
|
}
|
||||||
|
if (nullptr != externalType) {
|
||||||
|
*externalType = fConfigTable[config].fExternalType;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,6 +283,7 @@ private:
|
|||||||
void flushStencil(const GrStencilSettings&);
|
void flushStencil(const GrStencilSettings&);
|
||||||
void flushHWAAState(GrRenderTarget* rt, bool useHWAA);
|
void flushHWAAState(GrRenderTarget* rt, bool useHWAA);
|
||||||
|
|
||||||
|
void generateConfigTable();
|
||||||
bool configToGLFormats(GrPixelConfig config,
|
bool configToGLFormats(GrPixelConfig config,
|
||||||
bool getSizedInternal,
|
bool getSizedInternal,
|
||||||
GrGLenum* internalFormat,
|
GrGLenum* internalFormat,
|
||||||
@ -500,6 +501,19 @@ private:
|
|||||||
}
|
}
|
||||||
} fHWBlendState;
|
} fHWBlendState;
|
||||||
|
|
||||||
|
TriState fMSAAEnabled;
|
||||||
|
|
||||||
|
GrStencilSettings fHWStencilSettings;
|
||||||
|
TriState fHWStencilTestEnabled;
|
||||||
|
|
||||||
|
|
||||||
|
GrPipelineBuilder::DrawFace fHWDrawFace;
|
||||||
|
TriState fHWWriteToColor;
|
||||||
|
uint32_t fHWBoundRenderTargetUniqueID;
|
||||||
|
TriState fHWSRGBFramebuffer;
|
||||||
|
SkTArray<uint32_t, true> fHWBoundTextureUniqueIDs;
|
||||||
|
///@}
|
||||||
|
|
||||||
/** IDs for copy surface program. */
|
/** IDs for copy surface program. */
|
||||||
struct {
|
struct {
|
||||||
GrGLuint fProgram;
|
GrGLuint fProgram;
|
||||||
@ -525,19 +539,16 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TriState fMSAAEnabled;
|
struct ConfigEntry {
|
||||||
|
// Default constructor inits to known bad GL enum values.
|
||||||
|
ConfigEntry() { memset(this, 0xAB, sizeof(ConfigEntry)); }
|
||||||
|
GrGLenum fBaseInternalFormat;
|
||||||
|
GrGLenum fSizedInternalFormat;
|
||||||
|
GrGLenum fExternalFormat;
|
||||||
|
GrGLenum fExternalType;
|
||||||
|
};
|
||||||
|
|
||||||
GrStencilSettings fHWStencilSettings;
|
ConfigEntry fConfigTable[kLast_GrPixelConfig + 1];
|
||||||
TriState fHWStencilTestEnabled;
|
|
||||||
|
|
||||||
|
|
||||||
GrPipelineBuilder::DrawFace fHWDrawFace;
|
|
||||||
TriState fHWWriteToColor;
|
|
||||||
uint32_t fHWBoundRenderTargetUniqueID;
|
|
||||||
TriState fHWSRGBFramebuffer;
|
|
||||||
SkTArray<uint32_t, true> fHWBoundTextureUniqueIDs;
|
|
||||||
|
|
||||||
///@}
|
|
||||||
|
|
||||||
// Mapping of pixel configs to known supported stencil formats to be used
|
// Mapping of pixel configs to known supported stencil formats to be used
|
||||||
// when adding a stencil buffer to a framebuffer.
|
// when adding a stencil buffer to a framebuffer.
|
||||||
|
28
third_party/ktx/ktx.cpp
vendored
28
third_party/ktx/ktx.cpp
vendored
@ -21,20 +21,20 @@ static inline uint32_t compressed_fmt_to_gl_define(SkTextureCompressor::Format f
|
|||||||
GR_GL_COMPRESSED_LUMINANCE_LATC1, // kLATC_Format
|
GR_GL_COMPRESSED_LUMINANCE_LATC1, // kLATC_Format
|
||||||
GR_GL_COMPRESSED_R11_EAC, // kR11_EAC_Format
|
GR_GL_COMPRESSED_R11_EAC, // kR11_EAC_Format
|
||||||
GR_GL_COMPRESSED_ETC1_RGB8, // kETC1_Format
|
GR_GL_COMPRESSED_ETC1_RGB8, // kETC1_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_4x4_KHR, // kASTC_4x4_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_4x4, // kASTC_4x4_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_5x4_KHR, // kASTC_5x4_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_5x4, // kASTC_5x4_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_5x5_KHR, // kASTC_5x5_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_5x5, // kASTC_5x5_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_6x5_KHR, // kASTC_6x5_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_6x5, // kASTC_6x5_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_6x6_KHR, // kASTC_6x6_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_6x6, // kASTC_6x6_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_8x5_KHR, // kASTC_8x5_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_8x5, // kASTC_8x5_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_8x6_KHR, // kASTC_8x6_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_8x6, // kASTC_8x6_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_8x8_KHR, // kASTC_8x8_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_8x8, // kASTC_8x8_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_10x5_KHR, // kASTC_10x5_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_10x5, // kASTC_10x5_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_10x6_KHR, // kASTC_10x6_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_10x6, // kASTC_10x6_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_10x8_KHR, // kASTC_10x8_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_10x8, // kASTC_10x8_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_10x10_KHR, // kASTC_10x10_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_10x10, // kASTC_10x10_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_12x10_KHR, // kASTC_12x10_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_12x10, // kASTC_12x10_Format
|
||||||
GR_GL_COMPRESSED_RGBA_ASTC_12x12_KHR, // kASTC_12x12_Format
|
GR_GL_COMPRESSED_RGBA_ASTC_12x12, // kASTC_12x12_Format
|
||||||
};
|
};
|
||||||
|
|
||||||
GR_STATIC_ASSERT(0 == SkTextureCompressor::kLATC_Format);
|
GR_STATIC_ASSERT(0 == SkTextureCompressor::kLATC_Format);
|
||||||
|
Loading…
Reference in New Issue
Block a user