Changeset 50812 in vbox
- Timestamp:
- Mar 18, 2014 5:14:09 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 92856
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/VBoxVideo.h
r50774 r50812 1749 1749 } VBOXCMDVBVA_CTL_ENABLE; 1750 1750 1751 #define VBOXCMDVBVA3DCTL_TYPE_CONNECT 1 1752 #define VBOXCMDVBVA3DCTL_TYPE_DISCONNECT 2 1753 #define VBOXCMDVBVA3DCTL_TYPE_CMD 3 1754 1755 typedef struct VBOXCMDVBVA_3DCTL 1756 { 1757 uint32_t u32Type; 1758 uint32_t u32CmdClientId; 1759 } VBOXCMDVBVA_3DCTL; 1760 1761 typedef struct VBOXCMDVBVA_3DCTL_CONNECT 1762 { 1763 VBOXCMDVBVA_3DCTL Hdr; 1764 uint32_t u32MajorVersion; 1765 uint32_t u32MinorVersion; 1766 uint64_t u64Pid; 1767 } VBOXCMDVBVA_3DCTL_CONNECT; 1768 1769 typedef struct VBOXCMDVBVA_3DCTL_CMD 1770 { 1771 VBOXCMDVBVA_3DCTL Hdr; 1772 VBOXCMDVBVA_HDR Cmd; 1773 } VBOXCMDVBVA_3DCTL_CMD; 1774 1751 1775 #pragma pack() 1752 1776 -
trunk/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
r50799 r50812 2213 2213 } 2214 2214 2215 static int vdmaVBVACtlEnableDisableSubmitInternal(PVBOXVDMAHOST pVdma, VB OXCMDVBVA_CTL_ENABLE *pEnable, PFNVBVAEXHOSTCTL_COMPLETE pfnComplete, void *pvComplete)2215 static int vdmaVBVACtlEnableDisableSubmitInternal(PVBOXVDMAHOST pVdma, VBVAENABLE *pEnable, PFNVBVAEXHOSTCTL_COMPLETE pfnComplete, void *pvComplete) 2216 2216 { 2217 2217 VBVAEXHOSTCTL* pHCtl = VBoxVBVAExHCtlCreate(&pVdma->CmdVbva, VBVAEXHOSTCTL_TYPE_GH_ENABLE_DISABLE); … … 2222 2222 } 2223 2223 2224 pHCtl->u.cmd.pu8Cmd = (uint8_t*) &pEnable->Enable;2225 pHCtl->u.cmd.cbCmd = sizeof ( pEnable->Enable);2224 pHCtl->u.cmd.pu8Cmd = (uint8_t*)pEnable; 2225 pHCtl->u.cmd.cbCmd = sizeof (*pEnable); 2226 2226 int rc = vdmaVBVACtlSubmit(pVdma, pHCtl, VBVAEXHOSTCTL_SOURCE_GUEST, pfnComplete, pvComplete); 2227 2227 if (!RT_SUCCESS(rc)) … … 2236 2236 { 2237 2237 VBoxSHGSMICommandMarkAsynchCompletion(&pEnable->Hdr); 2238 int rc = vdmaVBVACtlEnableDisableSubmitInternal(pVdma, pEnable, vboxCmdVBVACmdCtlGuestCompletion, pVdma);2238 int rc = vdmaVBVACtlEnableDisableSubmitInternal(pVdma, &pEnable->Enable, vboxCmdVBVACmdCtlGuestCompletion, pVdma); 2239 2239 if (RT_SUCCESS(rc)) 2240 2240 return VINF_SUCCESS; -
trunk/src/VBox/GuestHost/OpenGL/include/cr_server.h
r50799 r50812 572 572 extern DECLEXPORT(int32_t) crVBoxServerHgcmDisable(); 573 573 574 extern int crVBoxServerHostCtl(VBOXCRCMDCTL *pCtl, uint32_t cbCtl); 575 574 576 #ifdef __cplusplus 575 577 } -
trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp
r50754 r50812 962 962 * We differentiate between a function handler for the guest and one for the host. 963 963 */ 964 static int svcHostCallPerform( void *,uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[])964 static int svcHostCallPerform(uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 965 965 { 966 966 int rc = VINF_SUCCESS; … … 1473 1473 } 1474 1474 1475 static DECLCALLBACK(int) svcHostCall (void *, uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 1475 int crVBoxServerHostCtl(VBOXCRCMDCTL *pCtl, uint32_t cbCtl) 1476 { 1477 if ((cbCtl - sizeof (VBOXCRCMDCTL)) % sizeof(VBOXHGCMSVCPARM)) 1478 { 1479 WARN(("invalid param size")); 1480 return VERR_INVALID_PARAMETER; 1481 } 1482 uint32_t cParams = (cbCtl - sizeof (VBOXCRCMDCTL)) / sizeof (VBOXHGCMSVCPARM); 1483 return svcHostCallPerform(pCtl->u32Function, cParams, (VBOXHGCMSVCPARM*)(pCtl + 1)); 1484 } 1485 1486 static DECLCALLBACK(int) svcHostCall(void *, uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 1476 1487 { 1477 1488 switch (u32Function) … … 1497 1508 } 1498 1509 1499 if ((paParms->u.pointer.size - sizeof (VBOXCRCMDCTL)) % sizeof(VBOXHGCMSVCPARM))1500 {1501 WARN(("invalid param size"));1502 return VERR_INVALID_PARAMETER;1503 }1504 1505 1510 VBOXCRCMDCTL *pCtl = (VBOXCRCMDCTL*)paParms->u.pointer.addr; 1506 uint32_t cParams = (paParms->u.pointer.size - sizeof (VBOXCRCMDCTL)) / sizeof (VBOXHGCMSVCPARM); 1507 return svcHostCallPerform(NULL, pCtl->u32Function, cParms, (VBOXHGCMSVCPARM*)(pCtl + 1)); 1508 } 1509 case VBOXCRCMDCTL_TYPE_DISABLE: 1510 AssertMsgFailed(("VBOXCRCMDCTL_TYPE_DISABLE\n")); 1511 return VERR_NOT_IMPLEMENTED; 1512 case VBOXCRCMDCTL_TYPE_ENABLE: 1513 AssertMsgFailed(("VBOXCRCMDCTL_TYPE_ENABLE\n")); 1514 return VERR_NOT_IMPLEMENTED; 1511 switch (pCtl->enmType) 1512 { 1513 case VBOXCRCMDCTL_TYPE_HGCM: 1514 { 1515 return crVBoxServerHostCtl(pCtl, paParms->u.pointer.size); 1516 } 1517 case VBOXCRCMDCTL_TYPE_DISABLE: 1518 { 1519 if (paParms->u.pointer.size != sizeof (VBOXCRCMDCTL)) 1520 WARN(("invalid param size")); 1521 return crVBoxServerHgcmDisable(); 1522 } 1523 case VBOXCRCMDCTL_TYPE_ENABLE: 1524 { 1525 if (paParms->u.pointer.size != sizeof (VBOXCRCMDCTL_ENABLE)) 1526 WARN(("invalid param size")); 1527 VBOXCRCMDCTL_ENABLE *pEnable = (VBOXCRCMDCTL_ENABLE*)pCtl; 1528 return crVBoxServerHgcmEnable(pEnable->hRHCmd, pEnable->pfnRHCmd); 1529 } 1530 default: 1531 WARN(("invalid function")); 1532 return VERR_INVALID_PARAMETER; 1533 } 1534 WARN(("should not be here!")); 1535 return VERR_INTERNAL_ERROR; 1536 } 1515 1537 default: 1516 return svcHostCallPerform(NULL, u32Function, cParms, paParms); 1517 } 1518 1538 return svcHostCallPerform(u32Function, cParms, paParms); 1539 } 1519 1540 } 1520 1541 -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h
r50754 r50812 116 116 GLint crServerDispatchCreateContextEx(const char *dpyName, GLint visualBits, GLint shareCtx, GLint preloadCtxID, int32_t internalID); 117 117 GLint crServerDispatchWindowCreateEx(const char *dpyName, GLint visBits, GLint preloadWinID); 118 GLint crServerMuralInit(CRMuralInfo *mural, const char *dpyName, GLint visBits, GLint preloadWinID);118 GLint crServerMuralInit(CRMuralInfo *mural, GLboolean fGuestWindow, GLint visBits, GLint preloadWinID); 119 119 void crServerMuralTerm(CRMuralInfo *mural); 120 120 GLboolean crServerMuralSize(CRMuralInfo *mural, GLint width, GLint height); -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c
r50802 r50812 60 60 int tearingdown = 0; /* can't be static */ 61 61 62 static DECLCALLBACK(int) crVBoxCrCmdCmd(HVBOXCRCMDSVR hSvr, PVBOXCMDVBVA_HDR pCmd, uint32_t cbCmd); 63 62 64 DECLINLINE(int32_t) crVBoxServerClientGet(uint32_t u32ClientID, CRClient **ppClient) 63 65 { … … 528 530 529 531 return GL_TRUE; 532 } 533 534 static int32_t crVBoxServerAddClientObj(uint32_t u32ClientID, CRClient **ppNewClient) 535 { 536 CRClient *newClient; 537 538 if (cr_server.numClients>=CR_MAX_CLIENTS) 539 { 540 if (ppNewClient) 541 *ppNewClient = NULL; 542 return VERR_MAX_THRDS_REACHED; 543 } 544 545 newClient = (CRClient *) crCalloc(sizeof(CRClient)); 546 crDebug("crServer: AddClient u32ClientID=%d", u32ClientID); 547 548 newClient->spu_id = 0; 549 newClient->currentCtxInfo = &cr_server.MainContextInfo; 550 newClient->currentContextNumber = -1; 551 newClient->conn = crNetAcceptClient(cr_server.protocol, NULL, 552 cr_server.tcpip_port, 553 cr_server.mtu, 0); 554 newClient->conn->u32ClientID = u32ClientID; 555 556 cr_server.clients[cr_server.numClients++] = newClient; 557 558 crServerAddToRunQueue(newClient); 559 560 if (ppNewClient) 561 *ppNewClient = newClient; 562 563 return VINF_SUCCESS; 530 564 } 531 565 … … 745 779 } 746 780 781 static int32_t crVBoxServerClientObjSetVersion(CRClient *pClient, uint32_t vMajor, uint32_t vMinor) 782 { 783 pClient->conn->vMajor = vMajor; 784 pClient->conn->vMinor = vMinor; 785 786 if (vMajor != CR_PROTOCOL_VERSION_MAJOR 787 || vMinor != CR_PROTOCOL_VERSION_MINOR) 788 return VERR_NOT_SUPPORTED; 789 return VINF_SUCCESS; 790 } 791 747 792 int32_t crVBoxServerClientSetVersion(uint32_t u32ClientID, uint32_t vMajor, uint32_t vMinor) 748 793 { … … 761 806 if (!pClient) return VERR_INVALID_PARAMETER; 762 807 763 pClient->conn->vMajor = vMajor; 764 pClient->conn->vMinor = vMinor; 765 766 if (vMajor != CR_PROTOCOL_VERSION_MAJOR 767 || vMinor != CR_PROTOCOL_VERSION_MINOR) 768 { 769 return VERR_NOT_SUPPORTED; 770 } 771 else return VINF_SUCCESS; 808 return crVBoxServerClientObjSetVersion(pClient, vMajor, vMinor); 809 } 810 811 static int32_t crVBoxServerClientObjSetPID(CRClient *pClient, uint64_t pid) 812 { 813 pClient->pid = pid; 814 815 return VINF_SUCCESS; 772 816 } 773 817 … … 788 832 if (!pClient) return VERR_INVALID_PARAMETER; 789 833 790 pClient->pid = pid; 791 792 return VINF_SUCCESS; 834 return crVBoxServerClientObjSetPID(pClient, pid); 793 835 } 794 836 … … 1005 1047 return NULL; 1006 1048 } 1007 id = crServerMuralInit(pMural, 1008 #ifdef RT_OS_DARWIN 1009 /* tested on darwin only so far */ 1010 NULL 1011 #else 1012 "" 1013 #endif 1014 , visualBits, 0); 1049 id = crServerMuralInit(pMural, GL_FALSE, visualBits, 0); 1015 1050 if (id < 0) 1016 1051 { … … 2891 2926 } 2892 2927 2928 static void crVBoxServerDefaultContextSet() 2929 { 2930 GLint spuWindow, spuCtx; 2931 2932 if (cr_server.MainContextInfo.SpuContext) 2933 { 2934 CRMuralInfo *pMural = crServerGetDummyMural(cr_server.MainContextInfo.CreateInfo.realVisualBits); 2935 if (!pMural) 2936 { 2937 WARN(("dummy mural is NULL")); 2938 spuCtx = CR_RENDER_DEFAULT_CONTEXT_ID; 2939 spuWindow = CR_RENDER_DEFAULT_WINDOW_ID; 2940 } 2941 else 2942 { 2943 spuCtx = cr_server.MainContextInfo.SpuContext; 2944 spuWindow = pMural->CreateInfo.realVisualBits; 2945 } 2946 } 2947 else 2948 { 2949 spuCtx = CR_RENDER_DEFAULT_CONTEXT_ID; 2950 spuWindow = CR_RENDER_DEFAULT_WINDOW_ID; 2951 } 2952 2953 cr_server.head_spu->dispatch_table.MakeCurrent(spuWindow, 0, spuCtx); 2954 } 2893 2955 2894 2956 #ifdef VBOX_WITH_CRHGSMI 2895 2957 2896 static int32_t crVBoxServerCmdVbvaCrCmdProcess(struct VBOXCMDVBVA_CRCMD_CMD *pCmd )2958 static int32_t crVBoxServerCmdVbvaCrCmdProcess(struct VBOXCMDVBVA_CRCMD_CMD *pCmd, uint32_t cbCmd) 2897 2959 { 2898 2960 int32_t rc; … … 2907 2969 if (!g_pvVRamBase) 2908 2970 { 2909 crWarning("g_pvVRamBase is not initialized");2971 WARN(("g_pvVRamBase is not initialized")); 2910 2972 return VERR_INVALID_STATE; 2911 2973 } … … 2913 2975 if (!cBuffers) 2914 2976 { 2915 crWarning("zero buffers passed in!");2977 WARN(("zero buffers passed in!")); 2916 2978 return VERR_INVALID_PARAMETER; 2917 2979 } 2918 2980 2919 2981 cParams = cBuffers-1; 2982 2983 if (cbCmd != RT_OFFSETOF(VBOXCMDVBVA_CRCMD_CMD, aBuffers[cBuffers])) 2984 { 2985 WARN(("invalid buffer size")); 2986 return VERR_INVALID_PARAMETER; 2987 } 2920 2988 2921 2989 cbHdr = pCmd->aBuffers[0].cbBuffer; … … 2923 2991 if (!pHdr) 2924 2992 { 2925 crWarning("invalid header buffer!");2993 WARN(("invalid header buffer!")); 2926 2994 return VERR_INVALID_PARAMETER; 2927 2995 } … … 2929 2997 if (cbHdr < sizeof (*pHdr)) 2930 2998 { 2931 crWarning("invalid header buffer size!");2999 WARN(("invalid header buffer size!")); 2932 3000 return VERR_INVALID_PARAMETER; 2933 3001 } … … 3196 3264 { 3197 3265 cr_server.CrCmdClientInfo = *pInfo; 3266 3267 crVBoxServerDefaultContextSet(); 3268 3269 return VINF_SUCCESS; 3270 } 3271 3272 static DECLCALLBACK(int) crVBoxCrCmdDisable(HVBOXCRCMDSVR hSvr) 3273 { 3274 cr_server.head_spu->dispatch_table.MakeCurrent(0, 0, 0); 3275 3276 memset(&cr_server.CrCmdClientInfo, 0, sizeof (cr_server.CrCmdClientInfo)); 3277 3278 return VINF_SUCCESS; 3279 } 3280 3281 static DECLCALLBACK(int) crVBoxCrCmdHostCtl(HVBOXCRCMDSVR hSvr, uint8_t* pCmd, uint32_t cbCmd) 3282 { 3283 return crVBoxServerHostCtl((VBOXCRCMDCTL*)pCmd, cbCmd); 3284 } 3285 3286 static DECLCALLBACK(int) crVBoxCrCmdGuestCtl(HVBOXCRCMDSVR hSvr, uint8_t* pCmd, uint32_t cbCmd) 3287 { 3288 VBOXCMDVBVA_3DCTL *pCtl = (VBOXCMDVBVA_3DCTL*)pCmd; 3289 if (cbCmd < sizeof (VBOXCMDVBVA_3DCTL)) 3290 { 3291 WARN(("invalid buffer size")); 3292 return VERR_INVALID_PARAMETER; 3293 } 3294 3295 switch (pCtl->u32Type) 3296 { 3297 case VBOXCMDVBVA3DCTL_TYPE_CONNECT: 3298 { 3299 VBOXCMDVBVA_3DCTL_CONNECT *pConnect = (VBOXCMDVBVA_3DCTL_CONNECT*)pCtl; 3300 3301 return VERR_NOT_SUPPORTED; 3302 } 3303 case VBOXCMDVBVA3DCTL_TYPE_DISCONNECT: 3304 { 3305 return VERR_NOT_SUPPORTED; 3306 } 3307 case VBOXCMDVBVA3DCTL_TYPE_CMD: 3308 { 3309 VBOXCMDVBVA_3DCTL_CMD *p3DCmd; 3310 if (cbCmd < sizeof (VBOXCMDVBVA_3DCTL_CMD)) 3311 { 3312 WARN(("invalid size")); 3313 return VERR_INVALID_PARAMETER; 3314 } 3315 3316 p3DCmd = (VBOXCMDVBVA_3DCTL_CMD*)pCmd; 3317 3318 return crVBoxCrCmdCmd(NULL, &p3DCmd->Cmd, cbCmd - RT_OFFSETOF(VBOXCMDVBVA_3DCTL_CMD, Cmd)); 3319 } 3320 default: 3321 WARN(("invalid function")); 3322 return VERR_INVALID_PARAMETER; 3323 } 3324 } 3325 3326 static DECLCALLBACK(int) crVBoxCrCmdSaveState(HVBOXCRCMDSVR hSvr, PSSMHANDLE pSSM) 3327 { 3198 3328 AssertFailed(); 3199 3329 return VERR_NOT_IMPLEMENTED; 3200 3330 } 3201 3331 3202 static DECLCALLBACK(int) crVBoxCrCmdDisable(HVBOXCRCMDSVR hSvr) 3203 { 3204 AssertFailed(); 3205 memset(&cr_server.CrCmdClientInfo, 0, sizeof (cr_server.CrCmdClientInfo)); 3206 return VERR_NOT_IMPLEMENTED; 3207 } 3208 3209 static DECLCALLBACK(int) crVBoxCrCmdHostCtl(HVBOXCRCMDSVR hSvr, uint8_t* pCmd, uint32_t cbCmd) 3332 static DECLCALLBACK(int) crVBoxCrCmdLoadState(HVBOXCRCMDSVR hSvr, PSSMHANDLE pSSM, uint32_t u32Version) 3210 3333 { 3211 3334 AssertFailed(); … … 3213 3336 } 3214 3337 3215 static DECLCALLBACK(int) crVBoxCrCmdGuestCtl(HVBOXCRCMDSVR hSvr, uint8_t* pCmd, uint32_t cbCmd)3216 {3217 AssertFailed();3218 return VERR_NOT_IMPLEMENTED;3219 }3220 3221 static DECLCALLBACK(int) crVBoxCrCmdSaveState(HVBOXCRCMDSVR hSvr, PSSMHANDLE pSSM)3222 {3223 AssertFailed();3224 return VERR_NOT_IMPLEMENTED;3225 }3226 3227 static DECLCALLBACK(int) crVBoxCrCmdLoadState(HVBOXCRCMDSVR hSvr, PSSMHANDLE pSSM, uint32_t u32Version)3228 {3229 AssertFailed();3230 return VERR_NOT_IMPLEMENTED;3231 }3232 3233 3338 3234 3339 static DECLCALLBACK(int) crVBoxCrCmdCmd(HVBOXCRCMDSVR hSvr, PVBOXCMDVBVA_HDR pCmd, uint32_t cbCmd) … … 3239 3344 case VBOXCMDVBVA_OPTYPE_CRCMD: 3240 3345 { 3241 VBOXCMDVBVA_CRCMD *pCrCmdDr = (VBOXCMDVBVA_CRCMD*)pCmd; 3242 VBOXCMDVBVA_CRCMD_CMD *pCrCmd = &pCrCmdDr->Cmd; 3243 int rc = crVBoxServerCmdVbvaCrCmdProcess(pCrCmd); 3346 VBOXCMDVBVA_CRCMD *pCrCmdDr; 3347 VBOXCMDVBVA_CRCMD_CMD *pCrCmd; 3348 int rc; 3349 pCrCmdDr = (VBOXCMDVBVA_CRCMD*)pCmd; 3350 pCrCmd = &pCrCmdDr->Cmd; 3351 if (cbCmd < sizeof (VBOXCMDVBVA_CRCMD)) 3352 { 3353 WARN(("invalid buffer size")); 3354 pCmd->u.i8Result = -1; 3355 break; 3356 } 3357 rc = crVBoxServerCmdVbvaCrCmdProcess(pCrCmd, cbCmd - RT_OFFSETOF(VBOXCMDVBVA_CRCMD, Cmd)); 3244 3358 if (RT_SUCCESS(rc)) 3245 3359 { … … 3249 3363 else 3250 3364 { 3251 crWarning("crVBoxServerCmdVbvaCrCmdProcess failed, rc %d", rc);3365 WARN(("crVBoxServerCmdVbvaCrCmdProcess failed, rc %d", rc)); 3252 3366 pCmd->u.i8Result = -1; 3253 3367 } … … 3295 3409 if (!g_pvVRamBase) 3296 3410 { 3297 crWarning("g_pvVRamBase is not initialized");3411 WARN(("g_pvVRamBase is not initialized")); 3298 3412 3299 3413 crServerCrHgsmiCmdComplete(pCmd, VERR_INVALID_STATE); … … 3303 3417 if (!cBuffers) 3304 3418 { 3305 crWarning("zero buffers passed in!");3419 WARN(("zero buffers passed in!")); 3306 3420 3307 3421 crServerCrHgsmiCmdComplete(pCmd, VERR_INVALID_PARAMETER); … … 3310 3424 3311 3425 cParams = cBuffers-1; 3426 3427 #if 0 3428 if (cbCmd != RT_OFFSETOF(VBOXCMDVBVA_CRCMD_CMD, aBuffers[cBuffers])) 3429 { 3430 WARN(("invalid buffer size")); 3431 crServerCrHgsmiCmdComplete(pCmd, VERR_INVALID_PARAMETER); 3432 return VINF_SUCCESS; 3433 } 3434 #endif 3312 3435 3313 3436 cbHdr = pCmd->aBuffers[0].cbBuffer; … … 3315 3438 if (!pHdr) 3316 3439 { 3317 crWarning("invalid header buffer!");3440 WARN(("invalid header buffer!")); 3318 3441 3319 3442 crServerCrHgsmiCmdComplete(pCmd, VERR_INVALID_PARAMETER); … … 3323 3446 if (cbHdr < sizeof (*pHdr)) 3324 3447 { 3325 crWarning("invalid header buffer size!");3448 WARN(("invalid header buffer size!")); 3326 3449 3327 3450 crServerCrHgsmiCmdComplete(pCmd, VERR_INVALID_PARAMETER); … … 3658 3781 } 3659 3782 3660 void crVBoxServerDefaultContextSet()3661 {3662 GLint spuWindow, spuCtx;3663 3664 if (cr_server.MainContextInfo.SpuContext)3665 {3666 CRMuralInfo *pMural = crServerGetDummyMural(cr_server.MainContextInfo.CreateInfo.realVisualBits);3667 if (!pMural)3668 {3669 WARN(("dummy mural is NULL"));3670 spuCtx = CR_RENDER_DEFAULT_CONTEXT_ID;3671 spuWindow = CR_RENDER_DEFAULT_WINDOW_ID;3672 }3673 else3674 {3675 spuCtx = cr_server.MainContextInfo.SpuContext;3676 spuWindow = pMural->CreateInfo.realVisualBits;3677 }3678 }3679 else3680 {3681 spuCtx = CR_RENDER_DEFAULT_CONTEXT_ID;3682 spuWindow = CR_RENDER_DEFAULT_WINDOW_ID;3683 }3684 3685 cr_server.head_spu->dispatch_table.MakeCurrent(spuWindow, 0, spuCtx);3686 }3687 3688 3783 int32_t crVBoxServerHgcmEnable(HVBOXCRCMDCTL_REMAINING_HOST_COMMAND hRHCmd, PFNVBOXCRCMDCTL_REMAINING_HOST_COMMAND pfnRHCmd) 3689 3784 { -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_window.c
r50802 r50812 19 19 } 20 20 21 GLint crServerMuralInit(CRMuralInfo *mural, const char *dpyName, GLint visBits, GLint preloadWinID)21 GLint crServerMuralInit(CRMuralInfo *mural, GLboolean fGuestWindow, GLint visBits, GLint preloadWinID) 22 22 { 23 23 CRMuralInfo *defaultMural; … … 26 26 GLint spuWindow = 0; 27 27 GLint realVisBits = visBits; 28 const char *dpyName = ""; 28 29 29 30 crMemset(mural, 0, sizeof (*mural)); … … 32 33 realVisBits = cr_server.fVisualBitsDefault; 33 34 34 if (!dpyName) 35 #ifdef RT_OS_DARWIN 36 if (fGuestWindow) 37 { 38 CRMuralInfo *dummy = crServerGetDummyMural(visBits); 39 if (!dummy) 40 { 41 WARN(("crServerGetDummyMural failed")); 42 return -1; 43 } 44 spuWindow = dummy->spuWindow; 45 } 46 else 47 #endif 35 48 { 36 49 /* … … 41 54 return spuWindow; 42 55 } 43 }44 else45 {46 CRMuralInfo *dummy = crServerGetDummyMural(visBits);47 if (!dummy)48 {49 WARN(("crServerGetDummyMural failed"));50 return -1;51 }52 spuWindow = dummy->spuWindow;53 56 } 54 57 … … 134 137 } 135 138 136 windowID = crServerMuralInit(mural, dpyName, visBits, preloadWinID);139 windowID = crServerMuralInit(mural, GL_TRUE, visBits, preloadWinID); 137 140 if (windowID < 0) 138 141 {
Note:
See TracChangeset
for help on using the changeset viewer.