游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2492|回复: 5

关于显存的一个长期困绕的问题有了惊喜答案,请求确认!!

[复制链接]

3

主题

18

帖子

23

积分

注册会员

Rank: 2

积分
23
发表于 2008-6-3 15:47:00 | 显示全部楼层 |阅读模式
这个问题是这样的: 众所周知,一个win32进程最多只有2G的地址空间可以访问. 而现在的显存容量越来越大, 假如一个显卡有2G的显存,那么,就单单一个显存就把内存映射占用完了,没有了地址空间, 那这个游戏程序如何运行?其它的程序又如何运行?

经反复查考, 结论如下,不知是否准确,还请各位确认一下:

(1)显存是显卡自带的临时存储器件,它和windows的内存管理基本上没有任何关系。windows的内存管理是面向内存条的。也就是说,显存容量是1G还是2G,都不占用物理地址空间。

(2)显存只提供16M的帧缓存供windows的ROM映射机制使用,映射到系统内存显示区。(有兴趣者可以自查MMIO映射)

(3)AGP、HyperMemory、TurboCache等技术,可以划分若干物理内存当显存来使用。

(4)不管是真正的显存,还是AGP显存,它们在使用时都不能通过mov指令直接访问。应该通过DirectX调用相关Buffer的Lock()函数,将显存临时映射到一段内存空间上来访问。每次用完unlock()后,相关虚拟地址又解放出来的. 由于场景是分批次渲染,再大的场景,每次有几百M内存地址供你临时锁定用,是足够了.

(5)由于win32的进程限定在2G内存地址空间,所以,游戏程序每次最多可以锁定2G的显存。当然在现在游戏里,不可能有这么一个场景同时动用2G显存纹理。

3

主题

18

帖子

23

积分

注册会员

Rank: 2

积分
23
 楼主| 发表于 2008-6-3 15:51:00 | 显示全部楼层

Re:关于显存的一个长期困绕的问题有了惊喜答案,请求确认!!

补充一点: 显存越大,你CreateBuffer()失败的机会就越少. 你可以把很多纹理各种杂七杂八提交到显示缓存中, 游戏运行当然越快.


3

主题

18

帖子

23

积分

注册会员

Rank: 2

积分
23
 楼主| 发表于 2008-6-3 15:54:00 | 显示全部楼层

Re:关于显存的一个长期困绕的问题有了惊喜答案,请求确认!!

看起来很幼稚的问题. 越想越糊涂

1

主题

177

帖子

198

积分

注册会员

Rank: 2

积分
198
QQ
发表于 2008-6-3 16:51:00 | 显示全部楼层

Re:关于显存的一个长期困绕的问题有了惊喜答案,请求确认!!

LZ可以去找点硬件系统的结构,总线,寻址方面的资料看看。

22

主题

191

帖子

217

积分

中级会员

Rank: 3Rank: 3

积分
217
QQ
发表于 2008-6-5 15:25:00 | 显示全部楼层

Re:关于显存的一个长期困绕的问题有了惊喜答案,请求确认!!

显存的大小对程序可以是透明的

36

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
发表于 2008-6-12 09:55:00 | 显示全部楼层

Re:关于显存的一个长期困绕的问题有了惊喜答案,请求确认!!

你的答案经确认是错误的!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 07:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表