Edit

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

Branch :

  • Show log

    Commit

  • Author : Olli Etuaho
    Date : 2018-06-21 15:27:44
    Hash : 8fbd9d96
    Message : Use ImmutableString in ImageFunctionHLSL This code is analoguous to the code in TextureFunctionHLSL and is now implemented in a similar manner. BUG=angleproject:2267 TEST=angle_unittests, angle_end2end_tests Change-Id: Ie3503766217dad4f3848f2d4b2fc3f62b3edce0c Reviewed-on: https://chromium-review.googlesource.com/1110366 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>

  • 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);
    
      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;
    };
    
    }  // namespace sh
    
    #endif  // COMPILER_TRANSLATOR_IMAGEFUNCTIONHLSL_H_