// // Copyright 2015 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. // // texture_format_table: // Queries for full textureFormat information based on internalFormat // #ifndef LIBANGLE_RENDERER_D3D_D3D11_TEXTUREFORMATTABLE_H_ #define LIBANGLE_RENDERER_D3D_D3D11_TEXTUREFORMATTABLE_H_ #include #include "common/angleutils.h" #include "common/platform.h" #include "libANGLE/renderer/Format.h" #include "libANGLE/renderer/renderer_utils.h" #include "libANGLE/renderer/d3d/formatutilsD3D.h" namespace rx { struct Renderer11DeviceCaps; namespace d3d11 { // For sized GL internal formats, there are several possible corresponding D3D11 formats depending // on device capabilities. // This structure allows querying for the DXGI texture formats to use for textures, SRVs, RTVs and // DSVs given a GL internal format. struct Format final : private angle::NonCopyable { constexpr Format(); constexpr Format(GLenum internalFormat, angle::Format::ID formatID, DXGI_FORMAT texFormat, DXGI_FORMAT srvFormat, DXGI_FORMAT rtvFormat, DXGI_FORMAT dsvFormat, DXGI_FORMAT blitSRVFormat, GLenum swizzleFormat, InitializeTextureDataFunction internalFormatInitializer); static const Format &Get(GLenum internalFormat, const Renderer11DeviceCaps &deviceCaps); const Format &getSwizzleFormat(const Renderer11DeviceCaps &deviceCaps) const; LoadFunctionMap getLoadFunctions() const; const angle::Format &format() const; GLenum internalFormat; angle::Format::ID formatID; DXGI_FORMAT texFormat; DXGI_FORMAT srvFormat; DXGI_FORMAT rtvFormat; DXGI_FORMAT dsvFormat; DXGI_FORMAT blitSRVFormat; GLenum swizzleFormat; InitializeTextureDataFunction dataInitializerFunction; }; constexpr Format::Format() : internalFormat(GL_NONE), formatID(angle::Format::ID::NONE), texFormat(DXGI_FORMAT_UNKNOWN), srvFormat(DXGI_FORMAT_UNKNOWN), rtvFormat(DXGI_FORMAT_UNKNOWN), dsvFormat(DXGI_FORMAT_UNKNOWN), blitSRVFormat(DXGI_FORMAT_UNKNOWN), swizzleFormat(GL_NONE), dataInitializerFunction(nullptr) { } constexpr Format::Format(GLenum internalFormat, angle::Format::ID formatID, DXGI_FORMAT texFormat, DXGI_FORMAT srvFormat, DXGI_FORMAT rtvFormat, DXGI_FORMAT dsvFormat, DXGI_FORMAT blitSRVFormat, GLenum swizzleFormat, InitializeTextureDataFunction internalFormatInitializer) : internalFormat(internalFormat), formatID(formatID), texFormat(texFormat), srvFormat(srvFormat), rtvFormat(rtvFormat), dsvFormat(dsvFormat), blitSRVFormat(blitSRVFormat), swizzleFormat(swizzleFormat), dataInitializerFunction(internalFormatInitializer) { } } // namespace d3d11 } // namespace rx #endif // LIBANGLE_RENDERER_D3D_D3D11_TEXTUREFORMATTABLE_H_