[Mesa-dev] [PATCH 2/2] radv: allow to skip DCC decompressions with the new predicate
Samuel Pitoiset
samuel.pitoiset at gmail.com
Thu Nov 22 12:49:25 UTC 2018
Feral games aren't affected because they don't decompress DCC.
F1 2018 has one DCC decompression per frame, but I don't see
any performance improvements. This new predicate will be
probably more useful for DCC/MSAA.
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
src/amd/vulkan/radv_meta_fast_clear.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/amd/vulkan/radv_meta_fast_clear.c b/src/amd/vulkan/radv_meta_fast_clear.c
index ce088d7332b..0f7a9132182 100644
--- a/src/amd/vulkan/radv_meta_fast_clear.c
+++ b/src/amd/vulkan/radv_meta_fast_clear.c
@@ -580,13 +580,14 @@ emit_fast_clear_flush(struct radv_cmd_buffer *cmd_buffer,
static void
radv_emit_set_predication_state_from_image(struct radv_cmd_buffer *cmd_buffer,
- struct radv_image *image, bool value)
+ struct radv_image *image,
+ uint64_t pred_offset, bool value)
{
uint64_t va = 0;
if (value) {
va = radv_buffer_get_va(image->bo) + image->offset;
- va += image->fce_pred_offset;
+ va += pred_offset;
}
si_emit_set_predication_state(cmd_buffer, true, va);
@@ -629,10 +630,13 @@ radv_emit_color_decompress(struct radv_cmd_buffer *cmd_buffer,
pipeline = cmd_buffer->device->meta_state.fast_clear_flush.cmask_eliminate_pipeline;
}
- if (!decompress_dcc && radv_image_has_dcc(image)) {
+ if (radv_image_has_dcc(image)) {
+ uint64_t pred_offset = decompress_dcc ? image->dcc_pred_offset :
+ image->fce_pred_offset;
+
old_predicating = cmd_buffer->state.predicating;
- radv_emit_set_predication_state_from_image(cmd_buffer, image, true);
+ radv_emit_set_predication_state_from_image(cmd_buffer, image, pred_offset, true);
cmd_buffer->state.predicating = true;
}
for (uint32_t layer = 0; layer < layer_count; ++layer) {
@@ -697,10 +701,13 @@ radv_emit_color_decompress(struct radv_cmd_buffer *cmd_buffer,
&cmd_buffer->pool->alloc);
}
- if (!decompress_dcc && radv_image_has_dcc(image)) {
+ if (radv_image_has_dcc(image)) {
+ uint64_t pred_offset = decompress_dcc ? image->dcc_pred_offset :
+ image->fce_pred_offset;
+
cmd_buffer->state.predicating = old_predicating;
- radv_emit_set_predication_state_from_image(cmd_buffer, image, false);
+ radv_emit_set_predication_state_from_image(cmd_buffer, image, pred_offset, true);
if (cmd_buffer->state.predication_type != -1) {
/* Restore previous conditional rendering user state. */
--
2.19.1
More information about the mesa-dev
mailing list