Hash :
5adee916
Author :
Date :
2022-01-11T13:09:55
Wrap some global vulkan methods which depend on env variables ANGLE scoped sets some envion variables during initialization. Those env variables will change some vulkan global methods behavior. So to make sure those global methods have same behavior, this CL wraps those global methods, and sets those envion variables before call those vulkan methods. Bug: chromium:1264439 Change-Id: Ie4e29884fcf5b67f4e53ddd3c90a9ade7b226a1f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3379209 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Peng Huang <penghuang@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
//
// 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.
//
// DeviceVk.h:
// Defines the class interface for DeviceVk, implementing DeviceImpl.
//
#ifndef LIBANGLE_RENDERER_VULKAN_DEVICEVK_H_
#define LIBANGLE_RENDERER_VULKAN_DEVICEVK_H_
#include "libANGLE/renderer/DeviceImpl.h"
#include "common/vulkan/vk_headers.h"
namespace rx
{
class RendererVk;
class DeviceVk : public DeviceImpl
{
public:
DeviceVk();
~DeviceVk() override;
egl::Error initialize() override;
egl::Error getAttribute(const egl::Display *display,
EGLint attribute,
void **outValue) override;
EGLint getType() override;
void generateExtensions(egl::DeviceExtensions *outExtensions) const override;
RendererVk *getRenderer() const { return mRenderer; }
private:
// Wrappers for some global vulkan methods which need to read env variables.
// The wrappers will set those env variables before calling those global methods.
static VKAPI_ATTR VkResult VKAPI_CALL
WrappedCreateInstance(const VkInstanceCreateInfo *pCreateInfo,
const VkAllocationCallbacks *pAllocator,
VkInstance *pInstance);
static VKAPI_ATTR VkResult VKAPI_CALL
WrappedEnumerateInstanceExtensionProperties(const char *pLayerName,
uint32_t *pPropertyCount,
VkExtensionProperties *pProperties);
static VKAPI_ATTR VkResult VKAPI_CALL
WrappedEnumerateInstanceLayerProperties(uint32_t *pPropertyCount,
VkLayerProperties *pProperties);
static VKAPI_ATTR VkResult VKAPI_CALL WrappedEnumerateInstanceVersion(uint32_t *pApiVersion);
static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL WrappedGetInstanceProcAddr(VkInstance instance,
const char *pName);
RendererVk *mRenderer = nullptr;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_VULKAN_DEVICEVK_H_