VirtualBox

Ignore:
Timestamp:
Jun 24, 2010 6:51:20 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
63086
Message:

crOpenGL: wddm friendly windows info tracking + more consistent updates (disabled except windows yet)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c

    r28800 r30440  
    331331static void crVBoxHGCMWriteExact(CRConnection *conn, const void *buf, unsigned int len)
    332332{
    333     CRVBOXHGCMWRITE parms;
    334333    int rc;
    335 
    336     parms.hdr.result      = VERR_WRONG_ORDER;
    337     parms.hdr.u32ClientID = conn->u32ClientID;
    338     parms.hdr.u32Function = SHCRGL_GUEST_FN_WRITE;
    339     parms.hdr.cParms      = SHCRGL_CPARMS_WRITE;
    340 
    341     parms.pBuffer.type                   = VMMDevHGCMParmType_LinAddr_In;
    342     parms.pBuffer.u.Pointer.size         = len;
    343     parms.pBuffer.u.Pointer.u.linearAddr = (uintptr_t) buf;
    344 
    345     rc = crVBoxHGCMCall(&parms, sizeof(parms));
    346 
    347     if (RT_FAILURE(rc) || RT_FAILURE(parms.hdr.result))
    348     {
    349         crWarning("SHCRGL_GUEST_FN_WRITE failed with %x %x\n", rc, parms.hdr.result);
     334    int32_t callRes;
     335
     336#ifdef IN_GUEST
     337    if (conn->u32InjectClientID)
     338    {
     339        CRVBOXHGCMINJECT parms;
     340
     341        parms.hdr.result      = VERR_WRONG_ORDER;
     342        parms.hdr.u32ClientID = conn->u32ClientID;
     343        parms.hdr.u32Function = SHCRGL_GUEST_FN_INJECT;
     344        parms.hdr.cParms      = SHCRGL_CPARMS_INJECT;
     345
     346        parms.u32ClientID.type       = VMMDevHGCMParmType_32bit;
     347        parms.u32ClientID.u.value32  = conn->u32InjectClientID;
     348
     349        parms.pBuffer.type                   = VMMDevHGCMParmType_LinAddr_In;
     350        parms.pBuffer.u.Pointer.size         = len;
     351        parms.pBuffer.u.Pointer.u.linearAddr = (uintptr_t) buf;
     352
     353        rc = crVBoxHGCMCall(&parms, sizeof(parms));
     354        callRes = parms.hdr.result;
     355    }
     356    else
     357#endif
     358    {
     359        CRVBOXHGCMWRITE parms;
     360
     361        parms.hdr.result      = VERR_WRONG_ORDER;
     362        parms.hdr.u32ClientID = conn->u32ClientID;
     363        parms.hdr.u32Function = SHCRGL_GUEST_FN_WRITE;
     364        parms.hdr.cParms      = SHCRGL_CPARMS_WRITE;
     365
     366        parms.pBuffer.type                   = VMMDevHGCMParmType_LinAddr_In;
     367        parms.pBuffer.u.Pointer.size         = len;
     368        parms.pBuffer.u.Pointer.u.linearAddr = (uintptr_t) buf;
     369
     370        rc = crVBoxHGCMCall(&parms, sizeof(parms));
     371        callRes = parms.hdr.result;
     372    }
     373
     374    if (RT_FAILURE(rc) || RT_FAILURE(callRes))
     375    {
     376        crWarning("SHCRGL_GUEST_FN_WRITE failed with %x %x\n", rc, callRes);
    350377    }
    351378}
     
    476503            _crVBoxHGCMWriteBytes(conn, start, len);
    477504#else
     505            CRASSERT(!conn->u32InjectClientID);
    478506            crDebug("SHCRGL: sending userbuf with %d bytes\n", len);
    479507            crVBoxHGCMWriteReadExact(conn, start, len, CR_VBOXHGCM_USERALLOCATED);
     
    493521     * No need to prepend it to the buffer
    494522     */
     523#ifdef IN_GUEST
     524    if (conn->u32InjectClientID)
     525    {
     526        crVBoxHGCMWriteExact(conn, start, len);
     527    }
     528    else
     529#endif
    495530    crVBoxHGCMWriteReadExact(conn, start, len, hgcm_buffer->kind);
    496531
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette