某些設備上顯存是內存的一部分,這時OpenGL能否直接使用內存中的紋理?
01-26
在某些設備上(如Tegra TK1),顯存是內存的一部分,能否讓OpenGL直接使用內存中的紋理從而避免glTexStorage2D, glTexImage2D之類的調用?
不能。
1. 即便一體的內存,仍有一塊區域是GPU使用最趁手的,通常叫做carve out。
2. 在API層面你仍然只能map/unmap。至於驅動如何實現這個,你管不著。
欲知更多細節,請見 UMA的優勢與限制
補充一點,xbox 360上,可以p = new char[xxx]; 然後賦給texture,作為紋理的內存。這是需要不同的api。你為啥需要這麼做呢...我想到了各種map/unmap,但是GLES能不能這麼幹不了解
這麼說吧,主機廠商為了壓成本(或者說:讓消費者可以在有限的價格內享受到最優質的遊戲體驗)什麼都乾的出來。統一內存這事情遊戲機史上就有這麼乾的,比如 Atari Jaguar 這個神奇的主機,它的三個大晶元是這樣的:
- "Tom" Chip, 26.59 MHz
- Graphics processing unit (GPU) – 32-bitRISC architecture, 4 KB internal cache, all graphics effects are software based.
- Core has some additional instructions intended for 3D operations
- Object Processor – 64-bit non-programmable; provides all video output from system.
- Blitter – 64-bit high speed logic operations, z-buffering and Gouraud shading, with 64-bit internal registers.
- DRAM controller, 8, 16, 32 and 64-bit memory management
- Graphics processing unit (GPU) – 32-bitRISC architecture, 4 KB internal cache, all graphics effects are software based.
- "Jerry" Chip, 26.59 MHz
- Digital Signal Processor – 32-bitRISC architecture, 8 KB internal cache
- Similar RISC core as the GPU, additional instructions intended for audio operations
- CD-quality sound (16-bit stereo)
- Number of sound channels limited by software
- Two DACs (stereo) convert digital data to analog sound signals
- Full stereo capabilities
- Wavetable synthesis, FM synthesis, FM Sample synthesis, and AM synthesis
- A clock control block, incorporating timers, and a UART
- Joystick control
- Digital Signal Processor – 32-bitRISC architecture, 8 KB internal cache
- Motorola 68000 "used as a manager".
- General purpose 16/32-bit control processor, 13.295 MHz
內存在這三個晶元間就是完全對稱的。
不過對於 Tegra,應該不行。用map就是了
驅動實現上肯定就避免了拷貝
顯存不只是個當前context使用啊,你直接操縱內存,那個內存可能正在被其他context使用。。。
API存在有其目的,還是老老實實用API吧。不一定行,因為可能只有一部分區域可以被用。而且即便是同一塊內存區域,CPU和GPU所見的地址未必一樣。
可以,現在已經有類似的擴展,chrome有類似的需求,具體查下user ptr,linux下實現也早就有了
推薦閱讀:
※Opengl 的片段著色器的Blend的疑惑 片段著色器的Alpha Blend次序?
※OpenGL ES 在不同架構上的指令優化是否真的完美?
※OpenGL 與 OpenGL ES2 之間有何區別?
※請問你用opengl/opengl es做過或者看到過的最酷的作品?