summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>2021-03-09 03:22:45 +0100
committerMarge Bot <eric+marge@anholt.net>2021-04-08 22:29:12 +0000
commitdece117fdc2d1a1aaa95a9b445dcc214bc017c45 (patch)
tree9f6e2b10c523cf0fad65ceb7a09c9a75fcb5e7b7
parentb61efd53b464615c084763d9dfff8eda07afbe3a (diff)
radv: Support DCC without DCC/FCE predicates.
Imported images can't have this as part of the associated memory. Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9998>
-rw-r--r--src/amd/vulkan/radv_cmd_buffer.c11
-rw-r--r--src/amd/vulkan/radv_private.h6
2 files changed, 12 insertions, 5 deletions
diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 3e01bfc63ef..1f98414bae1 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -2116,13 +2116,14 @@ radv_update_fce_metadata(struct radv_cmd_buffer *cmd_buffer,
struct radv_image *image,
const VkImageSubresourceRange *range, bool value)
{
+ if (!image->fce_pred_offset)
+ return;
+
uint64_t pred_val = value;
uint64_t va = radv_image_get_fce_pred_va(image, range->baseMipLevel);
uint32_t level_count = radv_get_levelCount(image, range);
uint32_t count = 2 * level_count;
- assert(image->fce_pred_offset != 0);
-
radeon_emit(cmd_buffer->cs, PKT3(PKT3_WRITE_DATA, 2 + count, 0));
radeon_emit(cmd_buffer->cs, S_370_DST_SEL(V_370_MEM) |
S_370_WR_CONFIRM(1) |
@@ -2144,6 +2145,9 @@ radv_update_dcc_metadata(struct radv_cmd_buffer *cmd_buffer,
struct radv_image *image,
const VkImageSubresourceRange *range, bool value)
{
+ if (image->dcc_pred_offset == 0)
+ return;
+
uint64_t pred_val = value;
uint64_t va = radv_image_get_dcc_pred_va(image, range->baseMipLevel);
uint32_t level_count = radv_get_levelCount(image, range);
@@ -2151,9 +2155,6 @@ radv_update_dcc_metadata(struct radv_cmd_buffer *cmd_buffer,
assert(radv_dcc_enabled(image, range->baseMipLevel));
- if (image->dcc_pred_offset == 0)
- return;
-
radeon_emit(cmd_buffer->cs, PKT3(PKT3_WRITE_DATA, 2 + count, 0));
radeon_emit(cmd_buffer->cs, S_370_DST_SEL(V_370_MEM) |
S_370_WR_CONFIRM(1) |
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index de86a68b7d0..6c80e66b38c 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -2043,6 +2043,8 @@ static inline uint64_t
radv_image_get_fce_pred_va(const struct radv_image *image,
uint32_t base_level)
{
+ assert(image->fce_pred_offset != 0);
+
uint64_t va = radv_buffer_get_va(image->bo);
va += image->offset + image->fce_pred_offset + base_level * 8;
return va;
@@ -2052,6 +2054,8 @@ static inline uint64_t
radv_image_get_dcc_pred_va(const struct radv_image *image,
uint32_t base_level)
{
+ assert(image->dcc_pred_offset != 0);
+
uint64_t va = radv_buffer_get_va(image->bo);
va += image->offset + image->dcc_pred_offset + base_level * 8;
return va;
@@ -2061,6 +2065,8 @@ static inline uint64_t
radv_get_tc_compat_zrange_va(const struct radv_image *image,
uint32_t base_level)
{
+ assert(image->tc_compat_zrange_offset != 0);
+
uint64_t va = radv_buffer_get_va(image->bo);
va += image->offset + image->tc_compat_zrange_offset + base_level * 4;
return va;