From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- .../src/libANGLE/renderer/d3d/d3d11/Blit11.h | 300 +++++++++++++++++++++ 1 file changed, 300 insertions(+) create mode 100644 gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Blit11.h (limited to 'gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Blit11.h') diff --git a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Blit11.h b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Blit11.h new file mode 100644 index 0000000000..cef491137d --- /dev/null +++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Blit11.h @@ -0,0 +1,300 @@ +// +// Copyright 2013 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. +// + +// Blit11.cpp: Texture copy utility class. + +#ifndef LIBANGLE_RENDERER_D3D_D3D11_BLIT11_H_ +#define LIBANGLE_RENDERER_D3D_D3D11_BLIT11_H_ + +#include "common/angleutils.h" +#include "libANGLE/Error.h" +#include "libANGLE/angletypes.h" +#include "libANGLE/renderer/d3d/d3d11/ResourceManager11.h" +#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h" + +#include + +namespace rx +{ +class Renderer11; + +class Blit11 : angle::NonCopyable +{ + public: + explicit Blit11(Renderer11 *renderer); + ~Blit11(); + + angle::Result swizzleTexture(const gl::Context *context, + const d3d11::SharedSRV &source, + const d3d11::RenderTargetView &dest, + const gl::Extents &size, + const gl::SwizzleState &swizzleTarget); + + // Set destTypeForDownsampling to GL_NONE to skip downsampling + angle::Result copyTexture(const gl::Context *context, + const d3d11::SharedSRV &source, + const gl::Box &sourceArea, + const gl::Extents &sourceSize, + GLenum sourceFormat, + const d3d11::RenderTargetView &dest, + const gl::Box &destArea, + const gl::Extents &destSize, + const gl::Rectangle *scissor, + GLenum destFormat, + GLenum destTypeForDownsampling, + GLenum filter, + bool maskOffAlpha, + bool unpackPremultiplyAlpha, + bool unpackUnmultiplyAlpha); + + angle::Result copyStencil(const gl::Context *context, + const TextureHelper11 &source, + unsigned int sourceSubresource, + const gl::Box &sourceArea, + const gl::Extents &sourceSize, + const TextureHelper11 &dest, + unsigned int destSubresource, + const gl::Box &destArea, + const gl::Extents &destSize, + const gl::Rectangle *scissor); + + angle::Result copyDepth(const gl::Context *context, + const d3d11::SharedSRV &source, + const gl::Box &sourceArea, + const gl::Extents &sourceSize, + const d3d11::DepthStencilView &dest, + const gl::Box &destArea, + const gl::Extents &destSize, + const gl::Rectangle *scissor); + + angle::Result copyDepthStencil(const gl::Context *context, + const TextureHelper11 &source, + unsigned int sourceSubresource, + const gl::Box &sourceArea, + const gl::Extents &sourceSize, + const TextureHelper11 &dest, + unsigned int destSubresource, + const gl::Box &destArea, + const gl::Extents &destSize, + const gl::Rectangle *scissor); + + angle::Result resolveDepth(const gl::Context *context, + RenderTarget11 *depth, + TextureHelper11 *textureOut); + + angle::Result resolveStencil(const gl::Context *context, + RenderTarget11 *depthStencil, + bool alsoDepth, + TextureHelper11 *textureOut); + + using BlitConvertFunction = void(const gl::Box &sourceArea, + const gl::Box &destArea, + const gl::Rectangle &clipRect, + const gl::Extents &sourceSize, + unsigned int sourceRowPitch, + unsigned int destRowPitch, + ptrdiff_t readOffset, + ptrdiff_t writeOffset, + size_t copySize, + size_t srcPixelStride, + size_t destPixelStride, + const uint8_t *sourceData, + uint8_t *destData); + + private: + enum BlitShaderOperation : unsigned int; + enum BlitShaderType : unsigned int; + enum SwizzleShaderType + { + SWIZZLESHADER_INVALID, + SWIZZLESHADER_2D_FLOAT, + SWIZZLESHADER_2D_UINT, + SWIZZLESHADER_2D_INT, + SWIZZLESHADER_CUBE_FLOAT, + SWIZZLESHADER_CUBE_UINT, + SWIZZLESHADER_CUBE_INT, + SWIZZLESHADER_3D_FLOAT, + SWIZZLESHADER_3D_UINT, + SWIZZLESHADER_3D_INT, + SWIZZLESHADER_ARRAY_FLOAT, + SWIZZLESHADER_ARRAY_UINT, + SWIZZLESHADER_ARRAY_INT, + }; + + typedef void (*WriteVertexFunction)(const gl::Box &sourceArea, + const gl::Extents &sourceSize, + const gl::Box &destArea, + const gl::Extents &destSize, + void *outVertices, + unsigned int *outStride, + unsigned int *outVertexCount, + D3D11_PRIMITIVE_TOPOLOGY *outTopology); + + enum ShaderDimension + { + SHADER_INVALID, + SHADER_2D, + SHADER_3D, + SHADER_2DARRAY + }; + + struct Shader + { + Shader(); + Shader(Shader &&other); + ~Shader(); + Shader &operator=(Shader &&other); + + ShaderDimension dimension; + d3d11::PixelShader pixelShader; + }; + + struct ShaderSupport + { + const d3d11::InputLayout *inputLayout; + const d3d11::VertexShader *vertexShader; + const d3d11::GeometryShader *geometryShader; + WriteVertexFunction vertexWriteFunction; + }; + + angle::Result initResources(const gl::Context *context); + + angle::Result getShaderSupport(const gl::Context *context, + const Shader &shader, + ShaderSupport *supportOut); + + static BlitShaderOperation getBlitShaderOperation(GLenum destinationFormat, + GLenum sourceFormat, + bool isSrcSigned, + bool isDestSigned, + bool unpackPremultiplyAlpha, + bool unpackUnmultiplyAlpha, + GLenum destTypeForDownsampling); + + static BlitShaderType getBlitShaderType(BlitShaderOperation operation, + ShaderDimension dimension); + + static SwizzleShaderType GetSwizzleShaderType(GLenum type, D3D11_SRV_DIMENSION dimensionality); + + angle::Result copyDepthStencilImpl(const gl::Context *context, + const TextureHelper11 &source, + unsigned int sourceSubresource, + const gl::Box &sourceArea, + const gl::Extents &sourceSize, + const TextureHelper11 &dest, + unsigned int destSubresource, + const gl::Box &destArea, + const gl::Extents &destSize, + const gl::Rectangle *scissor, + bool stencilOnly); + + angle::Result copyAndConvertImpl(const gl::Context *context, + const TextureHelper11 &source, + unsigned int sourceSubresource, + const gl::Box &sourceArea, + const gl::Extents &sourceSize, + const TextureHelper11 &destStaging, + const gl::Box &destArea, + const gl::Extents &destSize, + const gl::Rectangle *scissor, + size_t readOffset, + size_t writeOffset, + size_t copySize, + size_t srcPixelStride, + size_t destPixelStride, + BlitConvertFunction *convertFunction); + + angle::Result copyAndConvert(const gl::Context *context, + const TextureHelper11 &source, + unsigned int sourceSubresource, + const gl::Box &sourceArea, + const gl::Extents &sourceSize, + const TextureHelper11 &dest, + unsigned int destSubresource, + const gl::Box &destArea, + const gl::Extents &destSize, + const gl::Rectangle *scissor, + size_t readOffset, + size_t writeOffset, + size_t copySize, + size_t srcPixelStride, + size_t destPixelStride, + BlitConvertFunction *convertFunction); + + angle::Result mapBlitShader(const gl::Context *context, BlitShaderType blitShaderType); + angle::Result addBlitShaderToMap(const gl::Context *context, + BlitShaderType blitShaderType, + ShaderDimension dimension, + const ShaderData &shaderData, + const char *name); + + angle::Result getBlitShader(const gl::Context *context, + GLenum destFormat, + GLenum sourceFormat, + bool isSrcSigned, + bool isDestSigned, + bool unpackPremultiplyAlpha, + bool unpackUnmultiplyAlpha, + GLenum destTypeForDownsampling, + ShaderDimension dimension, + const Shader **shaderOut); + angle::Result getSwizzleShader(const gl::Context *context, + GLenum type, + D3D11_SRV_DIMENSION viewDimension, + const Shader **shaderOut); + + angle::Result addSwizzleShaderToMap(const gl::Context *context, + SwizzleShaderType swizzleShaderType, + ShaderDimension dimension, + const ShaderData &shaderData, + const char *name); + + void clearShaderMap(); + void releaseResolveDepthStencilResources(); + angle::Result initResolveDepthOnly(const gl::Context *context, + const d3d11::Format &format, + const gl::Extents &extents); + angle::Result initResolveDepthStencil(const gl::Context *context, const gl::Extents &extents); + + Renderer11 *mRenderer; + + std::map mBlitShaderMap; + std::map mSwizzleShaderMap; + + bool mResourcesInitialized; + d3d11::Buffer mVertexBuffer; + d3d11::SamplerState mPointSampler; + d3d11::SamplerState mLinearSampler; + d3d11::RasterizerState mScissorEnabledRasterizerState; + d3d11::RasterizerState mScissorDisabledRasterizerState; + d3d11::DepthStencilState mDepthStencilState; + + d3d11::LazyInputLayout mQuad2DIL; + d3d11::LazyShader mQuad2DVS; + d3d11::LazyShader mDepthPS; + + d3d11::LazyInputLayout mQuad3DIL; + d3d11::LazyShader mQuad3DVS; + d3d11::LazyShader mQuad3DGS; + + d3d11::LazyBlendState mAlphaMaskBlendState; + + d3d11::Buffer mSwizzleCB; + + d3d11::LazyShader mResolveDepthStencilVS; + d3d11::LazyShader mResolveDepthPS; + d3d11::LazyShader mResolveDepthStencilPS; + d3d11::LazyShader mResolveStencilPS; + d3d11::ShaderResourceView mStencilSRV; + TextureHelper11 mResolvedDepthStencil; + d3d11::RenderTargetView mResolvedDepthStencilRTView; + TextureHelper11 mResolvedDepth; + d3d11::DepthStencilView mResolvedDepthDSView; +}; + +} // namespace rx + +#endif // LIBANGLE_RENDERER_D3D_D3D11_BLIT11_H_ -- cgit v1.2.3