summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@redhat.com>2010-04-14 11:00:19 -0400
committerSøren Sandmann Pedersen <ssp@redhat.com>2010-04-14 11:00:19 -0400
commitd0f0407a3963615f13e65c7a348c0add820207d3 (patch)
treeda980aa27d4e244df686eb3df2d350978db4b470
Initial check-in
-rw-r--r--psl.c107
-rw-r--r--psl.h54
2 files changed, 161 insertions, 0 deletions
diff --git a/psl.c b/psl.c
new file mode 100644
index 0000000..73ae9fa
--- /dev/null
+++ b/psl.c
@@ -0,0 +1,107 @@
+#include <stdlib.h>
+#include <stdarg.h>
+#include "psl.h"
+
+typedef struct memory_t memory_t;
+
+struct memory_t
+{
+
+};
+
+struct psl_statement_t
+{
+ memory_t *memory;
+};
+
+struct psl_program_t
+{
+ psl_statement_t *statement;
+};
+
+psl_program_t *
+psl_program_create (psl_statement_t *statement)
+{
+}
+
+psl_instruction_t *
+psl_tex (psl_var_t *dest,
+ psl_var_t *img,
+ psl_var_t *u,
+ psl_var_t *v)
+{
+
+}
+
+psl_statement_t *
+psl_asm (psl_instruction_t *instruction,
+ ...)
+{
+ va_list va;
+
+ va_start (va, instruction);
+
+ while (instruction)
+ {
+
+
+ instruction = va_arg (va, void *);
+ }
+
+ va_end (va);
+}
+
+void
+psl_program_run (psl_program_t *program,
+ pixman_region32_t *clip,
+ pixman_image_t *destination,
+ pixman_image_t *source1,
+ ...)
+{
+
+}
+
+void
+psl_program_destroy (psl_program_t *program)
+{
+
+}
+
+psl_var_t *
+psl_imm_un8 (int value)
+{
+
+}
+
+psl_var_t *
+psl_imm_sp (float f)
+{
+
+}
+
+psl_instruction_t *
+psl_label (const char *name)
+{
+}
+
+psl_var_t *
+psl_var (const char *name)
+{
+
+}
+
+int
+main ()
+{
+ psl_program_t *program = psl_program_create (
+ psl_asm (
+ psl_tex (
+ psl_var ("fish"),
+ psl_imm_un8 (0),
+ psl_imm_sp (0.7),
+ psl_imm_sp (0.3)),
+ psl_label ("restart:"),
+ NULL));
+
+ return 0;
+}
diff --git a/psl.h b/psl.h
new file mode 100644
index 0000000..a1bd156
--- /dev/null
+++ b/psl.h
@@ -0,0 +1,54 @@
+#include <pixman.h>
+
+/*
+ * The basic idea:
+ *
+ * A /program/ is a list of instructions that
+ *
+ * - takes a number of *source* images (numbered from 0 to n)
+ * - takes one destination image
+ * - takes a clip region parameter
+ *
+ * When executed, for each pixel in the destination image,
+ * the instructions are interpreted and the result is written
+ * back.
+ *
+ * Do we talk about /pixels/ here? Yes, probably, though there
+ * is nothing stopping people from treating an image as if it were
+ * an a8.
+ *
+ */
+
+typedef struct psl_program_t psl_program_t;
+typedef struct psl_statement_t psl_statement_t;
+typedef struct psl_var_t psl_var_t;
+typedef struct psl_instruction_t psl_instruction_t;
+
+psl_program_t * psl_program_create (psl_statement_t *statement);
+psl_var_t * psl_imm_un8 (int value);
+psl_var_t * psl_imm_sp (float f);
+psl_var_t * psl_var (const char *name);
+psl_instruction_t *psl_tex (psl_var_t *dest,
+ psl_var_t *img,
+ psl_var_t *u,
+ psl_var_t *v);
+psl_instruction_t *psl_add (psl_var_t *dest,
+ psl_var_t *src1,
+ psl_var_t *src2);
+psl_instruction_t *psl_mad (psl_var_t *dest,
+ psl_var_t *src1,
+ psl_var_t *src2,
+ psl_var_t *src3);
+psl_instruction_t *psl_cmp_lt (psl_var_t *dest,
+ psl_var_t *src1,
+ psl_var_t *src2);
+psl_instruction_t *psl_label (const char *name);
+psl_statement_t * psl_asm (psl_instruction_t *instruction,
+ ...);
+void psl_program_run (psl_program_t *program,
+ pixman_region32_t *clip,
+ pixman_image_t *destination,
+ pixman_image_t *source1,
+ ...);
+void psl_program_destroy (psl_program_t *program);
+