Edit

kc3-lang/angle/src/libANGLE/renderer/Format.h

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2017-05-17 15:40:03
    Hash : 80616218
    Message : Support CHROMIUM_copy_texture for all formats on D3D11. Adds a CPU readback and conversion path when the destination texture is not renderable. BUG=angleproject:1932 Change-Id: I71461ca991dc10dd636ff38e1ae20db2be0f8d63 Reviewed-on: https://chromium-review.googlesource.com/508308 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • src/libANGLE/renderer/Format.h
  • //
    // 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.
    //
    // Format:
    //   A universal description of typed GPU storage. Across multiple
    //   renderer back-ends, there are common formats and some distinct
    //   permutations, this enum encapsulates them all. Formats apply to
    //   textures, but could also apply to any typed data.
    
    #ifndef LIBANGLE_RENDERER_FORMAT_H_
    #define LIBANGLE_RENDERER_FORMAT_H_
    
    #include "libANGLE/formatutils.h"
    #include "libANGLE/renderer/renderer_utils.h"
    
    namespace angle
    {
    
    struct Format final : private angle::NonCopyable
    {
        enum class ID;
    
        constexpr Format(ID id,
                         GLenum glFormat,
                         GLenum fboFormat,
                         rx::MipGenerationFunction mipGen,
                         const rx::FastCopyFunctionMap &fastCopyFunctions,
                         rx::ColorReadFunction colorRead,
                         rx::ColorWriteFunction colorWrite,
                         GLenum componentType,
                         GLuint redBits,
                         GLuint greenBits,
                         GLuint blueBits,
                         GLuint alphaBits,
                         GLuint depthBits,
                         GLuint stencilBits);
    
        static const Format &Get(ID id);
    
        ID id;
    
        // The closest matching GL internal format for the storage this format uses. Note that this
        // may be a different internal format than the one this ANGLE format is used for.
        GLenum glInternalFormat;
    
        // The format we should report to the GL layer when querying implementation formats from a FBO.
        // This might not be the same as the glInternalFormat, since some DXGI formats don't have
        // matching GL format enums, like BGRA4, BGR5A1 and B5G6R6.
        GLenum fboImplementationInternalFormat;
    
        rx::MipGenerationFunction mipGenerationFunction;
        rx::ColorReadFunction colorReadFunction;
        rx::ColorWriteFunction colorWriteFunction;
    
        // A map from a gl::FormatType to a fast pixel copy function for this format.
        const rx::FastCopyFunctionMap &fastCopyFunctions;
    
        GLenum componentType;
    
        GLuint redBits;
        GLuint greenBits;
        GLuint blueBits;
        GLuint alphaBits;
        GLuint depthBits;
        GLuint stencilBits;
    };
    
    constexpr Format::Format(ID id,
                             GLenum glFormat,
                             GLenum fboFormat,
                             rx::MipGenerationFunction mipGen,
                             const rx::FastCopyFunctionMap &fastCopyFunctions,
                             rx::ColorReadFunction colorRead,
                             rx::ColorWriteFunction colorWrite,
                             GLenum componentType,
                             GLuint redBits,
                             GLuint greenBits,
                             GLuint blueBits,
                             GLuint alphaBits,
                             GLuint depthBits,
                             GLuint stencilBits)
        : id(id),
          glInternalFormat(glFormat),
          fboImplementationInternalFormat(fboFormat),
          mipGenerationFunction(mipGen),
          colorReadFunction(colorRead),
          colorWriteFunction(colorWrite),
          fastCopyFunctions(fastCopyFunctions),
          componentType(componentType),
          redBits(redBits),
          greenBits(greenBits),
          blueBits(blueBits),
          alphaBits(alphaBits),
          depthBits(depthBits),
          stencilBits(stencilBits)
    {
    }
    
    }  // namespace angle
    
    #include "libANGLE/renderer/Format_ID_autogen.inl"
    
    #endif  // LIBANGLE_RENDERER_FORMAT_H_