aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/mtl/GrMtlUtil.mm
diff options
context:
space:
mode:
authorGravatar Greg Daniel <egdaniel@google.com>2017-07-31 16:32:36 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-31 20:53:18 +0000
commit0576a45c7570686a1057ad07d8abf21a3bad403f (patch)
tree716ec46b7a0553d22244e0fc998f08b31e506bf4 /src/gpu/mtl/GrMtlUtil.mm
parent96271cd1805d55b1a985652eebd0399ebe415283 (diff)
Add GrMtlUtil class
Currently just adding support functions to go back and forth between GrPixelConfigs and MTLPixelFormats. Bug: skia: Change-Id: I01a7d6877ebed87b87090ac2b920fee45dc0e856 Reviewed-on: https://skia-review.googlesource.com/29080 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src/gpu/mtl/GrMtlUtil.mm')
-rw-r--r--src/gpu/mtl/GrMtlUtil.mm103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/gpu/mtl/GrMtlUtil.mm b/src/gpu/mtl/GrMtlUtil.mm
new file mode 100644
index 0000000000..9c6e3f0eca
--- /dev/null
+++ b/src/gpu/mtl/GrMtlUtil.mm
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "GrMtlUtil.h"
+
+bool GrPixelConfigToMTLFormat(GrPixelConfig config, MTLPixelFormat* format) {
+ MTLPixelFormat dontCare;
+ if (!format) {
+ format = &dontCare;
+ }
+
+ switch (config) {
+ case kUnknown_GrPixelConfig:
+ return false;
+ case kRGBA_8888_GrPixelConfig:
+ *format = MTLPixelFormatRGBA8Unorm;
+ return true;
+ case kBGRA_8888_GrPixelConfig:
+ *format = MTLPixelFormatBGRA8Unorm;
+ return true;
+ case kSRGBA_8888_GrPixelConfig:
+ *format = MTLPixelFormatRGBA8Unorm_sRGB;
+ return true;
+ case kSBGRA_8888_GrPixelConfig:
+ *format = MTLPixelFormatBGRA8Unorm_sRGB;
+ return true;
+ case kRGBA_8888_sint_GrPixelConfig:
+ *format = MTLPixelFormatRGBA8Sint;
+ return true;
+ case kRGB_565_GrPixelConfig:
+#ifdef SK_BUILD_FOR_IOS
+ *format = MTLPixelFormatR5G6B5Unorm;
+ return true;
+#else
+ return false;
+#endif
+ case kRGBA_4444_GrPixelConfig:
+#ifdef SK_BUILD_FOR_IOS
+ *format = MTLPixelFormatABGR4Unorm;
+ return true;
+#else
+ return false;
+#endif
+ case kAlpha_8_GrPixelConfig:
+ *format = MTLPixelFormatR8Unorm;
+ return true;
+ case kGray_8_GrPixelConfig:
+ *format = MTLPixelFormatR8Unorm;
+ return true;
+ case kRGBA_float_GrPixelConfig:
+ *format = MTLPixelFormatRGBA32Float;
+ return true;
+ case kRG_float_GrPixelConfig:
+ *format = MTLPixelFormatRG32Float;
+ return true;
+ case kRGBA_half_GrPixelConfig:
+ *format = MTLPixelFormatRGBA16Float;
+ return true;
+ case kAlpha_half_GrPixelConfig:
+ *format = MTLPixelFormatR16Float;
+ return true;
+ }
+ SkFAIL("Unexpected config");
+ return false;
+}
+
+GrPixelConfig GrMTLFormatToPixelConfig(MTLPixelFormat format) {
+ switch (format) {
+ case MTLPixelFormatRGBA8Unorm:
+ return kRGBA_8888_GrPixelConfig;
+ case MTLPixelFormatBGRA8Unorm:
+ return kBGRA_8888_GrPixelConfig;
+ case MTLPixelFormatRGBA8Unorm_sRGB:
+ return kSRGBA_8888_GrPixelConfig;
+ case MTLPixelFormatBGRA8Unorm_sRGB:
+ return kSBGRA_8888_GrPixelConfig;
+ case MTLPixelFormatRGBA8Sint:
+ return kRGBA_8888_sint_GrPixelConfig;
+#ifdef SK_BUILD_FOR_IOS
+ case MTLPixelFormatB5G6R5Unorm:
+ return kRGB_565_GrPixelConfig;
+ case MTLPixelFormatABGR4Unorm:
+ return kRGBA_4444_GrPixelConfig;
+#endif
+ case MTLPixelFormatR8Unorm:
+ // We currently set this to be Alpha_8 and have no way to go to Gray_8
+ return kAlpha_8_GrPixelConfig;
+ case MTLPixelFormatRGBA32Float:
+ return kRGBA_float_GrPixelConfig;
+ case MTLPixelFormatRG32Float:
+ return kRG_float_GrPixelConfig;
+ case MTLPixelFormatRGBA16Float:
+ return kRGBA_half_GrPixelConfig;
+ case MTLPixelFormatR16Float:
+ return kAlpha_half_GrPixelConfig;
+ default:
+ return kUnknown_GrPixelConfig;
+ }
+}