blob: cfbcb0ea302923829d3ee4f4e6ea269d26db9027 [file] [log] [blame]
/*
* Copyright 2020 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrBackendUtils_DEFINED
#define GrBackendUtils_DEFINED
#include "include/core/SkImage.h"
#include "include/gpu/GrBackendSurface.h"
#ifdef SK_METAL
#include "src/gpu/mtl/GrMtlCppUtil.h"
#endif
static SkImage::CompressionType GrBackendFormatToCompressionType(const GrBackendFormat& format) {
switch (format.backend()) {
case GrBackendApi::kOpenGL: {
#ifdef SK_GL
GrGLFormat glFormat = format.asGLFormat();
switch (glFormat) {
case GrGLFormat::kCOMPRESSED_ETC1_RGB8:
case GrGLFormat::kCOMPRESSED_RGB8_ETC2:
return SkImage::CompressionType::kETC2_RGB8_UNORM;
case GrGLFormat::kCOMPRESSED_RGB8_BC1:
return SkImage::CompressionType::kBC1_RGB8_UNORM;
case GrGLFormat::kCOMPRESSED_RGBA8_BC1:
return SkImage::CompressionType::kBC1_RGBA8_UNORM;
default:
return SkImage::CompressionType::kNone;
}
#endif
break;
}
case GrBackendApi::kVulkan: {
#ifdef SK_VULKAN
VkFormat vkFormat;
SkAssertResult(format.asVkFormat(&vkFormat));
switch (vkFormat) {
case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
return SkImage::CompressionType::kETC2_RGB8_UNORM;
case VK_FORMAT_BC1_RGB_UNORM_BLOCK:
return SkImage::CompressionType::kBC1_RGB8_UNORM;
case VK_FORMAT_BC1_RGBA_UNORM_BLOCK:
return SkImage::CompressionType::kBC1_RGBA8_UNORM;
default:
return SkImage::CompressionType::kNone;
}
#endif
break;
}
case GrBackendApi::kMetal: {
#ifdef SK_METAL
return GrMtlBackendFormatToCompressionType(format);
#endif
break;
}
case GrBackendApi::kDirect3D: {
#ifdef SK_DIRECT3D
DXGI_FORMAT dxgiFormat;
SkAssertResult(format.asDxgiFormat(&dxgiFormat));
switch (dxgiFormat) {
case DXGI_FORMAT_BC1_UNORM:
return SkImage::CompressionType::kBC1_RGBA8_UNORM;
default:
return SkImage::CompressionType::kNone;
}
#endif
break;
}
case GrBackendApi::kDawn: {
return SkImage::CompressionType::kNone;
}
case GrBackendApi::kMock: {
return format.asMockCompressionType();
}
}
return SkImage::CompressionType::kNone;
}
#endif