129fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
229fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens//
329fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens// Licensed under the Apache License, Version 2.0 (the "License");
429fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens// you may not use this file except in compliance with the License.
529fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens// You may obtain a copy of the License at
629fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens//
729fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens//    http://www.apache.org/licenses/LICENSE-2.0
829fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens//
929fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens// Unless required by applicable law or agreed to in writing, software
1029fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens// distributed under the License is distributed on an "AS IS" BASIS,
1129fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1229fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens// See the License for the specific language governing permissions and
1329fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens// limitations under the License.
1429fa07fddcd1a3da060d04651e28dccc42b53904Nicolas Capens
158b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman#ifndef sw_FrameBufferAndroid_hpp
168b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman#define sw_FrameBufferAndroid_hpp
178b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman
188b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman#include "Main/FrameBuffer.hpp"
198b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman#include "Common/Debug.hpp"
208b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman
218b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman#include <hardware/gralloc.h>
228b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman#include <system/window.h>
238b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman
248b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartmannamespace sw
258b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman{
26d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	class FrameBufferAndroid : public FrameBuffer
27d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	{
28d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	public:
29d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens		FrameBufferAndroid(ANativeWindow* window, int width, int height);
308b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman
31d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens		~FrameBufferAndroid();
328b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman
33d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens		void flip(void *source, Format sourceFormat, size_t sourceStride) override {blit(source, 0, 0, sourceFormat, sourceStride);};
34e9ee9f23e1fc604ea57408e0b4653c91135735bdNicolas Capens		void blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride) override;
35e9ee9f23e1fc604ea57408e0b4653c91135735bdNicolas Capens
36e9ee9f23e1fc604ea57408e0b4653c91135735bdNicolas Capens		void *lock() override;
374b94f5d52629feaa229b97cca7b25deb4d5d7f03Nicolas Capens		void unlock() override;
388b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman
39d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens		bool setSwapRectangle(int l, int t, int w, int h);
408b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman
41d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	private:
42d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens		ANativeWindow* nativeWindow;
43d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens		ANativeWindowBuffer* buffer;
44d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens		gralloc_module_t const* gralloc;
45d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	};
468b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman}
478b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman
488b5b5129f617dd9ba11facce28a7421ffbf1d8eaGreg Hartman#endif   // sw_FrameBufferAndroid
49