tor-browser

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

UtilsHLSL.h (5274B)


      1 //
      2 // Copyright 2014 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 // UtilsHLSL.h:
      7 //   Utility methods for GLSL to HLSL translation.
      8 //
      9 
     10 #ifndef COMPILER_TRANSLATOR_UTILSHLSL_H_
     11 #define COMPILER_TRANSLATOR_UTILSHLSL_H_
     12 
     13 #include <vector>
     14 #include "compiler/translator/IntermNode.h"
     15 #include "compiler/translator/Types.h"
     16 
     17 #include "angle_gl.h"
     18 
     19 namespace sh
     20 {
     21 
     22 class TFunction;
     23 
     24 // HLSL Texture type for GLSL sampler type and readonly image type.
     25 enum HLSLTextureGroup
     26 {
     27    // read resources
     28    HLSL_TEXTURE_2D,
     29    HLSL_TEXTURE_MIN = HLSL_TEXTURE_2D,
     30 
     31    HLSL_TEXTURE_CUBE,
     32    HLSL_TEXTURE_2D_ARRAY,
     33    HLSL_TEXTURE_3D,
     34    HLSL_TEXTURE_2D_UNORM,
     35    HLSL_TEXTURE_CUBE_UNORM,
     36    HLSL_TEXTURE_2D_ARRAY_UNORN,
     37    HLSL_TEXTURE_3D_UNORM,
     38    HLSL_TEXTURE_2D_SNORM,
     39    HLSL_TEXTURE_CUBE_SNORM,
     40    HLSL_TEXTURE_2D_ARRAY_SNORM,
     41    HLSL_TEXTURE_3D_SNORM,
     42    HLSL_TEXTURE_2D_MS,
     43    HLSL_TEXTURE_2D_MS_ARRAY,
     44    HLSL_TEXTURE_2D_INT4,
     45    HLSL_TEXTURE_3D_INT4,
     46    HLSL_TEXTURE_2D_ARRAY_INT4,
     47    HLSL_TEXTURE_2D_MS_INT4,
     48    HLSL_TEXTURE_2D_MS_ARRAY_INT4,
     49    HLSL_TEXTURE_2D_UINT4,
     50    HLSL_TEXTURE_3D_UINT4,
     51    HLSL_TEXTURE_2D_ARRAY_UINT4,
     52    HLSL_TEXTURE_2D_MS_UINT4,
     53    HLSL_TEXTURE_2D_MS_ARRAY_UINT4,
     54 
     55    HLSL_TEXTURE_BUFFER,
     56    HLSL_TEXTURE_BUFFER_UNORM,
     57    HLSL_TEXTURE_BUFFER_SNORM,
     58    HLSL_TEXTURE_BUFFER_UINT4,
     59    HLSL_TEXTURE_BUFFER_INT4,
     60 
     61    // Comparison samplers
     62 
     63    HLSL_TEXTURE_2D_COMPARISON,
     64    HLSL_TEXTURE_CUBE_COMPARISON,
     65    HLSL_TEXTURE_2D_ARRAY_COMPARISON,
     66 
     67    HLSL_COMPARISON_SAMPLER_GROUP_BEGIN = HLSL_TEXTURE_2D_COMPARISON,
     68    HLSL_COMPARISON_SAMPLER_GROUP_END   = HLSL_TEXTURE_2D_ARRAY_COMPARISON,
     69 
     70    HLSL_TEXTURE_UNKNOWN,
     71    HLSL_TEXTURE_MAX = HLSL_TEXTURE_UNKNOWN
     72 };
     73 
     74 // HLSL RWTexture type for GLSL read and write image type.
     75 enum HLSLRWTextureGroup
     76 {
     77    // read/write resource
     78    HLSL_RWTEXTURE_2D_FLOAT4,
     79    HLSL_RWTEXTURE_MIN = HLSL_RWTEXTURE_2D_FLOAT4,
     80    HLSL_RWTEXTURE_2D_ARRAY_FLOAT4,
     81    HLSL_RWTEXTURE_3D_FLOAT4,
     82    HLSL_RWTEXTURE_2D_UNORM,
     83    HLSL_RWTEXTURE_2D_ARRAY_UNORN,
     84    HLSL_RWTEXTURE_3D_UNORM,
     85    HLSL_RWTEXTURE_2D_SNORM,
     86    HLSL_RWTEXTURE_2D_ARRAY_SNORM,
     87    HLSL_RWTEXTURE_3D_SNORM,
     88    HLSL_RWTEXTURE_2D_UINT4,
     89    HLSL_RWTEXTURE_2D_ARRAY_UINT4,
     90    HLSL_RWTEXTURE_3D_UINT4,
     91    HLSL_RWTEXTURE_2D_INT4,
     92    HLSL_RWTEXTURE_2D_ARRAY_INT4,
     93    HLSL_RWTEXTURE_3D_INT4,
     94 
     95    HLSL_RWTEXTURE_BUFFER_FLOAT4,
     96    HLSL_RWTEXTURE_BUFFER_UNORM,
     97    HLSL_RWTEXTURE_BUFFER_SNORM,
     98    HLSL_RWTEXTURE_BUFFER_UINT4,
     99    HLSL_RWTEXTURE_BUFFER_INT4,
    100 
    101    HLSL_RWTEXTURE_UNKNOWN,
    102    HLSL_RWTEXTURE_MAX = HLSL_RWTEXTURE_UNKNOWN
    103 };
    104 
    105 HLSLTextureGroup TextureGroup(const TBasicType type,
    106                              TLayoutImageInternalFormat imageInternalFormat = EiifUnspecified);
    107 const char *TextureString(const HLSLTextureGroup textureGroup);
    108 const char *TextureString(const TBasicType type,
    109                          TLayoutImageInternalFormat imageInternalFormat = EiifUnspecified);
    110 const char *TextureGroupSuffix(const HLSLTextureGroup type);
    111 const char *TextureGroupSuffix(const TBasicType type,
    112                               TLayoutImageInternalFormat imageInternalFormat = EiifUnspecified);
    113 const char *TextureTypeSuffix(const TBasicType type,
    114                              TLayoutImageInternalFormat imageInternalFormat = EiifUnspecified);
    115 HLSLRWTextureGroup RWTextureGroup(const TBasicType type,
    116                                  TLayoutImageInternalFormat imageInternalFormat);
    117 const char *RWTextureString(const HLSLRWTextureGroup textureGroup);
    118 const char *RWTextureString(const TBasicType type, TLayoutImageInternalFormat imageInternalFormat);
    119 const char *RWTextureGroupSuffix(const HLSLRWTextureGroup type);
    120 const char *RWTextureGroupSuffix(const TBasicType type,
    121                                 TLayoutImageInternalFormat imageInternalFormat);
    122 const char *RWTextureTypeSuffix(const TBasicType type,
    123                                TLayoutImageInternalFormat imageInternalFormat);
    124 
    125 const char *SamplerString(const TBasicType type);
    126 const char *SamplerString(HLSLTextureGroup type);
    127 
    128 // Adds a prefix to user-defined names to avoid naming clashes.
    129 TString Decorate(const ImmutableString &string);
    130 TString DecorateVariableIfNeeded(const TVariable &variable);
    131 TString DecorateFunctionIfNeeded(const TFunction *func);
    132 TString DecorateField(const ImmutableString &string, const TStructure &structure);
    133 TString DecoratePrivate(const ImmutableString &privateText);
    134 TString TypeString(const TType &type);
    135 TString StructNameString(const TStructure &structure);
    136 TString QualifiedStructNameString(const TStructure &structure,
    137                                  bool useHLSLRowMajorPacking,
    138                                  bool useStd140Packing,
    139                                  bool forcePackingEnd);
    140 const char *InterpolationString(TQualifier qualifier);
    141 const char *QualifierString(TQualifier qualifier);
    142 // Parameters may need to be included in function names to disambiguate between overloaded
    143 // functions.
    144 TString DisambiguateFunctionName(const TFunction *func);
    145 TString DisambiguateFunctionName(const TIntermSequence *args);
    146 }  // namespace sh
    147 
    148 #endif  // COMPILER_TRANSLATOR_UTILSHLSL_H_