aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/mtl
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/mtl')
-rw-r--r--src/gpu/mtl/GrMtlUtil.h26
-rw-r--r--src/gpu/mtl/GrMtlUtil.mm103
2 files changed, 129 insertions, 0 deletions
diff --git a/src/gpu/mtl/GrMtlUtil.h b/src/gpu/mtl/GrMtlUtil.h
new file mode 100644
index 0000000000..78af7bf89f
--- /dev/null
+++ b/src/gpu/mtl/GrMtlUtil.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrMtlUtil_DEFINED
+#define GrMtlUtil_DEFINED
+
+#include "GrTypes.h"
+
+#import <Metal/Metal.h>
+
+/**
+ * Returns the Metal texture format for the given GrPixelConfig
+ */
+bool GrPixelConfigToMTLFormat(GrPixelConfig config, MTLPixelFormat* format);
+
+/**
+* Returns the GrPixelConfig for the given Metal texture format
+*/
+GrPixelConfig GrMTLFormatToPixelConfig(MTLPixelFormat format);
+
+
+#endif
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;
+ }
+}