testautomation_pixels.c 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525
  1. /**
  2. * Pixels test suite
  3. */
  4. #include <SDL3/SDL.h>
  5. #include <SDL3/SDL_test.h>
  6. #include "testautomation_suites.h"
  7. /* Test case functions */
  8. /* Definition of all RGB formats used to test pixel conversions */
  9. static const SDL_PixelFormat g_AllFormats[] = {
  10. SDL_PIXELFORMAT_INDEX1LSB,
  11. SDL_PIXELFORMAT_INDEX1MSB,
  12. SDL_PIXELFORMAT_INDEX2LSB,
  13. SDL_PIXELFORMAT_INDEX2MSB,
  14. SDL_PIXELFORMAT_INDEX4LSB,
  15. SDL_PIXELFORMAT_INDEX4MSB,
  16. SDL_PIXELFORMAT_INDEX8,
  17. SDL_PIXELFORMAT_RGB332,
  18. SDL_PIXELFORMAT_XRGB4444,
  19. SDL_PIXELFORMAT_XBGR4444,
  20. SDL_PIXELFORMAT_XRGB1555,
  21. SDL_PIXELFORMAT_XBGR1555,
  22. SDL_PIXELFORMAT_ARGB4444,
  23. SDL_PIXELFORMAT_RGBA4444,
  24. SDL_PIXELFORMAT_ABGR4444,
  25. SDL_PIXELFORMAT_BGRA4444,
  26. SDL_PIXELFORMAT_ARGB1555,
  27. SDL_PIXELFORMAT_RGBA5551,
  28. SDL_PIXELFORMAT_ABGR1555,
  29. SDL_PIXELFORMAT_BGRA5551,
  30. SDL_PIXELFORMAT_RGB565,
  31. SDL_PIXELFORMAT_BGR565,
  32. SDL_PIXELFORMAT_RGB24,
  33. SDL_PIXELFORMAT_BGR24,
  34. SDL_PIXELFORMAT_XRGB8888,
  35. SDL_PIXELFORMAT_RGBX8888,
  36. SDL_PIXELFORMAT_XBGR8888,
  37. SDL_PIXELFORMAT_BGRX8888,
  38. SDL_PIXELFORMAT_ARGB8888,
  39. SDL_PIXELFORMAT_RGBA8888,
  40. SDL_PIXELFORMAT_ABGR8888,
  41. SDL_PIXELFORMAT_BGRA8888,
  42. SDL_PIXELFORMAT_XRGB2101010,
  43. SDL_PIXELFORMAT_XBGR2101010,
  44. SDL_PIXELFORMAT_ARGB2101010,
  45. SDL_PIXELFORMAT_ABGR2101010,
  46. SDL_PIXELFORMAT_YV12,
  47. SDL_PIXELFORMAT_IYUV,
  48. SDL_PIXELFORMAT_YUY2,
  49. SDL_PIXELFORMAT_UYVY,
  50. SDL_PIXELFORMAT_YVYU,
  51. SDL_PIXELFORMAT_NV12,
  52. SDL_PIXELFORMAT_NV21
  53. };
  54. static const int g_numAllFormats = SDL_arraysize(g_AllFormats);
  55. static const char *g_AllFormatsVerbose[] = {
  56. "SDL_PIXELFORMAT_INDEX1LSB",
  57. "SDL_PIXELFORMAT_INDEX1MSB",
  58. "SDL_PIXELFORMAT_INDEX2LSB",
  59. "SDL_PIXELFORMAT_INDEX2MSB",
  60. "SDL_PIXELFORMAT_INDEX4LSB",
  61. "SDL_PIXELFORMAT_INDEX4MSB",
  62. "SDL_PIXELFORMAT_INDEX8",
  63. "SDL_PIXELFORMAT_RGB332",
  64. "SDL_PIXELFORMAT_XRGB4444",
  65. "SDL_PIXELFORMAT_XBGR4444",
  66. "SDL_PIXELFORMAT_XRGB1555",
  67. "SDL_PIXELFORMAT_XBGR1555",
  68. "SDL_PIXELFORMAT_ARGB4444",
  69. "SDL_PIXELFORMAT_RGBA4444",
  70. "SDL_PIXELFORMAT_ABGR4444",
  71. "SDL_PIXELFORMAT_BGRA4444",
  72. "SDL_PIXELFORMAT_ARGB1555",
  73. "SDL_PIXELFORMAT_RGBA5551",
  74. "SDL_PIXELFORMAT_ABGR1555",
  75. "SDL_PIXELFORMAT_BGRA5551",
  76. "SDL_PIXELFORMAT_RGB565",
  77. "SDL_PIXELFORMAT_BGR565",
  78. "SDL_PIXELFORMAT_RGB24",
  79. "SDL_PIXELFORMAT_BGR24",
  80. "SDL_PIXELFORMAT_XRGB8888",
  81. "SDL_PIXELFORMAT_RGBX8888",
  82. "SDL_PIXELFORMAT_XBGR8888",
  83. "SDL_PIXELFORMAT_BGRX8888",
  84. "SDL_PIXELFORMAT_ARGB8888",
  85. "SDL_PIXELFORMAT_RGBA8888",
  86. "SDL_PIXELFORMAT_ABGR8888",
  87. "SDL_PIXELFORMAT_BGRA8888",
  88. "SDL_PIXELFORMAT_XRGB2101010",
  89. "SDL_PIXELFORMAT_XBGR2101010",
  90. "SDL_PIXELFORMAT_ARGB2101010",
  91. "SDL_PIXELFORMAT_ABGR2101010",
  92. "SDL_PIXELFORMAT_YV12",
  93. "SDL_PIXELFORMAT_IYUV",
  94. "SDL_PIXELFORMAT_YUY2",
  95. "SDL_PIXELFORMAT_UYVY",
  96. "SDL_PIXELFORMAT_YVYU",
  97. "SDL_PIXELFORMAT_NV12",
  98. "SDL_PIXELFORMAT_NV21"
  99. };
  100. /* Definition of some invalid formats for negative tests */
  101. static Uint32 g_invalidPixelFormats[] = {
  102. SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_1010102 + 1, 32, 4),
  103. SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_1010102 + 2, 32, 4)
  104. };
  105. static const int g_numInvalidPixelFormats = SDL_arraysize(g_invalidPixelFormats);
  106. static const char *g_invalidPixelFormatsVerbose[] = {
  107. "SDL_PIXELFORMAT_UNKNOWN",
  108. "SDL_PIXELFORMAT_UNKNOWN"
  109. };
  110. /* Verify the pixel formats are laid out as expected */
  111. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_INDEX1LSB_FORMAT, SDL_PIXELFORMAT_INDEX1LSB == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, 1, 0));
  112. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_INDEX1MSB_FORMAT, SDL_PIXELFORMAT_INDEX1MSB == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, 1, 0));
  113. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_INDEX2LSB_FORMAT, SDL_PIXELFORMAT_INDEX2LSB == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX2, SDL_BITMAPORDER_4321, 0, 2, 0));
  114. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_INDEX2MSB_FORMAT, SDL_PIXELFORMAT_INDEX2MSB == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX2, SDL_BITMAPORDER_1234, 0, 2, 0));
  115. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_INDEX4LSB_FORMAT, SDL_PIXELFORMAT_INDEX4LSB == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, 4, 0));
  116. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_INDEX4MSB_FORMAT, SDL_PIXELFORMAT_INDEX4MSB == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, 4, 0));
  117. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_INDEX8_FORMAT, SDL_PIXELFORMAT_INDEX8 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1));
  118. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGB332_FORMAT, SDL_PIXELFORMAT_RGB332 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_332, 8, 1));
  119. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_XRGB4444_FORMAT, SDL_PIXELFORMAT_XRGB4444 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_4444, 12, 2));
  120. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_XBGR4444_FORMAT, SDL_PIXELFORMAT_XBGR4444 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_4444, 12, 2));
  121. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_XRGB1555_FORMAT, SDL_PIXELFORMAT_XRGB1555 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_1555, 15, 2));
  122. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_XBGR1555_FORMAT, SDL_PIXELFORMAT_XBGR1555 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_1555, 15, 2));
  123. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ARGB4444_FORMAT, SDL_PIXELFORMAT_ARGB4444 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_4444, 16, 2));
  124. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGBA4444_FORMAT, SDL_PIXELFORMAT_RGBA4444 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_4444, 16, 2));
  125. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ABGR4444_FORMAT, SDL_PIXELFORMAT_ABGR4444 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_4444, 16, 2));
  126. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_BGRA4444_FORMAT, SDL_PIXELFORMAT_BGRA4444 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_4444, 16, 2));
  127. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ARGB1555_FORMAT, SDL_PIXELFORMAT_ARGB1555 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_1555, 16, 2));
  128. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGBA5551_FORMAT, SDL_PIXELFORMAT_RGBA5551 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_5551, 16, 2));
  129. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ABGR1555_FORMAT, SDL_PIXELFORMAT_ABGR1555 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_1555, 16, 2));
  130. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_BGRA5551_FORMAT, SDL_PIXELFORMAT_BGRA5551 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_5551, 16, 2));
  131. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGB565_FORMAT, SDL_PIXELFORMAT_RGB565 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_565, 16, 2));
  132. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_BGR565_FORMAT, SDL_PIXELFORMAT_BGR565 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_565, 16, 2));
  133. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGB24_FORMAT, SDL_PIXELFORMAT_RGB24 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, 24, 3));
  134. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_BGR24_FORMAT, SDL_PIXELFORMAT_BGR24 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0, 24, 3));
  135. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_XRGB8888_FORMAT, SDL_PIXELFORMAT_XRGB8888 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_8888, 24, 4));
  136. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGBX8888_FORMAT, SDL_PIXELFORMAT_RGBX8888 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, SDL_PACKEDLAYOUT_8888, 24, 4));
  137. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_XBGR8888_FORMAT, SDL_PIXELFORMAT_XBGR8888 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_8888, 24, 4));
  138. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_BGRX8888_FORMAT, SDL_PIXELFORMAT_BGRX8888 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, SDL_PACKEDLAYOUT_8888, 24, 4));
  139. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ARGB8888_FORMAT, SDL_PIXELFORMAT_ARGB8888 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_8888, 32, 4));
  140. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGBA8888_FORMAT, SDL_PIXELFORMAT_RGBA8888 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_8888, 32, 4));
  141. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ABGR8888_FORMAT, SDL_PIXELFORMAT_ABGR8888 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_8888, 32, 4));
  142. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_BGRA8888_FORMAT, SDL_PIXELFORMAT_BGRA8888 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_8888, 32, 4));
  143. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_XRGB2101010_FORMAT, SDL_PIXELFORMAT_XRGB2101010 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_2101010, 32, 4));
  144. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_XBGR2101010_FORMAT, SDL_PIXELFORMAT_XBGR2101010 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_2101010, 32, 4));
  145. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ARGB2101010_FORMAT, SDL_PIXELFORMAT_ARGB2101010 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_2101010, 32, 4));
  146. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ABGR2101010_FORMAT, SDL_PIXELFORMAT_ABGR2101010 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_2101010, 32, 4));
  147. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGB48_FORMAT, SDL_PIXELFORMAT_RGB48 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_RGB, 0, 48, 6));
  148. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_BGR48_FORMAT, SDL_PIXELFORMAT_BGR48 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_BGR, 0, 48, 6));
  149. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGBA64_FORMAT, SDL_PIXELFORMAT_RGBA64 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_RGBA, 0, 64, 8));
  150. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ARGB64_FORMAT, SDL_PIXELFORMAT_ARGB64 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_ARGB, 0, 64, 8));
  151. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_BGRA64_FORMAT, SDL_PIXELFORMAT_BGRA64 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_BGRA, 0, 64, 8));
  152. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ABGR64_FORMAT, SDL_PIXELFORMAT_ABGR64 == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_ABGR, 0, 64, 8));
  153. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGB48_FLOAT_FORMAT, SDL_PIXELFORMAT_RGB48_FLOAT == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_RGB, 0, 48, 6));
  154. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_BGR48_FLOAT_FORMAT, SDL_PIXELFORMAT_BGR48_FLOAT == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_BGR, 0, 48, 6));
  155. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGBA64_FLOAT_FORMAT, SDL_PIXELFORMAT_RGBA64_FLOAT == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_RGBA, 0, 64, 8));
  156. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ARGB64_FLOAT_FORMAT, SDL_PIXELFORMAT_ARGB64_FLOAT == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_ARGB, 0, 64, 8));
  157. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_BGRA64_FLOAT_FORMAT, SDL_PIXELFORMAT_BGRA64_FLOAT == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_BGRA, 0, 64, 8));
  158. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ABGR64_FLOAT_FORMAT, SDL_PIXELFORMAT_ABGR64_FLOAT == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_ABGR, 0, 64, 8));
  159. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGB96_FLOAT_FORMAT, SDL_PIXELFORMAT_RGB96_FLOAT == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_RGB, 0, 96, 12));
  160. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_BGR96_FLOAT_FORMAT, SDL_PIXELFORMAT_BGR96_FLOAT == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_BGR, 0, 96, 12));
  161. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_RGBA128_FLOAT_FORMAT, SDL_PIXELFORMAT_RGBA128_FLOAT == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_RGBA, 0, 128, 16));
  162. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ARGB128_FLOAT_FORMAT, SDL_PIXELFORMAT_ARGB128_FLOAT == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_ARGB, 0, 128, 16));
  163. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_BGRA128_FLOAT_FORMAT, SDL_PIXELFORMAT_BGRA128_FLOAT == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_BGRA, 0, 128, 16));
  164. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_ABGR128_FLOAT_FORMAT, SDL_PIXELFORMAT_ABGR128_FLOAT == SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_ABGR, 0, 128, 16));
  165. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_YV12_FORMAT, SDL_PIXELFORMAT_YV12 == SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'));
  166. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_IYUV_FORMAT, SDL_PIXELFORMAT_IYUV == SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'));
  167. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_YUY2_FORMAT, SDL_PIXELFORMAT_YUY2 == SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'));
  168. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_UYVY_FORMAT, SDL_PIXELFORMAT_UYVY == SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'));
  169. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_YVYU_FORMAT, SDL_PIXELFORMAT_YVYU == SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'));
  170. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_NV12_FORMAT, SDL_PIXELFORMAT_NV12 == SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'));
  171. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_NV21_FORMAT, SDL_PIXELFORMAT_NV21 == SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1'));
  172. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_P010_FORMAT, SDL_PIXELFORMAT_P010 == SDL_DEFINE_PIXELFOURCC('P', '0', '1', '0'));
  173. SDL_COMPILE_TIME_ASSERT(SDL_PIXELFORMAT_EXTERNAL_OES_FORMAT, SDL_PIXELFORMAT_EXTERNAL_OES == SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' '));
  174. /* Verify the colorspaces are laid out as expected */
  175. SDL_COMPILE_TIME_ASSERT(SDL_COLORSPACE_SRGB_FORMAT, SDL_COLORSPACE_SRGB ==
  176. SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_RGB,
  177. SDL_COLOR_RANGE_FULL,
  178. SDL_COLOR_PRIMARIES_BT709,
  179. SDL_TRANSFER_CHARACTERISTICS_SRGB,
  180. SDL_MATRIX_COEFFICIENTS_IDENTITY,
  181. SDL_CHROMA_LOCATION_NONE));
  182. SDL_COMPILE_TIME_ASSERT(SDL_COLORSPACE_SRGB_LINEAR_FORMAT, SDL_COLORSPACE_SRGB_LINEAR ==
  183. SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_RGB,
  184. SDL_COLOR_RANGE_FULL,
  185. SDL_COLOR_PRIMARIES_BT709,
  186. SDL_TRANSFER_CHARACTERISTICS_LINEAR,
  187. SDL_MATRIX_COEFFICIENTS_IDENTITY,
  188. SDL_CHROMA_LOCATION_NONE));
  189. SDL_COMPILE_TIME_ASSERT(SDL_COLORSPACE_HDR10_FORMAT, SDL_COLORSPACE_HDR10 ==
  190. SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_RGB,
  191. SDL_COLOR_RANGE_FULL,
  192. SDL_COLOR_PRIMARIES_BT2020,
  193. SDL_TRANSFER_CHARACTERISTICS_PQ,
  194. SDL_MATRIX_COEFFICIENTS_IDENTITY,
  195. SDL_CHROMA_LOCATION_NONE));
  196. SDL_COMPILE_TIME_ASSERT(SDL_COLORSPACE_JPEG_FORMAT, SDL_COLORSPACE_JPEG ==
  197. SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
  198. SDL_COLOR_RANGE_FULL,
  199. SDL_COLOR_PRIMARIES_BT709,
  200. SDL_TRANSFER_CHARACTERISTICS_BT601,
  201. SDL_MATRIX_COEFFICIENTS_BT601,
  202. SDL_CHROMA_LOCATION_NONE));
  203. SDL_COMPILE_TIME_ASSERT(SDL_COLORSPACE_BT601_LIMITED_FORMAT, SDL_COLORSPACE_BT601_LIMITED ==
  204. SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
  205. SDL_COLOR_RANGE_LIMITED,
  206. SDL_COLOR_PRIMARIES_BT601,
  207. SDL_TRANSFER_CHARACTERISTICS_BT601,
  208. SDL_MATRIX_COEFFICIENTS_BT601,
  209. SDL_CHROMA_LOCATION_LEFT));
  210. SDL_COMPILE_TIME_ASSERT(SDL_COLORSPACE_BT601_FULL_FORMAT, SDL_COLORSPACE_BT601_FULL ==
  211. SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
  212. SDL_COLOR_RANGE_FULL,
  213. SDL_COLOR_PRIMARIES_BT601,
  214. SDL_TRANSFER_CHARACTERISTICS_BT601,
  215. SDL_MATRIX_COEFFICIENTS_BT601,
  216. SDL_CHROMA_LOCATION_LEFT));
  217. SDL_COMPILE_TIME_ASSERT(SDL_COLORSPACE_BT709_LIMITED_FORMAT, SDL_COLORSPACE_BT709_LIMITED ==
  218. SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
  219. SDL_COLOR_RANGE_LIMITED,
  220. SDL_COLOR_PRIMARIES_BT709,
  221. SDL_TRANSFER_CHARACTERISTICS_BT709,
  222. SDL_MATRIX_COEFFICIENTS_BT709,
  223. SDL_CHROMA_LOCATION_LEFT));
  224. SDL_COMPILE_TIME_ASSERT(SDL_COLORSPACE_BT709_FULL_FORMAT, SDL_COLORSPACE_BT709_FULL ==
  225. SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
  226. SDL_COLOR_RANGE_FULL,
  227. SDL_COLOR_PRIMARIES_BT709,
  228. SDL_TRANSFER_CHARACTERISTICS_BT709,
  229. SDL_MATRIX_COEFFICIENTS_BT709,
  230. SDL_CHROMA_LOCATION_LEFT));
  231. SDL_COMPILE_TIME_ASSERT(SDL_COLORSPACE_BT2020_LIMITED_FORMAT, SDL_COLORSPACE_BT2020_LIMITED ==
  232. SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
  233. SDL_COLOR_RANGE_LIMITED,
  234. SDL_COLOR_PRIMARIES_BT2020,
  235. SDL_TRANSFER_CHARACTERISTICS_PQ,
  236. SDL_MATRIX_COEFFICIENTS_BT2020_NCL,
  237. SDL_CHROMA_LOCATION_LEFT));
  238. SDL_COMPILE_TIME_ASSERT(SDL_COLORSPACE_BT2020_FULL_FORMAT, SDL_COLORSPACE_BT2020_FULL ==
  239. SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
  240. SDL_COLOR_RANGE_FULL,
  241. SDL_COLOR_PRIMARIES_BT2020,
  242. SDL_TRANSFER_CHARACTERISTICS_PQ,
  243. SDL_MATRIX_COEFFICIENTS_BT2020_NCL,
  244. SDL_CHROMA_LOCATION_LEFT));
  245. /* Test case functions */
  246. /**
  247. * Call to SDL_GetPixelFormatDetails
  248. */
  249. static int SDLCALL pixels_getPixelFormatDetails(void *arg)
  250. {
  251. const char *unknownFormat = "SDL_PIXELFORMAT_UNKNOWN";
  252. const char *expectedError = "Unknown pixel format";
  253. const char *error;
  254. int i;
  255. SDL_PixelFormat format;
  256. Uint32 masks;
  257. const SDL_PixelFormatDetails *result;
  258. /* Blank/unknown format */
  259. format = SDL_PIXELFORMAT_UNKNOWN;
  260. SDLTest_Log("Pixel Format: %s (%d)", unknownFormat, format);
  261. /* Allocate format */
  262. result = SDL_GetPixelFormatDetails(format);
  263. SDLTest_AssertPass("Call to SDL_GetPixelFormatDetails()");
  264. SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
  265. if (result != NULL) {
  266. SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %d, got %d", format, result->format);
  267. SDLTest_AssertCheck(result->bits_per_pixel == 0,
  268. "Verify value of result.bits_per_pixel; expected: 0, got %u",
  269. result->bits_per_pixel);
  270. SDLTest_AssertCheck(result->bytes_per_pixel == 0,
  271. "Verify value of result.bytes_per_pixel; expected: 0, got %u",
  272. result->bytes_per_pixel);
  273. masks = result->Rmask | result->Gmask | result->Bmask | result->Amask;
  274. SDLTest_AssertCheck(masks == 0, "Verify value of result.[RGBA]mask combined; expected: 0, got %" SDL_PRIu32, masks);
  275. }
  276. /* RGB formats */
  277. for (i = 0; i < g_numAllFormats; i++) {
  278. format = g_AllFormats[i];
  279. SDLTest_Log("Pixel Format: %s (%d)", g_AllFormatsVerbose[i], format);
  280. /* Allocate format */
  281. result = SDL_GetPixelFormatDetails(format);
  282. SDLTest_AssertPass("Call to SDL_GetPixelFormatDetails()");
  283. SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
  284. if (result != NULL) {
  285. SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %d, got %d", format, result->format);
  286. if (!SDL_ISPIXELFORMAT_FOURCC(format)) {
  287. SDLTest_AssertCheck(result->bits_per_pixel > 0,
  288. "Verify value of result.bits_per_pixel; expected: >0, got %u",
  289. result->bits_per_pixel);
  290. SDLTest_AssertCheck(result->bytes_per_pixel > 0,
  291. "Verify value of result.bytes_per_pixel; expected: >0, got %u",
  292. result->bytes_per_pixel);
  293. if (!SDL_ISPIXELFORMAT_INDEXED(format)) {
  294. masks = result->Rmask | result->Gmask | result->Bmask | result->Amask;
  295. SDLTest_AssertCheck(masks > 0, "Verify value of result.[RGBA]mask combined; expected: >0, got %" SDL_PRIu32, masks);
  296. if (SDL_ISPIXELFORMAT_10BIT(format)) {
  297. SDLTest_AssertCheck(result->Rbits == 10 && result->Gbits == 10 && result->Bbits == 10, "Verify value of result.[RGB]bits; expected: 10, got %d/%d/%d", result->Rbits, result->Gbits, result->Bbits);
  298. } else if (SDL_BITSPERPIXEL(format) == 32) {
  299. SDLTest_AssertCheck(result->Rbits == 8 && result->Gbits == 8 && result->Bbits == 8, "Verify value of result.[RGB]bits; expected: 8, got %d/%d/%d", result->Rbits, result->Gbits, result->Bbits);
  300. }
  301. }
  302. }
  303. }
  304. }
  305. /* Negative cases */
  306. /* Invalid Formats */
  307. for (i = 0; i < g_numInvalidPixelFormats; i++) {
  308. SDL_ClearError();
  309. SDLTest_AssertPass("Call to SDL_ClearError()");
  310. format = g_invalidPixelFormats[i];
  311. result = SDL_GetPixelFormatDetails(format);
  312. SDLTest_AssertPass("Call to SDL_GetPixelFormatDetails(%d)", format);
  313. SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
  314. error = SDL_GetError();
  315. SDLTest_AssertPass("Call to SDL_GetError()");
  316. SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
  317. if (error != NULL) {
  318. SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0,
  319. "Validate error message, expected: '%s', got: '%s'", expectedError, error);
  320. }
  321. }
  322. return TEST_COMPLETED;
  323. }
  324. /**
  325. * Call to SDL_GetPixelFormatName
  326. *
  327. * \sa SDL_GetPixelFormatName
  328. */
  329. static int SDLCALL pixels_getPixelFormatName(void *arg)
  330. {
  331. const char *unknownFormat = "SDL_PIXELFORMAT_UNKNOWN";
  332. const char *error;
  333. int i;
  334. SDL_PixelFormat format;
  335. const char *result;
  336. /* Blank/undefined format */
  337. format = SDL_PIXELFORMAT_UNKNOWN;
  338. SDLTest_Log("RGB Format: %s (%d)", unknownFormat, format);
  339. /* Get name of format */
  340. result = SDL_GetPixelFormatName(format);
  341. SDLTest_AssertPass("Call to SDL_GetPixelFormatName()");
  342. SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
  343. if (result != NULL) {
  344. SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty");
  345. SDLTest_AssertCheck(SDL_strcmp(result, unknownFormat) == 0,
  346. "Verify result text; expected: %s, got %s", unknownFormat, result);
  347. }
  348. /* RGB formats */
  349. for (i = 0; i < g_numAllFormats; i++) {
  350. format = g_AllFormats[i];
  351. SDLTest_Log("RGB Format: %s (%d)", g_AllFormatsVerbose[i], format);
  352. /* Get name of format */
  353. result = SDL_GetPixelFormatName(format);
  354. SDLTest_AssertPass("Call to SDL_GetPixelFormatName()");
  355. SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
  356. if (result != NULL) {
  357. SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty");
  358. SDLTest_AssertCheck(SDL_strcmp(result, g_AllFormatsVerbose[i]) == 0,
  359. "Verify result text; expected: %s, got %s", g_AllFormatsVerbose[i], result);
  360. }
  361. }
  362. /* Negative cases */
  363. /* Invalid Formats */
  364. SDL_ClearError();
  365. SDLTest_AssertPass("Call to SDL_ClearError()");
  366. for (i = 0; i < g_numInvalidPixelFormats; i++) {
  367. format = g_invalidPixelFormats[i];
  368. result = SDL_GetPixelFormatName(format);
  369. SDLTest_AssertPass("Call to SDL_GetPixelFormatName(%d)", format);
  370. SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
  371. if (result != NULL) {
  372. SDLTest_AssertCheck(result[0] != '\0',
  373. "Verify result is non-empty; got: %s", result);
  374. SDLTest_AssertCheck(SDL_strcmp(result, g_invalidPixelFormatsVerbose[i]) == 0,
  375. "Validate name is UNKNOWN, expected: '%s', got: '%s'", g_invalidPixelFormatsVerbose[i], result);
  376. }
  377. error = SDL_GetError();
  378. SDLTest_AssertPass("Call to SDL_GetError()");
  379. SDLTest_AssertCheck(error == NULL || error[0] == '\0', "Validate that error message is empty");
  380. }
  381. return TEST_COMPLETED;
  382. }
  383. /**
  384. * Call to SDL_CreatePalette and SDL_DestroyPalette
  385. *
  386. * \sa SDL_CreatePalette
  387. * \sa SDL_DestroyPalette
  388. */
  389. static int SDLCALL pixels_allocFreePalette(void *arg)
  390. {
  391. const char *expectedError = "Parameter 'ncolors' is invalid";
  392. const char *error;
  393. int variation;
  394. int i;
  395. int ncolors;
  396. SDL_Palette *result;
  397. /* Allocate palette */
  398. for (variation = 1; variation <= 3; variation++) {
  399. switch (variation) {
  400. /* Just one color */
  401. default:
  402. case 1:
  403. ncolors = 1;
  404. break;
  405. /* Two colors */
  406. case 2:
  407. ncolors = 2;
  408. break;
  409. /* More than two colors */
  410. case 3:
  411. ncolors = SDLTest_RandomIntegerInRange(8, 16);
  412. break;
  413. }
  414. result = SDL_CreatePalette(ncolors);
  415. SDLTest_AssertPass("Call to SDL_CreatePalette(%d)", ncolors);
  416. SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
  417. if (result != NULL) {
  418. SDLTest_AssertCheck(result->ncolors == ncolors, "Verify value of result.ncolors; expected: %u, got %u", ncolors, result->ncolors);
  419. if (result->ncolors > 0) {
  420. SDLTest_AssertCheck(result->colors != NULL, "Verify value of result.colors is not NULL");
  421. if (result->colors != NULL) {
  422. for (i = 0; i < result->ncolors; i++) {
  423. SDLTest_AssertCheck(result->colors[i].r == 255, "Verify value of result.colors[%d].r; expected: 255, got %u", i, result->colors[i].r);
  424. SDLTest_AssertCheck(result->colors[i].g == 255, "Verify value of result.colors[%d].g; expected: 255, got %u", i, result->colors[i].g);
  425. SDLTest_AssertCheck(result->colors[i].b == 255, "Verify value of result.colors[%d].b; expected: 255, got %u", i, result->colors[i].b);
  426. }
  427. }
  428. }
  429. /* Deallocate again */
  430. SDL_DestroyPalette(result);
  431. SDLTest_AssertPass("Call to SDL_DestroyPalette()");
  432. }
  433. }
  434. /* Negative cases */
  435. /* Invalid number of colors */
  436. for (ncolors = 0; ncolors > -3; ncolors--) {
  437. SDL_ClearError();
  438. SDLTest_AssertPass("Call to SDL_ClearError()");
  439. result = SDL_CreatePalette(ncolors);
  440. SDLTest_AssertPass("Call to SDL_CreatePalette(%d)", ncolors);
  441. SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
  442. error = SDL_GetError();
  443. SDLTest_AssertPass("Call to SDL_GetError()");
  444. SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
  445. if (error != NULL) {
  446. SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0,
  447. "Validate error message, expected: '%s', got: '%s'", expectedError, error);
  448. }
  449. }
  450. /* Invalid free pointer */
  451. SDL_ClearError();
  452. SDLTest_AssertPass("Call to SDL_ClearError()");
  453. SDL_DestroyPalette(NULL);
  454. SDLTest_AssertPass("Call to SDL_DestroyPalette(NULL)");
  455. error = SDL_GetError();
  456. SDLTest_AssertPass("Call to SDL_GetError()");
  457. SDLTest_AssertCheck(error == NULL || error[0] == '\0', "Validate that error message is empty");
  458. return TEST_COMPLETED;
  459. }
  460. /* ================= Test References ================== */
  461. /* Pixels test cases */
  462. static const SDLTest_TestCaseReference pixelsTest1 = {
  463. pixels_getPixelFormatDetails, "pixels_allocFreeFormat", "Call to SDL_GetPixelFormatDetails", TEST_ENABLED
  464. };
  465. static const SDLTest_TestCaseReference pixelsTest2 = {
  466. pixels_allocFreePalette, "pixels_allocFreePalette", "Call to SDL_CreatePalette and SDL_DestroyPalette", TEST_ENABLED
  467. };
  468. static const SDLTest_TestCaseReference pixelsTest3 = {
  469. pixels_getPixelFormatName, "pixels_getPixelFormatName", "Call to SDL_GetPixelFormatName", TEST_ENABLED
  470. };
  471. /* Sequence of Pixels test cases */
  472. static const SDLTest_TestCaseReference *pixelsTests[] = {
  473. &pixelsTest1, &pixelsTest2, &pixelsTest3, NULL
  474. };
  475. /* Pixels test suite (global) */
  476. SDLTest_TestSuiteReference pixelsTestSuite = {
  477. "Pixels",
  478. NULL,
  479. pixelsTests,
  480. NULL
  481. };