Reland "TextureView Vulkan support and optimized OpenGL draw"
Fix an issue with incorrect texture matrix, when there is 90/270 rotation.
This happened, because after refactoring SkImage has buffer width/height,
instead of layer width/height.
This reverts commit a683eb3945320f592f58705c3c31b3c044f4bd72.
Bug: 113673613
Test: Ran TextureView CTS and lensblur in camera app
Change-Id: If3bcf9cd5195de09fd67a753708568a8e3ca3a9a
diff --git a/libs/hwui/DeferredLayerUpdater.h b/libs/hwui/DeferredLayerUpdater.h
index fe3ee7a..4c323b8 100644
--- a/libs/hwui/DeferredLayerUpdater.h
+++ b/libs/hwui/DeferredLayerUpdater.h
@@ -17,18 +17,19 @@
#pragma once
#include <SkColorFilter.h>
+#include <SkImage.h>
#include <SkMatrix.h>
#include <cutils/compiler.h>
-#include <gui/GLConsumer.h>
+#include <map>
#include <system/graphics.h>
#include <utils/StrongPointer.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
+#include "surfacetexture/SurfaceTexture.h"
#include "Layer.h"
#include "Rect.h"
-#include "renderthread/RenderThread.h"
namespace android {
namespace uirenderer {
@@ -41,12 +42,7 @@
public:
// Note that DeferredLayerUpdater assumes it is taking ownership of the layer
// and will not call incrementRef on it as a result.
- typedef std::function<Layer*(RenderState& renderState, uint32_t layerWidth,
- uint32_t layerHeight, sk_sp<SkColorFilter> colorFilter, int alpha,
- SkBlendMode mode, bool blend)>
- CreateLayerFn;
- ANDROID_API explicit DeferredLayerUpdater(RenderState& renderState, CreateLayerFn createLayerFn,
- Layer::Api layerApi);
+ ANDROID_API explicit DeferredLayerUpdater(RenderState& renderState);
ANDROID_API ~DeferredLayerUpdater();
@@ -70,13 +66,13 @@
return false;
}
- ANDROID_API void setSurfaceTexture(const sp<GLConsumer>& texture) {
- if (texture.get() != mSurfaceTexture.get()) {
- mSurfaceTexture = texture;
+ ANDROID_API void setSurfaceTexture(const sp<SurfaceTexture>& consumer) {
+ if (consumer.get() != mSurfaceTexture.get()) {
+ mSurfaceTexture = consumer;
- GLenum target = texture->getCurrentTextureTarget();
+ GLenum target = consumer->getCurrentTextureTarget();
LOG_ALWAYS_FATAL_IF(target != GL_TEXTURE_2D && target != GL_TEXTURE_EXTERNAL_OES,
- "set unsupported GLConsumer with target %x", target);
+ "set unsupported SurfaceTexture with target %x", target);
}
}
@@ -97,12 +93,11 @@
void detachSurfaceTexture();
- void updateLayer(bool forceFilter, const float* textureTransform, android_dataspace dataspace);
+ void updateLayer(bool forceFilter, const SkMatrix& textureTransform,
+ android_dataspace dataspace, const sk_sp<SkImage>& layerImage);
void destroyLayer();
- Layer::Api getBackingLayerApi() { return mLayerApi; }
-
private:
RenderState& mRenderState;
@@ -113,17 +108,12 @@
sk_sp<SkColorFilter> mColorFilter;
int mAlpha = 255;
SkBlendMode mMode = SkBlendMode::kSrcOver;
- sp<GLConsumer> mSurfaceTexture;
+ sp<SurfaceTexture> mSurfaceTexture;
SkMatrix* mTransform;
bool mGLContextAttached;
bool mUpdateTexImage;
Layer* mLayer;
- Layer::Api mLayerApi;
- CreateLayerFn mCreateLayerFn;
-
- void doUpdateTexImage();
- void doUpdateVkTexImage();
};
} /* namespace uirenderer */