Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c540849 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Fix ordering of texture->upload arguments"

parents 6e415b69 9372ac36
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -784,7 +784,9 @@ void BakedOpDispatcher::onCopyFromLayerOp(BakedOpRenderer& renderer, const CopyF
                .build();
                .build();
        renderer.renderGlop(state, glop);
        renderer.renderGlop(state, glop);
    }
    }
    GL_CHECKPOINT();
    renderer.renderState().layerPool().putOrDelete(*op.layerHandle);
    renderer.renderState().layerPool().putOrDelete(*op.layerHandle);
    GL_CHECKPOINT();
}
}


} // namespace uirenderer
} // namespace uirenderer
+2 −1
Original line number Original line Diff line number Diff line
@@ -74,7 +74,8 @@ void BakedOpRenderer::endLayer() {


    // Detach the texture from the FBO
    // Detach the texture from the FBO
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
    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);
    mRenderState.deleteFramebuffer(mRenderTarget.frameBufferId);
    mRenderTarget.frameBufferId = 0;
    mRenderTarget.frameBufferId = 0;
}
}
+9 −0
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@
#include "DisplayList.h"
#include "DisplayList.h"
#include "LayerBuilder.h"
#include "LayerBuilder.h"
#include "RecordedOp.h"
#include "RecordedOp.h"
#include "utils/GLUtils.h"


#include <vector>
#include <vector>
#include <unordered_map>
#include <unordered_map>
@@ -99,22 +100,30 @@ public:
        // Relay through layers in reverse order, since layers
        // Relay through layers in reverse order, since layers
        // later in the list will be drawn by earlier ones
        // later in the list will be drawn by earlier ones
        for (int i = mLayerBuilders.size() - 1; i >= 1; i--) {
        for (int i = mLayerBuilders.size() - 1; i >= 1; i--) {
            GL_CHECKPOINT();
            LayerBuilder& layer = *(mLayerBuilders[i]);
            LayerBuilder& layer = *(mLayerBuilders[i]);
            if (layer.renderNode) {
            if (layer.renderNode) {
                // cached HW layer - can't skip layer if empty
                // cached HW layer - can't skip layer if empty
                renderer.startRepaintLayer(layer.offscreenBuffer, layer.repaintRect);
                renderer.startRepaintLayer(layer.offscreenBuffer, layer.repaintRect);
                GL_CHECKPOINT();
                layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
                layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
                GL_CHECKPOINT();
                renderer.endLayer();
                renderer.endLayer();
            } else if (!layer.empty()) { // save layer - skip entire layer if empty
            } else if (!layer.empty()) { // save layer - skip entire layer if empty
                layer.offscreenBuffer = renderer.startTemporaryLayer(layer.width, layer.height);
                layer.offscreenBuffer = renderer.startTemporaryLayer(layer.width, layer.height);
                GL_CHECKPOINT();
                layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
                layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
                GL_CHECKPOINT();
                renderer.endLayer();
                renderer.endLayer();
            }
            }
        }
        }


        GL_CHECKPOINT();
        const LayerBuilder& fbo0 = *(mLayerBuilders[0]);
        const LayerBuilder& fbo0 = *(mLayerBuilders[0]);
        renderer.startFrame(fbo0.width, fbo0.height, fbo0.repaintRect);
        renderer.startFrame(fbo0.width, fbo0.height, fbo0.repaintRect);
        GL_CHECKPOINT();
        fbo0.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
        fbo0.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
        GL_CHECKPOINT();
        renderer.endFrame(fbo0.repaintRect);
        renderer.endFrame(fbo0.repaintRect);
    }
    }


+2 −2
Original line number Original line Diff line number Diff line
@@ -277,9 +277,9 @@ void GradientCache::generateTexture(uint32_t* colors, float* positions,


    if (mUseFloatTexture) {
    if (mUseFloatTexture) {
        // We have to use GL_RGBA16F because GL_RGBA32F does not support filtering
        // 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 {
    } 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);
    texture->setFilter(GL_LINEAR);
+7 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


#include "Caches.h"
#include "Caches.h"
#include "Texture.h"
#include "Texture.h"
#include "utils/GLUtils.h"
#include "utils/TraceUtils.h"
#include "utils/TraceUtils.h"


#include <utils/Log.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,
void Texture::upload(GLint internalformat, uint32_t width, uint32_t height,
        GLenum format, GLenum type, const void* pixels) {
        GLenum format, GLenum type, const void* pixels) {
    GL_CHECKPOINT();
    bool needsAlloc = updateSize(width, height, internalformat);
    bool needsAlloc = updateSize(width, height, internalformat);
    if (!needsAlloc && !pixels) {
    if (!needsAlloc && !pixels) {
        return;
        return;
    }
    }
    mCaches.textureState().activateTexture(0);
    mCaches.textureState().activateTexture(0);
    GL_CHECKPOINT();
    if (!mId) {
    if (!mId) {
        glGenTextures(1, &mId);
        glGenTextures(1, &mId);
        needsAlloc = true;
        needsAlloc = true;
    }
    }
    GL_CHECKPOINT();
    mCaches.textureState().bindTexture(GL_TEXTURE_2D, mId);
    mCaches.textureState().bindTexture(GL_TEXTURE_2D, mId);
    GL_CHECKPOINT();
    if (needsAlloc) {
    if (needsAlloc) {
        glTexImage2D(GL_TEXTURE_2D, 0, mFormat, mWidth, mHeight, 0,
        glTexImage2D(GL_TEXTURE_2D, 0, mFormat, mWidth, mHeight, 0,
                format, type, pixels);
                format, type, pixels);
        GL_CHECKPOINT();
    } else {
    } else {
        glTexSubImage2D(GL_TEXTURE_2D, 0, mFormat, mWidth, mHeight, 0,
        glTexSubImage2D(GL_TEXTURE_2D, 0, mFormat, mWidth, mHeight, 0,
                format, type, pixels);
                format, type, pixels);
        GL_CHECKPOINT();
    }
    }
}
}


Loading