aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar jvanverth <jvanverth@google.com>2014-12-18 05:44:55 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2014-12-18 05:44:55 -0800
commit1334c21eee8c5b0b216895934e7a8e1c08c6f510 (patch)
tree94cf6ffa8031088dda52b3ba65aae21d327805da
parenteacaa2819d04fc5807562d497215a0f6aca67d62 (diff)
One more pass at getting half float texture configs correct.
Added in check for sized internal format. Made choice between RED and ALPHA orthogonal to HALF_FLOAT and HALF_FLOAT_OES. Enabled rendertarget support on ES 2.0. Review URL: https://codereview.chromium.org/805033002
-rw-r--r--src/gpu/gl/GrGLCaps.cpp19
-rw-r--r--src/gpu/gl/GrGpuGL.cpp23
-rw-r--r--tests/FloatingPointTextureTest.cpp10
3 files changed, 33 insertions, 19 deletions
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index c1eb6e10e2..cfb9558c76 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -497,10 +497,17 @@ void GrGLCaps::initConfigRenderableTable(const GrGLContextInfo& ctxInfo) {
if (kGL_GrGLStandard == standard) {
fConfigRenderSupport[kAlpha_half_GrPixelConfig][kNo_MSAA] = true;
fConfigRenderSupport[kAlpha_half_GrPixelConfig][kYes_MSAA] = true;
+ } else if (ctxInfo.version() >= GR_GL_VER(3,0)) {
+ fConfigRenderSupport[kAlpha_half_GrPixelConfig][kNo_MSAA] = true;
+ // for now we don't support floating point MSAA on ES
+ fConfigRenderSupport[kAlpha_half_GrPixelConfig][kYes_MSAA] = false;
} else {
- // in theory, check for "GL_EXT_color_buffer_half_float"
- // for now we don't support half float alpha render target on ES
- fConfigRenderSupport[kAlpha_half_GrPixelConfig][kNo_MSAA] = false;
+ if (ctxInfo.hasExtension("GL_EXT_color_buffer_half_float") && fTextureRedSupport) {
+ fConfigRenderSupport[kAlpha_half_GrPixelConfig][kNo_MSAA] = true;
+ } else {
+ fConfigRenderSupport[kAlpha_half_GrPixelConfig][kNo_MSAA] = false;
+ }
+ // for now we don't support floating point MSAA on ES
fConfigRenderSupport[kAlpha_half_GrPixelConfig][kYes_MSAA] = false;
}
}
@@ -649,10 +656,10 @@ void GrGLCaps::initConfigTexturableTable(const GrGLContextInfo& ctxInfo, const G
bool hasHalfFPTextures = version >= GR_GL_VER(3, 1);
if (!hasHalfFPTextures) {
hasHalfFPTextures = ctxInfo.hasExtension("GL_ARB_texture_float") ||
- (ctxInfo.hasExtension("GL_OES_texture_half_float_linear") &&
- ctxInfo.hasExtension("GL_OES_texture_half_float"));
+ (ctxInfo.hasExtension("GL_OES_texture_half_float_linear") &&
+ ctxInfo.hasExtension("GL_OES_texture_half_float"));
}
- fConfigTextureSupport[kAlpha_half_GrPixelConfig] = hasHalfFPTextures && fTextureRedSupport;
+ fConfigTextureSupport[kAlpha_half_GrPixelConfig] = hasHalfFPTextures;
}
bool GrGLCaps::doReadPixelsSupported(const GrGLInterface* intf,
diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp
index 92b00c3f5c..5987c7000f 100644
--- a/src/gpu/gl/GrGpuGL.cpp
+++ b/src/gpu/gl/GrGpuGL.cpp
@@ -2386,18 +2386,25 @@ bool GrGLGpu::configToGLFormats(GrPixelConfig config,
break;
case kAlpha_half_GrPixelConfig:
- if (kGLES_GrGLStandard == this->glStandard() && this->glVersion() < GR_GL_VER(3, 1)) {
- *internalFormat = GR_GL_ALPHA;
- *externalFormat = GR_GL_ALPHA;
- *externalType = GR_GL_HALF_FLOAT_OES;
- } else if (this->glCaps().textureRedSupport()) {
- *internalFormat = GR_GL_R16F;
+ if (this->glCaps().textureRedSupport()) {
+ if (getSizedInternalFormat) {
+ *internalFormat = GR_GL_R16F;
+ } else {
+ *internalFormat = GR_GL_RED;
+ }
*externalFormat = GR_GL_RED;
- *externalType = GR_GL_HALF_FLOAT;
} else {
- *internalFormat = GR_GL_ALPHA16F;
+ 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;
diff --git a/tests/FloatingPointTextureTest.cpp b/tests/FloatingPointTextureTest.cpp
index 5cf1f0a449..346c737992 100644
--- a/tests/FloatingPointTextureTest.cpp
+++ b/tests/FloatingPointTextureTest.cpp
@@ -90,7 +90,7 @@ DEF_GPUTEST(HalfFloatTextureTest, reporter, factory) {
controlPixelData[i + 2] = SK_HalfEpsilon;
controlPixelData[i + 3] = 0x6800; // 2^11
}
-
+
for (int origin = 0; origin < 2; ++origin) {
int glCtxTypeCnt = 1;
glCtxTypeCnt = GrContextFactory::kGLContextTypeCnt;
@@ -102,7 +102,7 @@ DEF_GPUTEST(HalfFloatTextureTest, reporter, factory) {
desc.fConfig = kAlpha_half_GrPixelConfig;
desc.fOrigin = 0 == origin ?
kTopLeft_GrSurfaceOrigin : kBottomLeft_GrSurfaceOrigin;
-
+
GrContext* context = NULL;
GrContextFactory::GLContextType type =
static_cast<GrContextFactory::GLContextType>(glCtxType);
@@ -113,16 +113,16 @@ DEF_GPUTEST(HalfFloatTextureTest, reporter, factory) {
if (NULL == context){
continue;
}
-
+
SkAutoTUnref<GrTexture> fpTexture(context->createUncachedTexture(desc,
NULL,
0));
-
+
// 16-bit floating point textures are NOT supported everywhere
if (NULL == fpTexture) {
continue;
}
-
+
// write square
fpTexture->writePixels(0, 0, DEV_W, DEV_H, desc.fConfig, controlPixelData, 0);
fpTexture->readPixels(0, 0, DEV_W, DEV_H, desc.fConfig, readBuffer, 0);