void BufferManager::dump(Dump& d) { d.append("Buffer Manager status: pool size %d\n", mBufferPool->getCacheSize()); d.append("-------------------------------------------------------------\n"); for (size_t i = 0; i < mBufferPool->getCacheSize(); i++) { BufferMapper *mapper = mBufferPool->getMapper(i); d.append("Buffer %d: handle %#x, (%dx%d), format %d, refCount %d\n", i, mapper->getHandle(), mapper->getWidth(), mapper->getHeight(), mapper->getFormat(), mapper->getRef()); } return; }
bool TngSpritePlane::setDataBuffer(BufferMapper& mapper) { int bpp; int srcX, srcY; int dstX, dstY, dstW, dstH; uint32_t spriteFormat; uint32_t stride; uint32_t linoff; uint32_t planeAlpha; CTRACE(); // setup plane position dstX = mPosition.x; dstY = mPosition.y; dstW = mPosition.w; dstH = mPosition.h; checkPosition(dstX, dstY, dstW, dstH); // setup plane format if (!PixelFormat::convertFormat(mapper.getFormat(), spriteFormat, bpp)) { ETRACE("unsupported format %#x", mapper.getFormat()); return false; } // setup stride and source buffer crop srcX = mapper.getCrop().x; srcY = mapper.getCrop().y; stride = mapper.getStride().rgb.stride; linoff = srcY * stride + srcX * bpp; // setup plane alpha if ((mBlending == HWC_BLENDING_PREMULT) && (mPlaneAlpha == 0)) { planeAlpha = mPlaneAlpha | 0x80000000; } else { // disable plane alpha to offload HW planeAlpha = 0; } // unlikely happen, but still we need make sure linoff is valid if (linoff > (stride * mapper.getHeight())) { ETRACE("invalid source crop"); return false; } // update context mContext.type = DC_SPRITE_PLANE; mContext.ctx.sp_ctx.index = mIndex; mContext.ctx.sp_ctx.pipe = mDevice; // none blending and BRGA format layer,set format to BGRX8888 if (mBlending == HWC_BLENDING_NONE && spriteFormat == PixelFormat::PLANE_PIXEL_FORMAT_BGRA8888) mContext.ctx.sp_ctx.cntr = PixelFormat::PLANE_PIXEL_FORMAT_BGRX8888 | 0x80000000; else mContext.ctx.sp_ctx.cntr = spriteFormat | 0x80000000; mContext.ctx.sp_ctx.linoff = linoff; mContext.ctx.sp_ctx.stride = stride; mContext.ctx.sp_ctx.surf = mapper.getGttOffsetInPage(0) << 12; mContext.ctx.sp_ctx.pos = (dstY & 0xfff) << 16 | (dstX & 0xfff); mContext.ctx.sp_ctx.size = ((dstH - 1) & 0xfff) << 16 | ((dstW - 1) & 0xfff); mContext.ctx.sp_ctx.contalpa = planeAlpha; mContext.ctx.sp_ctx.update_mask = SPRITE_UPDATE_ALL; mContext.gtt_key = (uint64_t)mapper.getCpuAddress(0); VTRACE("cntr = %#x, linoff = %#x, stride = %#x," "surf = %#x, pos = %#x, size = %#x, contalpa = %#x", mContext.ctx.sp_ctx.cntr, mContext.ctx.sp_ctx.linoff, mContext.ctx.sp_ctx.stride, mContext.ctx.sp_ctx.surf, mContext.ctx.sp_ctx.pos, mContext.ctx.sp_ctx.size, mContext.ctx.sp_ctx.contalpa); return true; }