author | Caleb Cornett <caleb.cornett@outlook.com> |
Thu, 21 May 2020 12:00:55 -0400 | |
changeset 1255 | 0135d797e287 |
parent 1242 | 4929f916a134 |
child 1257 | deb563aadfa0 |
permissions | -rw-r--r-- |
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
1 |
#ifndef _INCLUDE_MOJOSHADER_INTERNAL_H_ |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
2 |
#define _INCLUDE_MOJOSHADER_INTERNAL_H_ |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
3 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
4 |
#ifndef __MOJOSHADER_INTERNAL__ |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
5 |
#error Do not include this header from your applications. |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
6 |
#endif |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
7 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
8 |
// Shader bytecode format is described at MSDN: |
907 | 9 |
// http://msdn.microsoft.com/en-us/library/ff569705.aspx |
589
1cf3fc2c5e37
Updated some URLs in the comments.
Ryan C. Gordon <icculus@icculus.org>
parents:
587
diff
changeset
|
10 |
|
1237
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
11 |
#ifdef MOJOSHADER_USE_SDL_STDLIB |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
12 |
#include <SDL_assert.h> |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
13 |
#include <SDL_stdinc.h> |
1242
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
14 |
#include <math.h> /* Needed for isinf/isnan :( */ |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
15 |
#ifndef __APPLE__ |
1239
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
16 |
#include <malloc.h> /* Needed for alloca :( */ |
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
17 |
#endif |
1237
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
18 |
|
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
19 |
/* stdint.h */ |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
20 |
typedef Uint8 uint8; |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
21 |
typedef Uint16 uint16; |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
22 |
typedef Uint32 uint32; |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
23 |
typedef Sint32 int32; |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
24 |
typedef Sint64 int64; |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
25 |
typedef Uint64 uint64; |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
26 |
|
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
27 |
/* assert.h */ |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
28 |
#define assert SDL_assert |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
29 |
|
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
30 |
/* stdlib.h */ |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
31 |
#define malloc SDL_malloc |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
32 |
#define free SDL_free |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
33 |
|
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
34 |
/* stdio.h */ |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
35 |
#define sscanf SDL_sscanf |
1238
a6b5578b9851
A few more stdlib macros for Apple
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1237
diff
changeset
|
36 |
#ifdef snprintf |
a6b5578b9851
A few more stdlib macros for Apple
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1237
diff
changeset
|
37 |
#undef snprintf |
a6b5578b9851
A few more stdlib macros for Apple
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1237
diff
changeset
|
38 |
#endif |
1237
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
39 |
#define snprintf SDL_snprintf |
1238
a6b5578b9851
A few more stdlib macros for Apple
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1237
diff
changeset
|
40 |
#ifdef vsnprintf |
a6b5578b9851
A few more stdlib macros for Apple
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1237
diff
changeset
|
41 |
#undef vsnprintf |
a6b5578b9851
A few more stdlib macros for Apple
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1237
diff
changeset
|
42 |
#endif |
1237
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
43 |
#define vsnprintf SDL_vsnprintf |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
44 |
|
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
45 |
/* math.h */ |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
46 |
#define acos SDL_acos |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
47 |
#define asin SDL_asin |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
48 |
#define atan SDL_atan |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
49 |
#define atan2 SDL_atan2 |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
50 |
#define cos SDL_acos |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
51 |
#define exp SDL_exp |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
52 |
#define floor SDL_floor |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
53 |
#define log SDL_log |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
54 |
#define sin SDL_sin |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
55 |
#define sqrt SDL_sqrt |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
56 |
|
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
57 |
/* string.h */ |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
58 |
#ifdef memcmp |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
59 |
#undef memcmp |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
60 |
#endif |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
61 |
#define memcmp SDL_memcmp |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
62 |
#ifdef memcpy |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
63 |
#undef memcpy |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
64 |
#endif |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
65 |
#define memcpy SDL_memcpy |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
66 |
#ifdef memset |
1238
a6b5578b9851
A few more stdlib macros for Apple
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1237
diff
changeset
|
67 |
#undef memset |
1237
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
68 |
#endif |
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
69 |
#define memset SDL_memset |
1242
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
70 |
#ifdef strchr |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
71 |
#undef strchr |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
72 |
#endif |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
73 |
#define strchr SDL_strchr |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
74 |
#ifdef strcmp |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
75 |
#undef strcmp |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
76 |
#endif |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
77 |
#define strcmp SDL_strcmp |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
78 |
#ifdef strlen |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
79 |
#undef strlen |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
80 |
#endif |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
81 |
#define strlen SDL_strlen |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
82 |
#ifdef strncmp |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
83 |
#undef strncmp |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
84 |
#endif |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
85 |
#define strncmp SDL_strncmp |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
86 |
#ifdef strstr |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
87 |
#undef strstr |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
88 |
#endif |
4929f916a134
Buildfixes for CentOS, MinGW, osxcross
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1239
diff
changeset
|
89 |
#define strstr SDL_strstr |
1239
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
90 |
#ifdef strcat |
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
91 |
#undef strcat |
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
92 |
#endif |
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
93 |
/* TODO: Move MojoShader away from strcat! This len is awful! */ |
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
94 |
#define strcat(dst, src) SDL_strlcat(dst, src, SDL_strlen(src) + 1) |
1238
a6b5578b9851
A few more stdlib macros for Apple
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1237
diff
changeset
|
95 |
#ifdef strcpy |
a6b5578b9851
A few more stdlib macros for Apple
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1237
diff
changeset
|
96 |
#undef strcpy |
a6b5578b9851
A few more stdlib macros for Apple
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1237
diff
changeset
|
97 |
#endif |
a6b5578b9851
A few more stdlib macros for Apple
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1237
diff
changeset
|
98 |
/* TODO: Move MojoShader away from strcpy! This len is awful! */ |
a6b5578b9851
A few more stdlib macros for Apple
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1237
diff
changeset
|
99 |
#define strcpy(dst, src) SDL_strlcpy(dst, src, SDL_strlen(src) + 1) |
1237
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
100 |
#else /* MOJOSHADER_USE_SDL_STDLIB */ |
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
101 |
#include <stdio.h> |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
102 |
#include <string.h> |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
103 |
#include <stdlib.h> |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
104 |
#include <stdarg.h> |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
105 |
#include <assert.h> |
1237
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
106 |
#endif /* MOJOSHADER_USE_SDL_STDLIB */ |
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
107 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
108 |
#include "mojoshader.h" |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
109 |
|
630
e6bd53dd1f91
Allow debug output directly from the lexer, before preprocessor eats.
Ryan C. Gordon <icculus@icculus.org>
parents:
625
diff
changeset
|
110 |
#define DEBUG_LEXER 0 |
587
202354e004fc
Unified some cut-and-paste code.
Ryan C. Gordon <icculus@icculus.org>
parents:
584
diff
changeset
|
111 |
#define DEBUG_PREPROCESSOR 0 |
716
94a804b54078
Cleaned up HLSL parser tracing.
Ryan C. Gordon <icculus@icculus.org>
parents:
703
diff
changeset
|
112 |
#define DEBUG_ASSEMBLER_PARSER 0 |
94a804b54078
Cleaned up HLSL parser tracing.
Ryan C. Gordon <icculus@icculus.org>
parents:
703
diff
changeset
|
113 |
#define DEBUG_COMPILER_PARSER 0 |
630
e6bd53dd1f91
Allow debug output directly from the lexer, before preprocessor eats.
Ryan C. Gordon <icculus@icculus.org>
parents:
625
diff
changeset
|
114 |
#define DEBUG_TOKENIZER \ |
716
94a804b54078
Cleaned up HLSL parser tracing.
Ryan C. Gordon <icculus@icculus.org>
parents:
703
diff
changeset
|
115 |
(DEBUG_PREPROCESSOR || DEBUG_ASSEMBLER_PARSER || DEBUG_LEXER) |
587
202354e004fc
Unified some cut-and-paste code.
Ryan C. Gordon <icculus@icculus.org>
parents:
584
diff
changeset
|
116 |
|
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
117 |
// This is the highest shader version we currently support. |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
118 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
119 |
#define MAX_SHADER_MAJOR 3 |
493
e2c930ab84b5
Allow SM3 shaders that are vs_3_x or vs_3_sw.
Ryan C. Gordon <icculus@icculus.org>
parents:
491
diff
changeset
|
120 |
#define MAX_SHADER_MINOR 255 // vs_3_sw |
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
121 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
122 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
123 |
// If SUPPORT_PROFILE_* isn't defined, we assume an implicit desire to support. |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
124 |
// You get all the profiles unless you go out of your way to disable them. |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
125 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
126 |
#ifndef SUPPORT_PROFILE_D3D |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
127 |
#define SUPPORT_PROFILE_D3D 1 |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
128 |
#endif |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
129 |
|
800
cbd232606562
fix passthrough/bytecode define
Aras Pranckevicius <aras@unity3d.com>
parents:
756
diff
changeset
|
130 |
#ifndef SUPPORT_PROFILE_BYTECODE |
484
dfce8e965115
s/PASSTHROUGH/BYTECODE that I missed.
Ryan C. Gordon <icculus@icculus.org>
parents:
470
diff
changeset
|
131 |
#define SUPPORT_PROFILE_BYTECODE 1 |
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
132 |
#endif |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
133 |
|
1255
0135d797e287
Implement HLSL emitter, MOJOSHADER_d3d11 API
Caleb Cornett <caleb.cornett@outlook.com>
parents:
1242
diff
changeset
|
134 |
#ifndef SUPPORT_PROFILE_HLSL |
0135d797e287
Implement HLSL emitter, MOJOSHADER_d3d11 API
Caleb Cornett <caleb.cornett@outlook.com>
parents:
1242
diff
changeset
|
135 |
#define SUPPORT_PROFILE_HLSL 1 |
0135d797e287
Implement HLSL emitter, MOJOSHADER_d3d11 API
Caleb Cornett <caleb.cornett@outlook.com>
parents:
1242
diff
changeset
|
136 |
#endif |
0135d797e287
Implement HLSL emitter, MOJOSHADER_d3d11 API
Caleb Cornett <caleb.cornett@outlook.com>
parents:
1242
diff
changeset
|
137 |
|
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
138 |
#ifndef SUPPORT_PROFILE_GLSL |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
139 |
#define SUPPORT_PROFILE_GLSL 1 |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
140 |
#endif |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
141 |
|
808
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
142 |
#ifndef SUPPORT_PROFILE_GLSL120 |
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
143 |
#define SUPPORT_PROFILE_GLSL120 1 |
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
144 |
#endif |
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
145 |
|
1150
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
146 |
#ifndef SUPPORT_PROFILE_GLSLES |
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
147 |
#define SUPPORT_PROFILE_GLSLES 1 |
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
148 |
#endif |
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
149 |
|
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
150 |
#ifndef SUPPORT_PROFILE_ARB1 |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
151 |
#define SUPPORT_PROFILE_ARB1 1 |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
152 |
#endif |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
153 |
|
808
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
154 |
#ifndef SUPPORT_PROFILE_ARB1_NV |
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
155 |
#define SUPPORT_PROFILE_ARB1_NV 1 |
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
156 |
#endif |
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
157 |
|
1156
6e760a19f456
Added support for producing shader language source code for Apple's Metal API.
Ryan C. Gordon <icculus@icculus.org>
parents:
1150
diff
changeset
|
158 |
#ifndef SUPPORT_PROFILE_METAL |
6e760a19f456
Added support for producing shader language source code for Apple's Metal API.
Ryan C. Gordon <icculus@icculus.org>
parents:
1150
diff
changeset
|
159 |
#define SUPPORT_PROFILE_METAL 1 |
6e760a19f456
Added support for producing shader language source code for Apple's Metal API.
Ryan C. Gordon <icculus@icculus.org>
parents:
1150
diff
changeset
|
160 |
#endif |
6e760a19f456
Added support for producing shader language source code for Apple's Metal API.
Ryan C. Gordon <icculus@icculus.org>
parents:
1150
diff
changeset
|
161 |
|
1224
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
162 |
#ifndef SUPPORT_PROFILE_SPIRV |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
163 |
#define SUPPORT_PROFILE_SPIRV 1 |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
164 |
#endif |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
165 |
|
1225
50b8dd7e0b1a
Add GLSPIRV profile, to allow for both GL- and VK-friendly SPIR-V output
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1224
diff
changeset
|
166 |
#ifndef SUPPORT_PROFILE_GLSPIRV |
50b8dd7e0b1a
Add GLSPIRV profile, to allow for both GL- and VK-friendly SPIR-V output
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1224
diff
changeset
|
167 |
#define SUPPORT_PROFILE_GLSPIRV 1 |
50b8dd7e0b1a
Add GLSPIRV profile, to allow for both GL- and VK-friendly SPIR-V output
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1224
diff
changeset
|
168 |
#endif |
50b8dd7e0b1a
Add GLSPIRV profile, to allow for both GL- and VK-friendly SPIR-V output
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1224
diff
changeset
|
169 |
|
808
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
170 |
#if SUPPORT_PROFILE_ARB1_NV && !SUPPORT_PROFILE_ARB1 |
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
171 |
#error nv profiles require arb1 profile. Fix your build. |
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
172 |
#endif |
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
173 |
|
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
174 |
#if SUPPORT_PROFILE_GLSL120 && !SUPPORT_PROFILE_GLSL |
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
175 |
#error glsl120 profile requires glsl profile. Fix your build. |
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
176 |
#endif |
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
177 |
|
1150
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
178 |
#if SUPPORT_PROFILE_GLSLES && !SUPPORT_PROFILE_GLSL |
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
179 |
#error glsles profile requires glsl profile. Fix your build. |
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
180 |
#endif |
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
181 |
|
1225
50b8dd7e0b1a
Add GLSPIRV profile, to allow for both GL- and VK-friendly SPIR-V output
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1224
diff
changeset
|
182 |
#if SUPPORT_PROFILE_GLSPIRV && !SUPPORT_PROFILE_SPIRV |
50b8dd7e0b1a
Add GLSPIRV profile, to allow for both GL- and VK-friendly SPIR-V output
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1224
diff
changeset
|
183 |
#error glspirv profile requires spirv profile. Fix your build. |
50b8dd7e0b1a
Add GLSPIRV profile, to allow for both GL- and VK-friendly SPIR-V output
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1224
diff
changeset
|
184 |
#endif |
50b8dd7e0b1a
Add GLSPIRV profile, to allow for both GL- and VK-friendly SPIR-V output
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1224
diff
changeset
|
185 |
|
1142
7b554e065321
Allow multiline comments before preprocessor directives.
Ryan C. Gordon <icculus@icculus.org>
parents:
1121
diff
changeset
|
186 |
// Microsoft's preprocessor has some quirks. In some ways, it doesn't work |
7b554e065321
Allow multiline comments before preprocessor directives.
Ryan C. Gordon <icculus@icculus.org>
parents:
1121
diff
changeset
|
187 |
// like you'd expect a C preprocessor to function. |
7b554e065321
Allow multiline comments before preprocessor directives.
Ryan C. Gordon <icculus@icculus.org>
parents:
1121
diff
changeset
|
188 |
#ifndef MATCH_MICROSOFT_PREPROCESSOR |
7b554e065321
Allow multiline comments before preprocessor directives.
Ryan C. Gordon <icculus@icculus.org>
parents:
1121
diff
changeset
|
189 |
#define MATCH_MICROSOFT_PREPROCESSOR 1 |
7b554e065321
Allow multiline comments before preprocessor directives.
Ryan C. Gordon <icculus@icculus.org>
parents:
1121
diff
changeset
|
190 |
#endif |
808
b7196cc07283
Allow compiler to strip disabled glsl120 and nvX profiles as dead code.
Ryan C. Gordon <icculus@icculus.org>
parents:
800
diff
changeset
|
191 |
|
1038
9b23f9a8aa31
Allow preshader support to be #ifdef'd out, to reduce binary size.
Ryan C. Gordon <icculus@icculus.org>
parents:
1030
diff
changeset
|
192 |
// Other stuff you can disable... |
9b23f9a8aa31
Allow preshader support to be #ifdef'd out, to reduce binary size.
Ryan C. Gordon <icculus@icculus.org>
parents:
1030
diff
changeset
|
193 |
|
1150
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
194 |
#ifdef MOJOSHADER_EFFECT_SUPPORT |
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
195 |
void MOJOSHADER_runPreshader(const MOJOSHADER_preshader*, float*); |
1038
9b23f9a8aa31
Allow preshader support to be #ifdef'd out, to reduce binary size.
Ryan C. Gordon <icculus@icculus.org>
parents:
1030
diff
changeset
|
196 |
#endif |
9b23f9a8aa31
Allow preshader support to be #ifdef'd out, to reduce binary size.
Ryan C. Gordon <icculus@icculus.org>
parents:
1030
diff
changeset
|
197 |
|
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
198 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
199 |
// Get basic wankery out of the way here... |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
200 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
201 |
#ifdef _WINDOWS |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
202 |
#define ENDLINE_STR "\r\n" |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
203 |
#else |
700
2213a232d2fb
Removed a semicolon from a #define
Ryan C. Gordon <icculus@icculus.org>
parents:
690
diff
changeset
|
204 |
#define ENDLINE_STR "\n" |
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
205 |
#endif |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
206 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
207 |
typedef unsigned int uint; // this is a printf() helper. don't use for code. |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
208 |
|
1150
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
209 |
// Locale-independent float printing replacement for snprintf |
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
210 |
size_t MOJOSHADER_printFloat(char *text, size_t maxlen, float arg); |
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
211 |
|
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
212 |
#ifdef _MSC_VER |
1198
84ae1b18fdfe
VS2010 buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1192
diff
changeset
|
213 |
#include <float.h> |
84ae1b18fdfe
VS2010 buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1192
diff
changeset
|
214 |
#define isnan _isnan // !!! FIXME: not a safe replacement! |
1201
2ca303e50e27
Fixed macro clashing with crt function name in MSVC 2015 and newer.
Martin Krošlák <kroslakma@gmail.com>
parents:
1198
diff
changeset
|
215 |
#if _MSC_VER < 1900 // pre MSVC 2015 |
1234
608cef8fa24d
VS2010 buildfixes
Caleb Cornett <caleb.cornett@outlook.com>
parents:
1225
diff
changeset
|
216 |
#define isinf(x) (!_finite(x)) // FIXME: not a safe replacement! |
1201
2ca303e50e27
Fixed macro clashing with crt function name in MSVC 2015 and newer.
Martin Krošlák <kroslakma@gmail.com>
parents:
1198
diff
changeset
|
217 |
#endif |
1239
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
218 |
#define va_copy(a, b) a = b |
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
219 |
#endif |
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
220 |
|
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
221 |
#ifndef MOJOSHADER_USE_SDL_STDLIB |
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
222 |
#ifdef _MSC_VER |
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
223 |
#include <malloc.h> |
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
224 |
#define snprintf _snprintf // !!! FIXME: not a safe replacement! |
98ccda2125b1
VS2010 SDL_stdlib buildfixes
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1238
diff
changeset
|
225 |
#define vsnprintf _vsnprintf // !!! FIXME: not a safe replacement! |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
226 |
#define strcasecmp stricmp |
956
7888858a6777
Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents:
947
diff
changeset
|
227 |
#define strncasecmp strnicmp |
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
228 |
typedef unsigned __int8 uint8; |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
229 |
typedef unsigned __int16 uint16; |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
230 |
typedef unsigned __int32 uint32; |
811
307e3ab506fa
Start of experiment with a basic calculator.
Ryan C. Gordon <icculus@icculus.org>
parents:
808
diff
changeset
|
231 |
typedef unsigned __int64 uint64; |
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
232 |
typedef __int32 int32; |
811
307e3ab506fa
Start of experiment with a basic calculator.
Ryan C. Gordon <icculus@icculus.org>
parents:
808
diff
changeset
|
233 |
typedef __int64 int64; |
956
7888858a6777
Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents:
947
diff
changeset
|
234 |
#ifdef _WIN64 |
7888858a6777
Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents:
947
diff
changeset
|
235 |
typedef __int64 ssize_t; |
7888858a6777
Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents:
947
diff
changeset
|
236 |
#elif defined _WIN32 |
7888858a6777
Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents:
947
diff
changeset
|
237 |
typedef __int32 ssize_t; |
7888858a6777
Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents:
947
diff
changeset
|
238 |
#else |
7888858a6777
Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents:
947
diff
changeset
|
239 |
#error Please define your platform. |
7888858a6777
Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents:
947
diff
changeset
|
240 |
#endif |
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
241 |
// Warning Level 4 considered harmful. :) |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
242 |
#pragma warning(disable: 4100) // "unreferenced formal parameter" |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
243 |
#pragma warning(disable: 4389) // "signed/unsigned mismatch" |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
244 |
#else |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
245 |
#include <stdint.h> |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
246 |
typedef uint8_t uint8; |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
247 |
typedef uint16_t uint16; |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
248 |
typedef uint32_t uint32; |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
249 |
typedef int32_t int32; |
811
307e3ab506fa
Start of experiment with a basic calculator.
Ryan C. Gordon <icculus@icculus.org>
parents:
808
diff
changeset
|
250 |
typedef int64_t int64; |
307e3ab506fa
Start of experiment with a basic calculator.
Ryan C. Gordon <icculus@icculus.org>
parents:
808
diff
changeset
|
251 |
typedef uint64_t uint64; |
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
252 |
#endif |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
253 |
|
756
9e06e970a730
Need alloca.h on Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
755
diff
changeset
|
254 |
#ifdef sun |
9e06e970a730
Need alloca.h on Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
755
diff
changeset
|
255 |
#include <alloca.h> |
9e06e970a730
Need alloca.h on Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
755
diff
changeset
|
256 |
#endif |
1237
da180fe5b4b7
Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1236
diff
changeset
|
257 |
#endif /* MOJOSHADER_USE_SDL_STDLIB */ |
756
9e06e970a730
Need alloca.h on Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
755
diff
changeset
|
258 |
|
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
259 |
#ifdef __GNUC__ |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
260 |
#define ISPRINTF(x,y) __attribute__((format (printf, x, y))) |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
261 |
#else |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
262 |
#define ISPRINTF(x,y) |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
263 |
#endif |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
264 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
265 |
#define STATICARRAYLEN(x) ( (sizeof ((x))) / (sizeof ((x)[0])) ) |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
266 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
267 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
268 |
// Byteswap magic... |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
269 |
|
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
270 |
#if ((defined __GNUC__) && (defined __POWERPC__)) |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
271 |
static inline uint32 SWAP32(uint32 x) |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
272 |
{ |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
273 |
__asm__ __volatile__("lwbrx %0,0,%1" : "=r" (x) : "r" (&x)); |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
274 |
return x; |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
275 |
} // SWAP32 |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
276 |
static inline uint16 SWAP16(uint16 x) |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
277 |
{ |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
278 |
__asm__ __volatile__("lhbrx %0,0,%1" : "=r" (x) : "r" (&x)); |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
279 |
return x; |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
280 |
} // SWAP16 |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
281 |
#elif defined(__POWERPC__) |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
282 |
static inline uint32 SWAP32(uint32 x) |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
283 |
{ |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
284 |
return ( (((x) >> 24) & 0x000000FF) | (((x) >> 8) & 0x0000FF00) | |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
285 |
(((x) << 8) & 0x00FF0000) | (((x) << 24) & 0xFF000000) ); |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
286 |
} // SWAP32 |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
287 |
static inline uint16 SWAP16(uint16 x) |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
288 |
{ |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
289 |
return ( (((x) >> 8) & 0x00FF) | (((x) << 8) & 0xFF00) ); |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
290 |
} // SWAP16 |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
291 |
#else |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
292 |
# define SWAP16(x) (x) |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
293 |
# define SWAP32(x) (x) |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
294 |
#endif |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
295 |
|
1030
a407c516e325
Initial work on preshader support.
Ryan C. Gordon <icculus@icculus.org>
parents:
965
diff
changeset
|
296 |
#define SWAPDBL(x) (x) // !!! FIXME |
a407c516e325
Initial work on preshader support.
Ryan C. Gordon <icculus@icculus.org>
parents:
965
diff
changeset
|
297 |
|
606
63e7a66ac320
Added support for #error directive to the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
603
diff
changeset
|
298 |
static inline int Min(const int a, const int b) |
63e7a66ac320
Added support for #error directive to the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
603
diff
changeset
|
299 |
{ |
63e7a66ac320
Added support for #error directive to the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
603
diff
changeset
|
300 |
return ((a < b) ? a : b); |
63e7a66ac320
Added support for #error directive to the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
603
diff
changeset
|
301 |
} // Min |
63e7a66ac320
Added support for #error directive to the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
603
diff
changeset
|
302 |
|
732
e070fea1f8c7
Added mojoshader_common.c with first shot at generic hashtable.
Ryan C. Gordon <icculus@icculus.org>
parents:
716
diff
changeset
|
303 |
|
e070fea1f8c7
Added mojoshader_common.c with first shot at generic hashtable.
Ryan C. Gordon <icculus@icculus.org>
parents:
716
diff
changeset
|
304 |
// Hashtables... |
e070fea1f8c7
Added mojoshader_common.c with first shot at generic hashtable.
Ryan C. Gordon <icculus@icculus.org>
parents:
716
diff
changeset
|
305 |
|
e070fea1f8c7
Added mojoshader_common.c with first shot at generic hashtable.
Ryan C. Gordon <icculus@icculus.org>
parents:
716
diff
changeset
|
306 |
typedef struct HashTable HashTable; |
859
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
307 |
typedef uint32 (*HashTable_HashFn)(const void *key, void *data); |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
308 |
typedef int (*HashTable_KeyMatchFn)(const void *a, const void *b, void *data); |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
309 |
typedef void (*HashTable_NukeFn)(const void *key, const void *value, void *data); |
732
e070fea1f8c7
Added mojoshader_common.c with first shot at generic hashtable.
Ryan C. Gordon <icculus@icculus.org>
parents:
716
diff
changeset
|
310 |
|
859
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
311 |
HashTable *hash_create(void *data, const HashTable_HashFn hashfn, |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
312 |
const HashTable_KeyMatchFn keymatchfn, |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
313 |
const HashTable_NukeFn nukefn, |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
314 |
const int stackable, |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
315 |
MOJOSHADER_malloc m, MOJOSHADER_free f, void *d); |
733
1b6d68fabe46
Reworked hashtable create/destroy functions.
Ryan C. Gordon <icculus@icculus.org>
parents:
732
diff
changeset
|
316 |
void hash_destroy(HashTable *table); |
732
e070fea1f8c7
Added mojoshader_common.c with first shot at generic hashtable.
Ryan C. Gordon <icculus@icculus.org>
parents:
716
diff
changeset
|
317 |
int hash_insert(HashTable *table, const void *key, const void *value); |
e070fea1f8c7
Added mojoshader_common.c with first shot at generic hashtable.
Ryan C. Gordon <icculus@icculus.org>
parents:
716
diff
changeset
|
318 |
int hash_remove(HashTable *table, const void *key); |
e070fea1f8c7
Added mojoshader_common.c with first shot at generic hashtable.
Ryan C. Gordon <icculus@icculus.org>
parents:
716
diff
changeset
|
319 |
int hash_find(const HashTable *table, const void *key, const void **_value); |
965
6284deccb61e
Added hash_iter() function, for iterating all matching entries in a hashtable.
Ryan C. Gordon <icculus@icculus.org>
parents:
956
diff
changeset
|
320 |
int hash_iter(const HashTable *table, const void *key, const void **_value, void **iter); |
1065
bb021d539ec5
Implemented hash_iter_keys().
Ryan C. Gordon <icculus@icculus.org>
parents:
1054
diff
changeset
|
321 |
int hash_iter_keys(const HashTable *table, const void **_key, void **iter); |
732
e070fea1f8c7
Added mojoshader_common.c with first shot at generic hashtable.
Ryan C. Gordon <icculus@icculus.org>
parents:
716
diff
changeset
|
322 |
|
859
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
323 |
uint32 hash_hash_string(const void *sym, void *unused); |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
324 |
int hash_keymatch_string(const void *a, const void *b, void *unused); |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
325 |
|
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
326 |
|
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
327 |
// String -> String map ... |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
328 |
typedef HashTable StringMap; |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
329 |
StringMap *stringmap_create(const int copy, MOJOSHADER_malloc m, |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
330 |
MOJOSHADER_free f, void *d); |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
331 |
void stringmap_destroy(StringMap *smap); |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
332 |
int stringmap_insert(StringMap *smap, const char *key, const char *value); |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
333 |
int stringmap_remove(StringMap *smap, const char *key); |
824d67791db0
Implemented StringMap, for future use.
Ryan C. Gordon <icculus@icculus.org>
parents:
858
diff
changeset
|
334 |
int stringmap_find(const StringMap *smap, const char *key, const char **_val); |
732
e070fea1f8c7
Added mojoshader_common.c with first shot at generic hashtable.
Ryan C. Gordon <icculus@icculus.org>
parents:
716
diff
changeset
|
335 |
|
858
d51537335896
Formalized the compiler's string cache into a real API.
Ryan C. Gordon <icculus@icculus.org>
parents:
811
diff
changeset
|
336 |
|
d51537335896
Formalized the compiler's string cache into a real API.
Ryan C. Gordon <icculus@icculus.org>
parents:
811
diff
changeset
|
337 |
// String caching... |
d51537335896
Formalized the compiler's string cache into a real API.
Ryan C. Gordon <icculus@icculus.org>
parents:
811
diff
changeset
|
338 |
|
d51537335896
Formalized the compiler's string cache into a real API.
Ryan C. Gordon <icculus@icculus.org>
parents:
811
diff
changeset
|
339 |
typedef struct StringCache StringCache; |
d51537335896
Formalized the compiler's string cache into a real API.
Ryan C. Gordon <icculus@icculus.org>
parents:
811
diff
changeset
|
340 |
StringCache *stringcache_create(MOJOSHADER_malloc m,MOJOSHADER_free f,void *d); |
d51537335896
Formalized the compiler's string cache into a real API.
Ryan C. Gordon <icculus@icculus.org>
parents:
811
diff
changeset
|
341 |
const char *stringcache(StringCache *cache, const char *str); |
d51537335896
Formalized the compiler's string cache into a real API.
Ryan C. Gordon <icculus@icculus.org>
parents:
811
diff
changeset
|
342 |
const char *stringcache_len(StringCache *cache, const char *str, |
d51537335896
Formalized the compiler's string cache into a real API.
Ryan C. Gordon <icculus@icculus.org>
parents:
811
diff
changeset
|
343 |
const unsigned int len); |
d51537335896
Formalized the compiler's string cache into a real API.
Ryan C. Gordon <icculus@icculus.org>
parents:
811
diff
changeset
|
344 |
const char *stringcache_fmt(StringCache *cache, const char *fmt, ...); |
1116
0ef3d106dab9
Added stringcache_iscached().
Ryan C. Gordon <icculus@icculus.org>
parents:
1099
diff
changeset
|
345 |
int stringcache_iscached(StringCache *cache, const char *str); |
858
d51537335896
Formalized the compiler's string cache into a real API.
Ryan C. Gordon <icculus@icculus.org>
parents:
811
diff
changeset
|
346 |
void stringcache_destroy(StringCache *cache); |
d51537335896
Formalized the compiler's string cache into a real API.
Ryan C. Gordon <icculus@icculus.org>
parents:
811
diff
changeset
|
347 |
|
d51537335896
Formalized the compiler's string cache into a real API.
Ryan C. Gordon <icculus@icculus.org>
parents:
811
diff
changeset
|
348 |
|
945
f00ea3986db8
Made ErrorList struct opaque to callers.
Ryan C. Gordon <icculus@icculus.org>
parents:
944
diff
changeset
|
349 |
// Error lists... |
939
64cc93ee5a56
Cut-and-paste cleanup: unified the ErrorList functionality.
Ryan C. Gordon <icculus@icculus.org>
parents:
910
diff
changeset
|
350 |
|
945
f00ea3986db8
Made ErrorList struct opaque to callers.
Ryan C. Gordon <icculus@icculus.org>
parents:
944
diff
changeset
|
351 |
typedef struct ErrorList ErrorList; |
939
64cc93ee5a56
Cut-and-paste cleanup: unified the ErrorList functionality.
Ryan C. Gordon <icculus@icculus.org>
parents:
910
diff
changeset
|
352 |
ErrorList *errorlist_create(MOJOSHADER_malloc m, MOJOSHADER_free f, void *d); |
64cc93ee5a56
Cut-and-paste cleanup: unified the ErrorList functionality.
Ryan C. Gordon <icculus@icculus.org>
parents:
910
diff
changeset
|
353 |
int errorlist_add(ErrorList *list, const char *fname, |
64cc93ee5a56
Cut-and-paste cleanup: unified the ErrorList functionality.
Ryan C. Gordon <icculus@icculus.org>
parents:
910
diff
changeset
|
354 |
const int errpos, const char *str); |
64cc93ee5a56
Cut-and-paste cleanup: unified the ErrorList functionality.
Ryan C. Gordon <icculus@icculus.org>
parents:
910
diff
changeset
|
355 |
int errorlist_add_fmt(ErrorList *list, const char *fname, |
64cc93ee5a56
Cut-and-paste cleanup: unified the ErrorList functionality.
Ryan C. Gordon <icculus@icculus.org>
parents:
910
diff
changeset
|
356 |
const int errpos, const char *fmt, ...) ISPRINTF(4,5); |
64cc93ee5a56
Cut-and-paste cleanup: unified the ErrorList functionality.
Ryan C. Gordon <icculus@icculus.org>
parents:
910
diff
changeset
|
357 |
int errorlist_add_va(ErrorList *list, const char *_fname, |
64cc93ee5a56
Cut-and-paste cleanup: unified the ErrorList functionality.
Ryan C. Gordon <icculus@icculus.org>
parents:
910
diff
changeset
|
358 |
const int errpos, const char *fmt, va_list va); |
945
f00ea3986db8
Made ErrorList struct opaque to callers.
Ryan C. Gordon <icculus@icculus.org>
parents:
944
diff
changeset
|
359 |
int errorlist_count(ErrorList *list); |
939
64cc93ee5a56
Cut-and-paste cleanup: unified the ErrorList functionality.
Ryan C. Gordon <icculus@icculus.org>
parents:
910
diff
changeset
|
360 |
MOJOSHADER_error *errorlist_flatten(ErrorList *list); // resets the list! |
64cc93ee5a56
Cut-and-paste cleanup: unified the ErrorList functionality.
Ryan C. Gordon <icculus@icculus.org>
parents:
910
diff
changeset
|
361 |
void errorlist_destroy(ErrorList *list); |
64cc93ee5a56
Cut-and-paste cleanup: unified the ErrorList functionality.
Ryan C. Gordon <icculus@icculus.org>
parents:
910
diff
changeset
|
362 |
|
64cc93ee5a56
Cut-and-paste cleanup: unified the ErrorList functionality.
Ryan C. Gordon <icculus@icculus.org>
parents:
910
diff
changeset
|
363 |
|
944
9f9fa9650772
Paying off more technical debt: unified growable buffers into one place.
Ryan C. Gordon <icculus@icculus.org>
parents:
939
diff
changeset
|
364 |
|
9f9fa9650772
Paying off more technical debt: unified growable buffers into one place.
Ryan C. Gordon <icculus@icculus.org>
parents:
939
diff
changeset
|
365 |
// Dynamic buffers... |
9f9fa9650772
Paying off more technical debt: unified growable buffers into one place.
Ryan C. Gordon <icculus@icculus.org>
parents:
939
diff
changeset
|
366 |
|
1236
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
367 |
typedef struct BufferBlock |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
368 |
{ |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
369 |
uint8 *data; |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
370 |
size_t bytes; |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
371 |
struct BufferBlock *next; |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
372 |
} BufferBlock; |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
373 |
typedef struct Buffer |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
374 |
{ |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
375 |
size_t total_bytes; |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
376 |
BufferBlock *head; |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
377 |
BufferBlock *tail; |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
378 |
size_t block_size; |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
379 |
MOJOSHADER_malloc m; |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
380 |
MOJOSHADER_free f; |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
381 |
void *d; |
e2b62a9dde46
Move buffer_find to assembler.c, it isn't actually common
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1234
diff
changeset
|
382 |
} Buffer; |
944
9f9fa9650772
Paying off more technical debt: unified growable buffers into one place.
Ryan C. Gordon <icculus@icculus.org>
parents:
939
diff
changeset
|
383 |
Buffer *buffer_create(size_t blksz,MOJOSHADER_malloc m,MOJOSHADER_free f,void *d); |
956
7888858a6777
Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents:
947
diff
changeset
|
384 |
char *buffer_reserve(Buffer *buffer, const size_t len); |
946
16fec3a3f687
Technical debt: cleaned up things in the assembler that should've used Buffer.
Ryan C. Gordon <icculus@icculus.org>
parents:
945
diff
changeset
|
385 |
int buffer_append(Buffer *buffer, const void *_data, size_t len); |
944
9f9fa9650772
Paying off more technical debt: unified growable buffers into one place.
Ryan C. Gordon <icculus@icculus.org>
parents:
939
diff
changeset
|
386 |
int buffer_append_fmt(Buffer *buffer, const char *fmt, ...) ISPRINTF(2,3); |
9f9fa9650772
Paying off more technical debt: unified growable buffers into one place.
Ryan C. Gordon <icculus@icculus.org>
parents:
939
diff
changeset
|
387 |
int buffer_append_va(Buffer *buffer, const char *fmt, va_list va); |
9f9fa9650772
Paying off more technical debt: unified growable buffers into one place.
Ryan C. Gordon <icculus@icculus.org>
parents:
939
diff
changeset
|
388 |
size_t buffer_size(Buffer *buffer); |
9f9fa9650772
Paying off more technical debt: unified growable buffers into one place.
Ryan C. Gordon <icculus@icculus.org>
parents:
939
diff
changeset
|
389 |
void buffer_empty(Buffer *buffer); |
956
7888858a6777
Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents:
947
diff
changeset
|
390 |
char *buffer_flatten(Buffer *buffer); |
7888858a6777
Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents:
947
diff
changeset
|
391 |
char *buffer_merge(Buffer **buffers, const size_t n, size_t *_len); |
944
9f9fa9650772
Paying off more technical debt: unified growable buffers into one place.
Ryan C. Gordon <icculus@icculus.org>
parents:
939
diff
changeset
|
392 |
void buffer_destroy(Buffer *buffer); |
1224
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
393 |
void buffer_patch(Buffer *buffer, const size_t start, |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
394 |
const void *data, const size_t len); |
944
9f9fa9650772
Paying off more technical debt: unified growable buffers into one place.
Ryan C. Gordon <icculus@icculus.org>
parents:
939
diff
changeset
|
395 |
|
9f9fa9650772
Paying off more technical debt: unified growable buffers into one place.
Ryan C. Gordon <icculus@icculus.org>
parents:
939
diff
changeset
|
396 |
|
9f9fa9650772
Paying off more technical debt: unified growable buffers into one place.
Ryan C. Gordon <icculus@icculus.org>
parents:
939
diff
changeset
|
397 |
|
524
03eea2f0762c
First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents:
523
diff
changeset
|
398 |
// This is the ID for a D3DXSHADER_CONSTANTTABLE in the bytecode comments. |
03eea2f0762c
First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents:
523
diff
changeset
|
399 |
#define CTAB_ID 0x42415443 // 0x42415443 == 'CTAB' |
03eea2f0762c
First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents:
523
diff
changeset
|
400 |
#define CTAB_SIZE 28 // sizeof (D3DXSHADER_CONSTANTTABLE). |
03eea2f0762c
First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents:
523
diff
changeset
|
401 |
#define CINFO_SIZE 20 // sizeof (D3DXSHADER_CONSTANTINFO). |
03eea2f0762c
First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents:
523
diff
changeset
|
402 |
#define CTYPEINFO_SIZE 16 // sizeof (D3DXSHADER_TYPEINFO). |
03eea2f0762c
First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents:
523
diff
changeset
|
403 |
#define CMEMBERINFO_SIZE 8 // sizeof (D3DXSHADER_STRUCTMEMBERINFO) |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
404 |
|
1030
a407c516e325
Initial work on preshader support.
Ryan C. Gordon <icculus@icculus.org>
parents:
965
diff
changeset
|
405 |
// Preshader magic values... |
a407c516e325
Initial work on preshader support.
Ryan C. Gordon <icculus@icculus.org>
parents:
965
diff
changeset
|
406 |
#define PRES_ID 0x53455250 // 0x53455250 == 'PRES' |
a407c516e325
Initial work on preshader support.
Ryan C. Gordon <icculus@icculus.org>
parents:
965
diff
changeset
|
407 |
#define PRSI_ID 0x49535250 // 0x49535250 == 'PRSI' |
a407c516e325
Initial work on preshader support.
Ryan C. Gordon <icculus@icculus.org>
parents:
965
diff
changeset
|
408 |
#define CLIT_ID 0x54494C43 // 0x54494C43 == 'CLIT' |
a407c516e325
Initial work on preshader support.
Ryan C. Gordon <icculus@icculus.org>
parents:
965
diff
changeset
|
409 |
#define FXLC_ID 0x434C5846 // 0x434C5846 == 'FXLC' |
a407c516e325
Initial work on preshader support.
Ryan C. Gordon <icculus@icculus.org>
parents:
965
diff
changeset
|
410 |
|
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
411 |
// we need to reference these by explicit value occasionally... |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
412 |
#define OPCODE_RET 28 |
562
c9a2bc5129c9
First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents:
557
diff
changeset
|
413 |
#define OPCODE_IF 40 |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
414 |
#define OPCODE_IFC 41 |
562
c9a2bc5129c9
First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents:
557
diff
changeset
|
415 |
#define OPCODE_BREAK 44 |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
416 |
#define OPCODE_BREAKC 45 |
562
c9a2bc5129c9
First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents:
557
diff
changeset
|
417 |
#define OPCODE_TEXLD 66 |
c9a2bc5129c9
First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents:
557
diff
changeset
|
418 |
#define OPCODE_SETP 94 |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
419 |
|
519
c9b27381c971
Added TEXLDP/TEXLDP support to the assembler, cleaned up constants.
Ryan C. Gordon <icculus@icculus.org>
parents:
493
diff
changeset
|
420 |
// TEXLD becomes a different instruction with these instruction controls. |
c9b27381c971
Added TEXLDP/TEXLDP support to the assembler, cleaned up constants.
Ryan C. Gordon <icculus@icculus.org>
parents:
493
diff
changeset
|
421 |
#define CONTROL_TEXLD 0 |
c9b27381c971
Added TEXLDP/TEXLDP support to the assembler, cleaned up constants.
Ryan C. Gordon <icculus@icculus.org>
parents:
493
diff
changeset
|
422 |
#define CONTROL_TEXLDP 1 |
c9b27381c971
Added TEXLDP/TEXLDP support to the assembler, cleaned up constants.
Ryan C. Gordon <icculus@icculus.org>
parents:
493
diff
changeset
|
423 |
#define CONTROL_TEXLDB 2 |
c9b27381c971
Added TEXLDP/TEXLDP support to the assembler, cleaned up constants.
Ryan C. Gordon <icculus@icculus.org>
parents:
493
diff
changeset
|
424 |
|
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
425 |
// #define this to force app to supply an allocator, so there's no reference |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
426 |
// to the C runtime's malloc() and free()... |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
427 |
#if MOJOSHADER_FORCE_ALLOCATOR |
553
288ed486e5c3
Renamed internal_malloc() and internal_free().
Ryan C. Gordon <icculus@icculus.org>
parents:
551
diff
changeset
|
428 |
#define MOJOSHADER_internal_malloc NULL |
288ed486e5c3
Renamed internal_malloc() and internal_free().
Ryan C. Gordon <icculus@icculus.org>
parents:
551
diff
changeset
|
429 |
#define MOJOSHADER_internal_free NULL |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
430 |
#else |
1150
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
431 |
void * MOJOSHADERCALL MOJOSHADER_internal_malloc(int bytes, void *d); |
02c0f0afb39a
- Add ability to build MojoShader as a shared library
Ethan Lee <flibitijibibo@flibitijibibo.com>
parents:
1142
diff
changeset
|
432 |
void MOJOSHADERCALL MOJOSHADER_internal_free(void *ptr, void *d); |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
433 |
#endif |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
434 |
|
611
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
435 |
#if MOJOSHADER_FORCE_INCLUDE_CALLBACKS |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
436 |
#define MOJOSHADER_internal_include_open NULL |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
437 |
#define MOJOSHADER_internal_include_close NULL |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
438 |
#else |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
439 |
int MOJOSHADER_internal_include_open(MOJOSHADER_includeType inctype, |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
440 |
const char *fname, const char *parent, |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
441 |
const char **outdata, |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
442 |
unsigned int *outbytes, |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
443 |
MOJOSHADER_malloc m, MOJOSHADER_free f, |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
444 |
void *d); |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
445 |
|
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
446 |
void MOJOSHADER_internal_include_close(const char *data, MOJOSHADER_malloc m, |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
447 |
MOJOSHADER_free f, void *d); |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
448 |
#endif |
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
449 |
|
8c2ee1a97ee1
Implemented #include in the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
606
diff
changeset
|
450 |
|
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
451 |
// result modifiers. |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
452 |
// !!! FIXME: why isn't this an enum? |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
453 |
#define MOD_SATURATE 0x01 |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
454 |
#define MOD_PP 0x02 |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
455 |
#define MOD_CENTROID 0x04 |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
456 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
457 |
typedef enum |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
458 |
{ |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
459 |
REG_TYPE_TEMP = 0, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
460 |
REG_TYPE_INPUT = 1, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
461 |
REG_TYPE_CONST = 2, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
462 |
REG_TYPE_ADDRESS = 3, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
463 |
REG_TYPE_TEXTURE = 3, // ALSO 3! |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
464 |
REG_TYPE_RASTOUT = 4, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
465 |
REG_TYPE_ATTROUT = 5, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
466 |
REG_TYPE_TEXCRDOUT = 6, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
467 |
REG_TYPE_OUTPUT = 6, // ALSO 6! |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
468 |
REG_TYPE_CONSTINT = 7, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
469 |
REG_TYPE_COLOROUT = 8, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
470 |
REG_TYPE_DEPTHOUT = 9, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
471 |
REG_TYPE_SAMPLER = 10, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
472 |
REG_TYPE_CONST2 = 11, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
473 |
REG_TYPE_CONST3 = 12, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
474 |
REG_TYPE_CONST4 = 13, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
475 |
REG_TYPE_CONSTBOOL = 14, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
476 |
REG_TYPE_LOOP = 15, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
477 |
REG_TYPE_TEMPFLOAT16 = 16, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
478 |
REG_TYPE_MISCTYPE = 17, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
479 |
REG_TYPE_LABEL = 18, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
480 |
REG_TYPE_PREDICATE = 19, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
481 |
REG_TYPE_MAX = 19 |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
482 |
} RegisterType; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
483 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
484 |
typedef enum |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
485 |
{ |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
486 |
TEXTURE_TYPE_2D = 2, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
487 |
TEXTURE_TYPE_CUBE = 3, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
488 |
TEXTURE_TYPE_VOLUME = 4, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
489 |
} TextureType; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
490 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
491 |
typedef enum |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
492 |
{ |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
493 |
RASTOUT_TYPE_POSITION = 0, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
494 |
RASTOUT_TYPE_FOG = 1, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
495 |
RASTOUT_TYPE_POINT_SIZE = 2, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
496 |
RASTOUT_TYPE_MAX = 2 |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
497 |
} RastOutType; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
498 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
499 |
typedef enum |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
500 |
{ |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
501 |
MISCTYPE_TYPE_POSITION = 0, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
502 |
MISCTYPE_TYPE_FACE = 1, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
503 |
MISCTYPE_TYPE_MAX = 1 |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
504 |
} MiscTypeType; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
505 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
506 |
// source modifiers. |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
507 |
typedef enum |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
508 |
{ |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
509 |
SRCMOD_NONE, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
510 |
SRCMOD_NEGATE, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
511 |
SRCMOD_BIAS, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
512 |
SRCMOD_BIASNEGATE, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
513 |
SRCMOD_SIGN, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
514 |
SRCMOD_SIGNNEGATE, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
515 |
SRCMOD_COMPLEMENT, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
516 |
SRCMOD_X2, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
517 |
SRCMOD_X2NEGATE, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
518 |
SRCMOD_DZ, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
519 |
SRCMOD_DW, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
520 |
SRCMOD_ABS, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
521 |
SRCMOD_ABSNEGATE, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
522 |
SRCMOD_NOT, |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
523 |
SRCMOD_TOTAL |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
524 |
} SourceMod; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
525 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
526 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
527 |
typedef struct |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
528 |
{ |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
529 |
const uint32 *token; // this is the unmolested token in the stream. |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
530 |
int regnum; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
531 |
int relative; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
532 |
int writemask; // xyzw or rgba (all four, not split out). |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
533 |
int writemask0; // x or red |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
534 |
int writemask1; // y or green |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
535 |
int writemask2; // z or blue |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
536 |
int writemask3; // w or alpha |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
537 |
int orig_writemask; // writemask before mojoshader tweaks it. |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
538 |
int result_mod; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
539 |
int result_shift; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
540 |
RegisterType regtype; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
541 |
} DestArgInfo; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
542 |
|
1075
61e5b2764ec8
Flag more registers as scalar. Fixes use of dcl_fog, oPts and oFog registers.
Ryan C. Gordon <icculus@icculus.org>
parents:
1065
diff
changeset
|
543 |
// NOTE: This will NOT know a dcl_psize or dcl_fog output register should be |
61e5b2764ec8
Flag more registers as scalar. Fixes use of dcl_fog, oPts and oFog registers.
Ryan C. Gordon <icculus@icculus.org>
parents:
1065
diff
changeset
|
544 |
// scalar! This function doesn't have access to that information. |
491
bcc3c215807a
Fixed wrong data from scalar_register().
Ryan C. Gordon <icculus@icculus.org>
parents:
484
diff
changeset
|
545 |
static inline int scalar_register(const MOJOSHADER_shaderType shader_type, |
bcc3c215807a
Fixed wrong data from scalar_register().
Ryan C. Gordon <icculus@icculus.org>
parents:
484
diff
changeset
|
546 |
const RegisterType regtype, const int regnum) |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
547 |
{ |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
548 |
switch (regtype) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
549 |
{ |
1075
61e5b2764ec8
Flag more registers as scalar. Fixes use of dcl_fog, oPts and oFog registers.
Ryan C. Gordon <icculus@icculus.org>
parents:
1065
diff
changeset
|
550 |
case REG_TYPE_RASTOUT: |
61e5b2764ec8
Flag more registers as scalar. Fixes use of dcl_fog, oPts and oFog registers.
Ryan C. Gordon <icculus@icculus.org>
parents:
1065
diff
changeset
|
551 |
if (((const RastOutType) regnum) == RASTOUT_TYPE_FOG) |
61e5b2764ec8
Flag more registers as scalar. Fixes use of dcl_fog, oPts and oFog registers.
Ryan C. Gordon <icculus@icculus.org>
parents:
1065
diff
changeset
|
552 |
return 1; |
61e5b2764ec8
Flag more registers as scalar. Fixes use of dcl_fog, oPts and oFog registers.
Ryan C. Gordon <icculus@icculus.org>
parents:
1065
diff
changeset
|
553 |
else if (((const RastOutType) regnum) == RASTOUT_TYPE_POINT_SIZE) |
61e5b2764ec8
Flag more registers as scalar. Fixes use of dcl_fog, oPts and oFog registers.
Ryan C. Gordon <icculus@icculus.org>
parents:
1065
diff
changeset
|
554 |
return 1; |
61e5b2764ec8
Flag more registers as scalar. Fixes use of dcl_fog, oPts and oFog registers.
Ryan C. Gordon <icculus@icculus.org>
parents:
1065
diff
changeset
|
555 |
return 0; |
61e5b2764ec8
Flag more registers as scalar. Fixes use of dcl_fog, oPts and oFog registers.
Ryan C. Gordon <icculus@icculus.org>
parents:
1065
diff
changeset
|
556 |
|
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
557 |
case REG_TYPE_DEPTHOUT: |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
558 |
case REG_TYPE_CONSTBOOL: |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
559 |
case REG_TYPE_LOOP: |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
560 |
return 1; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
561 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
562 |
case REG_TYPE_MISCTYPE: |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
563 |
if ( ((const MiscTypeType) regnum) == MISCTYPE_TYPE_FACE ) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
564 |
return 1; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
565 |
return 0; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
566 |
|
491
bcc3c215807a
Fixed wrong data from scalar_register().
Ryan C. Gordon <icculus@icculus.org>
parents:
484
diff
changeset
|
567 |
case REG_TYPE_PREDICATE: |
bcc3c215807a
Fixed wrong data from scalar_register().
Ryan C. Gordon <icculus@icculus.org>
parents:
484
diff
changeset
|
568 |
return (shader_type == MOJOSHADER_TYPE_PIXEL) ? 1 : 0; |
bcc3c215807a
Fixed wrong data from scalar_register().
Ryan C. Gordon <icculus@icculus.org>
parents:
484
diff
changeset
|
569 |
|
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
570 |
default: break; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
571 |
} // switch |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
572 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
573 |
return 0; |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
574 |
} // scalar_register |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
575 |
|
523
699696afd731
Allow errors to specify post-processing problems.
Ryan C. Gordon <icculus@icculus.org>
parents:
520
diff
changeset
|
576 |
|
551
217200672d64
Make sure internal symbols aren't polluting namespace.
Ryan C. Gordon <icculus@icculus.org>
parents:
542
diff
changeset
|
577 |
extern MOJOSHADER_error MOJOSHADER_out_of_mem_error; |
217200672d64
Make sure internal symbols aren't polluting namespace.
Ryan C. Gordon <icculus@icculus.org>
parents:
542
diff
changeset
|
578 |
extern MOJOSHADER_parseData MOJOSHADER_out_of_mem_data; |
542
a56d3bfd2e36
More work on multiple error messages.
Ryan C. Gordon <icculus@icculus.org>
parents:
524
diff
changeset
|
579 |
|
a56d3bfd2e36
More work on multiple error messages.
Ryan C. Gordon <icculus@icculus.org>
parents:
524
diff
changeset
|
580 |
|
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
581 |
// preprocessor stuff. |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
582 |
|
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
583 |
typedef enum |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
584 |
{ |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
585 |
TOKEN_UNKNOWN = 256, // start past ASCII character values. |
601
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
586 |
|
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
587 |
// These are all C-like constructs. Tokens < 256 may be single |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
588 |
// chars (like '+' or whatever). These are just multi-char sequences |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
589 |
// (like "+=" or whatever). |
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
590 |
TOKEN_IDENTIFIER, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
591 |
TOKEN_INT_LITERAL, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
592 |
TOKEN_FLOAT_LITERAL, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
593 |
TOKEN_STRING_LITERAL, |
584
9aea8877564d
Updated lexer for HLSL.
Ryan C. Gordon <icculus@icculus.org>
parents:
564
diff
changeset
|
594 |
TOKEN_RSHIFTASSIGN, |
9aea8877564d
Updated lexer for HLSL.
Ryan C. Gordon <icculus@icculus.org>
parents:
564
diff
changeset
|
595 |
TOKEN_LSHIFTASSIGN, |
9aea8877564d
Updated lexer for HLSL.
Ryan C. Gordon <icculus@icculus.org>
parents:
564
diff
changeset
|
596 |
TOKEN_ADDASSIGN, |
9aea8877564d
Updated lexer for HLSL.
Ryan C. Gordon <icculus@icculus.org>
parents:
564
diff
changeset
|
597 |
TOKEN_SUBASSIGN, |
9aea8877564d
Updated lexer for HLSL.
Ryan C. Gordon <icculus@icculus.org>
parents:
564
diff
changeset
|
598 |
TOKEN_MULTASSIGN, |
9aea8877564d
Updated lexer for HLSL.
Ryan C. Gordon <icculus@icculus.org>
parents:
564
diff
changeset
|
599 |
TOKEN_DIVASSIGN, |
9aea8877564d
Updated lexer for HLSL.
Ryan C. Gordon <icculus@icculus.org>
parents:
564
diff
changeset
|
600 |
TOKEN_MODASSIGN, |
9aea8877564d
Updated lexer for HLSL.
Ryan C. Gordon <icculus@icculus.org>
parents:
564
diff
changeset
|
601 |
TOKEN_XORASSIGN, |
9aea8877564d
Updated lexer for HLSL.
Ryan C. Gordon <icculus@icculus.org>
parents:
564
diff
changeset
|
602 |
TOKEN_ANDASSIGN, |
9aea8877564d
Updated lexer for HLSL.
Ryan C. Gordon <icculus@icculus.org>
parents:
564
diff
changeset
|
603 |
TOKEN_ORASSIGN, |
9aea8877564d
Updated lexer for HLSL.
Ryan C. Gordon <icculus@icculus.org>
parents:
564
diff
changeset
|
604 |
TOKEN_INCREMENT, |
9aea8877564d
Updated lexer for HLSL.
Ryan C. Gordon <icculus@icculus.org>
parents:
564
diff
changeset
|
605 |
TOKEN_DECREMENT, |
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
606 |
TOKEN_RSHIFT, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
607 |
TOKEN_LSHIFT, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
608 |
TOKEN_ANDAND, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
609 |
TOKEN_OROR, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
610 |
TOKEN_LEQ, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
611 |
TOKEN_GEQ, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
612 |
TOKEN_EQL, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
613 |
TOKEN_NEQ, |
865
4eb06464212d
Added stringify operator ("#") to preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
862
diff
changeset
|
614 |
TOKEN_HASH, |
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
615 |
TOKEN_HASHHASH, |
601
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
616 |
|
1121
4142681f9fda
Allow preprocessor to pass through comments, like GNU cpp does.
Ryan C. Gordon <icculus@icculus.org>
parents:
1116
diff
changeset
|
617 |
// This is returned if the preprocessor isn't stripping comments. Note |
4142681f9fda
Allow preprocessor to pass through comments, like GNU cpp does.
Ryan C. Gordon <icculus@icculus.org>
parents:
1116
diff
changeset
|
618 |
// that in asm files, the ';' counts as a single-line comment, same as |
4142681f9fda
Allow preprocessor to pass through comments, like GNU cpp does.
Ryan C. Gordon <icculus@icculus.org>
parents:
1116
diff
changeset
|
619 |
// "//". Note that both eat newline tokens: all of the ones inside a |
4142681f9fda
Allow preprocessor to pass through comments, like GNU cpp does.
Ryan C. Gordon <icculus@icculus.org>
parents:
1116
diff
changeset
|
620 |
// multiline comment, and the ending newline on a single-line comment. |
4142681f9fda
Allow preprocessor to pass through comments, like GNU cpp does.
Ryan C. Gordon <icculus@icculus.org>
parents:
1116
diff
changeset
|
621 |
TOKEN_MULTI_COMMENT, |
4142681f9fda
Allow preprocessor to pass through comments, like GNU cpp does.
Ryan C. Gordon <icculus@icculus.org>
parents:
1116
diff
changeset
|
622 |
TOKEN_SINGLE_COMMENT, |
4142681f9fda
Allow preprocessor to pass through comments, like GNU cpp does.
Ryan C. Gordon <icculus@icculus.org>
parents:
1116
diff
changeset
|
623 |
|
601
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
624 |
// This is returned at the end of input...no more to process. |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
625 |
TOKEN_EOI, |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
626 |
|
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
627 |
// This is returned for char sequences we think are bogus. You'll have |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
628 |
// to judge for yourself. In most cases, you'll probably just fail with |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
629 |
// bogus syntax without explicitly checking for this token. |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
630 |
TOKEN_BAD_CHARS, |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
631 |
|
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
632 |
// This is returned if there's an error condition (the error is returned |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
633 |
// as a NULL-terminated string from preprocessor_nexttoken(), instead |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
634 |
// of actual token data). You can continue getting tokens after this |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
635 |
// is reported. It happens for things like missing #includes, etc. |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
636 |
TOKEN_PREPROCESSING_ERROR, |
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
637 |
|
910
3ee487d85ecb
Handle #pragma (or at least, don't fail on them).
Ryan C. Gordon <icculus@icculus.org>
parents:
907
diff
changeset
|
638 |
// These are all caught by the preprocessor. Caller won't ever see them, |
3ee487d85ecb
Handle #pragma (or at least, don't fail on them).
Ryan C. Gordon <icculus@icculus.org>
parents:
907
diff
changeset
|
639 |
// except TOKEN_PP_PRAGMA. |
603
c7a964b1b0eb
More minor comment tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
601
diff
changeset
|
640 |
// They control the preprocessor (#includes new files, etc). |
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
641 |
TOKEN_PP_INCLUDE, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
642 |
TOKEN_PP_LINE, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
643 |
TOKEN_PP_DEFINE, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
644 |
TOKEN_PP_UNDEF, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
645 |
TOKEN_PP_IF, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
646 |
TOKEN_PP_IFDEF, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
647 |
TOKEN_PP_IFNDEF, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
648 |
TOKEN_PP_ELSE, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
649 |
TOKEN_PP_ELIF, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
650 |
TOKEN_PP_ENDIF, |
601
bb1484be4e1b
Reworked and documented preprocessor tokens.
Ryan C. Gordon <icculus@icculus.org>
parents:
598
diff
changeset
|
651 |
TOKEN_PP_ERROR, // caught, becomes TOKEN_PREPROCESSING_ERROR |
910
3ee487d85ecb
Handle #pragma (or at least, don't fail on them).
Ryan C. Gordon <icculus@icculus.org>
parents:
907
diff
changeset
|
652 |
TOKEN_PP_PRAGMA, |
603
c7a964b1b0eb
More minor comment tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
601
diff
changeset
|
653 |
TOKEN_INCOMPLETE_COMMENT, // caught, becomes TOKEN_PREPROCESSING_ERROR |
682
ad75eb06ddce
First work on #if directive.
Ryan C. Gordon <icculus@icculus.org>
parents:
678
diff
changeset
|
654 |
TOKEN_PP_UNARY_MINUS, // used internally, never returned. |
ad75eb06ddce
First work on #if directive.
Ryan C. Gordon <icculus@icculus.org>
parents:
678
diff
changeset
|
655 |
TOKEN_PP_UNARY_PLUS, // used internally, never returned. |
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
656 |
} Token; |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
657 |
|
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
658 |
|
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
659 |
// This is opaque. |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
660 |
struct Preprocessor; |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
661 |
typedef struct Preprocessor Preprocessor; |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
662 |
|
620
1c4cf996004e
Initial work on preprocessor conditionals.
Ryan C. Gordon <icculus@icculus.org>
parents:
612
diff
changeset
|
663 |
typedef struct Conditional |
1c4cf996004e
Initial work on preprocessor conditionals.
Ryan C. Gordon <icculus@icculus.org>
parents:
612
diff
changeset
|
664 |
{ |
1c4cf996004e
Initial work on preprocessor conditionals.
Ryan C. Gordon <icculus@icculus.org>
parents:
612
diff
changeset
|
665 |
Token type; |
1c4cf996004e
Initial work on preprocessor conditionals.
Ryan C. Gordon <icculus@icculus.org>
parents:
612
diff
changeset
|
666 |
int linenum; |
1c4cf996004e
Initial work on preprocessor conditionals.
Ryan C. Gordon <icculus@icculus.org>
parents:
612
diff
changeset
|
667 |
int skipping; |
625
bfb4016d9404
Fixed #else preprocessor directive so it'll work with #elif.
Ryan C. Gordon <icculus@icculus.org>
parents:
620
diff
changeset
|
668 |
int chosen; |
620
1c4cf996004e
Initial work on preprocessor conditionals.
Ryan C. Gordon <icculus@icculus.org>
parents:
612
diff
changeset
|
669 |
struct Conditional *next; |
1c4cf996004e
Initial work on preprocessor conditionals.
Ryan C. Gordon <icculus@icculus.org>
parents:
612
diff
changeset
|
670 |
} Conditional; |
1c4cf996004e
Initial work on preprocessor conditionals.
Ryan C. Gordon <icculus@icculus.org>
parents:
612
diff
changeset
|
671 |
|
678
9fa2eb7d7871
Preprocessor now supports macros with parameters.
Ryan C. Gordon <icculus@icculus.org>
parents:
658
diff
changeset
|
672 |
typedef struct Define |
9fa2eb7d7871
Preprocessor now supports macros with parameters.
Ryan C. Gordon <icculus@icculus.org>
parents:
658
diff
changeset
|
673 |
{ |
9fa2eb7d7871
Preprocessor now supports macros with parameters.
Ryan C. Gordon <icculus@icculus.org>
parents:
658
diff
changeset
|
674 |
const char *identifier; |
9fa2eb7d7871
Preprocessor now supports macros with parameters.
Ryan C. Gordon <icculus@icculus.org>
parents:
658
diff
changeset
|
675 |
const char *definition; |
894
1847405a16c6
Serious reworking of preprocessor macro replacement code.
Ryan C. Gordon <icculus@icculus.org>
parents:
865
diff
changeset
|
676 |
const char *original; |
678
9fa2eb7d7871
Preprocessor now supports macros with parameters.
Ryan C. Gordon <icculus@icculus.org>
parents:
658
diff
changeset
|
677 |
const char **parameters; |
755
6a7aa96c51c7
Reworked preprocessor macro argument parsing.
Ryan C. Gordon <icculus@icculus.org>
parents:
734
diff
changeset
|
678 |
int paramcount; |
678
9fa2eb7d7871
Preprocessor now supports macros with parameters.
Ryan C. Gordon <icculus@icculus.org>
parents:
658
diff
changeset
|
679 |
struct Define *next; |
9fa2eb7d7871
Preprocessor now supports macros with parameters.
Ryan C. Gordon <icculus@icculus.org>
parents:
658
diff
changeset
|
680 |
} Define; |
9fa2eb7d7871
Preprocessor now supports macros with parameters.
Ryan C. Gordon <icculus@icculus.org>
parents:
658
diff
changeset
|
681 |
|
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
682 |
typedef struct IncludeState |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
683 |
{ |
612
72ccfe69eaf1
Moved filename caching into the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
611
diff
changeset
|
684 |
const char *filename; |
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
685 |
const char *source_base; |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
686 |
const char *source; |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
687 |
const char *token; |
648
243e35876142
Have lexer calculate token size now.
Ryan C. Gordon <icculus@icculus.org>
parents:
647
diff
changeset
|
688 |
unsigned int tokenlen; |
651
05ad72d120a5
Lexer now stores token value to IncludeState.
Ryan C. Gordon <icculus@icculus.org>
parents:
649
diff
changeset
|
689 |
Token tokenval; |
652
3333a0774ccc
Added basic pushback facility to the preprocessor.
Ryan C. Gordon <icculus@icculus.org>
parents:
651
diff
changeset
|
690 |
int pushedback; |
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
691 |
const unsigned char *lexer_marker; |
635
be3b428802a1
Try to make #error lexing match gcc's.
Ryan C. Gordon <icculus@icculus.org>
parents:
630
diff
changeset
|
692 |
int report_whitespace; |
1121
4142681f9fda
Allow preprocessor to pass through comments, like GNU cpp does.
Ryan C. Gordon <icculus@icculus.org>
parents:
1116
diff
changeset
|
693 |
int report_comments; |
690
4710df464f13
Moved asm comment processing into the lexer.
Ryan C. Gordon <icculus@icculus.org>
parents:
682
diff
changeset
|
694 |
int asm_comments; |
642
624ab8696f9b
Enormous amount of tapdancing to handle EOI better in the lexer.
Ryan C. Gordon <icculus@icculus.org>
parents:
635
diff
changeset
|
695 |
unsigned int orig_length; |
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
696 |
unsigned int bytes_left; |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
697 |
unsigned int line; |
620
1c4cf996004e
Initial work on preprocessor conditionals.
Ryan C. Gordon <icculus@icculus.org>
parents:
612
diff
changeset
|
698 |
Conditional *conditional_stack; |
656
ddb1a0b4c443
Let there be different close callbacks per IncludeState.
Ryan C. Gordon <icculus@icculus.org>
parents:
652
diff
changeset
|
699 |
MOJOSHADER_includeClose close_callback; |
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
700 |
struct IncludeState *next; |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
701 |
} IncludeState; |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
702 |
|
649
527cfe6f2d45
Renamed preprocessor_internal_lexer to preprocessor_lexer.
Ryan C. Gordon <icculus@icculus.org>
parents:
648
diff
changeset
|
703 |
Token preprocessor_lexer(IncludeState *s); |
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
704 |
|
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
705 |
// This will only fail if the allocator fails, so it doesn't return any |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
706 |
// error code...NULL on failure. |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
707 |
Preprocessor *preprocessor_start(const char *fname, const char *source, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
708 |
unsigned int sourcelen, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
709 |
MOJOSHADER_includeOpen open_callback, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
710 |
MOJOSHADER_includeClose close_callback, |
658
22695d3d6b98
Should be an array of structs, not an array of pointers to structs.
Ryan C. Gordon <icculus@icculus.org>
parents:
656
diff
changeset
|
711 |
const MOJOSHADER_preprocessorDefine *defines, |
690
4710df464f13
Moved asm comment processing into the lexer.
Ryan C. Gordon <icculus@icculus.org>
parents:
682
diff
changeset
|
712 |
unsigned int define_count, int asm_comments, |
555
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
713 |
MOJOSHADER_malloc m, MOJOSHADER_free f, void *d); |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
714 |
|
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
715 |
void preprocessor_end(Preprocessor *pp); |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
716 |
int preprocessor_outofmemory(Preprocessor *pp); |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
717 |
const char *preprocessor_nexttoken(Preprocessor *_ctx, |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
718 |
unsigned int *_len, Token *_token); |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
719 |
const char *preprocessor_sourcepos(Preprocessor *pp, unsigned int *pos); |
940821555fda
Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
553
diff
changeset
|
720 |
|
470
7d84d3452125
Bunch More Work on the assembler.
Ryan C. Gordon <icculus@icculus.org>
parents:
468
diff
changeset
|
721 |
|
587
202354e004fc
Unified some cut-and-paste code.
Ryan C. Gordon <icculus@icculus.org>
parents:
584
diff
changeset
|
722 |
void MOJOSHADER_print_debug_token(const char *subsystem, const char *token, |
202354e004fc
Unified some cut-and-paste code.
Ryan C. Gordon <icculus@icculus.org>
parents:
584
diff
changeset
|
723 |
const unsigned int tokenlen, |
202354e004fc
Unified some cut-and-paste code.
Ryan C. Gordon <icculus@icculus.org>
parents:
584
diff
changeset
|
724 |
const Token tokenval); |
202354e004fc
Unified some cut-and-paste code.
Ryan C. Gordon <icculus@icculus.org>
parents:
584
diff
changeset
|
725 |
|
1224
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
726 |
|
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
727 |
#if SUPPORT_PROFILE_SPIRV |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
728 |
// Patching SPIR-V binaries before linking is needed to ensure locations do not |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
729 |
// overlap between shader stages. Unfortunately, OpDecorate takes Literal, so we |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
730 |
// can't use Result <id> from OpSpecConstant and leave this up to specialization |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
731 |
// mechanism. |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
732 |
// Patch table must be propagated from parsing to program linking, but since |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
733 |
// MOJOSHADER_parseData is public and I'd like to avoid changing ABI and exposing |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
734 |
// this, it is appended to MOJOSHADER_parseData::output using postflight buffer. |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
735 |
typedef struct SpirvPatchEntry |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
736 |
{ |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
737 |
uint32 offset; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
738 |
int32 location; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
739 |
} SpirvPatchEntry; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
740 |
|
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
741 |
typedef struct SpirvPatchTable |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
742 |
{ |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
743 |
SpirvPatchEntry vpflip; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
744 |
SpirvPatchEntry array_vec4; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
745 |
SpirvPatchEntry array_ivec4; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
746 |
SpirvPatchEntry array_bool; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
747 |
SpirvPatchEntry samplers[16]; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
748 |
int32 location_count; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
749 |
union |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
750 |
{ |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
751 |
// VS only; non-0 when there is PSIZE output |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
752 |
uint32 vs_has_psize; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
753 |
|
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
754 |
// PS only; offset to TEXCOORD0 location part of OpDecorate. |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
755 |
// Used to find OpDecorate and patch it to BuiltIn PointCoord when |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
756 |
// VS outputs PSIZE. |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
757 |
uint32 ps_texcoord0_offset; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
758 |
}; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
759 |
} SpirvPatchTable; |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
760 |
#endif |
21cd84f1aa0a
Add support for emitting SPIR-V shaders.
Martin Krošlák <kroslakma@gmail.com>
parents:
1201
diff
changeset
|
761 |
|
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
762 |
#endif // _INCLUDE_MOJOSHADER_INTERNAL_H_ |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
763 |
|
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
764 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
765 |
#if MOJOSHADER_DO_INSTRUCTION_TABLE |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
766 |
// These have to be in the right order! Arrays are indexed by the value |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
767 |
// of the instruction token. |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
768 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
769 |
// INSTRUCTION_STATE means this opcode has to update the state machine |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
770 |
// (we're entering an ELSE block, etc). INSTRUCTION means there's no |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
771 |
// state, just go straight to the emitters. |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
772 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
773 |
// !!! FIXME: Some of these MOJOSHADER_TYPE_ANYs need to have their scope |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
774 |
// !!! FIXME: reduced to just PIXEL or VERTEX. |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
775 |
|
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
776 |
INSTRUCTION(NOP, "NOP", 1, NULL, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
777 |
INSTRUCTION(MOV, "MOV", 1, DS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
778 |
INSTRUCTION(ADD, "ADD", 1, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
779 |
INSTRUCTION(SUB, "SUB", 1, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
780 |
INSTRUCTION(MAD, "MAD", 1, DSSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
781 |
INSTRUCTION(MUL, "MUL", 1, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
782 |
INSTRUCTION_STATE(RCP, "RCP", 1, DS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
783 |
INSTRUCTION(RSQ, "RSQ", 1, DS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
784 |
INSTRUCTION(DP3, "DP3", 1, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
785 |
INSTRUCTION_STATE(DP4, "DP4", 1, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
786 |
INSTRUCTION(MIN, "MIN", 1, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
787 |
INSTRUCTION(MAX, "MAX", 1, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
788 |
INSTRUCTION(SLT, "SLT", 1, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
789 |
INSTRUCTION(SGE, "SGE", 1, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
790 |
INSTRUCTION(EXP, "EXP", 1, DS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
791 |
INSTRUCTION_STATE(LOG, "LOG", 1, DS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
792 |
INSTRUCTION(LIT, "LIT", 3, DS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
793 |
INSTRUCTION(DST, "DST", 1, DSS, MOJOSHADER_TYPE_VERTEX) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
794 |
INSTRUCTION(LRP, "LRP", 2, DSSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
795 |
INSTRUCTION_STATE(FRC, "FRC", 1, DS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
796 |
INSTRUCTION_STATE(M4X4, "M4X4", 4, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
797 |
INSTRUCTION_STATE(M4X3, "M4X3", 3, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
798 |
INSTRUCTION_STATE(M3X4, "M3X4", 4, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
799 |
INSTRUCTION_STATE(M3X3, "M3X3", 3, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
800 |
INSTRUCTION_STATE(M3X2, "M3X2", 2, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
801 |
INSTRUCTION_STATE(CALL, "CALL", 2, S, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
802 |
INSTRUCTION_STATE(CALLNZ, "CALLNZ", 3, SS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
803 |
INSTRUCTION_STATE(LOOP, "LOOP", 3, SS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
804 |
INSTRUCTION_STATE(RET, "RET", 1, NULL, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
805 |
INSTRUCTION_STATE(ENDLOOP, "ENDLOOP", 2, NULL, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
806 |
INSTRUCTION_STATE(LABEL, "LABEL", 0, S, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
807 |
INSTRUCTION_STATE(DCL, "DCL", 0, DCL, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
808 |
INSTRUCTION_STATE(POW, "POW", 3, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
809 |
INSTRUCTION(CRS, "CRS", 2, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
810 |
INSTRUCTION(SGN, "SGN", 3, DSSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
811 |
INSTRUCTION(ABS, "ABS", 1, DS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
812 |
INSTRUCTION(NRM, "NRM", 3, DS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
813 |
INSTRUCTION_STATE(SINCOS, "SINCOS", 8, SINCOS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
814 |
INSTRUCTION_STATE(REP, "REP", 3, S, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
815 |
INSTRUCTION_STATE(ENDREP, "ENDREP", 2, NULL, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
816 |
INSTRUCTION_STATE(IF, "IF", 3, S, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
817 |
INSTRUCTION_STATE(IFC, "IF", 3, SS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
818 |
INSTRUCTION(ELSE, "ELSE", 1, NULL, MOJOSHADER_TYPE_ANY) // !!! FIXME: state! |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
819 |
INSTRUCTION(ENDIF, "ENDIF", 1, NULL, MOJOSHADER_TYPE_ANY) // !!! FIXME: state! |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
820 |
INSTRUCTION_STATE(BREAK, "BREAK", 1, NULL, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
821 |
INSTRUCTION_STATE(BREAKC, "BREAK", 3, SS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
822 |
INSTRUCTION_STATE(MOVA, "MOVA", 1, DS, MOJOSHADER_TYPE_VERTEX) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
823 |
INSTRUCTION_STATE(DEFB, "DEFB", 0, DEFB, MOJOSHADER_TYPE_ANY) |
467
577a9d07b6bf
DEFI has its own parse_args() now.
Ryan C. Gordon <icculus@icculus.org>
parents:
465
diff
changeset
|
824 |
INSTRUCTION_STATE(DEFI, "DEFI", 0, DEFI, MOJOSHADER_TYPE_ANY) |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
825 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
826 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
827 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
828 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
829 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
830 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
831 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
832 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
833 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
834 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
835 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
836 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
837 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
838 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
839 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
840 |
INSTRUCTION_STATE(TEXCRD, "TEXCRD", 1, TEXCRD, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
841 |
INSTRUCTION_STATE(TEXKILL, "TEXKILL", 2, D, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
842 |
INSTRUCTION_STATE(TEXLD, "TEXLD", 1, TEXLD, MOJOSHADER_TYPE_PIXEL) |
1090
636ffcd3f14a
First shot at GLSL/ARB1 support for TEXBEM and TEXBEML opcodes.
Ryan C. Gordon <icculus@icculus.org>
parents:
1075
diff
changeset
|
843 |
INSTRUCTION_STATE(TEXBEM, "TEXBEM", 1, DS, MOJOSHADER_TYPE_PIXEL) |
636ffcd3f14a
First shot at GLSL/ARB1 support for TEXBEM and TEXBEML opcodes.
Ryan C. Gordon <icculus@icculus.org>
parents:
1075
diff
changeset
|
844 |
INSTRUCTION_STATE(TEXBEML, "TEXBEML", 2, DS, MOJOSHADER_TYPE_PIXEL) |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
845 |
INSTRUCTION(TEXREG2AR, "TEXREG2AR", 1, DS, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
846 |
INSTRUCTION(TEXREG2GB, "TEXREG2GB", 1, DS, MOJOSHADER_TYPE_PIXEL) |
1099
aef946714f39
GLSL and ARB1: First shot at most of the TEXM3X2* and TEXM3X3* opcodes.
Ryan C. Gordon <icculus@icculus.org>
parents:
1090
diff
changeset
|
847 |
INSTRUCTION_STATE(TEXM3X2PAD, "TEXM3X2PAD", 1, DS, MOJOSHADER_TYPE_PIXEL) |
aef946714f39
GLSL and ARB1: First shot at most of the TEXM3X2* and TEXM3X3* opcodes.
Ryan C. Gordon <icculus@icculus.org>
parents:
1090
diff
changeset
|
848 |
INSTRUCTION_STATE(TEXM3X2TEX, "TEXM3X2TEX", 1, DS, MOJOSHADER_TYPE_PIXEL) |
aef946714f39
GLSL and ARB1: First shot at most of the TEXM3X2* and TEXM3X3* opcodes.
Ryan C. Gordon <icculus@icculus.org>
parents:
1090
diff
changeset
|
849 |
INSTRUCTION_STATE(TEXM3X3PAD, "TEXM3X3PAD", 1, DS, MOJOSHADER_TYPE_PIXEL) |
aef946714f39
GLSL and ARB1: First shot at most of the TEXM3X2* and TEXM3X3* opcodes.
Ryan C. Gordon <icculus@icculus.org>
parents:
1090
diff
changeset
|
850 |
INSTRUCTION_STATE(TEXM3X3TEX, "TEXM3X3TEX", 1, DS, MOJOSHADER_TYPE_PIXEL) |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
851 |
INSTRUCTION(RESERVED, 0, 0, NULL, MOJOSHADER_TYPE_UNKNOWN) |
1099
aef946714f39
GLSL and ARB1: First shot at most of the TEXM3X2* and TEXM3X3* opcodes.
Ryan C. Gordon <icculus@icculus.org>
parents:
1090
diff
changeset
|
852 |
INSTRUCTION_STATE(TEXM3X3SPEC, "TEXM3X3SPEC", 1, DSS, MOJOSHADER_TYPE_PIXEL) |
aef946714f39
GLSL and ARB1: First shot at most of the TEXM3X2* and TEXM3X3* opcodes.
Ryan C. Gordon <icculus@icculus.org>
parents:
1090
diff
changeset
|
853 |
INSTRUCTION_STATE(TEXM3X3VSPEC, "TEXM3X3VSPEC", 1, DS, MOJOSHADER_TYPE_PIXEL) |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
854 |
INSTRUCTION(EXPP, "EXPP", 1, DS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
855 |
INSTRUCTION_STATE(LOGP, "LOGP", 1, DS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
856 |
INSTRUCTION_STATE(CND, "CND", 1, DSSS, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
857 |
INSTRUCTION_STATE(DEF, "DEF", 0, DEF, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
858 |
INSTRUCTION(TEXREG2RGB, "TEXREG2RGB", 1, DS, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
859 |
INSTRUCTION(TEXDP3TEX, "TEXDP3TEX", 1, DS, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
860 |
INSTRUCTION(TEXM3X2DEPTH, "TEXM3X2DEPTH", 1, DS, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
861 |
INSTRUCTION(TEXDP3, "TEXDP3", 1, DS, MOJOSHADER_TYPE_PIXEL) |
1099
aef946714f39
GLSL and ARB1: First shot at most of the TEXM3X2* and TEXM3X3* opcodes.
Ryan C. Gordon <icculus@icculus.org>
parents:
1090
diff
changeset
|
862 |
INSTRUCTION_STATE(TEXM3X3, "TEXM3X3", 1, DS, MOJOSHADER_TYPE_PIXEL) |
465
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
863 |
INSTRUCTION(TEXDEPTH, "TEXDEPTH", 1, D, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
864 |
INSTRUCTION_STATE(CMP, "CMP", 1, DSSS, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
865 |
INSTRUCTION(BEM, "BEM", 2, DSS, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
866 |
INSTRUCTION_STATE(DP2ADD, "DP2ADD", 2, DSSS, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
867 |
INSTRUCTION(DSX, "DSX", 2, DS, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
868 |
INSTRUCTION(DSY, "DSY", 2, DS, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
869 |
INSTRUCTION(TEXLDD, "TEXLDD", 3, DSSSS, MOJOSHADER_TYPE_PIXEL) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
870 |
INSTRUCTION_STATE(SETP, "SETP", 1, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
871 |
INSTRUCTION_STATE(TEXLDL, "TEXLDL", 2, DSS, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
872 |
INSTRUCTION_STATE(BREAKP, "BREAKP", 3, S, MOJOSHADER_TYPE_ANY) |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
873 |
#endif |
0a75f98f785b
Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents:
464
diff
changeset
|
874 |
|
464
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
875 |
// end of mojoshader_internal.h ... |
eba4cf79437f
Moved some common stuff to mojoshader_internal.h ...
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
876 |