Hash :
078da78f
Author :
Date :
2022-03-17T13:06:58
Vulkan: Support GL_EXT_EGL_image_storage extension This extension provides a mechanism for creating texture objects that are both EGLImage targets and immutable and removes the possibility of implicit orphaning. EGL images created from external sources now support types other than 2D. Tests covering the new feature were added to ImageTest.cpp. Bug: angleproject:6346 Change-Id: Id3e328f352deb1af47062be232384229a8b1c341 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3530489 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
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
//
// Copyright 2015 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.
//
// ImageImpl.h: Defines the rx::ImageImpl class representing the EGLimage object.
#ifndef LIBANGLE_RENDERER_IMAGEIMPL_H_
#define LIBANGLE_RENDERER_IMAGEIMPL_H_
#include "common/angleutils.h"
#include "libANGLE/Error.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/renderer/FramebufferAttachmentObjectImpl.h"
namespace gl
{
class Context;
} // namespace gl
namespace egl
{
class Display;
class ImageSibling;
struct ImageState;
} // namespace egl
namespace rx
{
class ExternalImageSiblingImpl : public FramebufferAttachmentObjectImpl
{
public:
~ExternalImageSiblingImpl() override {}
virtual egl::Error initialize(const egl::Display *display) = 0;
virtual void onDestroy(const egl::Display *display) {}
virtual gl::Format getFormat() const = 0;
virtual bool isRenderable(const gl::Context *context) const = 0;
virtual bool isTexturable(const gl::Context *context) const = 0;
virtual bool isYUV() const = 0;
virtual bool isCubeMap() const;
virtual bool hasProtectedContent() const = 0;
virtual gl::Extents getSize() const = 0;
virtual size_t getSamples() const = 0;
virtual uint32_t getLevelCount() const;
};
class ImageImpl : angle::NonCopyable
{
public:
ImageImpl(const egl::ImageState &state) : mState(state) {}
virtual ~ImageImpl() {}
virtual void onDestroy(const egl::Display *display) {}
virtual egl::Error initialize(const egl::Display *display) = 0;
virtual angle::Result orphan(const gl::Context *context, egl::ImageSibling *sibling) = 0;
virtual egl::Error exportVkImage(void *vkImage, void *vkImageCreateInfo);
protected:
const egl::ImageState &mState;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_IMAGEIMPL_H_