Merge change 626 into donut

* changes:
  fix 1803886 android15 Translucent GLSurfaceView demo does not display properly
This commit is contained in:
Android (Google) Code Review
2009-04-28 16:06:32 -07:00
4 changed files with 19 additions and 5 deletions

View File

@@ -573,7 +573,11 @@ void GPUHardware::binderDied(const wp<IBinder>& who)
sp<GPUHardwareInterface> GPUFactory::getGPU()
{
return new GPUHardware();
sp<GPUHardwareInterface> gpu;
if (access("/dev/hw3d", F_OK) == 0) {
gpu = new GPUHardware();
}
return gpu;
}
// ---------------------------------------------------------------------------

View File

@@ -108,7 +108,7 @@ status_t Layer::setBuffers( Client* client,
// we always force a 4-byte aligned bpr.
uint32_t alignment = 1;
if (flags & ISurfaceComposer::eGPU) {
if ((flags & ISurfaceComposer::eGPU) && (mFlinger->getGPU() != 0)) {
// FIXME: this value should come from the h/w
alignment = 8;
// FIXME: this is msm7201A specific, as its GPU only supports

View File

@@ -241,6 +241,9 @@ sp<IMemory> SurfaceFlinger::getCblk() const
status_t SurfaceFlinger::requestGPU(const sp<IGPUCallback>& callback,
gpu_info_t* gpu)
{
if (mGPU == 0)
return INVALID_OPERATION;
IPCThreadState* ipc = IPCThreadState::self();
const int pid = ipc->getCallingPid();
status_t err = mGPU->request(pid, callback, gpu);
@@ -249,6 +252,9 @@ status_t SurfaceFlinger::requestGPU(const sp<IGPUCallback>& callback,
status_t SurfaceFlinger::revokeGPU()
{
if (mGPU == 0)
return INVALID_OPERATION;
return mGPU->friendlyRevoke();
}
@@ -1600,10 +1606,14 @@ status_t SurfaceFlinger::onTransact(
}
return NO_ERROR;
case 1005: // ask GPU revoke
mGPU->friendlyRevoke();
if (mGPU != 0) {
mGPU->friendlyRevoke();
}
return NO_ERROR;
case 1006: // revoke GPU
mGPU->unconditionalRevoke();
if (mGPU != 0) {
mGPU->unconditionalRevoke();
}
return NO_ERROR;
case 1007: // set mFreezeCount
mFreezeCount = data.readInt32();

View File

@@ -98,7 +98,7 @@ sp<MemoryDealer> SurfaceHeapManager::createHeap(
}
}
if (flags & ISurfaceComposer::eGPU) {
if ((flags & ISurfaceComposer::eGPU) && (mFlinger->getGPU() != 0)) {
// FIXME: this is msm7201A specific, where gpu surfaces may not be secure
if (!(flags & ISurfaceComposer::eSecure)) {
// if GPU doesn't work, we try eHardware