Can you even do proper dynamic resolution under DirectX (i.e. really responding to load, not just pre-set)? I'm suddenly wondering if we've ever seen it on anything other than the Playstation.
I really do not see why not.Can you even do proper dynamic resolution under DirectX (i.e. really responding to load, not just pre-set)? I'm suddenly wondering if we've ever seen it on anything other than the Playstation.
ESRAM is not infinite. Resolution increase means using more of the slow DDR3 for fb.I guess on PC it is just not common at all because you are basically expected to just tweak your settings. But I am wondering why we only have two half-hearted attempts on Xbox One that aren't dynamic at all basically, just changing resolution for specific scenarios instead of based on load-balancing. Too difficult to predict budget issues and then switch?
In general I would have expected to see the technique used more often across the board actually, because it just makes so much sense.
I'm not sure that is accurate WRT can esram hold it. As you and many have noted the main issue with esram is its small size. But this can be engineered around, either by getting away from multiple large frame buffers or to copy out the FB out of esram to ddr3 at proper timing intervals to free up space. Forward+ rendering is a solution that comes to mind for sidestepping large frame buffers, but the second doesn't seem strong as a solution.ESRAM is not infinite. Resolution increase means using more of the slow DDR3 for fb.
Dynamic resolution would work better on PS4 actually.
I'm not sure that is accurate WRT can esram hold it. As you and many have noted the main issue with esram is its small size. But this can be engineered around, either by getting away from multiple large frame buffers or to copy out the FB out of esram to ddr3 at proper timing intervals to free up space. Forward+ rendering is a solution that comes to mind for sidestepping large frame buffers, but the second doesn't seem strong as a solution.
Mainly because dx11 as an API is built to be serial. You look over the Xbox SDK and copying to and from esram at the end of the day is going to be submitted serially by that single core. You are really holding up the rendering pipeline if that 1 core needs to handle all the rendering elements in order. Furthermore, I'm not sure if dx11.X supports async copy engine either yet, I do know it supports async compute though.
So with the move to dx12 Xbox will have for sure async copy as well as multithreaded command buffers. It should IMO provide the flexibility to engineers the ability to create patterns of cycling in and out data of esram while it simultaneously rendering into esram; bandwidth shouldn't be much of an issue since it's read and writes for the most part do not interfere with each other.
Multithreaded command submission doesn't necessarily have anything to do with how the GPU consumes commands, or how the GPU executes those commands. Even if XB1 titles are restricted to building command buffers on a single core with D3D11 (and I don't think that I would assume that to be the case, considering MS likely has all kinds of XB1-specific extensions for D3D11 and can also customize the driver for their specific hardware), that doesn't affect how the GPU consumes those commands. With D3D12 and other API's that allow multithreading, you generally have multiple threads each building separate command buffers independently. However once this is finished, the separate buffers still need to be "combined" into 1 serial list for the GPU to execute. This is generally done by submitting a list of command buffers in order of how you want the GPU to execute them. So really the GPU doesn't have to care much about how the command buffers were created: they could have been created by 1 core, 4 cores, 10 cores, or some of them might have even been pre-computed. Ultimately it's just going to consume all of the commands serially*.
What we really care about here is whether the GPU can execute certain commands in a parallel. GPU's do this all of the time: if you give the GPU 3 draw commands, it's very likely that the actual processing associated with those commands (vertex shading, rasterization, pixel shading, write/blend) will overlap due to the parallel execution resources available on the GPU. What prevents overlapping command execution is sync points. On the PC version of D3D11 you have no direct control over when sync points occur. Instead the sync points are implicit based on which commands you issue. So for instance if you issue Draw A to a render target, and then issue Draw B which reads from that render target as a texture, it's the driver's responsibility to recognize that it needs to insert a sync point before Draw B so that the GPU will wait for Draw A to completely finish before starting Draw A. With D3D12 you instead have manual control over sync points, which means it's your responsibility (not the driver's) to insert sync points where necessary in order to avoid data races. This potentially reduces overhead, since the driver no longer has to keep track of a million things in order to determine whether it needs to insert a sync point. It also potentially lets you avoid synchronization due to situations where the D3D11 rules are too conservative, or where the driver is too conservative due to its limited ability to track your resource usage.
Now to finally get back to copying to ESRAM while simultaneously rendering. Even if we assume that D3D11 on XB1 has the same implicit synchronization as on PC (which we probably shouldn't), it still doesn't mean that the driver (or equivalent) on XB1 can't track resource hazards and determine that it doesn't need to insert a sync point after kicking off a DMA into or out of ESRAM. TL: DR, I don't think that I would assume that XB1 titles can't asynchronously copy to ESRAM just because it uses a variant of D3D11.
*Unless you use async compute, which lets you submit command buffers that get consumed in parallel with your "main" rendering command buffers
As time goes on I have it more and more clear that the most benefitial resolution for the X1 would be 900p, especially if it can be combined with dynamic scaling. Some of the best games I've played on the console run at a very high framerate and 900p, and they look very nice.I guess on PC it is just not common at all because you are basically expected to just tweak your settings. But I am wondering why we only have two half-hearted attempts on Xbox One that aren't dynamic at all basically, just changing resolution for specific scenarios instead of based on load-balancing. Too difficult to predict budget issues and then switch?
In general I would have expected to see the technique used more often across the board actually, because it just makes so much sense.
Need a pre-patch analysis to compare tbh. The swamps are supposedly very taxing?
edit: the other comparison vids don't seem as bad. Oddly, still showing slightly higher than 30fps at times.
Given that Durante seemed to think their frame rate limiter wasn't good on PC, it's still probably not well frame-paced when the game can do 30fps.
Maybe with all the bloody patches they can progress further into the story for the two consoles for subsequent articles.Yes. The swamps are very GPU heavy, like many others areas in this game. DF only showed us the CPU heavy moments in their video.
GTX 970 and W3 are a good combo for sure