#ifndef GPU_COMMAND_BUFFER_CLIENT_SHARED_IMAGE_POOL_H_ #define GPU_COMMAND_BUFFER_CLIENT_SHARED_IMAGE_POOL_H_ // Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include <memory> #include <optional> #include <vector> #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "components/viz/common/resources/shared_image_format.h" #include "gpu/command_buffer/client/client_shared_image.h" #include "gpu/command_buffer/client/shared_image_interface.h" #include "gpu/command_buffer/common/shared_image_usage.h" #include "gpu/command_buffer/common/sync_token.h" #include "gpu/gpu_export.h" #include "ui/gfx/geometry/size.h" namespace gpu { class SharedImageInterface; // Structure holding the necessary information to create shared images and // describe its characteristics in the SharedImagePool. It will be constant for // all the shared images in the pool. struct GPU_EXPORT ImageInfo { … }; // A reference-counted image class that wraps a GPU ClientSharedImage. Clients // can optionally extend this class to add its own metadata and logic in // addition to the shared image it wraps. This allow clients to create its own // custom pool of images of ClientImage type and are not limited to creating // pool of only ClientSharedImage. See unittests for example. class GPU_EXPORT ClientImage : public base::RefCounted<ClientImage> { … }; // This class is designed to handle bulk of functionality of the image pool. // This also allows to have a template subclass with minimum functionality. // Since all definitions of templated subclass with be in this header file, we // want it to be as thin as possible as it will also code generate for all // possible params and this will increase binary size. Clients will not use this // class directly. class GPU_EXPORT SharedImagePoolBase { … }; // Templated class for managing a pool of ClientImageType objects which wraps // shared images. ClientImageType should be a subclass of ClientImage if // extended functionality is needed. By default, ClientImageType is ClientImage // which will result in pool of ClientSharedImage if a client does not need // additional functionality. // Clients will use this class and its apis for desired functionality. template <typename ClientImageType = ClientImage> class GPU_EXPORT SharedImagePool : public SharedImagePoolBase { … }; } // namespace gpu #endif // GPU_COMMAND_BUFFER_CLIENT_SHARED_IMAGE_POOL_H_