summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/ResourceManager11.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/ResourceManager11.h')
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/ResourceManager11.h366
1 files changed, 0 insertions, 366 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/ResourceManager11.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/ResourceManager11.h
deleted file mode 100644
index 0bdde9f8b6..0000000000
--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/ResourceManager11.h
+++ /dev/null
@@ -1,366 +0,0 @@
-//
-// Copyright 2017 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.
-//
-// ResourceManager11:
-// Centralized point of allocation for all D3D11 Resources.
-
-#ifndef LIBANGLE_RENDERER_D3D_D3D11_RESOURCEFACTORY11_H_
-#define LIBANGLE_RENDERER_D3D_D3D11_RESOURCEFACTORY11_H_
-
-#include <array>
-#include <memory>
-
-#include "common/MemoryBuffer.h"
-#include "common/angleutils.h"
-#include "common/debug.h"
-#include "libANGLE/Error.h"
-#include "libANGLE/renderer/renderer_utils.h"
-
-namespace rx
-{
-// These two methods are declared here to prevent circular includes.
-namespace d3d11
-{
-HRESULT SetDebugName(ID3D11DeviceChild *resource, const char *name);
-
-template <typename T>
-HRESULT SetDebugName(angle::ComPtr<T> &resource, const char *name)
-{
- return SetDebugName(resource.Get(), name);
-}
-} // namespace d3d11
-
-class Renderer11;
-class ResourceManager11;
-template <typename T>
-class SharedResource11;
-class TextureHelper11;
-
-using InputElementArray = WrappedArray<D3D11_INPUT_ELEMENT_DESC>;
-using ShaderData = WrappedArray<uint8_t>;
-
-// Format: ResourceType, D3D11 type, DESC type, init data type.
-#define ANGLE_RESOURCE_TYPE_OP(NAME, OP) \
- OP(NAME, BlendState, ID3D11BlendState, D3D11_BLEND_DESC, void) \
- OP(NAME, Buffer, ID3D11Buffer, D3D11_BUFFER_DESC, const D3D11_SUBRESOURCE_DATA) \
- OP(NAME, ComputeShader, ID3D11ComputeShader, ShaderData, void) \
- OP(NAME, DepthStencilState, ID3D11DepthStencilState, D3D11_DEPTH_STENCIL_DESC, void) \
- OP(NAME, DepthStencilView, ID3D11DepthStencilView, D3D11_DEPTH_STENCIL_VIEW_DESC, \
- ID3D11Resource) \
- OP(NAME, GeometryShader, ID3D11GeometryShader, ShaderData, \
- const std::vector<D3D11_SO_DECLARATION_ENTRY>) \
- OP(NAME, InputLayout, ID3D11InputLayout, InputElementArray, const ShaderData) \
- OP(NAME, PixelShader, ID3D11PixelShader, ShaderData, void) \
- OP(NAME, Query, ID3D11Query, D3D11_QUERY_DESC, void) \
- OP(NAME, RasterizerState, ID3D11RasterizerState, D3D11_RASTERIZER_DESC, void) \
- OP(NAME, RenderTargetView, ID3D11RenderTargetView, D3D11_RENDER_TARGET_VIEW_DESC, \
- ID3D11Resource) \
- OP(NAME, SamplerState, ID3D11SamplerState, D3D11_SAMPLER_DESC, void) \
- OP(NAME, ShaderResourceView, ID3D11ShaderResourceView, D3D11_SHADER_RESOURCE_VIEW_DESC, \
- ID3D11Resource) \
- OP(NAME, Texture2D, ID3D11Texture2D, D3D11_TEXTURE2D_DESC, const D3D11_SUBRESOURCE_DATA) \
- OP(NAME, Texture3D, ID3D11Texture3D, D3D11_TEXTURE3D_DESC, const D3D11_SUBRESOURCE_DATA) \
- OP(NAME, VertexShader, ID3D11VertexShader, ShaderData, void)
-
-#define ANGLE_RESOURCE_TYPE_LIST(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) RESTYPE,
-
-enum class ResourceType
-{
- ANGLE_RESOURCE_TYPE_OP(List, ANGLE_RESOURCE_TYPE_LIST) Last
-};
-
-#undef ANGLE_RESOURCE_TYPE_LIST
-
-constexpr size_t ResourceTypeIndex(ResourceType resourceType)
-{
- return static_cast<size_t>(resourceType);
-}
-
-constexpr size_t NumResourceTypes = ResourceTypeIndex(ResourceType::Last);
-
-#define ANGLE_RESOURCE_TYPE_TO_D3D11(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
- \
-template<> struct NAME<ResourceType::RESTYPE> \
- { \
- using Value = D3D11TYPE; \
- };
-
-#define ANGLE_RESOURCE_TYPE_TO_DESC(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
- \
-template<> struct NAME<ResourceType::RESTYPE> \
- { \
- using Value = DESCTYPE; \
- };
-
-#define ANGLE_RESOURCE_TYPE_TO_INIT_DATA(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
- \
-template<> struct NAME<ResourceType::RESTYPE> \
- { \
- using Value = INITDATATYPE; \
- };
-
-#define ANGLE_RESOURCE_TYPE_TO_TYPE(NAME, OP) \
- template <ResourceType Param> \
- struct NAME; \
- ANGLE_RESOURCE_TYPE_OP(NAME, OP) \
- \
-template<ResourceType Param> struct NAME \
- { \
- }; \
- \
-template<ResourceType Param> using Get##NAME = typename NAME<Param>::Value;
-
-ANGLE_RESOURCE_TYPE_TO_TYPE(D3D11Type, ANGLE_RESOURCE_TYPE_TO_D3D11)
-ANGLE_RESOURCE_TYPE_TO_TYPE(DescType, ANGLE_RESOURCE_TYPE_TO_DESC)
-ANGLE_RESOURCE_TYPE_TO_TYPE(InitDataType, ANGLE_RESOURCE_TYPE_TO_INIT_DATA)
-
-#undef ANGLE_RESOURCE_TYPE_TO_D3D11
-#undef ANGLE_RESOURCE_TYPE_TO_DESC
-#undef ANGLE_RESOURCE_TYPE_TO_INIT_DATA
-#undef ANGLE_RESOURCE_TYPE_TO_TYPE
-
-#define ANGLE_TYPE_TO_RESOURCE_TYPE(NAME, OP) \
- template <typename Param> \
- struct NAME; \
- ANGLE_RESOURCE_TYPE_OP(NAME, OP) \
- \
-template<typename Param> struct NAME \
- { \
- }; \
- \
-template<typename Param> constexpr ResourceType Get##NAME() \
- { \
- return NAME<Param>::Value; \
- }
-
-#define ANGLE_D3D11_TO_RESOURCE_TYPE(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
- \
-template<> struct NAME<D3D11TYPE> \
- { \
- static constexpr ResourceType Value = ResourceType::RESTYPE; \
- };
-
-ANGLE_TYPE_TO_RESOURCE_TYPE(ResourceTypeFromD3D11, ANGLE_D3D11_TO_RESOURCE_TYPE)
-
-#undef ANGLE_D3D11_TO_RESOURCE_TYPE
-#undef ANGLE_TYPE_TO_RESOURCE_TYPE
-
-template <typename T>
-using GetDescFromD3D11 = GetDescType<ResourceTypeFromD3D11<T>::Value>;
-
-template <typename T>
-using GetInitDataFromD3D11 = GetInitDataType<ResourceTypeFromD3D11<T>::Value>;
-
-template <typename T>
-constexpr size_t ResourceTypeIndex()
-{
- return static_cast<size_t>(GetResourceTypeFromD3D11<T>());
-}
-
-template <typename T>
-struct TypedData
-{
- TypedData() {}
- ~TypedData();
-
- T *object = nullptr;
- ResourceManager11 *manager = nullptr;
-};
-
-// Smart pointer type. Wraps the resource and a factory for safe deletion.
-template <typename T, template <class> class Pointer, typename DataT>
-class Resource11Base : angle::NonCopyable
-{
- public:
- T *get() const { return mData->object; }
- T *const *getPointer() const { return &mData->object; }
-
- void setDebugName(const char *name) { d3d11::SetDebugName(mData->object, name); }
-
- void set(T *object)
- {
- ASSERT(!valid());
- mData->object = object;
- }
-
- bool valid() const { return (mData->object != nullptr); }
-
- void reset()
- {
- if (valid())
- mData.reset(new DataT());
- }
-
- ResourceSerial getSerial() const
- {
- return ResourceSerial(reinterpret_cast<uintptr_t>(mData->object));
- }
-
- protected:
- friend class TextureHelper11;
-
- Resource11Base() : mData(new DataT()) {}
-
- Resource11Base(Resource11Base &&movedObj) : mData(new DataT())
- {
- std::swap(mData, movedObj.mData);
- }
-
- virtual ~Resource11Base() { mData.reset(); }
-
- Resource11Base &operator=(Resource11Base &&movedObj)
- {
- std::swap(mData, movedObj.mData);
- return *this;
- }
-
- Pointer<DataT> mData;
-};
-
-template <typename T>
-using UniquePtr = typename std::unique_ptr<T, std::default_delete<T>>;
-
-template <typename ResourceT>
-class Resource11 : public Resource11Base<ResourceT, UniquePtr, TypedData<ResourceT>>
-{
- public:
- Resource11() {}
- Resource11(Resource11 &&other)
- : Resource11Base<ResourceT, UniquePtr, TypedData<ResourceT>>(std::move(other))
- {
- }
- Resource11 &operator=(Resource11 &&other)
- {
- std::swap(this->mData, other.mData);
- return *this;
- }
-
- private:
- template <typename T>
- friend class SharedResource11;
- friend class ResourceManager11;
-
- Resource11(ResourceT *object, ResourceManager11 *manager)
- {
- this->mData->object = object;
- this->mData->manager = manager;
- }
-};
-
-template <typename T>
-class SharedResource11 : public Resource11Base<T, std::shared_ptr, TypedData<T>>
-{
- public:
- SharedResource11() {}
- SharedResource11(SharedResource11 &&movedObj)
- : Resource11Base<T, std::shared_ptr, TypedData<T>>(std::move(movedObj))
- {
- }
-
- SharedResource11 &operator=(SharedResource11 &&other)
- {
- std::swap(this->mData, other.mData);
- return *this;
- }
-
- SharedResource11 makeCopy() const
- {
- SharedResource11 copy;
- copy.mData = this->mData;
- return std::move(copy);
- }
-
- private:
- friend class ResourceManager11;
- SharedResource11(Resource11<T> &&obj) : Resource11Base<T, std::shared_ptr, TypedData<T>>()
- {
- std::swap(this->mData->manager, obj.mData->manager);
-
- // Can't use std::swap because of ID3D11Resource.
- auto temp = this->mData->object;
- this->mData->object = obj.mData->object;
- obj.mData->object = static_cast<T *>(temp);
- }
-};
-
-class ResourceManager11 final : angle::NonCopyable
-{
- public:
- ResourceManager11();
- ~ResourceManager11();
-
- template <typename T>
- gl::Error allocate(Renderer11 *renderer,
- const GetDescFromD3D11<T> *desc,
- GetInitDataFromD3D11<T> *initData,
- Resource11<T> *resourceOut);
-
- template <typename T>
- gl::Error allocate(Renderer11 *renderer,
- const GetDescFromD3D11<T> *desc,
- GetInitDataFromD3D11<T> *initData,
- SharedResource11<T> *sharedRes)
- {
- Resource11<T> res;
- ANGLE_TRY(allocate(renderer, desc, initData, &res));
- *sharedRes = std::move(res);
- return gl::NoError();
- }
-
- template <typename T>
- void onRelease(T *resource)
- {
- onReleaseGeneric(GetResourceTypeFromD3D11<T>(), resource);
- }
-
- void onReleaseGeneric(ResourceType resourceType, ID3D11DeviceChild *resource);
-
- void setAllocationsInitialized(bool initialize);
-
- private:
- void incrResource(ResourceType resourceType, uint64_t memorySize);
- void decrResource(ResourceType resourceType, uint64_t memorySize);
-
- template <typename T>
- GetInitDataFromD3D11<T> *createInitDataIfNeeded(const GetDescFromD3D11<T> *desc);
-
- bool mInitializeAllocations;
-
- std::array<size_t, NumResourceTypes> mAllocatedResourceCounts;
- std::array<uint64_t, NumResourceTypes> mAllocatedResourceDeviceMemory;
- angle::MemoryBuffer mZeroMemory;
-
- std::vector<D3D11_SUBRESOURCE_DATA> mShadowInitData;
-};
-
-template <typename ResourceT>
-TypedData<ResourceT>::~TypedData()
-{
- if (object)
- {
- // We can have a nullptr factory when holding passed-in resources.
- if (manager)
- {
- manager->onRelease(object);
- }
- object->Release();
- }
-}
-
-#define ANGLE_RESOURCE_TYPE_CLASS(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
- using RESTYPE = Resource11<D3D11TYPE>;
-
-namespace d3d11
-{
-ANGLE_RESOURCE_TYPE_OP(ClassList, ANGLE_RESOURCE_TYPE_CLASS)
-
-using SharedSRV = SharedResource11<ID3D11ShaderResourceView>;
-} // namespace d3d11
-
-#undef ANGLE_RESOURCE_TYPE_CLASS
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_D3D_D3D11_RESOURCEFACTORY11_H_