graw_util.c revision 601498ae73e654c2de997ea75075613a694d604d
190437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca
290437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca#include "pipe/p_compiler.h"
390437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca#include "pipe/p_context.h"
490437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca#include "pipe/p_state.h"
590437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca#include "tgsi/tgsi_text.h"
690437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca#include "util/u_memory.h"
790437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca#include "state_tracker/graw.h"
890437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca
990437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca
1090437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca/* Helper functions.  These are the same for all graw implementations.
1190437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca */
12601498ae73e654c2de997ea75075613a694d604dJosé FonsecaPUBLIC void *
13601498ae73e654c2de997ea75075613a694d604dJosé Fonsecagraw_parse_geometry_shader(struct pipe_context *pipe,
14601498ae73e654c2de997ea75075613a694d604dJosé Fonseca                           const char *text)
1590437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca{
1690437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   struct tgsi_token tokens[1024];
1790437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   struct pipe_shader_state state;
1890437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca
1990437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   if (!tgsi_text_translate(text, tokens, Elements(tokens)))
2090437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca      return NULL;
2190437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca
2290437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   state.tokens = tokens;
2390437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   return pipe->create_gs_state(pipe, &state);
2490437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca}
2590437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca
26601498ae73e654c2de997ea75075613a694d604dJosé FonsecaPUBLIC void *
27601498ae73e654c2de997ea75075613a694d604dJosé Fonsecagraw_parse_vertex_shader(struct pipe_context *pipe,
28601498ae73e654c2de997ea75075613a694d604dJosé Fonseca                         const char *text)
2990437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca{
3090437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   struct tgsi_token tokens[1024];
3190437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   struct pipe_shader_state state;
3290437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca
3390437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   if (!tgsi_text_translate(text, tokens, Elements(tokens)))
3490437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca      return NULL;
3590437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca
3690437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   state.tokens = tokens;
3790437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   return pipe->create_vs_state(pipe, &state);
3890437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca}
3990437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca
40601498ae73e654c2de997ea75075613a694d604dJosé FonsecaPUBLIC void *
41601498ae73e654c2de997ea75075613a694d604dJosé Fonsecagraw_parse_fragment_shader(struct pipe_context *pipe,
42601498ae73e654c2de997ea75075613a694d604dJosé Fonseca                           const char *text)
4390437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca{
4490437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   struct tgsi_token tokens[1024];
4590437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   struct pipe_shader_state state;
4690437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca
4790437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   if (!tgsi_text_translate(text, tokens, Elements(tokens)))
4890437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca      return NULL;
4990437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca
5090437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   state.tokens = tokens;
5190437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca   return pipe->create_fs_state(pipe, &state);
5290437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca}
5390437330e2886fcd351dd11ee0e5aa3e8b523fdcJosé Fonseca
54