Hash :
5b419533
Author :
Date :
2020-11-03T13:33:44
GL: Implement EXT_YUV_target Add test coverage of YUV format sampling as RGB or directly as YUV and rendering as YUV using layout(yuv). Initializing YUV AHardwareBuffers requires Android API 29 so ANGLE must be compiled with: android32_ndk_api_level = 29 android64_ndk_api_level = 29 The following tests can still run with Android API 26 because they don't need to initialize the buffer: ImageTestES3.ClearYUVAHB ImageTestES3.YUVValidation Bug: angleproject:4852 Bug: b/172649538 Change-Id: I4fe9afb2a68fb827dc5a5732b213b5eb60d585ac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2517562 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@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
//
// Copyright 2019 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.
//
#ifndef LIBANGLE_RENDERER_D3D_D3D11_EXTERNALIMAGESIBLINGIMPL11_H_
#define LIBANGLE_RENDERER_D3D_D3D11_EXTERNALIMAGESIBLINGIMPL11_H_
#include "libANGLE/renderer/ImageImpl.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
namespace rx
{
class Renderer11;
class RenderTargetD3D;
class ExternalImageSiblingImpl11 : public ExternalImageSiblingImpl
{
public:
ExternalImageSiblingImpl11(Renderer11 *renderer,
EGLClientBuffer clientBuffer,
const egl::AttributeMap &attribs);
~ExternalImageSiblingImpl11() override;
// ExternalImageSiblingImpl interface
egl::Error initialize(const egl::Display *display) override;
gl::Format getFormat() const override;
bool isRenderable(const gl::Context *context) const override;
bool isTexturable(const gl::Context *context) const override;
bool isYUV() const override;
gl::Extents getSize() const override;
size_t getSamples() const override;
// FramebufferAttachmentObjectImpl interface
angle::Result getAttachmentRenderTarget(const gl::Context *context,
GLenum binding,
const gl::ImageIndex &imageIndex,
GLsizei samples,
FramebufferAttachmentRenderTarget **rtOut) override;
angle::Result initializeContents(const gl::Context *context,
const gl::ImageIndex &imageIndex) override;
private:
angle::Result createRenderTarget(const gl::Context *context);
Renderer11 *mRenderer;
EGLClientBuffer mBuffer;
egl::AttributeMap mAttribs;
TextureHelper11 mTexture;
gl::Format mFormat = gl::Format::Invalid();
bool mIsRenderable = false;
bool mIsTexturable = false;
bool mYUV = false;
EGLint mWidth = 0;
EGLint mHeight = 0;
GLsizei mSamples = 0;
std::unique_ptr<RenderTargetD3D> mRenderTarget;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_D3D_D3D11_EXTERNALIMAGESIBLINGIMPL11_H_