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
//
// Copyright 2016 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.
//
// ImageVk.h:
// Defines the class interface for ImageVk, implementing ImageImpl.
//
#ifndef LIBANGLE_RENDERER_VULKAN_IMAGEVK_H_
#define LIBANGLE_RENDERER_VULKAN_IMAGEVK_H_
#include "libANGLE/renderer/ImageImpl.h"
#include "libANGLE/renderer/vulkan/vk_helpers.h"
namespace rx
{
class ExternalImageSiblingVk : public ExternalImageSiblingImpl
{
public:
ExternalImageSiblingVk() {}
~ExternalImageSiblingVk() override {}
virtual vk::ImageHelper *getImage() const = 0;
virtual void release(RendererVk *renderer) = 0;
};
class ImageVk : public ImageImpl
{
public:
ImageVk(const egl::ImageState &state, const gl::Context *context);
~ImageVk() override;
void onDestroy(const egl::Display *display) override;
egl::Error initialize(const egl::Display *display) override;
angle::Result orphan(const gl::Context *context, egl::ImageSibling *sibling) override;
egl::Error exportVkImage(void *vkImage, void *vkImageCreateInfo) override;
vk::ImageHelper *getImage() const { return mImage; }
gl::TextureType getImageTextureType() const;
gl::LevelIndex getImageLevel() const;
uint32_t getImageLayer() const;
private:
bool mOwnsImage;
vk::ImageHelper *mImage;
std::vector<vk::Shared<vk::Fence>> mImageLastUseFences;
const gl::Context *mContext;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_VULKAN_IMAGEVK_H_