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