diff --git a/src/kits/game/WindowScreen.cpp b/src/kits/game/WindowScreen.cpp index 468c441a24..0e2156a4ba 100644 --- a/src/kits/game/WindowScreen.cpp +++ b/src/kits/game/WindowScreen.cpp @@ -991,16 +991,16 @@ BWindowScreen::InitClone() CALLED(); AppServerLink link; - link.StartMessage(AS_GET_ACCELERANT_NAME); + link.StartMessage(AS_GET_ACCELERANT_PATH); link.Attach(fScreenIndex); status_t status = B_ERROR; if (link.FlushWithReply(status) < B_OK || status < B_OK) return status; - BString accelerantName; - link.ReadString(accelerantName); - fAddonImage = load_add_on(accelerantName.String()); + BString accelerantPath; + link.ReadString(accelerantPath); + fAddonImage = load_add_on(accelerantPath.String()); if (fAddonImage < B_OK) { printf("InitClone: cannot load accelerant image\n"); return fAddonImage; @@ -1025,12 +1025,12 @@ BWindowScreen::InitClone() } status = B_ERROR; - link.StartMessage(AS_GET_DRIVER_NAME); + link.StartMessage(AS_GET_DRIVER_PATH); link.Attach(fScreenIndex); if (link.FlushWithReply(status) == B_OK && status == B_OK) { - BString driverName; - link.ReadString(driverName); - status = clone((void *)driverName.String()); + BString driverPath; + link.ReadString(driverPath); + status = clone((void *)driverPath.String()); } if (status < B_OK) { diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp index 69460598b6..0dbae5b16a 100644 --- a/src/servers/app/ServerApp.cpp +++ b/src/servers/app/ServerApp.cpp @@ -2280,6 +2280,36 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver& link) fLink.Flush(); break; } + + case AS_GET_ACCELERANT_PATH: + { + int32 index; + fLink.Read(&index); + + BString path; + status_t status = fDesktop->HWInterface()->GetAccelerantPath(path); + fLink.StartMessage(status); + if (status == B_OK) + fLink.AttachString(path.String()); + + fLink.Flush(); + break; + } + + case AS_GET_DRIVER_PATH: + { + int32 index; + fLink.Read(&index); + + BString path; + status_t status = fDesktop->HWInterface()->GetDriverPath(path); + fLink.StartMessage(status); + if (status == B_OK) + fLink.AttachString(path.String()); + + fLink.Flush(); + break; + } default: printf("ServerApp %s received unhandled message code %ld\n", diff --git a/src/servers/app/drawing/AccelerantHWInterface.cpp b/src/servers/app/drawing/AccelerantHWInterface.cpp index 3f504fdbfb..32b82db52d 100644 --- a/src/servers/app/drawing/AccelerantHWInterface.cpp +++ b/src/servers/app/drawing/AccelerantHWInterface.cpp @@ -616,6 +616,26 @@ AccelerantHWInterface::DPMSCapabilities() return fAccDPMSCapabilities(); } + +status_t +AccelerantHWInterface::GetAccelerantPath(BString &string) +{ + image_info info; + status_t status = get_image_info(fAccelerantImage, &info); + if (status == B_OK) + string = info.name; + return status; +} + + +status_t +AccelerantHWInterface::GetDriverPath(BString &string) +{ + // TODO: Get path from fCardFD: is that possible ? + return B_ERROR; +} + + // AvailableHardwareAcceleration uint32 AccelerantHWInterface::AvailableHWAcceleration() const diff --git a/src/servers/app/drawing/AccelerantHWInterface.h b/src/servers/app/drawing/AccelerantHWInterface.h index dd9eec45a7..b35b1c25b0 100644 --- a/src/servers/app/drawing/AccelerantHWInterface.h +++ b/src/servers/app/drawing/AccelerantHWInterface.h @@ -47,6 +47,9 @@ public: virtual uint32 DPMSMode(); virtual uint32 DPMSCapabilities(); + virtual status_t GetAccelerantPath(BString &path); + virtual status_t GetDriverPath(BString &path); + // query for available hardware accleration and perform it virtual uint32 AvailableHWAcceleration() const; diff --git a/src/servers/app/drawing/HWInterface.cpp b/src/servers/app/drawing/HWInterface.cpp index cf38907116..685ee8e38c 100644 --- a/src/servers/app/drawing/HWInterface.cpp +++ b/src/servers/app/drawing/HWInterface.cpp @@ -38,6 +38,21 @@ HWInterface::Initialize() return MultiLocker::InitCheck(); } + +status_t +HWInterface::GetAccelerantPath(BString &path) +{ + return B_ERROR; +} + + +status_t +HWInterface::GetDriverPath(BString &path) +{ + return B_ERROR; +} + + // SetCursor void HWInterface::SetCursor(ServerCursor* cursor) diff --git a/src/servers/app/drawing/HWInterface.h b/src/servers/app/drawing/HWInterface.h index 59a33fffc5..8c7deb980f 100644 --- a/src/servers/app/drawing/HWInterface.h +++ b/src/servers/app/drawing/HWInterface.h @@ -19,6 +19,7 @@ class RenderingBuffer; class RGBColor; class ServerCursor; class UpdateQueue; +class BString; enum { HW_ACC_COPY_REGION = 0x00000001, @@ -58,6 +59,9 @@ class HWInterface : public MultiLocker { virtual uint32 DPMSMode() = 0; virtual uint32 DPMSCapabilities() = 0; + virtual status_t GetAccelerantPath(BString &path); + virtual status_t GetDriverPath(BString &path); + // query for available hardware accleration and perform it // (Initialize() must have been called already) virtual uint32 AvailableHWAcceleration() const