问题标签 [video-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - 中断 10h 的功能 06h。滚动文本行
我需要使用中断 10h 的函数 06h 来实现滚动队列。问题是我有滚动线,但符号没有出现,光标消失了,什么也没有发生。也许我忘记了要考虑的事情?编写我使用的代码FASM
。该代码是引导加载程序的一部分。这是与滚动相关的一段代码:
我有一个计数器,当它达到 2001(从 1 开始计数)时,控制权传递给 ScrollLine。
滚动线:
我完整的引导加载程序代码如下:
assembly - Intel GMA950 私有缓冲区中字节的含义,在 VGA 文本模式下
在文本屏幕(模式 3,80x25)上工作时,B800h 的常用视频缓冲区和接近 4GB 地址空间末尾的线性帧缓冲区 (LFB) 都处于活动状态。我发现对于显示屏上的每个字符单元格,LFB 使用8 bytes。第一个字节 (a) 代表 ASCII,第二个字节 (b) 代表属性。
在一个空的显示页面上,这 8 个字节如下所示:
有谁知道额外的 6 个字节是做什么用的?我观察到,只有这些神秘字节中的第一个 (c) 和第五个 (g) 实际上用我认为随机的值进行了刷新。其他 4 个字节保持为零,但如果我在其中放入任何内容,它甚至可以在视频模式设置下存活。
memory - direct3d 如何管理不同用途的资源存储?
我正在使用 direct3d 和 dxgi 编写 VNC 程序,并且我想尽量减少视频 RAM 和系统 RAM 之间的资源传输。但是我对以下代码的某些部分感到困惑。由于AcquireNextFrame方法获取的纹理的使用不是 staging 并且不能被 CPU 读取,所以我必须将其复制到一个 staging 纹理。但我想知道CopyResource从默认使用资源复制到暂存使用资源时会做什么?它是否在视频 RAM 中为暂存资源分配一些内存,然后复制到该区域,当我调用Map时,纹理是从该区域复制到系统 RAM 还是直接将资源复制到系统 RAM?
}
assembly - 将字符串打印到 BIOS 视频内存不起作用
所以,我使用 Bochs 来运行我的引导加载程序和https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf 第 4.1 章。
我试图通过直接写入视频内存来打印到 BIOS 控制台,但是当我运行 Bochs 时,我看不到打印的字符串。该代码实际上与 PDF 上的代码相同。错过了什么吗?是否有我忘记的 Bochs 设置或 PDF 没有告诉我的内容?
这是包含函数的程序集文件
这是我的实际启动逻辑。
wpf - WPF 的视频内存使用行为
我正在开发一个在画布上呈现图像的 WPF 应用程序。当我继续在画布上循环显示图像时,我看到在前 2 分钟内,视频内存(超过 1000 MB)被大量分配和释放。视频显示时出现严重抖动。该机器配备 NVidia Quadro NVS 310 显卡 (512 MB)。2分钟后,显存上的内存分配和释放在300MB以内。在此期间不再看到抖动并且显示平滑。假设,如果我暂停应用程序几秒钟然后恢复,我再次看到视频内存超过 1000 MB,并且再次出现抖动。 超过 1000MB 的 Perforator 视频内存快照
我的问题是: 1. 为什么在应用程序启动和暂停后恢复时视频内存会超过 1000 MB?是不是因为超过了512MB的显卡内存,所以这段时间不使用显卡内存?2、为什么应用程序运行2分钟后显存在300MB以内?3. 如果perforator工具中的“Video Memory usage”在显卡内存(本例为512MB)之内,是否可以说应用程序正在使用硬件加速?
c - 为什么我的视频内存偏移量计算减一?
我一直在阅读并遵循 Nick Blundell 编写的关于从头开始编写操作系统的教程,该教程可在https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-找到开发者.pdf
我已经成功编写了一个可以调用 C 代码的引导加载程序,因此我开始用 C 编写我的内核。我现在正在尝试编写可以在屏幕上打印字符和字符串的函数。当我开始执行 C 代码时,我处于 32 位保护模式,所以我试图从视频内存地址 0xb8000 正确计算内存偏移量。
当我尝试使用计算出的偏移量访问视频内存的特定区域时,我的问题就开始了。由于文本区域是 25 行 x 80 列,我使用公式 ((row * 80) + column) * 2 因为我必须有一个字符字节和一个属性字节。当我设置 row = 0 和 column = 0 时,我尝试打印的 X 不存在。设置行 = 0 列 = 1,左上角会出现一个 X。
从 char* video_memory = 0xb8000 开始并重复发出 video_memory++ 允许我正确访问每个字节并在黑色背景上打印一个空间。
这是我的主要代码:
这是row = 0 and column = 0时显示 的控制台:row和column为0时的控制台。没有X出现。
这是行 = 0 列 = 1 时的控制台: 行为 0 列为 1 时的控制台。出现 X。
这是我上面的 kernel.c 文件的 objdump:
我已经追踪并亲手检查了我的偏移计算的实际装配说明,它们似乎是正确的。我怀疑当我尝试将我的偏移量(类型 int)添加到我的视频内存地址(类型 unsigned char*)时会出现问题,但我再次不确定。
此外,我尝试硬编码偏移量的特定数字。使用 video_memory += 0 而不是 video_memory += offset 可以按需要工作。
c - 在 32 位保护模式下从 c 从文本模式切换到图形模式
我正在创建一个小型 32 位操作系统。我已经用汇编语言编写了引导加载程序,用汇编语言编写了内核的条目,我目前正在用 c 编写内核。在引导加载程序中,我已经切换到 32 位保护模式。之后我从内存地址调用我的内核0x1000
。一切正常,因为我什至可以通过写入内存地址将文本打印到屏幕上。我的0xb8000
主要问题是:
如何在受保护模式下从内核切换到视频(像素绘图)模式。我知道如何从引导加载程序的 16 位实模式执行此操作,方法是将寄存器设置ah
为0x00
然后al
调用0x13
中断0x10
但我不知道如何在保护模式下从 c 代码中解决这个问题。任何形式的帮助将不胜感激。在此先感谢
附加信息:我正在使用NASM
编译汇编代码和Cygwin gcc
编译 c 代码。
qt - QLabel 的显存使用和 QWidget::hide() 的效果
我正在编写一个应用程序,可能会有数以万计的标签(一种日志查看应用程序),其中大部分隐藏在 QWidget::hide() 中。我想象一个 QLabel 在创建时会占用一些视频内存。现在, hide() 是否释放了视频内存?还是我必须 QWidget::remove() 大部分隐藏标签才能将视频内存使用率保持在合理水平?
assembly - 使用汇编语言写入视频内存时无效的段覆盖
我有这个汇编代码用于将像素写入视频内存:
问题是 NASM 返回此错误:
boot.asm:15:错误:无效段覆盖
我应该在第 15 行更改什么才能使其正常工作?另外,我不知道 cx 和 ax 是什么,所以它会返回这个错误,那么 NASM 中是否有编译时调试器?
gpu - CPU 和 GPU 内存共享
如果(离散)GPU 有自己的视频 RAM,我必须将数据从 RAM 复制到 VRAM 才能使用它们。但是如果 GPU 与 CPU 集成(例如 AMD Ryzen)并共享内存,我是否仍然需要制作副本,或者它们可以交替访问同一个内存块?