aboutsummaryrefslogtreecommitdiffstats
path: root/vxd_svga.c
diff options
context:
space:
mode:
authorJaroslav Hensl <emulator@emulace.cz>2024-07-26 02:07:52 +0200
committerJaroslav Hensl <emulator@emulace.cz>2024-07-26 02:07:52 +0200
commit6ce40234ffeddfc716389c8e89d336b9ff8a838b (patch)
tree03e4345319f4116c3de6bf944a12aa9c8f3fc0b3 /vxd_svga.c
parentbbcb8a42582dd2062d1fca5fa6eff3b49485f11f (diff)
downloadvmdisp9x-6ce40234ffeddfc716389c8e89d336b9ff8a838b.tar.gz
GMR was too fragmented (vmware), disable multisample option (for vmware)
Diffstat (limited to 'vxd_svga.c')
-rw-r--r--vxd_svga.c42
1 files changed, 25 insertions, 17 deletions
diff --git a/vxd_svga.c b/vxd_svga.c
index 71055b5..7b5b44e 100644
--- a/vxd_svga.c
+++ b/vxd_svga.c
@@ -99,6 +99,8 @@ static char SVGA_conf_st_size[] = "STSize";
static char SVGA_conf_st_flags[] = "STOptions";
static char SVGA_vxd_name[] = "vmwsmini.vxd";
+static char SVGA_conf_disable_multisample[] = "NoMultisample";
+
/**
* Notify virtual HW that is some work to do
**/
@@ -255,9 +257,6 @@ BOOL SVGA_fence_is_passed(DWORD fence_id)
void SVGA_fence_wait(DWORD fence_id)
{
- //DWORD cnt = 0;
-
- //for(cnt = 0; cnt < SVGA_TIMEOUT; cnt++)
for(;;)
{
if(SVGA_fence_is_passed(fence_id))
@@ -265,15 +264,17 @@ void SVGA_fence_wait(DWORD fence_id)
break;
}
- CB_queue_check(NULL);
+ if(cb_support && cb_context0)
+ {
+ if(CB_queue_check(NULL))
+ {
+ /* waiting for fence but command queue is empty */
+ SVGA_Flush();
+ return;
+ }
+ }
SVGA_Sync();
}
-
- /*
- if(cnt == SVGA_TIMEOUT)
- {
- SVGA_Flush();
- }*/
}
void *SVGA_cmd_ptr(DWORD *buf, DWORD *pOffset, DWORD cmd, DWORD cmdsize)
@@ -330,7 +331,7 @@ static DWORD fb_pm16 = 0;
static DWORD st_pm16 = 0;
static DWORD st_address = 0;
static DWORD st_surface_mb = 0;
-
+static DWORD disable_multisample = 0;
BOOL st_useable(DWORD bpp)
{
@@ -402,6 +403,8 @@ BOOL SVGA_init_hw()
RegReadConf(HKEY_LOCAL_MACHINE, SVGA_conf_path, SVGA_conf_st_size, &st_surface_mb);
RegReadConf(HKEY_LOCAL_MACHINE, SVGA_conf_path, SVGA_conf_st_flags, &st_flags);
+ RegReadConf(HKEY_LOCAL_MACHINE, SVGA_conf_path, SVGA_conf_disable_multisample, &disable_multisample);
+
if(!FBHDA_init_hw())
{
return FALSE;
@@ -511,6 +514,8 @@ BOOL SVGA_init_hw()
}
}
+ set_fragmantation_limit();
+
SVGA_DB_alloc();
/* allocate buffer for enable and disable CB */
@@ -935,12 +940,15 @@ DWORD SVGA_FixDevCap(DWORD cap_id, DWORD cap_val)
}
break;
}
-#if 0
- /* VBox hasn't Z_DF16/Z_DF24, vmware has, for testing same behaviour */
- case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
- case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
- return 0;
-#endif
+ case SVGA3D_DEVCAP_MULTISAMPLE_2X:
+ case SVGA3D_DEVCAP_MULTISAMPLE_4X:
+ case SVGA3D_DEVCAP_MULTISAMPLE_8X:
+ if(disable_multisample)
+ {
+ return 0;
+ }
+ break;
+
}
return cap_val;