aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJaroslav Hensl <jara@hensl.cz>2025-06-30 19:19:12 +0200
committerJaroslav Hensl <jara@hensl.cz>2025-06-30 19:19:12 +0200
commit0d4ef2ba2beff03f21152795a20134bc5241f990 (patch)
treefbfa97e7446bb3df2a3eb7f0ddf02327c8624bd5
parent63187c5eff1fe51a3eaf1b735e6a790324c675d6 (diff)
downloadvmdisp9x-0d4ef2ba2beff03f21152795a20134bc5241f990.tar.gz
vidmem: expose heap to 32bit driver, GMR stats all heapsv1.2025.0.105
-rw-r--r--dddrv.c49
-rw-r--r--makefile2
-rw-r--r--vmdahal.h3
-rw-r--r--vxd_halloc.c22
4 files changed, 26 insertions, 50 deletions
diff --git a/dddrv.c b/dddrv.c
index b253e16..cfa4552 100644
--- a/dddrv.c
+++ b/dddrv.c
@@ -51,32 +51,6 @@ DWORD __loadds __far __fastcall HALDestroyDriver(LPDDHAL_DESTROYDRIVERDATA);
#define FB_MEM_POOL 16777216UL
/*
- * video memory pool usage
- */
-static VIDMEM_t vidMem[] = {
- {
- VIDMEM_ISLINEAR, 0x00000000, 0x00000000,
- {0},
- {0}
- },
- {
- VIDMEM_ISLINEAR, 0x00000000, 0x00000000,
- {0},
- {0}
- },
- {
- VIDMEM_ISLINEAR, 0x00000000, 0x00000000,
- {0},
- {0}
- },
- {
- VIDMEM_ISLINEAR, 0x00000000, 0x00000000,
- {0},
- {0}
- }
-};
-
-/*
* callbacks from the DIRECTDRAW object
*/
static DDHAL_DDCALLBACKS_t cbDDCallbacks = {
@@ -266,7 +240,8 @@ static void buildDDHALInfo(VMDAHAL_t __far *hal, int modeidx)
/*
* video memory pool information
*/
- hal->ddHALInfo.vmiData.pvmList = vidMem;
+ _fmemset(hal->vidMem, 0, sizeof(VIDMEM_t[4]));
+ hal->ddHALInfo.vmiData.pvmList = hal->vidMem;
/*
* set up the pointer to the first available video memory after
@@ -276,27 +251,27 @@ static void buildDDHALInfo(VMDAHAL_t __far *hal, int modeidx)
heap = 0;
can_flip = hda->flags & FB_SUPPORT_FLIPING;
- vidMem[0].dwFlags = VIDMEM_ISLINEAR;
- vidMem[0].ddsCaps.dwCaps = 0;//DDSCAPS_OFFSCREENPLAIN; - what this memory CANNOT be used for
+ hal->vidMem[0].dwFlags = VIDMEM_ISLINEAR;
+ hal->vidMem[0].ddsCaps.dwCaps = 0;//DDSCAPS_OFFSCREENPLAIN; - what this memory CANNOT be used for
#if 0
if(hda->system_surface + hda->stride < FB_MEM_POOL && hda->vram_size > FB_MEM_POOL)
{
- vidMem[0].fpStart = hda->vram_pm32 + FB_MEM_POOL;
- vidMem[0].fpEnd = hda->vram_pm32 + hda->vram_size - hda->overlays_size - 1;
+ hal->vidMem[0].fpStart = hda->vram_pm32 + FB_MEM_POOL;
+ hal->vidMem[0].fpEnd = hda->vram_pm32 + hda->vram_size - hda->overlays_size - 1;
- vidMem[1].fpStart = hda->vram_pm32 + hda->system_surface + hda->stride;
- vidMem[1].fpEnd = hda->vram_pm32 + FB_MEM_POOL - 1;
- vidMem[1].dwFlags = VIDMEM_ISLINEAR;
- vidMem[1].ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
+ hal->vidMem[1].fpStart = hda->vram_pm32 + hda->system_surface + hda->stride;
+ hal->vidMem[1].fpEnd = hda->vram_pm32 + FB_MEM_POOL - 1;
+ hal->vidMem[1].dwFlags = VIDMEM_ISLINEAR;
+ hal->vidMem[1].ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
hal->ddHALInfo.vmiData.dwNumHeaps = 2;
}
else
{
#endif
- vidMem[0].fpStart = hda->vram_pm32 + hda->system_surface + hda->stride;
- vidMem[0].fpEnd = hda->vram_pm32 + hda->vram_size - hda->overlays_size - 1;
+ hal->vidMem[0].fpStart = hda->vram_pm32 + hda->system_surface + hda->stride;
+ hal->vidMem[0].fpEnd = hda->vram_pm32 + hda->vram_size - hda->overlays_size - 1;
hal->ddHALInfo.vmiData.dwNumHeaps = 1;
#if 0
}
diff --git a/makefile b/makefile
index c7677cc..51f3783 100644
--- a/makefile
+++ b/makefile
@@ -13,7 +13,7 @@ OBJS += &
INCS = -I$(%WATCOM)\h\win -Iddk -Ivmware
-VER_BUILD = 104
+VER_BUILD = 105
FLAGS = -DDRV_VER_BUILD=$(VER_BUILD)
diff --git a/vmdahal.h b/vmdahal.h
index 8a00ace..f9f9205 100644
--- a/vmdahal.h
+++ b/vmdahal.h
@@ -68,7 +68,8 @@ typedef struct VMDAHAL
DDPIXELFORMAT_t ddpf;
DDHALINFO_t ddHALInfo;
-
+ VIDMEM_t vidMem[4];
+
VMDAHALCB32_t cb32;
DWORD hInstance;
diff --git a/vxd_halloc.c b/vxd_halloc.c
index 5777237..65fb2a3 100644
--- a/vxd_halloc.c
+++ b/vxd_halloc.c
@@ -310,35 +310,35 @@ BOOL vxd_hinit()
if(free_pages >= RAM_MB1024)
{
- hblocks[0] = vxd_hinit_block(2048, FALSE, FALSE); // 8 MB
- hblocks[1] = vxd_hinit_block(8192, FALSE, FALSE); // 32 MB
+ hblocks[0] = vxd_hinit_block(2048, FALSE, TRUE); // 8 MB
+ hblocks[1] = vxd_hinit_block(8192, FALSE, TRUE); // 32 MB
hblocks[2] = vxd_hinit_block(32768, FALSE, TRUE); // 128 MB
hblocks[3] = vxd_hinit_block(65536, TRUE, TRUE); // 256 MB
}
else if(free_pages >= RAM_MB768)
{
- hblocks[0] = vxd_hinit_block(2048, FALSE, FALSE); // 8 MB
- hblocks[1] = vxd_hinit_block(8192, FALSE, FALSE); // 32 MB
+ hblocks[0] = vxd_hinit_block(2048, FALSE, TRUE); // 8 MB
+ hblocks[1] = vxd_hinit_block(8192, FALSE, TRUE); // 32 MB
hblocks[2] = vxd_hinit_block(32768, FALSE, TRUE); // 128 MB
hblocks[3] = vxd_hinit_block(32768, TRUE, TRUE); // 128 MB
}
else if(free_pages >= RAM_MB512)
{
- hblocks[0] = vxd_hinit_block(2048, FALSE, FALSE); // 8 MB
- hblocks[1] = vxd_hinit_block(8192, FALSE, FALSE); // 32 MB
+ hblocks[0] = vxd_hinit_block(2048, FALSE, TRUE); // 8 MB
+ hblocks[1] = vxd_hinit_block(8192, FALSE, TRUE); // 32 MB
hblocks[2] = vxd_hinit_block(32768, FALSE, TRUE); // 128 MB
}
else if(free_pages >= RAM_MB256)
{
- hblocks[0] = vxd_hinit_block(2048, FALSE, FALSE); // 8 MB
- hblocks[1] = vxd_hinit_block(8192, FALSE, FALSE); // 32 MB
+ hblocks[0] = vxd_hinit_block(2048, FALSE, TRUE); // 8 MB
+ hblocks[1] = vxd_hinit_block(8192, FALSE, TRUE); // 32 MB
hblocks[2] = vxd_hinit_block(16384, FALSE, TRUE); // 64 MB
}
else if(free_pages >= RAM_MB128)
{
- hblocks[0] = vxd_hinit_block(1024, FALSE, FALSE); // 4 MB
- hblocks[1] = vxd_hinit_block(4096, FALSE, FALSE); // 16 MB
- hblocks[2] = vxd_hinit_block(8192, FALSE, TRUE); // 32 MB
+ hblocks[0] = vxd_hinit_block(1024, FALSE, TRUE); // 4 MB
+ hblocks[1] = vxd_hinit_block(4096, FALSE, TRUE); // 16 MB
+ hblocks[2] = vxd_hinit_block(8192, FALSE, TRUE); // 32 MB
}
dbg_printf("vxd_hinit status: %lX %lX %lX %lX\n", hblocks[0], hblocks[1], hblocks[2], hblocks[3]);