Skeleton for Ozone FrameBuffer implementation
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>
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