tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ImageFunctionHLSL.h (3334B)


      1 //
      2 // Copyright 2017 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 // ImageFunctionHLSL: Class for writing implementations of ESSL image functions into HLSL output.
      7 //
      8 
      9 #ifndef COMPILER_TRANSLATOR_IMAGEFUNCTIONHLSL_H_
     10 #define COMPILER_TRANSLATOR_IMAGEFUNCTIONHLSL_H_
     11 
     12 #include <set>
     13 
     14 #include "GLSLANG/ShaderLang.h"
     15 #include "compiler/translator/BaseTypes.h"
     16 #include "compiler/translator/Common.h"
     17 #include "compiler/translator/InfoSink.h"
     18 #include "compiler/translator/Types.h"
     19 
     20 namespace sh
     21 {
     22 
     23 class ImageFunctionHLSL final : angle::NonCopyable
     24 {
     25  public:
     26    // Returns the name of the image function implementation to caller.
     27    // The name that's passed in is the name of the GLSL image function that it should implement.
     28    ImmutableString useImageFunction(const ImmutableString &name,
     29                                     const TBasicType &type,
     30                                     TLayoutImageInternalFormat imageInternalFormat,
     31                                     bool readonly);
     32 
     33    void imageFunctionHeader(TInfoSinkBase &out);
     34    const std::set<std::string> &getUsedImage2DFunctionNames() const
     35    {
     36        return mUsedImage2DFunctionNames;
     37    }
     38 
     39  private:
     40    struct ImageFunction
     41    {
     42        // See ESSL 3.10.4 section 8.12 for reference about what the different methods below do.
     43        enum class Method
     44        {
     45            SIZE,
     46            LOAD,
     47            STORE
     48        };
     49 
     50        enum class DataType
     51        {
     52            NONE,
     53            FLOAT4,
     54            UINT4,
     55            INT4,
     56            UNORM_FLOAT4,
     57            SNORM_FLOAT4
     58        };
     59 
     60        ImmutableString name() const;
     61 
     62        bool operator<(const ImageFunction &rhs) const;
     63 
     64        DataType getDataType(TLayoutImageInternalFormat format) const;
     65 
     66        const char *getReturnType() const;
     67 
     68        TBasicType image;
     69        TLayoutImageInternalFormat imageInternalFormat;
     70        bool readonly;
     71        Method method;
     72        DataType type;
     73    };
     74 
     75    static ImmutableString GetImageReference(TInfoSinkBase &out,
     76                                             const ImageFunctionHLSL::ImageFunction &imageFunction);
     77    static void OutputImageFunctionArgumentList(
     78        TInfoSinkBase &out,
     79        const ImageFunctionHLSL::ImageFunction &imageFunction);
     80    static void OutputImageSizeFunctionBody(TInfoSinkBase &out,
     81                                            const ImageFunctionHLSL::ImageFunction &imageFunction,
     82                                            const ImmutableString &imageReference);
     83    static void OutputImageLoadFunctionBody(TInfoSinkBase &out,
     84                                            const ImageFunctionHLSL::ImageFunction &imageFunction,
     85                                            const ImmutableString &imageReference);
     86    static void OutputImageStoreFunctionBody(TInfoSinkBase &out,
     87                                             const ImageFunctionHLSL::ImageFunction &imageFunction,
     88                                             const ImmutableString &imageReference);
     89    using ImageFunctionSet = std::set<ImageFunction>;
     90    ImageFunctionSet mUsesImage;
     91    std::set<std::string> mUsedImage2DFunctionNames;
     92 };
     93 
     94 }  // namespace sh
     95 
     96 #endif  // COMPILER_TRANSLATOR_IMAGEFUNCTIONHLSL_H_