Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
freem
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Openai/69676758-d944-8003-a3d4-835e33b4e372
(section)
Add languages
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== gpt-5-2 == === User: Is DisplayPort a communication protocol? === Is DisplayPort a communication protocol? === Assistant: Yes. === Yes. DisplayPort is a communication protocol, but more precisely it is a digital display interface standard that defines both: # The electrical signaling and physical layer (how bits are transmitted over wires), and # The communication protocol (how video, audio, timing, and control data are packetized, encoded, synchronized, and interpreted). Key clarifications: * DisplayPort uses packet-based data transmission, unlike older interfaces such as VGA or DVI which were primarily signal-stream–oriented. * It defines: - Link training and negotiation (lane count, link rate) - Framing and encoding (e.g., 8b/10b in DP 1.x, 128b/132b in DP 2.x) - Transport of multiple data types (video, audio, auxiliary data) - Sideband communication via the AUX channel (used for EDID, DPCD, control, etc.) So in strict terms: * Yes, DisplayPort includes a communication protocol, but it is not a general-purpose protocol like TCP/IP. * It is a specialized, layered protocol stack designed specifically for real-time display transport. If you want, I can break it down in OSI-like layers or compare it directly to HDMI, USB, or PCIe. === User: What comes above DisplayPort === What comes above DisplayPort === Assistant: That depends on what you mean by “above” in the stack. === That depends on what you mean by “above” in the stack. DisplayPort itself sits relatively low. Conceptually, what comes above it is not another single protocol, but several layers of abstraction. From lowest to highest: # DisplayPort (you already know this layer) * Physical signaling, link training, packet transport * Carries pixel streams, audio samples, and control data # Video timing / pixel formats These define what the pixel stream represents, independent of the wire: * Resolution (e.g., 2560×1440) * Refresh rate (e.g., 144 Hz) * Color format (RGB, YCbCr) * Bit depth (8-bit, 10-bit, etc.) Examples: VESA timing standards like CVT / CVT-RB # Display protocol usage modes Logical uses of DisplayPort: * Single Stream Transport (SST) * Multi-Stream Transport (MST) These determine how many displays and streams are carried, but still no “content meaning”. # GPU display engine / OS graphics subsystem This is where “display content” starts to exist: * Linux: DRM/KMS, Wayland/X11 * Windows: WDDM + Desktop Window Manager * The OS compositor decides what pixels should appear on each display and hands framebuffers to the GPU # Applications and rendering APIs Applications generate the visuals: * OpenGL, Vulkan, DirectX, Metal * Game engines, video players, browsers They never “talk DisplayPort”; they render frames into buffers. Important distinction DisplayPort does not carry: * Video codecs (H.264, AV1, etc.) * Files, windows, or UI concepts * Application data By the time data reaches DisplayPort, it is already fully rendered pixels (plus audio). In short Above DisplayPort is: : If you want, I can draw a strict layered diagram or compare this to how USB-C tunnels DisplayPort alongside PCIe and USB. === User: I meant how DP is connected to the graphics card, which is connected to PCIe which is connected to... === I meant how DP is connected to the graphics card, which is connected to PCIe which is connected to... === Assistant: Understood. === Understood. You are asking for the actual hardware / interconnect chain, not the logical graphics stack. Here is the correct end-to-end picture, from CPU outward, with the important caveats. ==== ### ==== * Executes application code * Submits rendering commands (draw calls, compute, copies) ⬇ ===== - Command buffers, resources, sometimes framebuffers ===== * Shared via DMA, not copied per frame ⬇ ===== - General-purpose, packet-switched interconnect ===== * Used for: - Command submission - Resource uploads - Synchronization * Not used to transmit live pixel streams ⬇ ===== Inside the GPU, things split: ===== ====== - Execute shaders ====== * Produce rendered images into VRAM ====== - Reads finished framebuffers from VRAM ====== * Applies timing, scaling, color conversion * Generates a pixel stream ⬇ ===== - Dedicated hardware block on the GPU ===== * Converts pixel stream into: - DisplayPort packets - Electrical signaling on DP lanes * Completely independent of PCIe ⬇ ===== - Monitor decodes DP packets ===== * Drives the panel timing controller (TCON) ==== DisplayPort is NOT “on top of PCIe.” ==== * PCIe is used to control the GPU and move data into VRAM * DisplayPort is a separate hardware output path * They meet only inside the GPU silicon Think of the GPU as having: * A PCIe endpoint on one side * One or more display PHYs on the other ==== Slightly different wiring: ==== * CPU + GPU are on the same die * Framebuffer lives in system RAM * Display engine reads RAM directly * DP PHY may be: - On the CPU package, or - On the motherboard chipset via internal links Still: * No PCIe in the display path * PCIe is only for external GPUs or devices ==== ### ==== * DP is tunneled, not layered: - Raw DP packets are multiplexed over the cable - Still generated by the same DP display engine * PCIe tunneling is a separate logical channel ===== - If pixels go over PCIe or network, it is no longer DisplayPort ===== * It becomes a framebuffer copy + software protocol ==== DisplayPort is generated by the GPU’s display controller and leaves the GPU through a dedicated PHY; PCIe only feeds the GPU, it does not carry the display signal. ==== If you want, I can also explain this from a die-level block diagram perspective or compare it to how NVLink or SoC display paths work. === User: So if i wanted to develop a game, how deep should i feasibly go === So if i wanted to develop a game, how deep should i feasibly go === Assistant: For game development, you should not go anywhere near DisplayPort, PCIe, or hardware signaling. === For game development, you should not go anywhere near DisplayPort, PCIe, or hardware signaling. Going that deep is neither feasible nor useful unless you are writing drivers, firmware, or silicon. Here is the correct depth to target, from a practical and technical standpoint. ==== ### ==== This is where game developers operate. You interact with: * Vulkan / DirectX / OpenGL / Metal * GPU concepts: - Command buffers - Pipelines - Shaders - Buffers, textures - Synchronization (fences, semaphores) You output: * Rendered frames into swapchains * The OS + driver handles presentation You do not control: * Scanout timing * Display links * Color encoding at the wire level ===== You should understand: ===== * Window systems (Wayland/X11, Windows DWM) * Fullscreen vs borderless * VSync, adaptive sync * Presentation modes (mailbox, FIFO, immediate) But you do not write code here. ==== ### ==== * Fixed-function hardware * No software hooks * No benefit to gameplay or performance understanding ===== - Abstracted by drivers and DMA ===== * Only relevant for driver or kernel development ===== - Vendor-specific ===== * Closed documentation * Irrelevant to rendering correctness ==== Understand this boundary: ==== : Once you submit a frame for presentation: * The GPU display engine takes over * Everything downstream is outside your control This mental model prevents a lot of confusion about: * Tearing * Latency * VSync behavior * Multi-monitor issues ==== Go slightly deeper only here: ==== * GPU architecture basics: - Warps / wavefronts - Memory hierarchy - Cache behavior * Driver interaction: - State changes cost - CPU–GPU synchronization hazards Still: * No need to touch hardware I/O standards ==== Only then would you go deeper, but that is no longer “game dev”: ==== * Writing a display server * Writing a GPU driver * Emulator / hypervisor graphics stack * OS kernel graphics At that point: * DisplayPort becomes relevant * PCIe packet formats matter ==== For game development, stop at the graphics API and GPU architecture level. ==== Anything below that: * Is inaccessible * Provides no leverage * Is handled entirely by drivers and hardware If you want, tell me what kind of game dev you mean (engine, gameplay, rendering research, indie, low-level engine), and I can give a precise learning roadmap with no wasted depth. === User: So SDL + Vulkan is enough === So SDL + Vulkan is enough === Assistant: Yes. === Yes. SDL + Vulkan is sufficient for serious game development. More precisely: ===== SDL handles all platform-dependent, non-graphics concerns: ===== * Window creation * Input (keyboard, mouse, gamepads) * High-resolution timing * Display enumeration * Vulkan surface creation (VkSurfaceKHR) '' Cross-platform portability (Windows, Linux, macOS'') You do not need to care about: * DisplayPort * Window system details * Native APIs (Win32, X11, Wayland, Cocoa) SDL already sits at the correct abstraction boundary. * macOS uses MoltenVK (Vulkan → Metal), which is still fine unless you are doing cutting-edge Vulkan features. ===== Vulkan gives you explicit, low-level GPU control, which is the lowest level that is actually useful for games: ===== * Explicit memory management * Explicit synchronization * Predictable performance * Modern rendering features * Access to compute This is exactly where “deep enough” stops. ===== And this is a feature, not a limitation: ===== * No access to scanout * No control over DP/HDMI * No display timing beyond vsync/adaptive sync requests * No OS compositor bypass (except exclusive fullscreen) Those layers are correctly abstracted away. ===== <syntaxhighlight>Your Game ===== └─ Your Engine Code ├─ SDL (window, input, events) └─ Vulkan (rendering, compute) └─ GPU driver └─ GPU display engine └─ DisplayPort / HDMI </syntaxhighlight> You should never cross that Vulkan ↔ driver boundary. ===== Only in edge cases: ===== * You need a full editor UI → add ImGui * You want audio → SDL_audio or another lib * You want asset pipelines → separate tooling * You need console support → proprietary SDKs Still no need to go lower. ===== For game development: ===== : Anything below that is driver, OS, or hardware work — not game development. If you want, I can sanity-check a minimal Vulkan + SDL project layout or suggest what not to over-engineer early. === User: Do GPU manufacturers write drivers for their hardware? === Do GPU manufacturers write drivers for their hardware? === Assistant: Yes. === Yes. GPU manufacturers write the primary drivers for their hardware. More precisely and with the important nuances: ==== ### ==== * Writes and maintains: - Windows drivers - Linux proprietary drivers * Full control over hardware documentation and behavior ===== - Writes and maintains: - Windows drivers - The official Linux driver stack (AMDGPU kernel driver + Mesa user-space components) ===== * Linux drivers are open source, but still authored and governed by AMD ===== - Writes and maintains: - Windows drivers - Linux drivers (fully open source, upstream-first) ===== * Intel GPUs are the most openly documented ==== - Microsoft, Linux, Apple do not write GPU drivers from scratch ==== * They define: - Driver models (WDDM, DRM/KMS, IOKit) - Validation, signing, and integration rules * They provide interfaces, not hardware-specific code ==== GPU drivers are split into layers: ==== ===== - Memory management ===== * Scheduling * Security / isolation * Display control (modesetting) ===== - Implements APIs: - Vulkan - OpenGL - DirectX ===== * Translates API calls into GPU command streams Both layers are vendor-specific. ==== Common misconception: ==== * Mesa drivers ≠ community guesses * Mesa contains vendor-authored or vendor-blessed code * Even reverse-engineered drivers (e.g., Nouveau) trail far behind ==== This is exactly why: ==== * You cannot “go below Vulkan” * Display engines, PCIe, DP, scanout are all hidden * GPU vendors expose only what they want you to see ==== GPU vendors write their own drivers; the OS provides the framework, not the implementation. ==== If you want, I can explain how Vulkan drivers differ from DirectX drivers internally, or why driver bugs look the way they do from an engine developer’s perspective. === User: What are these OS interfaces === What are these OS interfaces === Assistant: They are formal driver models and kernel interfaces defined by the operating system. === They are formal driver models and kernel interfaces defined by the operating system. GPU vendors must implement them to plug their hardware into the OS. Below is a precise breakdown, without hand-waving. ==== ### ==== This is the core interface. It defines: * How the GPU is scheduled and preempted * Video memory management * Context isolation between processes * Display modesetting and scanout ownership * Power management * Multi-GPU behavior GPU vendors provide: * A kernel-mode driver (dxgkrnl interface) * One or more user-mode drivers: - Direct3D (D3D11/12) - Vulkan - OpenGL Windows itself: * Owns the desktop compositor (DWM) * Enforces security and stability rules * Does not know GPU internals ==== Linux splits graphics into several interfaces. ==== ===== Kernel-space interface that defines: ===== * GPU memory objects (GEM/TTM) * Command submission * Scheduling and fences * Display control (CRTCs, planes, connectors) * Atomic modesetting Vendors implement: * Kernel drivers (amdgpu, i915, nouveau, nvidia-drm) ===== These sit on top of DRM: ===== * Vulkan (via vendor ICD) * OpenGL (usually via Mesa) * EGL / GBM (buffer management and window system glue) The window system (Wayland/X11) never touches the hardware directly. ==== ### ==== Apple tightly controls this stack. * GPU drivers are written by Apple (sometimes with vendor cooperation) * Metal is the only first-class graphics API * Display management is integrated into the OS Third-party low-level access does not exist. ==== They all define: ==== * How commands enter the GPU * How memory is shared and isolated * How display ownership works * How preemption and fault handling occur They explicitly hide: * Command encodings * Display PHY details (DP/HDMI) * PCIe transactions * Scanout timing internals ==== Your code path stops here: ==== <syntaxhighlight>Your code → Vulkan / DirectX → User-mode driver → Kernel driver (WDDM / DRM) → Hardware </syntaxhighlight> You never cross the API boundary. ==== OS interfaces are formal contracts between the OS and GPU vendors. ==== They are not optional, and they are not bypassable in normal applications. If you want, I can map a single Vulkan call all the way down to which OS interface handles it, step by step. === User: In order to properly design a game on paper, how do i determine the exact hardware constraints? === In order to properly design a game on paper, how do i determine the exact hardware constraints? In other word: mechanic A should not consume more than X resource === Assistant: This is a good question, and it’s the right way to think if you want designs that actually ship. === This is a good question, and it’s the right way to think if you want designs that actually ship. The key is that you do not derive constraints from hardware first. You derive them from a performance budget, which is then mapped onto hardware classes. Below is the correct, practical method used in real engines. ==== Everything flows from this. ==== Typical targets: * 60 FPS → 16.67 ms per frame * 120 FPS → 8.33 ms per frame * 30 FPS → 33.3 ms per frame This is your total budget for: * CPU * GPU * synchronization * OS overhead If you don’t fix this, all other numbers are meaningless. ==== You never design for “a GPU”. You design for classes. ==== Example PC tiers: * Minimum: 4-core CPU @ ~3 GHz, GTX 1060 / RX 580–class GPU * Recommended: 6–8 core CPU, RTX 2060 / RX 6600–class GPU * High-end: modern 8–12 core CPU, RTX 4070+ You do not need exact specs—only relative capability. ==== Example for 60 FPS: ==== ===== - Total CPU frame time: ≤ 6–8 ms ===== Typical split: * Gameplay logic: 1–2 ms * Physics: 1–2 ms * AI: 0.5–1.5 ms * Rendering submission: 1–2 ms * Misc (audio, scripting): ~1 ms ===== - Total GPU frame time: ≤ 10–12 ms ===== Split roughly into: * Geometry / visibility: 2–4 ms * Lighting / shading: 4–6 ms * Post-processing: 1–2 ms * UI / compositing: <1 ms These are design targets, not measurements. ==== Now you can answer: ==== : ===== Express limits as: ===== * Time per frame (ms) * Operations per entity * Entities per frame Example: * Enemy AI update: ≤ 0.02 ms per entity * Physics objects: ≤ 1,000 active bodies * Pathfinding: amortized over multiple frames ===== Express limits as: ===== * Draw calls * Triangles / vertices * Shader cost * Overdraw * Texture memory Example: * Character model: ≤ 50k triangles * Screen-space effects: ≤ 2 ms GPU * Particles: ≤ 100k sprites total ==== This is crucial. ==== Every mechanic must answer: * What scales with entity count? * What scales with screen resolution? * What scales with view distance? Example: * Crowd system scales by: - LOD level - Animation update rate - AI tick frequency * VFX scale by: - Resolution - Particle density - Shader quality On paper, you write: : ==== Design for: ==== * Maximum enemies on screen * Worst camera angle * Maximum particle overlap * Peak combat moments If it fits worst-case, it fits everywhere else. ==== You cannot: ==== * Predict exact GPU ms costs * Predict cache behavior * Predict driver scheduling * Predict shader compilation impact That’s why: * Paper design gives upper bounds * Profiling later validates them ==== On paper, you don’t say: ==== : You say: : That statement is meaningful, testable, and enforceable. ==== Design budgets in milliseconds, counts, and scaling rules — not hardware registers or specs. ==== That is the deepest level you can reliably go before you have a prototype. If you want, I can help you build a one-page performance budget template you can reuse for any game concept. === User: Ok. === Ok. But these are all time constraints, what about 'space' constraints === Assistant: Good — this is where many designs get vague, and where disciplined engines differ from hobby ones. === Good — this is where many designs get vague, and where disciplined engines differ from hobby ones. “Space” constraints mean memory footprint and bandwidth, not disk size. You handle them with the same budgeting mindset as time. ==== Do this early, even if approximate. ==== Example PC targets: * Minimum: - System RAM usable by game: 6–8 GB - VRAM usable by game: 3–4 GB * Recommended: - RAM: 12–16 GB - VRAM: 6–8 GB You never assume you own all memory. OS + drivers take a fixed cut. ==== ### ==== Typical buckets: * World data (level geometry, navmesh) * Gameplay state (entities, components) * AI data * Physics data * Streaming buffers * Audio buffers * Scratch / transient allocations Example (8 GB target): | | | | --- | --- | | | | | | | | | | | | | | | | | | | | | | ===== Buckets must be explicit: ===== | | | | --- | --- | | | | | | | | | | | | | | | | | | | | | | If you don’t reserve headroom, you will stutter or crash. ==== Now mechanics get space budgets, not just time budgets. ==== ===== You define: ===== * Bytes per entity * Maximum active entities Example: * NPC state: 2 KB * Animation state: 8 KB * AI blackboard: 4 KB → 14 KB per NPC At 1,000 NPCs: → ~14 MB RAM (acceptable) ===== Define per-asset limits: ===== * Character texture set: - Albedo 2k - Normal 2k - ORM 2k → ~48 MB uncompressed, ~12–16 MB compressed * Environment prop: - ≤ 10 MB VRAM * Hero character: - ≤ 64 MB VRAM Write these limits into the design. ==== Streaming trades space for bandwidth + complexity. ==== Design rules: * Maximum streamed-in assets at once * Maximum streaming IO per second * Maximum latency tolerance Example: * World tiles: ≤ 256 MB each * Max 3 tiles resident * Streaming buffer: 1 GB RAM * IO budget: ≤ 100 MB/s sustained ==== Memory size is useless without bandwidth. ==== You must budget: * CPU cache pressure * RAM → GPU transfers * VRAM read/write per frame Examples: * Avoid per-frame full-buffer uploads * Prefer persistent mapped buffers * Cap particle buffer rewrites On paper: : ==== You should not attempt to: ==== * Predict cache line utilization * Predict exact compression ratios * Predict residency behavior Those are profiling-stage concerns. ==== Bad: ==== : Good: : Bad: : Good: : ==== Space constraints are budgets, caps, and per-unit costs. ==== If every mechanic has: * a per-unit memory cost * a hard cap * a scaling rule Then the game is designable, testable, and shippable. If you want, I can help you turn one of your mechanics into a concrete time + space budget as an example. === User: So let's say i'm designing an open world action adventure game for a 3770K-based PC with 16GB of DDR3 ram, and a 6600XT… === So let's say i'm designing an open world action adventure game for a 3770K-based PC with 16GB of DDR3 ram, and a 6600XT gpu what are my constraints === Assistant: Below is a sane, conservative constraint set for an open-world action-adventure game targeting exactly: === Below is a sane, conservative constraint set for an open-world action-adventure game targeting exactly: * CPU: i7-3770K (4C / 8T, ~3.5–3.9 GHz, Ivy Bridge) * System RAM: 16 GB DDR3 * GPU: RX 6600 XT (8 GB VRAM) * Storage: assume SATA SSD (not NVMe) I am deliberately pessimistic on CPU and memory, optimistic on GPU. This reflects reality for that platform. ==== You should target: ==== * 60 FPS @ 1080p * Frame budget: 16.67 ms Do not design for 120 FPS on this CPU. ==== ### ==== You have: * 4 strong cores * Weak per-core performance by modern standards * Limited cache and memory bandwidth Total CPU time available per frame: → ~7–8 ms usable Anything beyond that will cause stutter regardless of GPU headroom. ===== | | | ===== | --- | --- | | | | | | | | | | | | | | | | | | | You must aggressively multithread, but expect one heavy main thread. ===== On paper, you should cap: ===== * Active NPCs with full AI: ~100–150 * Simulated physics bodies: ~500 active, rest sleeping * Animation updates: LOD-based, many at reduced tick rate * World streaming updates: amortized across frames Rules you should write explicitly: * AI updates every N frames outside combat * Physics simplified beyond X meters * Animation evaluation rate drops with distance ==== ### ==== RX 6600 XT can handle: * 1080p Ultra comfortably * 1440p Medium–High, but CPU may block Budget: * GPU time ≤ 11–12 ms ===== Safe limits at 1080p: ===== * On-screen triangles: ≤ 10–15 million * Draw calls: ≤ 2,000 (prefer <1,500) * Shadow maps: 1–2 cascades at 2k * Screen-space effects: ≤ 2 ms total * Particles: ≤ 150k sprites worst case GPU is not your primary design constraint. ==== You must assume: ==== * OS + background: ~3–4 GB * Practical game budget: ≤ 10–11 GB ===== | | | ===== | --- | --- | | | | | | | | | | | | | | | | | | | | | | Total ≈ 8.4 GB This leaves safety margin. ===== If one NPC costs: ===== * State + components: 4 KB * Animation state: 12 KB * AI blackboard: 8 KB → ~24 KB per NPC 1,000 NPCs → 24 MB (fine) 10,000 NPCs → 240 MB (problematic) So: * Simulated NPCs must be capped * Background NPCs must be data-only or despawned ==== You should not design to fill all 8 GB. ==== Practical budget: * ≤ 6.5–7 GB VRAM ===== | | | ===== | --- | --- | | | | | | | | | | | | | | | | | | | | | | ===== - World textures: mostly 2k, selective 4k ===== * Hero characters: ≤ 64 MB VRAM each * Common NPC: ≤ 16–24 MB * World prop: ≤ 5–10 MB No unbounded texture sets. ==== With DDR3 + SATA SSD: ==== * Sustained IO: ~300–500 MB/s * Safe streaming budget: ≤ 100 MB/s Design rules: * World chunks: ≤ 256 MB each * Max resident chunks: 3–4 * Streaming buffer: ≥ 1.5 GB RAM * Never block gameplay on streaming ==== You should explicitly avoid designing for: ==== * Massive crowds with full AI * High-frequency physics destruction * Fully dynamic global illumination * Heavy CPU-side procedural generation * Simulation-heavy systemic worlds (e.g. full economy) Those are CPU killers on Ivy Bridge. ==== Target: 60 FPS @ 1080p ==== CPU: ≤ 8 ms per frame GPU: ≤ 12 ms per frame RAM: ≤ 10 GB used VRAM: ≤ 7 GB used Every mechanic must specify: * CPU cost per unit * RAM per unit * VRAM per asset * Hard caps * LOD / scaling rules ===== This machine is GPU-strong, CPU-weak by modern standards. ===== Your game must be simulation-disciplined, not visually restrained. If you want, next step could be: * Translating one concrete mechanic (e.g. open-world combat encounter, city crowd, wildlife system) into exact time + space budgets on this hardware.
Summary:
Please note that all contributions to freem are considered to be released under the Creative Commons Attribution-ShareAlike 4.0 (see
Freem:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)