nv50,nvc0: buffer resources can be bound as other things down the line
[mesa.git] / src / gallium / targets / graw-null / graw_util.c
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 }