diff --git a/src/Main/BUILD.gn b/src/Main/BUILD.gn
index dd85696..1f6d69c 100644
--- a/src/Main/BUILD.gn
+++ b/src/Main/BUILD.gn
@@ -12,6 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import("//ui/ozone/ozone.gni")
 import("../swiftshader.gni")
 
 # Need a separate config to ensure the warnings are added to the end.
@@ -46,7 +47,9 @@
     "SwiftConfig.cpp",
   ]
 
-  if (is_linux) {
+  if (use_ozone) {
+    sources += [ "FrameBufferOzone.cpp" ]
+  } else if (is_linux) {
     sources += [
       "FrameBufferX11.cpp",
       "libX11.cpp",
diff --git a/src/Main/FrameBufferOzone.cpp b/src/Main/FrameBufferOzone.cpp
new file mode 100644
index 0000000..a9de407
--- /dev/null
+++ b/src/Main/FrameBufferOzone.cpp
@@ -0,0 +1,54 @@
+// Copyright 2017 The SwiftShader Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "FrameBufferOzone.hpp"
+
+namespace sw
+{
+	FrameBufferOzone::FrameBufferOzone(intptr_t display, intptr_t window, int width, int height) : FrameBuffer(width, height, false, false)
+	{
+		buffer = sw::Surface::create(width, height, 1, destFormat, nullptr,
+		                             sw::Surface::pitchB(width, destFormat, true),
+		                             sw::Surface::sliceB(width, height, destFormat, true));
+	}
+
+	FrameBufferOzone::~FrameBufferOzone()
+	{
+		delete buffer;
+	}
+
+	void *FrameBufferOzone::lock()
+	{
+		locked = buffer->lockInternal(0, 0, 0, sw::LOCK_READWRITE, sw::PUBLIC);
+
+		return locked;
+	}
+
+	void FrameBufferOzone::unlock()
+	{
+		buffer->unlockInternal();
+
+		locked = nullptr;
+	}
+
+	void FrameBufferOzone::blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride)
+	{
+		copy(source, sourceFormat, sourceStride);
+	}
+}
+
+NO_SANITIZE_FUNCTION sw::FrameBuffer *createFrameBuffer(void* display, intptr_t window, int width, int height)
+{
+	return new sw::FrameBufferOzone((intptr_t)display, window, width, height);
+}
diff --git a/src/Main/FrameBufferOzone.hpp b/src/Main/FrameBufferOzone.hpp
new file mode 100644
index 0000000..6843926
--- /dev/null
+++ b/src/Main/FrameBufferOzone.hpp
@@ -0,0 +1,40 @@
+// Copyright 2017 The SwiftShader Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef sw_FrameBufferOzone_hpp
+#define sw_FrameBufferOzone_hpp
+
+#include "Main/FrameBuffer.hpp"
+
+namespace sw
+{
+	class FrameBufferOzone : public FrameBuffer
+	{
+	public:
+		FrameBufferOzone(intptr_t display, intptr_t window, int width, int height);
+
+		~FrameBufferOzone() override;
+
+		void flip(void *source, Format sourceFormat, size_t sourceStride) override {blit(source, 0, 0, sourceFormat, sourceStride);};
+		void blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride) override;
+
+		void *lock() override;
+		void unlock() override;
+
+	private:
+		sw::Surface* buffer;
+	};
+}
+
+#endif   // sw_FrameBufferOzone_hpp
