#ifndef VC4_TILING_H
#define VC4_TILING_H
-uint32_t vc4_utile_width(int cpp) ATTRIBUTE_CONST;
-uint32_t vc4_utile_height(int cpp) ATTRIBUTE_CONST;
+#include <stdbool.h>
+#include <stdint.h>
+#include "util/macros.h"
+#include "util/u_cpu_detect.h"
+
+/** Return the width in pixels of a 64-byte microtile. */
+static inline uint32_t
+vc4_utile_width(int cpp)
+{
+ switch (cpp) {
+ case 1:
+ case 2:
+ return 8;
+ case 4:
+ return 4;
+ case 8:
+ return 2;
+ default:
+ unreachable("unknown cpp");
+ }
+}
+
+/** Return the height in pixels of a 64-byte microtile. */
+static inline uint32_t
+vc4_utile_height(int cpp)
+{
+ switch (cpp) {
+ case 1:
+ return 8;
+ case 2:
+ case 4:
+ case 8:
+ return 4;
+ default:
+ unreachable("unknown cpp");
+ }
+}
+
bool vc4_size_is_lt(uint32_t width, uint32_t height, int cpp) ATTRIBUTE_CONST;
+void vc4_load_lt_image_base(void *dst, uint32_t dst_stride,
+ void *src, uint32_t src_stride,
+ int cpp, const struct pipe_box *box);
+void vc4_store_lt_image_base(void *dst, uint32_t dst_stride,
+ void *src, uint32_t src_stride,
+ int cpp, const struct pipe_box *box);
+void vc4_load_lt_image_neon(void *dst, uint32_t dst_stride,
+ void *src, uint32_t src_stride,
+ int cpp, const struct pipe_box *box);
+void vc4_store_lt_image_neon(void *dst, uint32_t dst_stride,
+ void *src, uint32_t src_stride,
+ int cpp, const struct pipe_box *box);
void vc4_load_tiled_image(void *dst, uint32_t dst_stride,
void *src, uint32_t src_stride,
uint8_t tiling_format, int cpp,
uint8_t tiling_format, int cpp,
const struct pipe_box *box);
+static inline void
+vc4_load_lt_image(void *dst, uint32_t dst_stride,
+ void *src, uint32_t src_stride,
+ int cpp, const struct pipe_box *box)
+{
+ if (util_cpu_caps.has_neon) {
+ vc4_load_lt_image_neon(dst, dst_stride, src, src_stride,
+ cpp, box);
+ } else {
+ vc4_load_lt_image_base(dst, dst_stride, src, src_stride,
+ cpp, box);
+ }
+}
+
+static inline void
+vc4_store_lt_image(void *dst, uint32_t dst_stride,
+ void *src, uint32_t src_stride,
+ int cpp, const struct pipe_box *box)
+{
+ if (util_cpu_caps.has_neon) {
+ vc4_store_lt_image_neon(dst, dst_stride, src, src_stride,
+ cpp, box);
+ } else {
+ vc4_store_lt_image_base(dst, dst_stride, src, src_stride,
+ cpp, box);
+ }
+}
+
#endif /* VC4_TILING_H */