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