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() 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. // we always force a 4-byte aligned bpr.
uint32_t alignment = 1; uint32_t alignment = 1;
if (flags & ISurfaceComposer::eGPU) { if ((flags & ISurfaceComposer::eGPU) && (mFlinger->getGPU() != 0)) {
// FIXME: this value should come from the h/w // FIXME: this value should come from the h/w
alignment = 8; alignment = 8;
// FIXME: this is msm7201A specific, as its GPU only supports // 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, status_t SurfaceFlinger::requestGPU(const sp<IGPUCallback>& callback,
gpu_info_t* gpu) gpu_info_t* gpu)
{ {
if (mGPU == 0)
return INVALID_OPERATION;
IPCThreadState* ipc = IPCThreadState::self(); IPCThreadState* ipc = IPCThreadState::self();
const int pid = ipc->getCallingPid(); const int pid = ipc->getCallingPid();
status_t err = mGPU->request(pid, callback, gpu); status_t err = mGPU->request(pid, callback, gpu);
@@ -249,6 +252,9 @@ status_t SurfaceFlinger::requestGPU(const sp<IGPUCallback>& callback,
status_t SurfaceFlinger::revokeGPU() status_t SurfaceFlinger::revokeGPU()
{ {
if (mGPU == 0)
return INVALID_OPERATION;
return mGPU->friendlyRevoke(); return mGPU->friendlyRevoke();
} }
@@ -1600,10 +1606,14 @@ status_t SurfaceFlinger::onTransact(
} }
return NO_ERROR; return NO_ERROR;
case 1005: // ask GPU revoke case 1005: // ask GPU revoke
mGPU->friendlyRevoke(); if (mGPU != 0) {
mGPU->friendlyRevoke();
}
return NO_ERROR; return NO_ERROR;
case 1006: // revoke GPU case 1006: // revoke GPU
mGPU->unconditionalRevoke(); if (mGPU != 0) {
mGPU->unconditionalRevoke();
}
return NO_ERROR; return NO_ERROR;
case 1007: // set mFreezeCount case 1007: // set mFreezeCount
mFreezeCount = data.readInt32(); 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 // FIXME: this is msm7201A specific, where gpu surfaces may not be secure
if (!(flags & ISurfaceComposer::eSecure)) { if (!(flags & ISurfaceComposer::eSecure)) {
// if GPU doesn't work, we try eHardware // if GPU doesn't work, we try eHardware