Hash :
229fc83d
Author :
Date :
2019-01-21T18:09:15
Vulkan: Port renderer to Fuchsia (reland) Add DisplayVk and WindowSurfaceVk subclasses for Fuchsia to the vulkan renderer, as well as an implementation of OSWindow that renders fullscreen for the test suite. Disallow use of the vulkan loader from third_party as Fuchsia uses a fork of the loader and has not sent those changes upstream yet. Add a small wayland-inspired library libfuchsia-egl to provide a type "struct fuchsia_egl_window" to use as EGLNativeWindowType. This type combines a zx_handle_t to an image pipe channel and a surface size. Image pipes can only be used once to create a VkSurfaceKHR. This means we have to recreate the pipe in tests that call eglCreateWindowSurface more than once with a single OSWindow, or the second call will fail. Add a resetNativeWindow() method to accomplish this. Reland disabling -Wextra-semi. BUG=angleproject:2475 TEST=angle_end2end_tests on Fuchsia Change-Id: Ie91715bcd760c6c04d4b8a02a91daa71e32ee30c Reviewed-on: https://chromium-review.googlesource.com/c/1467603 Commit-Queue: Michael Spang <spang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
//
// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// OSWindow:
// Operating system window integration base class.
#ifndef UTIL_OSWINDOW_H_
#define UTIL_OSWINDOW_H_
#include <stdint.h>
#include <list>
#include <string>
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include "util/Event.h"
#include "util/util_export.h"
class ANGLE_UTIL_EXPORT OSWindow
{
public:
static OSWindow *New();
static void Delete(OSWindow **osWindow);
virtual bool initialize(const std::string &name, size_t width, size_t height) = 0;
virtual void destroy() = 0;
int getX() const;
int getY() const;
int getWidth() const;
int getHeight() const;
// Takes a screenshot of the window, returning the result as a mWidth * mHeight * 4
// normalized unsigned byte BGRA array. Note that it will be used to test the window
// manager's behavior so it needs to take an actual screenshot of the screen and not
// just grab the pixels of the window. Returns if it was successful.
virtual bool takeScreenshot(uint8_t *pixelData);
// Re-initializes the native window. This is used on platforms which do not
// have a reusable EGLNativeWindowType in order to recreate it, and is
// needed by the test suite because it re-uses the same OSWindow for
// multiple EGLSurfaces.
virtual void resetNativeWindow() = 0;
virtual EGLNativeWindowType getNativeWindow() const = 0;
virtual EGLNativeDisplayType getNativeDisplay() const = 0;
virtual void messageLoop() = 0;
bool popEvent(Event *event);
virtual void pushEvent(Event event);
virtual void setMousePosition(int x, int y) = 0;
virtual bool setPosition(int x, int y) = 0;
virtual bool resize(int width, int height) = 0;
virtual void setVisible(bool isVisible) = 0;
virtual void signalTestEvent() = 0;
// Pops events look for the test event
bool didTestEventFire();
protected:
OSWindow();
virtual ~OSWindow();
friend ANGLE_UTIL_EXPORT void FreeOSWindow(OSWindow *window);
int mX;
int mY;
int mWidth;
int mHeight;
std::list<Event> mEvents;
};
#endif // UTIL_OSWINDOW_H_