CppCon 2017: Nicolas Guillemot “Design Patterns for Low-Level Real-Time Rendering”

  Рет қаралды 55,475

CppCon

CppCon

Күн бұрын

Пікірлер: 30
@scolic03
@scolic03 7 жыл бұрын
10/10 talk, liked, shared on Facebook, subscribed, excitedly printed on A3 wallpaper, studied and revered! This kind of explanation only comes from a person knowing the subject matter intimately. A lot of hard work went into this talk and it shows. Thank you.
@jankodedic3130
@jankodedic3130 7 жыл бұрын
This guy explains everything so well... Great talk!
@broken_abi6973
@broken_abi6973 7 жыл бұрын
Janko Dedic as always!
@OperationDarkside
@OperationDarkside 6 жыл бұрын
I would have needed these explanations far sooner. This was finally a version I understood. So many other tutorials and talks assume existing knowledge of graphics programming
@satellite964
@satellite964 4 жыл бұрын
This is the stuff I wanted to learn at Uni when I got my CS degree, instead I got put through OOP hell, I wasted time learning OOP stuff that I don't even use in real life. Also UML(overrated), a sprinkling of stuff like SCRUM and AGILE, all of which could've been picked up automatically from actually working in a firm. The math courses were worth it though.
@k6l2t
@k6l2t 2 жыл бұрын
His proposal for the render graph abstraction layer was basically an OOP rabbit hole design though. There are no "free" abstractions.
@sc0reBDO
@sc0reBDO 5 жыл бұрын
48:01 Stack allocator might be beneficial for this case. Basically it makes the memory allocated for T1 to be implicitly reused for OUT (due to nature of stack allocators). So sequence will be: [NEW T2] [NEW T1] [RUN A] [DEL T1] [NEW OUT] ...
@PixelPulse168
@PixelPulse168 7 жыл бұрын
cppcon is awesome.
@HuongNguyenXuan-r6t
@HuongNguyenXuan-r6t 10 ай бұрын
Amazing explanation methods!
@jaredmistretta3018
@jaredmistretta3018 7 жыл бұрын
Great talk! Great ideas explained simply and concisely. Good job!
@cgcode
@cgcode 2 жыл бұрын
Thank you for your great talk!
@CppCon
@CppCon 2 жыл бұрын
Glad you enjoyed it!
@greje656
@greje656 7 жыл бұрын
great talk!
@Sychonut
@Sychonut 6 жыл бұрын
Interesting talk. Thanks for sharing!
@TheLavaBlock
@TheLavaBlock 6 жыл бұрын
Thanks for sharing. Great
@infinitecmdz
@infinitecmdz 7 жыл бұрын
Since opengl context can be bound to one thread at a time, how does a fork, join thread of command list work?
@guy1524
@guy1524 7 жыл бұрын
OpenGL is high level
@infinitecmdz
@infinitecmdz 7 жыл бұрын
dont understand, how is opengl high level here. The presenter said command list are opengl functions like glUseProgram, setting shader parameters etc. My question is since opengl context is only current for one thread at a time, how do you fork and join multiple threads?
@nlguillemot
@nlguillemot 7 жыл бұрын
It is possible to write OpenGL commands from multiple threads using multiple GL contexts, but you won't reap the benefits of multi-threaded command writing that exist in D3D12 and Vulkan. The closest thing in GL is NVIDIA's extension NV_command_list. Broadly, I think OpenGL has been designed to use multi-threading in a different way. Rather than using multi-threading to accelerate command list writing, you use multi-threading to accelerate operations on memory mapped buffers. This comes from the observation that even if you only have a GL context bound to one thread, the memory mapped pointers of its buffers can be freely passed to and accessed by other threads. So you can memory map a buffer, then spawn some tasks which each write a region of that buffer, and join them all when they finish their work. You can take this idea very far in the design of a very data-oriented rendering engine (see "Almost Zero Driver Overhead" GDC presentation). You can also do something similar to recording draw commands in this style, since you can write indirect draw commands to a memory mapped buffer from multiple threads (again, see AZDO talk for details.) Also, some OpenGL drivers internally use multi-threading to accelerate itself, so it's effectively trying to automatically do the things you would otherwise be doing manually in these lower level APIs. One benefit of these newer APIs is that you no longer depend so much on threads internal to the driver, although there still exist some things happening asynchronously beyond your control. For example, the system paging process manages operations for the GPU's page table asynchronously from your program, in an effort to transparently hide the latency of those operations.
@infinitecmdz
@infinitecmdz 7 жыл бұрын
thanks for your detailed answer. The talk is amazing and i liked your explanation of ring buffers. Yes i have seen AZDO presentation and have used many if not all of the suggestions. have you had any experimentation on having data structures on the gpu that can simulate a scene graph and scene graph traversals?
@nlguillemot
@nlguillemot 7 жыл бұрын
I'm glad you liked the talk! With regards to your question, I'm wondering what your idea of a scene graph is, and what kind of operation you intend to do when traversing it. You can definitely use eg. a compute shader to traverse a data structure like that. If you want the GPU to feed itself with draw calls through that scene traversal, you can do that by writing to an indirect draw buffer from the aforementioned compute shader, and follow the compute shader by a call to eg. glDraw*Indirect. D3D12's indirect draw can let you take this one step further, since it also allows you to also switch shader parameters (like texture and buffer bindings and etc) through indirect commands. Some platforms also allow you to switch the currently bound pipeline state object itself through indirect draw commands. NVIDIA also has an interesting experimental Vulkan extension that gives you access to the command encoder from GPU code: developer.nvidia.com/driver-and-new-sample-vknvxdevicegeneratedcommands
@raghul1208
@raghul1208 Жыл бұрын
excellent
@u28OO
@u28OO Жыл бұрын
thx!
@henrituhola
@henrituhola 7 жыл бұрын
Barely scratches the paint on the surface of the subject. I hoped to see some real code among it and not just those oversimplifications.
@aleksijokinen9914
@aleksijokinen9914 7 жыл бұрын
There was a lot of ground to cover. Going any deeper would've needed multiple 1h talks. I think the talk was a really good high level overview.
@N00byEdge
@N00byEdge 6 жыл бұрын
Yeah another reason not to go into the code specifics is that each GPU API is very different. It is good to know how it works in general
@MartinPreinfalk
@MartinPreinfalk 6 жыл бұрын
great talk!
CppCon 2017: Chandler Carruth “Going Nowhere Faster”
1:00:58
CppCon 2018: Fedor Pikus “Design for Performance”
1:03:40
КОГДА К БАТЕ ПРИШЕЛ ДРУГ😂#shorts
00:59
BATEK_OFFICIAL
Рет қаралды 8 МЛН
ТЫ В ДЕТСТВЕ КОГДА ВЫПАЛ ЗУБ😂#shorts
00:59
BATEK_OFFICIAL
Рет қаралды 3,9 МЛН
Real Man relocate to Remote Controlled Car 👨🏻➡️🚙🕹️ #builderc
00:24
zig will change programming forever
9:34
Low Level
Рет қаралды 345 М.
5 Design Patterns That Are ACTUALLY Used By Developers
9:27
Alex Hyett
Рет қаралды 302 М.
CppCon 2016: Jason Jurecka “Game engine using STD C++ 11"
1:01:01
Parallelizing the Naughty Dog Engine Using Fibers
1:06:02
Vadim Chuprakov
Рет қаралды 7 М.
Nvidia GPU Architecture
17:23
Bradon Fredrickson
Рет қаралды 92 М.
КОГДА К БАТЕ ПРИШЕЛ ДРУГ😂#shorts
00:59
BATEK_OFFICIAL
Рет қаралды 8 МЛН