diff options
author | Jaroslav Hensl <jara@hensl.cz> | 2024-04-04 22:50:29 +0200 |
---|---|---|
committer | Jaroslav Hensl <jara@hensl.cz> | 2024-04-04 22:50:29 +0200 |
commit | a4133d1793b2037f409dfa2021f3b8057186022b (patch) | |
tree | 4225b86610467e0fd9d7d70085e1728758547734 | |
parent | b1b51c45629f0b6e39e8982f032c453b27b0f16e (diff) | |
download | vmdisp9x-a4133d1793b2037f409dfa2021f3b8057186022b.tar.gz |
faster ID allocation
-rw-r--r-- | 3d_accel.h | 11 | ||||
-rw-r--r-- | makefile | 2 | ||||
-rw-r--r-- | vxd_svga.c | 22 |
3 files changed, 31 insertions, 4 deletions
@@ -33,7 +33,7 @@ THE SOFTWARE. #endif
#endif
-#define API_3DACCEL_VER 20240321
+#define API_3DACCEL_VER 20240404
/* function codes */
#define OP_FBHDA_SETUP 0x110B /* VXD, DRV, ExtEscape */
@@ -196,12 +196,16 @@ typedef struct SVGA_DB_region {
DWORD pid;
SVGA_region_info_t info;
+ DWORD pad1;
+ DWORD pad2;
} SVGA_DB_region_t;
typedef struct SVGA_DB_context
{
DWORD pid;
void *cotable;
+ DWORD pad1;
+ DWORD pad2;
} SVGA_DB_context_t;
typedef struct SVGA_DB_surface
@@ -224,8 +228,13 @@ typedef struct SVGA_DB DWORD regions_cnt;
DWORD contexts_cnt;
DWORD surfaces_cnt;
+ DWORD *regions_map;
+ DWORD *contexts_map;
+ DWORD *surfaces_map;
char mutexname[64];
DWORD stat_regions_usage;
+ DWORD pad1;
+ DWORD pad2;
} SVGA_DB_t;
/* internal VXD only */
@@ -11,7 +11,7 @@ OBJS += & INCS = -I$(%WATCOM)\h\win -Iddk -Ivmware
-VER_BUILD = 41
+VER_BUILD = 43
FLAGS = -DDRV_VER_BUILD=$(VER_BUILD)
@@ -452,11 +452,16 @@ static void SVGA_DB_alloc() DWORD max_regions = SVGA3D_MAX_MOBS; ///SVGA_ReadReg(SVGA_REG_GMR_MAX_IDS);
+ DWORD regions_map_size = ((max_regions + 31) >> 3) & 0xFFFFFFFCUL;
+ DWORD contexts_map_size = ((SVGA3D_MAX_CONTEXT_IDS + 31) >> 3) & 0xFFFFFFFCUL;
+ DWORD surfaces_map_size = ((SVGA3D_MAX_SURFACE_IDS + 31) >> 3) & 0xFFFFFFFCUL;
+
size = max_regions * sizeof(SVGA_DB_region_t) +
SVGA3D_MAX_CONTEXT_IDS * sizeof(SVGA_DB_context_t) +
SVGA3D_MAX_SURFACE_IDS * sizeof(SVGA_DB_surface_t) +
- sizeof(SVGA_DB_t);
-
+ sizeof(SVGA_DB_t) +
+ regions_map_size + contexts_map_size + surfaces_map_size;
+
svga_db = (SVGA_DB_t*)_PageAllocate(RoundToPages(size), PG_VM, ThisVM, 0, 0x0, 0x100000, NULL, PAGEFIXED);
if(svga_db)
{
@@ -476,8 +481,21 @@ static void SVGA_DB_alloc() svga_db->surfaces_cnt = SVGA3D_MAX_SURFACE_IDS;
mem += svga_db->surfaces_cnt * sizeof(SVGA_DB_surface_t);
+ svga_db->regions_map = (DWORD*)mem;
+ mem += regions_map_size;
+
+ svga_db->contexts_map = (DWORD*)mem;
+ mem += contexts_map_size;
+
+ svga_db->surfaces_map = (DWORD*)mem;
+ mem += surfaces_map_size;
+
memcpy(svga_db->mutexname, &(db_mutexname[0]), sizeof(db_mutexname));
+ memset(svga_db->regions_map, 0xFF, regions_map_size);
+ memset(svga_db->contexts_map, 0xFF, contexts_map_size);
+ memset(svga_db->surfaces_map, 0xFF, surfaces_map_size);
+
svga_db->stat_regions_usage = 0;
}
}
|