OSDN Git Service

Skeleton for Ozone FrameBuffer implementation
authorAlexis Hetu <sugoi@google.com>
Tue, 8 Aug 2017 15:31:11 +0000 (11:31 -0400)
committerAlexis Hétu <sugoi@google.com>
Tue, 8 Aug 2017 20:36:42 +0000 (20:36 +0000)
This cl simply makes the code compile on Ozone. It does not implement
the FrameBufferOzone class, but provides a skeleton for it, which can
be implemented by people on the ChromeOS team.

Change-Id: Ib77e20b00e8208d992c80f47b5ba55e00254c812
Reviewed-on: https://swiftshader-review.googlesource.com/11348
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
src/Main/BUILD.gn
src/Main/FrameBufferOzone.cpp [new file with mode: 0644]
src/Main/FrameBufferOzone.hpp [new file with mode: 0644]

index dd85696..1f6d69c 100644 (file)
@@ -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 @@ swiftshader_source_set("swiftshader_main") {
     "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 (file)
index 0000000..a9de407
--- /dev/null
@@ -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 (file)
index 0000000..6843926
--- /dev/null
@@ -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