Clone of mesa.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

bin_to_bmp.c 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * Copyright 2009 VMware, Inc.
  3. * All Rights Reserved.
  4. *
  5. * Permission is hereby granted, free of charge, to any person obtaining a
  6. * copy of this software and associated documentation files (the "Software"),
  7. * to deal in the Software without restriction, including without limitation
  8. * on the rights to use, copy, modify, merge, publish, distribute, sub
  9. * license, and/or sell copies of the Software, and to permit persons to whom
  10. * the Software is furnished to do so, subject to the following conditions:
  11. *
  12. * The above copyright notice and this permission notice (including the next
  13. * paragraph) shall be included in all copies or substantial portions of the
  14. * Software.
  15. *
  16. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
  19. * VMWARE AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
  20. * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  21. * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  22. * USE OR OTHER DEALINGS IN THE SOFTWARE.
  23. */
  24. #include "pipe/p_compiler.h"
  25. #include "pipe/p_format.h"
  26. #include "pipe/p_state.h"
  27. #include "util/u_format.h"
  28. #include "util/u_memory.h"
  29. #include "util/u_debug.h"
  30. #include "util/u_format.h"
  31. #include "util/u_network.h"
  32. #include "util/u_tile.h"
  33. static uint8_t* read(const char *filename, unsigned size);
  34. static void dump(unsigned src_width, unsigned src_height,
  35. unsigned src_stride, enum pipe_format src_format,
  36. uint8_t *data, unsigned src_size);
  37. int main(int argc, char** argv)
  38. {
  39. /* change these */
  40. unsigned width = 64;
  41. unsigned height = 64;
  42. unsigned stride = width * 4;
  43. unsigned size = stride * height;
  44. const char *filename = "mybin.bin";
  45. enum pipe_format format = PIPE_FORMAT_A8R8G8B8_UNORM;
  46. dump(width, height, stride, format, read(filename, size), size);
  47. return 0;
  48. }
  49. static void dump(unsigned width, unsigned height,
  50. unsigned src_stride, enum pipe_format src_format,
  51. uint8_t *data, unsigned src_size)
  52. {
  53. enum pipe_format dst_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
  54. unsigned dst_stride;
  55. unsigned dst_size;
  56. float *rgba;
  57. int i;
  58. char filename[512];
  59. {
  60. assert(src_stride >= util_format_get_stride(src_format, width));
  61. }
  62. {
  63. dst_stride = util_format_get_stride(dst_format, width);
  64. dst_size = util_format_get_2d_size(dst_format, dst_stride, width);
  65. rgba = MALLOC(dst_size);
  66. }
  67. util_snprintf(filename, 512, "%s.bmp", pf_name(src_format));
  68. if (util_format_is_compressed(src_format)) {
  69. debug_printf("skipping: %s\n", filename);
  70. return;
  71. }
  72. debug_printf("saving: %s\n", filename);
  73. for (i = 0; i < height; i++) {
  74. pipe_tile_raw_to_rgba(src_format, data + src_stride * i,
  75. width, 1,
  76. &rgba[width*4*i], dst_stride);
  77. }
  78. debug_dump_float_rgba_bmp(filename, width, height, rgba, width);
  79. FREE(rgba);
  80. }
  81. static uint8_t* read(const char *filename, unsigned size)
  82. {
  83. uint8_t *data;
  84. FILE *file = fopen(filename, "rb");
  85. data = MALLOC(size);
  86. fread(data, 1, size, file);
  87. fclose(file);
  88. return data;
  89. }