Fix ordering of texture->upload arguments
Caught by scatter-shotting GL_CHECKPOINTS which seem generally useful to have Bug: 26609444 Change-Id: Ie31d9297d8dae56405126720f338b4256c8bae77
This commit is contained in:
@@ -784,7 +784,9 @@ void BakedOpDispatcher::onCopyFromLayerOp(BakedOpRenderer& renderer, const CopyF
|
||||
.build();
|
||||
renderer.renderGlop(state, glop);
|
||||
}
|
||||
GL_CHECKPOINT();
|
||||
renderer.renderState().layerPool().putOrDelete(*op.layerHandle);
|
||||
GL_CHECKPOINT();
|
||||
}
|
||||
|
||||
} // namespace uirenderer
|
||||
|
||||
@@ -74,7 +74,8 @@ void BakedOpRenderer::endLayer() {
|
||||
|
||||
// Detach the texture from the FBO
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
|
||||
LOG_ALWAYS_FATAL_IF(GLUtils::dumpGLErrors(), "endLayer FAILED");
|
||||
LOG_ALWAYS_FATAL_IF(GLUtils::dumpGLErrors(), "endLayer FAILED, bound fbo = %u",
|
||||
mRenderState.getFramebuffer());
|
||||
mRenderState.deleteFramebuffer(mRenderTarget.frameBufferId);
|
||||
mRenderTarget.frameBufferId = 0;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "DisplayList.h"
|
||||
#include "LayerBuilder.h"
|
||||
#include "RecordedOp.h"
|
||||
#include "utils/GLUtils.h"
|
||||
|
||||
#include <vector>
|
||||
#include <unordered_map>
|
||||
@@ -99,22 +100,30 @@ public:
|
||||
// Relay through layers in reverse order, since layers
|
||||
// later in the list will be drawn by earlier ones
|
||||
for (int i = mLayerBuilders.size() - 1; i >= 1; i--) {
|
||||
GL_CHECKPOINT();
|
||||
LayerBuilder& layer = *(mLayerBuilders[i]);
|
||||
if (layer.renderNode) {
|
||||
// cached HW layer - can't skip layer if empty
|
||||
renderer.startRepaintLayer(layer.offscreenBuffer, layer.repaintRect);
|
||||
GL_CHECKPOINT();
|
||||
layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
|
||||
GL_CHECKPOINT();
|
||||
renderer.endLayer();
|
||||
} else if (!layer.empty()) { // save layer - skip entire layer if empty
|
||||
layer.offscreenBuffer = renderer.startTemporaryLayer(layer.width, layer.height);
|
||||
GL_CHECKPOINT();
|
||||
layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
|
||||
GL_CHECKPOINT();
|
||||
renderer.endLayer();
|
||||
}
|
||||
}
|
||||
|
||||
GL_CHECKPOINT();
|
||||
const LayerBuilder& fbo0 = *(mLayerBuilders[0]);
|
||||
renderer.startFrame(fbo0.width, fbo0.height, fbo0.repaintRect);
|
||||
GL_CHECKPOINT();
|
||||
fbo0.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
|
||||
GL_CHECKPOINT();
|
||||
renderer.endFrame(fbo0.repaintRect);
|
||||
}
|
||||
|
||||
|
||||
@@ -277,9 +277,9 @@ void GradientCache::generateTexture(uint32_t* colors, float* positions,
|
||||
|
||||
if (mUseFloatTexture) {
|
||||
// We have to use GL_RGBA16F because GL_RGBA32F does not support filtering
|
||||
texture->upload(width, height, GL_RGBA16F, GL_RGBA, GL_FLOAT, pixels);
|
||||
texture->upload(GL_RGBA16F, width, height, GL_RGBA, GL_FLOAT, pixels);
|
||||
} else {
|
||||
texture->upload(width, height, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
||||
texture->upload(GL_RGBA, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
||||
}
|
||||
|
||||
texture->setFilter(GL_LINEAR);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
#include "Caches.h"
|
||||
#include "Texture.h"
|
||||
#include "utils/GLUtils.h"
|
||||
#include "utils/TraceUtils.h"
|
||||
|
||||
#include <utils/Log.h>
|
||||
@@ -93,22 +94,28 @@ bool Texture::updateSize(uint32_t width, uint32_t height, GLint format) {
|
||||
|
||||
void Texture::upload(GLint internalformat, uint32_t width, uint32_t height,
|
||||
GLenum format, GLenum type, const void* pixels) {
|
||||
GL_CHECKPOINT();
|
||||
bool needsAlloc = updateSize(width, height, internalformat);
|
||||
if (!needsAlloc && !pixels) {
|
||||
return;
|
||||
}
|
||||
mCaches.textureState().activateTexture(0);
|
||||
GL_CHECKPOINT();
|
||||
if (!mId) {
|
||||
glGenTextures(1, &mId);
|
||||
needsAlloc = true;
|
||||
}
|
||||
GL_CHECKPOINT();
|
||||
mCaches.textureState().bindTexture(GL_TEXTURE_2D, mId);
|
||||
GL_CHECKPOINT();
|
||||
if (needsAlloc) {
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, mFormat, mWidth, mHeight, 0,
|
||||
format, type, pixels);
|
||||
GL_CHECKPOINT();
|
||||
} else {
|
||||
glTexSubImage2D(GL_TEXTURE_2D, 0, mFormat, mWidth, mHeight, 0,
|
||||
format, type, pixels);
|
||||
GL_CHECKPOINT();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -241,6 +241,8 @@ void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix) {
|
||||
const Glop::Mesh::Indices& indices = mesh.indices;
|
||||
const Glop::Fill& fill = glop.fill;
|
||||
|
||||
GL_CHECKPOINT();
|
||||
|
||||
// ---------------------------------------------
|
||||
// ---------- Program + uniform setup ----------
|
||||
// ---------------------------------------------
|
||||
@@ -284,6 +286,8 @@ void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix) {
|
||||
roundedOutRadius);
|
||||
}
|
||||
|
||||
GL_CHECKPOINT();
|
||||
|
||||
// --------------------------------
|
||||
// ---------- Mesh setup ----------
|
||||
// --------------------------------
|
||||
@@ -335,11 +339,15 @@ void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix) {
|
||||
// Shader uniforms
|
||||
SkiaShader::apply(*mCaches, fill.skiaShaderData);
|
||||
|
||||
GL_CHECKPOINT();
|
||||
|
||||
// ------------------------------------
|
||||
// ---------- GL state setup ----------
|
||||
// ------------------------------------
|
||||
blend().setFactors(glop.blend.src, glop.blend.dst);
|
||||
|
||||
GL_CHECKPOINT();
|
||||
|
||||
// ------------------------------------
|
||||
// ---------- Actual drawing ----------
|
||||
// ------------------------------------
|
||||
@@ -368,6 +376,8 @@ void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix) {
|
||||
glDrawArrays(mesh.primitiveMode, 0, mesh.elementCount);
|
||||
}
|
||||
|
||||
GL_CHECKPOINT();
|
||||
|
||||
// -----------------------------------
|
||||
// ---------- Mesh teardown ----------
|
||||
// -----------------------------------
|
||||
@@ -377,6 +387,8 @@ void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix) {
|
||||
if (vertices.attribFlags & VertexAttribFlags::Color) {
|
||||
glDisableVertexAttribArray(colorLocation);
|
||||
}
|
||||
|
||||
GL_CHECKPOINT();
|
||||
}
|
||||
|
||||
void RenderState::dump() {
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "renderstate/RenderState.h"
|
||||
#include "renderstate/Stencil.h"
|
||||
#include "protos/hwui.pb.h"
|
||||
#include "utils/GLUtils.h"
|
||||
#include "utils/TimeUtils.h"
|
||||
|
||||
#if HWUI_NEW_OPS
|
||||
@@ -213,10 +214,13 @@ void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo,
|
||||
// node(s) are non client / filler nodes.
|
||||
info.mode = (node.get() == target ? TreeInfo::MODE_FULL : TreeInfo::MODE_RT_ONLY);
|
||||
node->prepareTree(info);
|
||||
GL_CHECKPOINT();
|
||||
}
|
||||
mAnimationContext->runRemainingAnimations(info);
|
||||
GL_CHECKPOINT();
|
||||
|
||||
freePrefetechedLayers();
|
||||
GL_CHECKPOINT();
|
||||
|
||||
if (CC_UNLIKELY(!mNativeWindow.get())) {
|
||||
mCurrentFrameInfo->addFlag(FrameInfoFlags::SkippedFrame);
|
||||
@@ -463,6 +467,9 @@ void CanvasContext::draw() {
|
||||
|
||||
bool drew = mCanvas->finish();
|
||||
#endif
|
||||
|
||||
GL_CHECKPOINT();
|
||||
|
||||
// Even if we decided to cancel the frame, from the perspective of jank
|
||||
// metrics the frame was swapped at this point
|
||||
mCurrentFrameInfo->markSwapBuffers();
|
||||
|
||||
@@ -16,9 +16,18 @@
|
||||
#ifndef GLUTILS_H
|
||||
#define GLUTILS_H
|
||||
|
||||
#include <cutils/log.h>
|
||||
|
||||
namespace android {
|
||||
namespace uirenderer {
|
||||
|
||||
#if 0
|
||||
#define GL_CHECKPOINT() LOG_ALWAYS_FATAL_IF(GLUtils::dumpGLErrors(),\
|
||||
"GL errors! %s:%d", __FILE__, __LINE__)
|
||||
#else
|
||||
#define GL_CHECKPOINT()
|
||||
#endif
|
||||
|
||||
class GLUtils {
|
||||
public:
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user