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