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