tu: Move UBWC layout into fdl6_layout() and use that function.
[mesa.git] / src / freedreno / vulkan / tu_private.h
index 65398471644ce6ae7f9d5511c76fd87fdb3ac197..1edc4a24d7774df73792f4ce97119e043c48a5ac 100644 (file)
@@ -58,6 +58,7 @@
 #include "adreno_common.xml.h"
 #include "adreno_pm4.xml.h"
 #include "a6xx.xml.h"
+#include "fdl/freedreno_layout.h"
 
 #include "tu_descriptor_set.h"
 #include "tu_extensions.h"
@@ -328,6 +329,7 @@ enum tu_debug_flags
    TU_DEBUG_STARTUP = 1 << 0,
    TU_DEBUG_NIR = 1 << 1,
    TU_DEBUG_IR3 = 1 << 2,
+   TU_DEBUG_NOBIN = 1 << 3,
 };
 
 struct tu_instance
@@ -959,11 +961,19 @@ struct tu_cmd_buffer
 
    struct tu_bo scratch_bo;
    uint32_t scratch_seqno;
+#define VSC_OVERFLOW 0x8
+#define VSC_SCRATCH 0x10
+
+   struct tu_bo vsc_data;
+   struct tu_bo vsc_data2;
+   uint32_t vsc_data_pitch;
+   uint32_t vsc_data2_pitch;
+   bool use_vsc_data;
 
    bool wait_for_idle;
 };
 
-void
+unsigned
 tu6_emit_event_write(struct tu_cmd_buffer *cmd,
                      struct tu_cs *cs,
                      enum vgt_event_type event,
@@ -1283,16 +1293,9 @@ struct tu_image
    VkSampleCountFlagBits samples;
 
 
-   VkDeviceSize size;
    uint32_t alignment;
 
-   /* memory layout */
-   VkDeviceSize layer_size;
-   struct tu_image_level levels[15];
-   unsigned tile_mode;
-   unsigned cpp;
-   struct tu_image_level ubwc_levels[15];
-   uint32_t ubwc_size;
+   struct fdl_layout layout;
 
    unsigned queue_family_mask;
    bool exclusive;
@@ -1332,40 +1335,39 @@ tu_get_levelCount(const struct tu_image *image,
 static inline VkDeviceSize
 tu_layer_size(struct tu_image *image, int level)
 {
-   if (image->type == VK_IMAGE_TYPE_3D)
-      return image->levels[level].size;
-   return image->layer_size;
+   return fdl_layer_stride(&image->layout, level);
 }
 
 static inline uint32_t
 tu_image_stride(struct tu_image *image, int level)
 {
-   return image->levels[level].pitch * image->cpp;
+   return image->layout.slices[level].pitch * image->layout.cpp;
 }
 
 static inline uint64_t
 tu_image_base(struct tu_image *image, int level, int layer)
 {
-   return image->bo->iova + image->bo_offset + image->levels[level].offset +
-          layer * tu_layer_size(image, level);
+   return image->bo->iova + image->bo_offset +
+      fdl_surface_offset(&image->layout, level, layer);
 }
 
 static inline VkDeviceSize
 tu_image_ubwc_size(struct tu_image *image, int level)
 {
-   return image->ubwc_size;
+   return image->layout.ubwc_size;
 }
 
 static inline uint32_t
 tu_image_ubwc_pitch(struct tu_image *image, int level)
 {
-   return image->ubwc_levels[level].pitch;
+   return image->layout.ubwc_slices[level].pitch;
 }
 
 static inline uint64_t
 tu_image_ubwc_base(struct tu_image *image, int level, int layer)
 {
-   return image->bo->iova + image->bo_offset + image->ubwc_levels[level].offset +
+   return image->bo->iova + image->bo_offset +
+          image->layout.ubwc_slices[level].offset +
           layer * tu_image_ubwc_size(image, level);
 }