Changeset 53775 in vbox
- Timestamp:
- Jan 12, 2015 3:54:53 PM (10 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp (modified) (42 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
r53756 r53775 39 39 #include <iprt/uuid.h> 40 40 #ifdef IN_RING3 41 # include <iprt/mem.h>41 # include <iprt/mem.h> 42 42 #endif 43 43 … … 51 51 #ifdef DEBUG 52 52 /* Enable to log FIFO register accesses. */ 53 //# define DEBUG_FIFO_ACCESS53 //# define DEBUG_FIFO_ACCESS 54 54 /* Enable to log GMR page accesses. */ 55 //# define DEBUG_GMR_ACCESS55 //# define DEBUG_GMR_ACCESS 56 56 #endif 57 57 … … 63 63 #include "vmsvga/svga3d_caps.h" 64 64 #ifdef VBOX_WITH_VMSVGA3D 65 # include "DevVGA-SVGA3d.h"65 # include "DevVGA-SVGA3d.h" 66 66 #endif 67 67 … … 201 201 SSMFIELD_ENTRY_TERM() 202 202 }; 203 204 static void vmsvgaSetTraces(PVGASTATE pThis, bool fTraces); 205 203 206 #endif /* IN_RING3 */ 204 205 RT_C_DECLS_BEGIN206 207 #ifdef IN_RING3208 static void vmsvgaSetTraces(PVGASTATE pThis, bool fTraces);209 #endif210 211 RT_C_DECLS_END212 207 213 208 … … 745 740 break; 746 741 #else 747 /* @todo bit crude */742 /** @todo bit crude */ 748 743 RTThreadSleep(50); 749 744 #endif … … 848 843 break; 849 844 } 850 Log(("vmsvgaReadPort index=%s (%d) val=% x rc=%x\n", vmsvgaIndexToString(pThis), pThis->svga.u32IndexReg, *pu32, rc));845 Log(("vmsvgaReadPort index=%s (%d) val=%#x rc=%x\n", vmsvgaIndexToString(pThis), pThis->svga.u32IndexReg, *pu32, rc)); 851 846 return rc; 852 847 } … … 933 928 int rc = VINF_SUCCESS; 934 929 935 Log(("vmsvgaWritePort index=%s (%d) val=% x\n", vmsvgaIndexToString(pThis), pThis->svga.u32IndexReg, u32));930 Log(("vmsvgaWritePort index=%s (%d) val=%#x\n", vmsvgaIndexToString(pThis), pThis->svga.u32IndexReg, u32)); 936 931 switch (pThis->svga.u32IndexReg) 937 932 { … … 1009 1004 1010 1005 case SVGA_REG_WIDTH: 1011 if (pThis->svga.uWidth == u32) 1012 break; /* nop */ 1013 1014 pThis->svga.uWidth = u32; 1015 if (pThis->svga.fEnabled) 1016 { 1006 if (pThis->svga.uWidth != u32) 1007 { 1008 if (pThis->svga.fEnabled) 1009 { 1017 1010 #ifdef IN_RING3 1018 rc = vmsvgaChangeMode(pThis); 1019 AssertRCReturn(rc, rc); 1011 pThis->svga.uWidth = u32; 1012 rc = vmsvgaChangeMode(pThis); 1013 AssertRCReturn(rc, rc); 1020 1014 #else 1021 rc = VINF_IOM_R3_IOPORT_WRITE; 1022 break; 1015 rc = VINF_IOM_R3_IOPORT_WRITE; 1023 1016 #endif 1024 } 1017 } 1018 else 1019 pThis->svga.uWidth = u32; 1020 } 1021 /* else: nop */ 1025 1022 break; 1026 1023 1027 1024 case SVGA_REG_HEIGHT: 1028 if (pThis->svga.uHeight == u32) 1029 break; /* nop */ 1030 1031 pThis->svga.uHeight = u32; 1032 if (pThis->svga.fEnabled) 1033 { 1025 if (pThis->svga.uHeight != u32) 1026 { 1027 if (pThis->svga.fEnabled) 1028 { 1034 1029 #ifdef IN_RING3 1035 rc = vmsvgaChangeMode(pThis); 1036 AssertRCReturn(rc, rc); 1030 pThis->svga.uHeight = u32; 1031 rc = vmsvgaChangeMode(pThis); 1032 AssertRCReturn(rc, rc); 1037 1033 #else 1038 rc = VINF_IOM_R3_IOPORT_WRITE; 1039 break; 1034 rc = VINF_IOM_R3_IOPORT_WRITE; 1040 1035 #endif 1041 } 1036 } 1037 else 1038 pThis->svga.uHeight = u32; 1039 } 1040 /* else: nop */ 1042 1041 break; 1043 1042 … … 1047 1046 1048 1047 case SVGA_REG_BITS_PER_PIXEL: /* Current bpp in the guest */ 1049 if (pThis->svga.uBpp == u32) 1050 break; /* nop */ 1051 1052 pThis->svga.uBpp = u32; 1053 if (pThis->svga.fEnabled) 1054 { 1048 if (pThis->svga.uBpp != u32) 1049 { 1050 if (pThis->svga.fEnabled) 1051 { 1055 1052 #ifdef IN_RING3 1056 rc = vmsvgaChangeMode(pThis); 1057 AssertRCReturn(rc, rc); 1053 pThis->svga.uBpp = u32; 1054 rc = vmsvgaChangeMode(pThis); 1055 AssertRCReturn(rc, rc); 1058 1056 #else 1059 rc = VINF_IOM_R3_IOPORT_WRITE; 1060 break; 1057 rc = VINF_IOM_R3_IOPORT_WRITE; 1061 1058 #endif 1062 } 1059 } 1060 else 1061 pThis->svga.uBpp = u32; 1062 } 1063 /* else: nop */ 1063 1064 break; 1064 1065 … … 1154 1155 1155 1156 case SVGA_REG_GMR_DESCRIPTOR: 1156 # ifndef IN_RING31157 # ifndef IN_RING3 1157 1158 rc = VINF_IOM_R3_IOPORT_WRITE; 1158 1159 break; 1159 # else1160 # else /* IN_RING3 */ 1160 1161 { 1161 1162 SVGAGuestMemDescriptor desc; … … 1225 1226 break; 1226 1227 } 1227 # endif1228 # endif /* IN_RING3 */ 1228 1229 #endif // VBOX_WITH_VMSVGA3D 1229 1230 … … 1748 1749 return rc; 1749 1750 } 1751 1750 1752 # endif /* IN_RING3 */ 1751 #endif /* DEBUG */1753 #endif /* DEBUG_FIFO_ACCESS */ 1752 1754 1753 1755 #ifdef DEBUG_GMR_ACCESS … … 1799 1801 } 1800 1802 1801 #ifdef IN_RING3 1803 # ifdef IN_RING3 1804 1802 1805 /* Callback handler for VMR3ReqCallWait */ 1803 1806 static DECLCALLBACK(int) vmsvgaRegisterGMR(PPDMDEVINS pDevIns, uint32_t gmrId) … … 1857 1860 return VINF_SUCCESS; 1858 1861 } 1859 #endif /* IN_RING3 */ 1860 1861 1862 1863 # endif /* IN_RING3 */ 1862 1864 #endif /* DEBUG_GMR_ACCESS */ 1863 1865 … … 1865 1867 1866 1868 #ifdef IN_RING3 1867 1868 #include <iprt/mem.h>1869 1869 1870 1870 static void *vmsvgaFIFOGetCmdBuffer(PPDMTHREAD pThread, uint32_t *pFIFO, uint32_t cbCmd, uint32_t *pSize, void **ppfBounceBuffer) … … 1963 1963 case VMSVGA_FIFO_EXTCMD_RESET: 1964 1964 Log(("vmsvgaFIFOLoop: reset the fifo thread.\n")); 1965 # ifdef VBOX_WITH_VMSVGA3D1965 # ifdef VBOX_WITH_VMSVGA3D 1966 1966 if (pThis->svga.f3DEnabled) 1967 1967 { … … 1969 1969 vmsvga3dReset(pThis); 1970 1970 } 1971 # endif1971 # endif 1972 1972 break; 1973 1973 1974 1974 case VMSVGA_FIFO_EXTCMD_TERMINATE: 1975 1975 Log(("vmsvgaFIFOLoop: terminate the fifo thread.\n")); 1976 # ifdef VBOX_WITH_VMSVGA3D1976 # ifdef VBOX_WITH_VMSVGA3D 1977 1977 if (pThis->svga.f3DEnabled) 1978 1978 { … … 1980 1980 vmsvga3dTerminate(pThis); 1981 1981 } 1982 # endif1982 # endif 1983 1983 break; 1984 1984 1985 1985 case VMSVGA_FIFO_EXTCMD_SAVESTATE: 1986 1986 Log(("vmsvgaFIFOLoop: VMSVGA_FIFO_EXTCMD_SAVESTATE.\n")); 1987 # ifdef VBOX_WITH_VMSVGA3D1987 # ifdef VBOX_WITH_VMSVGA3D 1988 1988 vmsvga3dSaveExec(pThis, (PSSMHANDLE)pThis->svga.pFIFOExtCmdParam); 1989 # endif1989 # endif 1990 1990 break; 1991 1991 … … 1993 1993 { 1994 1994 Log(("vmsvgaFIFOLoop: VMSVGA_FIFO_EXTCMD_LOADSTATE.\n")); 1995 # ifdef VBOX_WITH_VMSVGA3D1995 # ifdef VBOX_WITH_VMSVGA3D 1996 1996 PVMSVGA_STATE_LOAD pLoadState = (PVMSVGA_STATE_LOAD)pThis->svga.pFIFOExtCmdParam; 1997 1997 vmsvga3dLoadExec(pThis, pLoadState->pSSM, pLoadState->uVersion, pLoadState->uPass); 1998 # endif1998 # endif 1999 1999 break; 2000 2000 } … … 2048 2048 /* First check any pending actions. */ 2049 2049 if (ASMBitTestAndClear(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE_BIT)) 2050 # ifdef VBOX_WITH_VMSVGA3D2050 # ifdef VBOX_WITH_VMSVGA3D 2051 2051 vmsvga3dChangeMode(pThis); 2052 # else2053 { }2054 # endif2052 # else 2053 {/*nothing*/} 2054 # endif 2055 2055 /* Check for pending external commands. */ 2056 2056 if (pThis->svga.u8FIFOExtCommand != VMSVGA_FIFO_EXTCMD_NONE) … … 2211 2211 break; 2212 2212 } 2213 # ifdef VBOX_WITH_VMSVGA3D2213 # ifdef VBOX_WITH_VMSVGA3D 2214 2214 case SVGA_CMD_DEFINE_GMR2: 2215 2215 { … … 2297 2297 if (pCmd->flags & SVGA_REMAP_GMR2_VIA_GMR) 2298 2298 { 2299 /* @todo */2299 /** @todo */ 2300 2300 AssertFailed(); 2301 2301 } … … 2365 2365 RTMemFree(paNewPage64); 2366 2366 2367 # ifdef DEBUG_GMR_ACCESS2367 # ifdef DEBUG_GMR_ACCESS 2368 2368 VMR3ReqCallWait(PDMDevHlpGetVM(pThis->pDevInsR3), VMCPUID_ANY, (PFNRT)vmsvgaRegisterGMR, 2, pThis->pDevInsR3, pCmd->gmrId); 2369 # endif2369 # endif 2370 2370 break; 2371 2371 } 2372 # endif // VBOX_WITH_VMSVGA3D2372 # endif // VBOX_WITH_VMSVGA3D 2373 2373 case SVGA_CMD_DEFINE_SCREEN: 2374 2374 { … … 2402 2402 break; 2403 2403 } 2404 # ifdef VBOX_WITH_VMSVGA3D2404 # ifdef VBOX_WITH_VMSVGA3D 2405 2405 case SVGA_CMD_DEFINE_GMRFB: 2406 2406 { … … 2468 2468 break; 2469 2469 } 2470 # endif // VBOX_WITH_VMSVGA3D2470 # endif // VBOX_WITH_VMSVGA3D 2471 2471 case SVGA_CMD_ANNOTATION_FILL: 2472 2472 { … … 2488 2488 2489 2489 default: 2490 # ifdef VBOX_WITH_VMSVGA3D2490 # ifdef VBOX_WITH_VMSVGA3D 2491 2491 if ( pFIFO[u32Cmd] >= SVGA_3D_CMD_BASE 2492 2492 && pFIFO[u32Cmd] < SVGA_3D_CMD_MAX) … … 2512 2512 cMipLevels = (pHdr->size - sizeof(*pCmd)) / sizeof(SVGA3dSize); 2513 2513 rc = vmsvga3dSurfaceDefine(pThis, pCmd->sid, (uint32_t)pCmd->surfaceFlags, pCmd->format, pCmd->face, 0, SVGA3D_TEX_FILTER_NONE, cMipLevels, (SVGA3dSize *)(pCmd + 1)); 2514 # ifdef DEBUG_GMR_ACCESS2514 # ifdef DEBUG_GMR_ACCESS 2515 2515 VMR3ReqCallWait(PDMDevHlpGetVM(pThis->pDevInsR3), VMCPUID_ANY, (PFNRT)vmsvgaResetGMRHandlers, 1, pThis); 2516 # endif2516 # endif 2517 2517 break; 2518 2518 } … … 2800 2800 } 2801 2801 else 2802 # endif // VBOX_WITH_VMSVGA3D2802 # endif // VBOX_WITH_VMSVGA3D 2803 2803 AssertFailed(); 2804 2804 } … … 2852 2852 { 2853 2853 PGMR pGMR = &pSVGAState->aGMR[idGMR]; 2854 # ifdef DEBUG_GMR_ACCESS2854 # ifdef DEBUG_GMR_ACCESS 2855 2855 VMR3ReqCallWait(PDMDevHlpGetVM(pThis->pDevInsR3), VMCPUID_ANY, (PFNRT)vmsvgaUnregisterGMR, 2, pThis->pDevInsR3, idGMR); 2856 # endif2856 # endif 2857 2857 2858 2858 Assert(pGMR->paDesc); … … 3128 3128 AssertRC(rc); 3129 3129 3130 # ifdef DEBUG_FIFO_ACCESS3130 # ifdef DEBUG_FIFO_ACCESS 3131 3131 if (RT_SUCCESS(rc)) 3132 3132 { … … 3140 3140 AssertRC(rc); 3141 3141 } 3142 # endif3142 # endif 3143 3143 if (RT_SUCCESS(rc)) 3144 3144 { … … 3150 3150 { 3151 3151 Assert(pThis->svga.GCPhysFIFO); 3152 # ifdef DEBUG_FIFO_ACCESS3152 # ifdef DEBUG_FIFO_ACCESS 3153 3153 rc = PGMHandlerPhysicalDeregister(PDMDevHlpGetVM(pDevIns), pThis->svga.GCPhysFIFO); 3154 3154 AssertRC(rc); 3155 # endif3155 # endif 3156 3156 pThis->svga.GCPhysFIFO = 0; 3157 3157 } … … 3216 3216 } 3217 3217 3218 # ifdef VBOX_WITH_VMSVGA3D3218 # ifdef VBOX_WITH_VMSVGA3D 3219 3219 if (pThis->svga.f3DEnabled) 3220 3220 { … … 3238 3238 PDMR3ThreadSuspend(pThis->svga.pFIFOIOThread); 3239 3239 } 3240 # endif3240 # endif 3241 3241 3242 3242 return VINF_SUCCESS; … … 3313 3313 } 3314 3314 3315 # ifdef VBOX_WITH_VMSVGA3D3315 # ifdef VBOX_WITH_VMSVGA3D 3316 3316 if (pThis->svga.f3DEnabled) 3317 3317 { … … 3329 3329 PDMR3ThreadSuspend(pThis->svga.pFIFOIOThread); 3330 3330 } 3331 # endif3331 # endif 3332 3332 return VINF_SUCCESS; 3333 3333 } … … 3366 3366 /* Register caps. */ 3367 3367 pThis->svga.u32RegCaps = SVGA_CAP_GMR | SVGA_CAP_GMR2 | SVGA_CAP_CURSOR | SVGA_CAP_CURSOR_BYPASS_2 | SVGA_CAP_EXTENDED_FIFO | SVGA_CAP_IRQMASK | SVGA_CAP_PITCHLOCK | SVGA_CAP_TRACES | SVGA_CAP_SCREEN_OBJECT_2 | SVGA_CAP_ALPHA_CURSOR; 3368 # ifdef VBOX_WITH_VMSVGA3D3368 # ifdef VBOX_WITH_VMSVGA3D 3369 3369 pThis->svga.u32RegCaps |= SVGA_CAP_3D; 3370 # endif3370 # endif 3371 3371 3372 3372 /* Setup FIFO capabilities. */ … … 3486 3486 /* Register caps. */ 3487 3487 pThis->svga.u32RegCaps = SVGA_CAP_GMR | SVGA_CAP_GMR2 | SVGA_CAP_CURSOR | SVGA_CAP_CURSOR_BYPASS_2 | SVGA_CAP_EXTENDED_FIFO | SVGA_CAP_IRQMASK | SVGA_CAP_PITCHLOCK | SVGA_CAP_TRACES | SVGA_CAP_SCREEN_OBJECT_2 | SVGA_CAP_ALPHA_CURSOR; 3488 # ifdef VBOX_WITH_VMSVGA3D3488 # ifdef VBOX_WITH_VMSVGA3D 3489 3489 pThis->svga.u32RegCaps |= SVGA_CAP_3D; 3490 # endif3490 # endif 3491 3491 3492 3492 /* Setup FIFO capabilities. */ … … 3497 3497 3498 3498 pThis->svga.pFIFOR3[SVGA_FIFO_3D_HWVERSION] = pThis->svga.pFIFOR3[SVGA_FIFO_3D_HWVERSION_REVISED] = 0; /* no 3d available. */ 3499 # ifdef VBOX_WITH_VMSVGA3D3499 # ifdef VBOX_WITH_VMSVGA3D 3500 3500 if (pThis->svga.f3DEnabled) 3501 3501 { … … 3507 3507 } 3508 3508 } 3509 # endif3509 # endif 3510 3510 /* VRAM tracking is enabled by default during bootup. */ 3511 3511 pThis->svga.fVRAMTracking = true; … … 3559 3559 int rc; 3560 3560 3561 # ifdef VBOX_WITH_VMSVGA3D3561 # ifdef VBOX_WITH_VMSVGA3D 3562 3562 if (pThis->svga.f3DEnabled) 3563 3563 { … … 3598 3598 } 3599 3599 } 3600 # endif // VBOX_WITH_VMSVGA3D3600 # endif // VBOX_WITH_VMSVGA3D 3601 3601 } 3602 3602
Note:
See TracChangeset
for help on using the changeset viewer.

