diff options
Diffstat (limited to 'src/3rdparty/angle/src/compiler/translator/ImageFunctionHLSL.cpp')
-rw-r--r-- | src/3rdparty/angle/src/compiler/translator/ImageFunctionHLSL.cpp | 304 |
1 files changed, 0 insertions, 304 deletions
diff --git a/src/3rdparty/angle/src/compiler/translator/ImageFunctionHLSL.cpp b/src/3rdparty/angle/src/compiler/translator/ImageFunctionHLSL.cpp deleted file mode 100644 index 40b5e1f1e2..0000000000 --- a/src/3rdparty/angle/src/compiler/translator/ImageFunctionHLSL.cpp +++ /dev/null @@ -1,304 +0,0 @@ -// -// 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. -// - -#include "compiler/translator/ImageFunctionHLSL.h" -#include "compiler/translator/UtilsHLSL.h" - -namespace sh -{ - -// static -void ImageFunctionHLSL::OutputImageFunctionArgumentList( - TInfoSinkBase &out, - const ImageFunctionHLSL::ImageFunction &imageFunction) -{ - if (imageFunction.readonly) - { - out << TextureString(imageFunction.image, imageFunction.imageInternalFormat) << " tex"; - } - else - { - out << RWTextureString(imageFunction.image, imageFunction.imageInternalFormat) << " tex"; - } - - if (imageFunction.method == ImageFunctionHLSL::ImageFunction::Method::LOAD || - imageFunction.method == ImageFunctionHLSL::ImageFunction::Method::STORE) - { - switch (imageFunction.image) - { - case EbtImage2D: - case EbtIImage2D: - case EbtUImage2D: - out << ", int2 p"; - break; - case EbtImage3D: - case EbtIImage3D: - case EbtUImage3D: - case EbtImageCube: - case EbtIImageCube: - case EbtUImageCube: - case EbtImage2DArray: - case EbtIImage2DArray: - case EbtUImage2DArray: - out << ", int3 p"; - break; - default: - UNREACHABLE(); - } - - if (imageFunction.method == ImageFunctionHLSL::ImageFunction::Method::STORE) - { - switch (imageFunction.image) - { - case EbtImage2D: - case EbtImage3D: - case EbtImageCube: - case EbtImage2DArray: - out << ", float4 data"; - break; - case EbtIImage2D: - case EbtIImage3D: - case EbtIImageCube: - case EbtIImage2DArray: - out << ", int4 data"; - break; - case EbtUImage2D: - case EbtUImage3D: - case EbtUImageCube: - case EbtUImage2DArray: - out << ", uint4 data"; - break; - default: - UNREACHABLE(); - } - } - } -} - -// static -void ImageFunctionHLSL::OutputImageSizeFunctionBody( - TInfoSinkBase &out, - const ImageFunctionHLSL::ImageFunction &imageFunction, - const TString &imageReference) -{ - if (IsImage3D(imageFunction.image) || IsImage2DArray(imageFunction.image) || - IsImageCube(imageFunction.image)) - { - // "depth" stores either the number of layers in an array texture or 3D depth - out << " uint width; uint height; uint depth;\n" - << " " << imageReference << ".GetDimensions(width, height, depth);\n"; - } - else if (IsImage2D(imageFunction.image)) - { - out << " uint width; uint height;\n" - << " " << imageReference << ".GetDimensions(width, height);\n"; - } - else - UNREACHABLE(); - - if (strcmp(imageFunction.getReturnType(), "int3") == 0) - { - out << " return int3(width, height, depth);\n"; - } - else - { - out << " return int2(width, height);\n"; - } -} - -// static -void ImageFunctionHLSL::OutputImageLoadFunctionBody( - TInfoSinkBase &out, - const ImageFunctionHLSL::ImageFunction &imageFunction, - const TString &imageReference) -{ - if (IsImage3D(imageFunction.image) || IsImage2DArray(imageFunction.image) || - IsImageCube(imageFunction.image)) - { - out << " return " << imageReference << "[uint3(p.x, p.y, p.z)];\n"; - } - else if (IsImage2D(imageFunction.image)) - { - out << " return " << imageReference << "[uint2(p.x, p.y)];\n"; - } - else - UNREACHABLE(); -} - -// static -void ImageFunctionHLSL::OutputImageStoreFunctionBody( - TInfoSinkBase &out, - const ImageFunctionHLSL::ImageFunction &imageFunction, - const TString &imageReference) -{ - if (IsImage3D(imageFunction.image) || IsImage2DArray(imageFunction.image) || - IsImage2D(imageFunction.image) || IsImageCube(imageFunction.image)) - { - out << " " << imageReference << "[p] = data;\n"; - } - else - UNREACHABLE(); -} - -TString ImageFunctionHLSL::ImageFunction::name() const -{ - TString name = "gl_image"; - if (readonly) - { - name += TextureTypeSuffix(image, imageInternalFormat); - } - else - { - name += RWTextureTypeSuffix(image, imageInternalFormat); - } - - switch (method) - { - case Method::SIZE: - name += "Size"; - break; - case Method::LOAD: - name += "Load"; - break; - case Method::STORE: - name += "Store"; - break; - default: - UNREACHABLE(); - } - - return name; -} - -const char *ImageFunctionHLSL::ImageFunction::getReturnType() const -{ - if (method == ImageFunction::Method::SIZE) - { - switch (image) - { - case EbtImage2D: - case EbtIImage2D: - case EbtUImage2D: - case EbtImageCube: - case EbtIImageCube: - case EbtUImageCube: - return "int2"; - case EbtImage3D: - case EbtIImage3D: - case EbtUImage3D: - case EbtImage2DArray: - case EbtIImage2DArray: - case EbtUImage2DArray: - return "int3"; - default: - UNREACHABLE(); - } - } - else if (method == ImageFunction::Method::LOAD) - { - switch (image) - { - case EbtImage2D: - case EbtImage3D: - case EbtImageCube: - case EbtImage2DArray: - return "float4"; - case EbtIImage2D: - case EbtIImage3D: - case EbtIImageCube: - case EbtIImage2DArray: - return "int4"; - case EbtUImage2D: - case EbtUImage3D: - case EbtUImageCube: - case EbtUImage2DArray: - return "uint4"; - default: - UNREACHABLE(); - } - } - else if (method == ImageFunction::Method::STORE) - { - return "void"; - } - else - { - UNREACHABLE(); - } - return ""; -} - -bool ImageFunctionHLSL::ImageFunction::operator<(const ImageFunction &rhs) const -{ - return std::tie(image, imageInternalFormat, readonly, method) < - std::tie(rhs.image, rhs.imageInternalFormat, rhs.readonly, rhs.method); -} - -TString ImageFunctionHLSL::useImageFunction(const TString &name, - const TBasicType &type, - TLayoutImageInternalFormat imageInternalFormat, - bool readonly) -{ - ASSERT(IsImage(type)); - ImageFunction imageFunction; - imageFunction.image = type; - imageFunction.imageInternalFormat = imageInternalFormat; - imageFunction.readonly = readonly; - - if (name == "imageSize") - { - imageFunction.method = ImageFunction::Method::SIZE; - } - else if (name == "imageLoad") - { - imageFunction.method = ImageFunction::Method::LOAD; - } - else if (name == "imageStore") - { - imageFunction.method = ImageFunction::Method::STORE; - } - else - UNREACHABLE(); - - mUsesImage.insert(imageFunction); - return imageFunction.name(); -} - -void ImageFunctionHLSL::imageFunctionHeader(TInfoSinkBase &out) -{ - for (const ImageFunction &imageFunction : mUsesImage) - { - // Function header - out << imageFunction.getReturnType() << " " << imageFunction.name() << "("; - - OutputImageFunctionArgumentList(out, imageFunction); - - out << ")\n" - "{\n"; - - TString imageReference("tex"); - - if (imageFunction.method == ImageFunction::Method::SIZE) - { - OutputImageSizeFunctionBody(out, imageFunction, imageReference); - } - else if (imageFunction.method == ImageFunction::Method::LOAD) - { - OutputImageLoadFunctionBody(out, imageFunction, imageReference); - } - else - { - OutputImageStoreFunctionBody(out, imageFunction, imageReference); - } - - out << "}\n" - "\n"; - } -} - -} // namespace sh |