Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1.  
  2. #include "pipe/p_compiler.h"
  3. #include "pipe/p_context.h"
  4. #include "pipe/p_shader_tokens.h"
  5. #include "pipe/p_state.h"
  6. #include "tgsi/tgsi_text.h"
  7. #include "util/u_debug.h"
  8. #include "util/u_memory.h"
  9. #include "state_tracker/graw.h"
  10.  
  11.  
  12. /* Helper functions.  These are the same for all graw implementations.
  13.  */
  14. PUBLIC void *
  15. graw_parse_geometry_shader(struct pipe_context *pipe,
  16.                            const char *text)
  17. {
  18.    struct tgsi_token tokens[1024];
  19.    struct pipe_shader_state state;
  20.  
  21.    if (!tgsi_text_translate(text, tokens, Elements(tokens)))
  22.       return NULL;
  23.  
  24.    memset(&state, 0, sizeof state);
  25.    state.tokens = tokens;
  26.    return pipe->create_gs_state(pipe, &state);
  27. }
  28.  
  29. PUBLIC void *
  30. graw_parse_vertex_shader(struct pipe_context *pipe,
  31.                          const char *text)
  32. {
  33.    struct tgsi_token tokens[1024];
  34.    struct pipe_shader_state state;
  35.  
  36.    if (!tgsi_text_translate(text, tokens, Elements(tokens)))
  37.       return NULL;
  38.  
  39.    memset(&state, 0, sizeof state);
  40.    state.tokens = tokens;
  41.    return pipe->create_vs_state(pipe, &state);
  42. }
  43.  
  44. PUBLIC void *
  45. graw_parse_fragment_shader(struct pipe_context *pipe,
  46.                            const char *text)
  47. {
  48.    struct tgsi_token tokens[1024];
  49.    struct pipe_shader_state state;
  50.  
  51.    if (!tgsi_text_translate(text, tokens, Elements(tokens)))
  52.       return NULL;
  53.  
  54.    memset(&state, 0, sizeof state);
  55.    state.tokens = tokens;
  56.    return pipe->create_fs_state(pipe, &state);
  57. }
  58.  
  59. static char out_filename[256] = "";
  60.  
  61. PUBLIC boolean
  62. graw_parse_args(int *argi,
  63.                 int argc,
  64.                 char *argv[])
  65. {
  66.    if (strcmp(argv[*argi], "-o") == 0) {
  67.       if (*argi + 1 >= argc) {
  68.          return FALSE;
  69.       }
  70.  
  71.       strncpy(out_filename, argv[*argi + 1], sizeof(out_filename) - 1);
  72.       out_filename[sizeof(out_filename) - 1] = '\0';
  73.       *argi += 2;
  74.       return TRUE;
  75.    }
  76.  
  77.    return FALSE;
  78. }
  79.  
  80. PUBLIC boolean
  81. graw_save_surface_to_file(struct pipe_context *pipe,
  82.                           struct pipe_surface *surface,
  83.                           const char *filename)
  84. {
  85.    if (!filename || !*filename) {
  86.       filename = out_filename;
  87.       if (!filename || !*filename) {
  88.          return FALSE;
  89.       }
  90.    }
  91.  
  92.    /* XXX: Make that working in release builds.
  93.     */
  94.    debug_dump_surface_bmp(pipe, filename, surface);
  95.    return TRUE;
  96. }
  97.