chai-notes.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /*
  2. *
  3. * (C) COPYRIGHT 2010-2016 ARM Limited. All rights reserved.
  4. * Copyright (C) 2017 Cafe Beverage. All rights reserved.
  5. *
  6. * This program is free software and is provided to you under the terms of the
  7. * GNU General Public License version 2 as published by the Free Software
  8. * Foundation, and any use by you of this program is subject to the terms
  9. * of such GNU licence.
  10. *
  11. * A copy of the licence is included with the program, and can also be obtained
  12. * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  13. * Boston, MA 02110-1301, USA.
  14. *
  15. */
  16. #ifndef __CHAI_NOTES_H
  17. #define __CHAI_NOTES_H
  18. #include <stddef.h>
  19. #include "jobs.h"
  20. /* See corresponding structures in chai/jobs.h */
  21. struct payload_set_value {
  22. uint64_t out;
  23. uint64_t unknown;
  24. };
  25. /* From mali_kbase_replay.c */
  26. /* fbd_address & mask */
  27. #define FBD_POINTER_MASK (~0x3f)
  28. /* set for MFBD; otherwise SFBD */
  29. #define FBD_TYPE 1
  30. #define SFBD (0)
  31. #define MFBD (1)
  32. /* appears to be set for fragment; clear for vertex/tiler */
  33. #define FBD_TILER (0)
  34. #define FBD_FRAGMENT (2)
  35. /* From mali_kbase_10969_workaround.c */
  36. #define X_COORDINATE_MASK 0x00000FFF
  37. #define Y_COORDINATE_MASK 0x0FFF0000
  38. /* The above defines as useful macros */
  39. #define TILE_COORD_X(coord) ((coord) & X_COORDINATE_MASK)
  40. #define TILE_COORD_Y(coord) (((coord) & Y_COORDINATE_MASK) >> 16)
  41. #define MAKE_TILE_COORD(X, Y, flag) ((X) | ((Y) << 16) | (flag))
  42. struct payload_fragment {
  43. uint32_t min_tile_coord;
  44. uint32_t max_tile_coord;
  45. uint64_t fragment_fbd;
  46. };
  47. /* Parts from mali_kbase_replay.c. Mostly from RE. */
  48. struct payload_vertex_tiler {
  49. uint32_t block1[10];
  50. uintptr_t null0;
  51. uintptr_t zeroes;
  52. uintptr_t unknown1; /* pointer */
  53. uintptr_t null1;
  54. uintptr_t null2;
  55. uintptr_t unknown2; /* pointer */
  56. uintptr_t shader; /* struct shader_meta */
  57. uintptr_t attributes; /* struct attribute_buffer[] */
  58. uintptr_t attribute_meta; /* attribute_meta[] */
  59. uintptr_t unknown5; /* pointer */
  60. uintptr_t unknown6; /* pointer */
  61. uintptr_t nullForVertex;
  62. uintptr_t null4;
  63. uintptr_t fbd; /* struct tentative_fbd */
  64. uintptr_t unknown7; /* pointer */
  65. uint32_t block2[36];
  66. };
  67. /* FIXME: This is very clearly wrong */
  68. #define SHADER (1 << 0)
  69. #define SHADER_VERTEX (1 << 2)
  70. #define SHADER_FRAGMENT (1 << 3)
  71. struct shader_meta {
  72. uint64_t shader;
  73. uint64_t unknown1;
  74. uint64_t unknown2;
  75. };
  76. struct attribute_buffer {
  77. uint64_t elements;
  78. size_t element_size;
  79. size_t total_size;
  80. };
  81. typedef uint64_t attribute_meta_t;
  82. #define HAS_ATTRIBUTE(meta) (!!meta)
  83. #define ATTRIBUTE_NO(meta) (meta & 0xFF)
  84. #define ATTRIBUTE_FLAGS(meta) (meta & 0xFFFFFFFFFFFFFF00)
  85. /* Synthesis of fragment_job from mali_kbase_reply.c with #defines from
  86. * errata file */
  87. #define JOB_NOT_STARTED (0)
  88. #define JOB_TYPE_NULL (1)
  89. #define JOB_TYPE_SET_VALUE (2)
  90. #define JOB_TYPE_CACHE_FLUSH (3)
  91. #define JOB_TYPE_COMPUTE (4)
  92. #define JOB_TYPE_VERTEX (5)
  93. #define JOB_TYPE_TILER (7)
  94. #define JOB_TYPE_FUSED (8)
  95. #define JOB_TYPE_FRAGMENT (9)
  96. #define CHAI_POINTS 0x01
  97. #define CHAI_LINES 0x02
  98. #define CHAI_TRIANGLES 0x08
  99. #define CHAI_TRIANGLE_STRIP 0x0A
  100. #define CHAI_TRIANGLE_FAN 0x0C
  101. /* See mali_kbase_replay.c */
  102. #define FBD_HIERARCHY_WEIGHTS 8
  103. #define FBD_HIERARCHY_MASK_MASK 0x1fff
  104. struct tentative_mfbd {
  105. uint64_t blah;
  106. uint64_t ugaT;
  107. uint32_t block1[10];
  108. uint32_t unknown1;
  109. uint32_t flags;
  110. uint64_t block2[2];
  111. uint64_t heap_free_address;
  112. uint64_t unknown2;
  113. uint32_t weights[FBD_HIERARCHY_WEIGHTS];
  114. uint64_t unknown_gpu_addressN;
  115. uint32_t block3[22];
  116. uint64_t unknown_gpu_address;
  117. uint64_t unknown3;
  118. uint32_t block4[10];
  119. };
  120. #define JOB_32_BIT 0
  121. #define JOB_64_BIT 1
  122. #endif