Resolves of CCS-enabled image subresources are currently tied to the scope of a subpass. This can cause us to lose clear data compression prematurely in some cases. For example, an application can record a render pass that only clears followed by another render pass that only draws. The driver would do a fast-clear then immediately resolve the color buffers before the second render pass.
This series instead ties the lifetime of clear data compression to the scope of the image layout. In the above example, the application would presumably keep the image in the VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL layout across both render passes and so the driver would avoid the intermediate resolve. ---- This series improves the average frame rate of a Dota 2 benchmark by 3.04% on my SKL GT4. The frame rates are now similar to those seen when running it with INTEL_DEBUG=norbc. The benchmark was run three times at 1080p in release mode. Six tests in dEQP-VK.geometry.layered.3d.* now fail, but I've attributed the failures to a test bug and filed a bug report. ---- Cc: Jason Ekstrand <ja...@jlekstrand.net> Nanley Chery (22): intel/isl: Limit CCS to one subresource on gen7 intel/isl: Only create a CCS buffer if the image supports rendering intel/isl: Add surface state clear value information anv: Add color auxiliary buffer helpers anv/image: Append CCS/MCS with a clear value buffer anv/image: Remove incorrect assertion in anv_BindImage anv/image: Initialize the clear values buffer anv/cmd_buffer: Always enable CCS_D in render passes anv/cmd_buffer: Don't partially fast-clear image layers anv/cmd_buffer: Disable fast clears in the GENERAL layout anv/cmd_buffer: Ensure the fast clear values are correct anv/gpu_memcpy: Add a lighter-weight memcpy path blorp/clear: Add a binding-table-based CCS resolve function anv/blorp: Add a surface-state-based CCS resolve function anv/cmd_buffer: Adjust the image view reloc function anv/cmd_buffer: Add transition_color_buffer() anv: Add anv_get_sliceCount() anv/cmd_buffer: Perform color buffer layout transitions anv/blorp: Stop resolving CCS implicitly anv/pass: Get rid of anv_subpass_usage intel/blorp: Allow BLORP calls to be predicated anv: Predicate fast-clear resolves src/intel/blorp/blorp.h | 12 + src/intel/blorp/blorp_clear.c | 64 +++-- src/intel/blorp/blorp_genX_exec.h | 3 + src/intel/isl/isl.c | 20 +- src/intel/isl/isl.h | 4 + src/intel/vulkan/anv_blorp.c | 188 +++----------- src/intel/vulkan/anv_image.c | 153 ++++++++++- src/intel/vulkan/anv_pass.c | 36 ++- src/intel/vulkan/anv_private.h | 68 ++++- src/intel/vulkan/genX_cmd_buffer.c | 507 ++++++++++++++++++++++++++++++------- src/intel/vulkan/genX_gpu_memcpy.c | 38 +++ 11 files changed, 801 insertions(+), 292 deletions(-) -- 2.12.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev