Hash :
c1214ec2
Author :
Date :
2025-01-22T14:22:56
Vulkan: Rename Context to ErrorContext In preparation for adding another Context (derived by GL and CL contexts), which includes logic that pertains to command recording (such as barrier tracking). Bug: angleproject:390443243 Change-Id: Idf495b62e63fb9aa901a2f16447fdaf3c2acd90b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6191248 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
//
// 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.
//
// DisplayVk.h:
// Defines the class interface for DisplayVk, implementing DisplayImpl.
//
#ifndef LIBANGLE_RENDERER_VULKAN_DISPLAYVK_H_
#define LIBANGLE_RENDERER_VULKAN_DISPLAYVK_H_
#include "common/MemoryBuffer.h"
#include "libANGLE/renderer/DisplayImpl.h"
#include "libANGLE/renderer/vulkan/vk_cache_utils.h"
#include "libANGLE/renderer/vulkan/vk_utils.h"
namespace rx
{
class DisplayVk : public DisplayImpl, public vk::ErrorContext, public vk::GlobalOps
{
public:
DisplayVk(const egl::DisplayState &state);
~DisplayVk() override;
egl::Error initialize(egl::Display *display) override;
void terminate() override;
egl::Error makeCurrent(egl::Display *display,
egl::Surface *drawSurface,
egl::Surface *readSurface,
gl::Context *context) override;
bool testDeviceLost() override;
egl::Error restoreLostDevice(const egl::Display *display) override;
std::string getRendererDescription() override;
std::string getVendorString() override;
std::string getVersionString(bool includeFullVersion) override;
DeviceImpl *createDevice() override;
egl::Error waitClient(const gl::Context *context) override;
egl::Error waitNative(const gl::Context *context, EGLint engine) override;
SurfaceImpl *createWindowSurface(const egl::SurfaceState &state,
EGLNativeWindowType window,
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state,
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
EGLenum buftype,
EGLClientBuffer clientBuffer,
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) override;
ImageImpl *createImage(const egl::ImageState &state,
const gl::Context *context,
EGLenum target,
const egl::AttributeMap &attribs) override;
ContextImpl *createContext(const gl::State &state,
gl::ErrorSet *errorSet,
const egl::Config *configuration,
const gl::Context *shareContext,
const egl::AttributeMap &attribs) override;
StreamProducerImpl *createStreamProducerD3DTexture(egl::Stream::ConsumerType consumerType,
const egl::AttributeMap &attribs) override;
EGLSyncImpl *createSync() override;
gl::Version getMaxSupportedESVersion() const override;
gl::Version getMaxConformantESVersion() const override;
egl::Error validateImageClientBuffer(const gl::Context *context,
EGLenum target,
EGLClientBuffer clientBuffer,
const egl::AttributeMap &attribs) const override;
ExternalImageSiblingImpl *createExternalImageSibling(const gl::Context *context,
EGLenum target,
EGLClientBuffer buffer,
const egl::AttributeMap &attribs) override;
virtual const char *getWSIExtension() const = 0;
virtual const char *getWSILayer() const;
// Determine if a config with given formats and sample counts is supported. This callback may
// modify the config to add or remove platform specific attributes such as nativeVisualID. If
// the config is not supported by the window system, it removes the EGL_WINDOW_BIT from
// surfaceType, which would still allow the config to be used for pbuffers.
virtual void checkConfigSupport(egl::Config *config) = 0;
angle::ScratchBuffer *getScratchBuffer() { return &mScratchBuffer; }
void handleError(VkResult result,
const char *file,
const char *function,
unsigned int line) override;
void initializeFrontendFeatures(angle::FrontendFeatures *features) const override;
void populateFeatureList(angle::FeatureList *features) override;
ShareGroupImpl *createShareGroup(const egl::ShareGroupState &state) override;
bool isConfigFormatSupported(VkFormat format) const;
bool isSurfaceFormatColorspacePairSupported(VkSurfaceKHR surface,
VkFormat format,
VkColorSpaceKHR colorspace) const;
void lockVulkanQueue() override;
void unlockVulkanQueue() override;
egl::Error querySupportedCompressionRates(const egl::Config *configuration,
const egl::AttributeMap &attributes,
EGLint *rates,
EGLint rate_size,
EGLint *num_rates) const override;
protected:
void generateExtensions(egl::DisplayExtensions *outExtensions) const override;
private:
virtual SurfaceImpl *createWindowSurfaceVk(const egl::SurfaceState &state,
EGLNativeWindowType window) = 0;
void generateCaps(egl::Caps *outCaps) const override;
virtual angle::Result waitNativeImpl();
bool isColorspaceSupported(VkColorSpaceKHR colorspace) const;
void initSupportedSurfaceFormatColorspaces();
// vk::GlobalOps
void putBlob(const angle::BlobCacheKey &key, const angle::MemoryBuffer &value) override;
bool getBlob(const angle::BlobCacheKey &key, angle::BlobCacheValue *valueOut) override;
std::shared_ptr<angle::WaitableEvent> postMultiThreadWorkerTask(
const std::shared_ptr<angle::Closure> &task) override;
void notifyDeviceLost() override;
angle::ScratchBuffer mScratchBuffer;
// Map of supported colorspace and associated surface format set.
angle::HashMap<VkColorSpaceKHR, std::unordered_set<VkFormat>> mSupportedColorspaceFormatsMap;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_VULKAN_DISPLAYVK_H_