Edit

kc3-lang/angle/src/compiler/translator/ImageFunctionHLSL.h

Branch :

  • Show log

    Commit

  • Author : Xinghua Cao
    Date : 2018-07-12 16:22:06
    Hash : f3179a6a
    Message : ES31: Implement bindImageTexture binds a single layer on D3D backend Dynamically generate image2D variables' declaration and function definition in libANGLE. Bug: angleproject:1987 TEST=angle_end2end_tests.ComputeShaderTest.* Change-Id: Idacc756f7bd15f22eccb1d689e18e997f3e74159 Reviewed-on: https://chromium-review.googlesource.com/c/1142885 Commit-Queue: Xinghua Cao <xinghua.cao@intel.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • src/compiler/translator/ImageFunctionHLSL.h
  • //
    // Copyright (c) 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.
    //
    // ImageFunctionHLSL: Class for writing implementations of ESSL image functions into HLSL output.
    //
    
    #ifndef COMPILER_TRANSLATOR_IMAGEFUNCTIONHLSL_H_
    #define COMPILER_TRANSLATOR_IMAGEFUNCTIONHLSL_H_
    
    #include <set>
    
    #include "GLSLANG/ShaderLang.h"
    #include "compiler/translator/BaseTypes.h"
    #include "compiler/translator/Common.h"
    #include "compiler/translator/InfoSink.h"
    #include "compiler/translator/Types.h"
    
    namespace sh
    {
    
    class ImageFunctionHLSL final : angle::NonCopyable
    {
      public:
        // Returns the name of the image function implementation to caller.
        // The name that's passed in is the name of the GLSL image function that it should implement.
        ImmutableString useImageFunction(const ImmutableString &name,
                                         const TBasicType &type,
                                         TLayoutImageInternalFormat imageInternalFormat,
                                         bool readonly);
    
        void imageFunctionHeader(TInfoSinkBase &out);
        const std::set<std::string> &getUsedImage2DFunctionNames() const
        {
            return mUsedImage2DFunctionNames;
        }
    
      private:
        struct ImageFunction
        {
            // See ESSL 3.10.4 section 8.12 for reference about what the different methods below do.
            enum class Method
            {
                SIZE,
                LOAD,
                STORE
            };
    
            enum class DataType
            {
                NONE,
                FLOAT4,
                UINT4,
                INT4,
                UNORM_FLOAT4,
                SNORM_FLOAT4
            };
    
            ImmutableString name() const;
    
            bool operator<(const ImageFunction &rhs) const;
    
            DataType getDataType(TLayoutImageInternalFormat format) const;
    
            const char *getReturnType() const;
    
            TBasicType image;
            TLayoutImageInternalFormat imageInternalFormat;
            bool readonly;
            Method method;
            DataType type;
        };
    
        static ImmutableString GetImageReference(TInfoSinkBase &out,
                                                 const ImageFunctionHLSL::ImageFunction &imageFunction);
        static void OutputImageFunctionArgumentList(
            TInfoSinkBase &out,
            const ImageFunctionHLSL::ImageFunction &imageFunction);
        static void OutputImageSizeFunctionBody(TInfoSinkBase &out,
                                                const ImageFunctionHLSL::ImageFunction &imageFunction,
                                                const ImmutableString &imageReference);
        static void OutputImageLoadFunctionBody(TInfoSinkBase &out,
                                                const ImageFunctionHLSL::ImageFunction &imageFunction,
                                                const ImmutableString &imageReference);
        static void OutputImageStoreFunctionBody(TInfoSinkBase &out,
                                                 const ImageFunctionHLSL::ImageFunction &imageFunction,
                                                 const ImmutableString &imageReference);
        using ImageFunctionSet = std::set<ImageFunction>;
        ImageFunctionSet mUsesImage;
        std::set<std::string> mUsedImage2DFunctionNames;
    };
    
    }  // namespace sh
    
    #endif  // COMPILER_TRANSLATOR_IMAGEFUNCTIONHLSL_H_