| // |
| // 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 <map> |
| |
| #include "common/angleutils.h" |
| #include "common/platform.h" |
| #include "libANGLE/renderer/Format.h" |
| #include "libANGLE/renderer/d3d/formatutilsD3D.h" |
| #include "libANGLE/renderer/renderer_utils.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 |
| { |
| inline constexpr Format(); |
| inline constexpr Format(GLenum internalFormat, |
| angle::FormatID formatID, |
| DXGI_FORMAT texFormat, |
| DXGI_FORMAT srvFormat, |
| DXGI_FORMAT uavFormat, |
| 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::FormatID formatID; |
| |
| DXGI_FORMAT texFormat; |
| DXGI_FORMAT srvFormat; |
| DXGI_FORMAT uavFormat; |
| DXGI_FORMAT rtvFormat; |
| DXGI_FORMAT dsvFormat; |
| |
| DXGI_FORMAT blitSRVFormat; |
| |
| GLenum swizzleFormat; |
| |
| InitializeTextureDataFunction dataInitializerFunction; |
| }; |
| |
| constexpr Format::Format() |
| : internalFormat(GL_NONE), |
| formatID(angle::FormatID::NONE), |
| texFormat(DXGI_FORMAT_UNKNOWN), |
| srvFormat(DXGI_FORMAT_UNKNOWN), |
| uavFormat(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::FormatID formatID, |
| DXGI_FORMAT texFormat, |
| DXGI_FORMAT srvFormat, |
| DXGI_FORMAT uavFormat, |
| DXGI_FORMAT rtvFormat, |
| DXGI_FORMAT dsvFormat, |
| DXGI_FORMAT blitSRVFormat, |
| GLenum swizzleFormat, |
| InitializeTextureDataFunction internalFormatInitializer) |
| : internalFormat(internalFormat), |
| formatID(formatID), |
| texFormat(texFormat), |
| srvFormat(srvFormat), |
| uavFormat(uavFormat), |
| rtvFormat(rtvFormat), |
| dsvFormat(dsvFormat), |
| blitSRVFormat(blitSRVFormat), |
| swizzleFormat(swizzleFormat), |
| dataInitializerFunction(internalFormatInitializer) |
| {} |
| |
| } // namespace d3d11 |
| |
| } // namespace rx |
| |
| #endif // LIBANGLE_RENDERER_D3D_D3D11_TEXTUREFORMATTABLE_H_ |