Hash :
fc4bd898
Author :
Date :
2020-08-03T16:29:06
Vulkan: Support ANGLE_external_objects_flags With this extension, it is possible to import Vulkan images into ANGLE (similar to EXT_external_objects) while specifying the Vulkan create and usage flags used to create that image. This can be used by the application to drop usage flags it does not need to improve performance, or add create flags as it requires. Bug: angleproject:4912 Bug: fuchsia:52759 Change-Id: Ia568973b19670999dd0e69f6ac5548e8ef0c3eec Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2335020 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Michael Spang <spang@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
// Copyright 2019 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.
//
// MemoryObjectVk.h: Defines the class interface for MemoryObjectVk,
// implementing MemoryObjectImpl.
#ifndef LIBANGLE_RENDERER_VULKAN_MEMORYOBJECTVK_H_
#define LIBANGLE_RENDERER_VULKAN_MEMORYOBJECTVK_H_
#include "libANGLE/renderer/MemoryObjectImpl.h"
#include "libANGLE/renderer/vulkan/vk_helpers.h"
#include "libANGLE/renderer/vulkan/vk_wrapper.h"
namespace rx
{
class MemoryObjectVk : public MemoryObjectImpl
{
public:
MemoryObjectVk();
~MemoryObjectVk() override;
void onDestroy(const gl::Context *context) override;
angle::Result setDedicatedMemory(const gl::Context *context, bool dedicatedMemory) override;
angle::Result importFd(gl::Context *context,
GLuint64 size,
gl::HandleType handleType,
GLint fd) override;
angle::Result importZirconHandle(gl::Context *context,
GLuint64 size,
gl::HandleType handleType,
GLuint handle) override;
angle::Result createImage(ContextVk *context,
gl::TextureType type,
size_t levels,
GLenum internalFormat,
const gl::Extents &size,
GLuint64 offset,
vk::ImageHelper *image,
GLbitfield createFlags,
GLbitfield usageFlags);
private:
static constexpr int kInvalidFd = -1;
angle::Result importOpaqueFd(ContextVk *contextVk, GLuint64 size, GLint fd);
angle::Result importZirconVmo(ContextVk *contextVk, GLuint64 size, GLuint handle);
// Imported memory object was a dedicated allocation.
bool mDedicatedMemory = false;
GLuint64 mSize = 0;
gl::HandleType mHandleType = gl::HandleType::InvalidEnum;
int mFd = kInvalidFd;
zx_handle_t mZirconHandle = ZX_HANDLE_INVALID;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_VULKAN_MEMORYOBJECTVK_H_