VirtualBox

Ignore:
Timestamp:
Jul 20, 2021 10:54:39 AM (4 years ago)
Author:
vboxsync
Message:

3D/VMSVGA: Command buffers are used instead of FIFO when 3D accel is disabled, bugref:9845

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/gallium/Svga.cpp

    r90188 r90255  
    2626#include <iprt/mem.h>
    2727#include <iprt/memobj.h>
     28
     29static NTSTATUS SvgaCmdBufSubmit(VBOXWDDM_EXT_VMSVGA *pSvga, uint32_t cbSubmit)
     30{
     31    int rc = STATUS_SUCCESS;
     32    SVGACBHeader *pHdr = (SVGACBHeader *)pSvga->pvR0Hdr;
     33
     34    pHdr->status = SVGA_CB_STATUS_NONE;
     35    pHdr->errorOffset = 0;
     36    pHdr->id = 0;
     37    pHdr->flags = SVGA_CB_FLAG_NONE;
     38    pHdr->length = cbSubmit;
     39    pHdr->ptr.pa = pSvga->paCmd;
     40
     41    SVGARegWrite(pSvga, SVGA_REG_COMMAND_HIGH, (uint32_t)(pSvga->paHdr >> 32));
     42    SVGARegWrite(pSvga, SVGA_REG_COMMAND_LOW, (uint32_t)pSvga->paHdr | SVGA_CB_CONTEXT_0);
     43
     44    return rc;
     45}
    2846
    2947static NTSTATUS SvgaCmdBufCtxInit(VBOXWDDM_EXT_VMSVGA *pSvga, bool enable)
     
    11151133                             NULL, 0, &cbSubmit);
    11161134
    1117     void *pvCmd = SvgaFifoReserve(pSvga, cbSubmit);
     1135    void *pvCmd;
     1136
     1137    if (pSvga->u32Caps & SVGA_CAP_COMMAND_BUFFERS)
     1138    {
     1139        pvCmd = pSvga->pvR0Cmd;
     1140    }
     1141    else
     1142    {
     1143        pvCmd = SvgaFifoReserve(pSvga, cbSubmit);
     1144    }
     1145
    11181146    if (pvCmd)
    11191147    {
     
    11211149                                          pvCmd, cbSubmit, NULL);
    11221150        Assert(Status == STATUS_SUCCESS);
    1123         SvgaFifoCommit(pSvga, cbSubmit);
     1151
     1152        if (pSvga->u32Caps & SVGA_CAP_COMMAND_BUFFERS)
     1153        {
     1154            SvgaCmdBufSubmit(pSvga, cbSubmit);
     1155        }
     1156        else
     1157        {
     1158            SvgaFifoCommit(pSvga, cbSubmit);
     1159        }
    11241160    }
    11251161    else
Note: See TracChangeset for help on using the changeset viewer.

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