Index: src/gpu/GrGpu.cpp |
diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp |
index efd687d6a858923db669e28984f69c5e3e51ef49..4e0464a4ce6cb74f0e2c734b5fef8b1f3685e391 100644 |
--- a/src/gpu/GrGpu.cpp |
+++ b/src/gpu/GrGpu.cpp |
@@ -98,7 +98,7 @@ |
* @param isRT Indicates if the texture can be a render target. |
*/ |
static bool check_texture_creation_params(const GrCaps& caps, const GrSurfaceDesc& desc, |
- bool* isRT, const SkTArray<GrMipLevel>& texels) { |
+ bool* isRT) { |
if (!caps.isConfigTexturable(desc.fConfig)) { |
return false; |
} |
@@ -124,12 +124,6 @@ |
return false; |
} |
} |
- |
- for (int i = 0; i < texels.count(); ++i) { |
- if (!texels[i].fPixels) { |
- return false; |
- } |
- } |
return true; |
} |
@@ -139,7 +133,7 @@ |
const GrCaps* caps = this->caps(); |
bool isRT = false; |
- bool textureCreationParamsValid = check_texture_creation_params(*caps, desc, &isRT, texels); |
+ bool textureCreationParamsValid = check_texture_creation_params(*caps, desc, &isRT); |
if (!textureCreationParamsValid) { |
return nullptr; |
} |
@@ -183,6 +177,17 @@ |
} |
} |
return tex; |
+} |
+ |
+GrTexture* GrGpu::createTexture(const GrSurfaceDesc& desc, SkBudgeted budgeted, |
+ const void* srcData, size_t rowBytes) { |
+ GrMipLevel level; |
+ level.fPixels = srcData; |
+ level.fRowBytes = rowBytes; |
+ SkSTArray<1, GrMipLevel> levels; |
+ levels.push_back(level); |
+ |
+ return this->createTexture(desc, budgeted, levels); |
} |
GrTexture* GrGpu::wrapBackendTexture(const GrBackendTextureDesc& desc, GrWrapOwnership ownership) { |
@@ -386,10 +391,15 @@ |
if (!surface) { |
return false; |
} |
+ bool validMipDataFound = false; |
for (int currentMipLevel = 0; currentMipLevel < texels.count(); currentMipLevel++) { |
- if (!texels[currentMipLevel].fPixels ) { |
- return false; |
- } |
+ if (texels[currentMipLevel].fPixels != nullptr) { |
+ validMipDataFound = true; |
+ break; |
+ } |
+ } |
+ if (!validMipDataFound) { |
+ return false; |
} |
this->handleDirtyContext(); |