mojoshader.h
author Ryan C. Gordon <icculus@icculus.org>
Thu, 28 Oct 2010 03:42:12 -0400
changeset 931 4aa1f68d8292
parent 904 5989f0d4185a
child 932 079c62f868eb
permissions -rw-r--r--
Heavy rework of the AST code. Moved AST stuff to a public API and filled in AST and compile API stubs. print_ast() has been cleaned up, and moved from MojoShader to the compiler application. type_check_ast() is much cleaner, too. This has turned into a massive (and incomplete) undertaking. Next steps are filling in the formal API code, moving the AST stuff to a separate file, and wiring it up to the compiler application. (Not to mention polishing up semantic analysis, finishing up the IR, reworking the nasty datatype system, etc, etc, etc...)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
     1
/**
35
5749d174b537 [svn] Might as well keep the tradition alive.
icculus
parents: 20
diff changeset
     2
 * MojoShader; generate shader programs from bytecode of compiled
5749d174b537 [svn] Might as well keep the tradition alive.
icculus
parents: 20
diff changeset
     3
 *  Direct3D shaders.
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
     4
 *
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
     5
 * Please see the file LICENSE.txt in the source's root directory.
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
     6
 *
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
     7
 *  This file written by Ryan C. Gordon.
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
     8
 */
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
     9
592
ef8b7cc469da Removed an underscore.
Ryan C. Gordon <icculus@icculus.org>
parents: 579
diff changeset
    10
#ifndef _INCL_MOJOSHADER_H_
ef8b7cc469da Removed an underscore.
Ryan C. Gordon <icculus@icculus.org>
parents: 579
diff changeset
    11
#define _INCL_MOJOSHADER_H_
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
    12
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
    13
#ifdef __cplusplus
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
    14
extern "C" {
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
    15
#endif
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
    16
455
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    17
/* You can define this if you aren't generating mojoshader_version.h */
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    18
#ifndef MOJOSHADER_NO_VERSION_INCLUDE
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    19
#include "mojoshader_version.h"
461
892b408b5779 Only define MOJOSHADER_VERSION and MOJOSHADER_CHANGESET if required.
Ryan C. Gordon <icculus@icculus.org>
parents: 458
diff changeset
    20
#endif
892b408b5779 Only define MOJOSHADER_VERSION and MOJOSHADER_CHANGESET if required.
Ryan C. Gordon <icculus@icculus.org>
parents: 458
diff changeset
    21
892b408b5779 Only define MOJOSHADER_VERSION and MOJOSHADER_CHANGESET if required.
Ryan C. Gordon <icculus@icculus.org>
parents: 458
diff changeset
    22
#ifndef MOJOSHADER_VERSION
455
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    23
#define MOJOSHADER_VERSION -1
461
892b408b5779 Only define MOJOSHADER_VERSION and MOJOSHADER_CHANGESET if required.
Ryan C. Gordon <icculus@icculus.org>
parents: 458
diff changeset
    24
#endif
892b408b5779 Only define MOJOSHADER_VERSION and MOJOSHADER_CHANGESET if required.
Ryan C. Gordon <icculus@icculus.org>
parents: 458
diff changeset
    25
892b408b5779 Only define MOJOSHADER_VERSION and MOJOSHADER_CHANGESET if required.
Ryan C. Gordon <icculus@icculus.org>
parents: 458
diff changeset
    26
#ifndef MOJOSHADER_CHANGESET
455
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    27
#define MOJOSHADER_CHANGESET "???"
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    28
#endif
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    29
20
bb2e8f285acc [svn] Bunch More Work...higher level parses dest/src tokens before it goes to the
icculus
parents: 18
diff changeset
    30
/*
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    31
 * For determining the version of MojoShader you are using:
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    32
 *    const int compiled_against = MOJOSHADER_VERSION;
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    33
 *    const int linked_against = MOJOSHADER_version();
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    34
 *
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    35
 * The version is a single integer that increments, not a major/minor value.
20
bb2e8f285acc [svn] Bunch More Work...higher level parses dest/src tokens before it goes to the
icculus
parents: 18
diff changeset
    36
 */
35
5749d174b537 [svn] Might as well keep the tradition alive.
icculus
parents: 20
diff changeset
    37
int MOJOSHADER_version(void);
20
bb2e8f285acc [svn] Bunch More Work...higher level parses dest/src tokens before it goes to the
icculus
parents: 18
diff changeset
    38
bb2e8f285acc [svn] Bunch More Work...higher level parses dest/src tokens before it goes to the
icculus
parents: 18
diff changeset
    39
/*
552
40ca33bd5f88 Fixed a comment typo.
Ryan C. Gordon <icculus@icculus.org>
parents: 536
diff changeset
    40
 * For determining the revision control changeset of MojoShader you are using:
455
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    41
 *    const const *compiled_against = MOJOSHADER_CHANGESET;
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    42
 *    const char *linked_against = MOJOSHADER_changeset();
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    43
 *
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    44
 * The version is an arbitrary, null-terminated ASCII string. It is probably
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    45
 *  a hash that represents a revision control changeset, and can't be
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    46
 *  compared to any other string to determine chronology.
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    47
 *
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    48
 * Do not attempt to free this string; it's statically allocated.
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    49
 */
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    50
const char *MOJOSHADER_changeset(void);
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    51
d99f47386d51 Generate MOJOSHADER_VERSION, etc.
Ryan C. Gordon <icculus@icculus.org>
parents: 454
diff changeset
    52
/*
20
bb2e8f285acc [svn] Bunch More Work...higher level parses dest/src tokens before it goes to the
icculus
parents: 18
diff changeset
    53
 * These allocators work just like the C runtime's malloc() and free()
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    54
 *  (in fact, they probably use malloc() and free() internally if you don't
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    55
 *  specify your own allocator, but don't rely on that behaviour).
97
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
    56
 * (data) is the pointer you supplied when specifying these allocator
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
    57
 *  callbacks, in case you need instance-specific data...it is passed through
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
    58
 *  to your allocator unmolested, and can be NULL if you like.
20
bb2e8f285acc [svn] Bunch More Work...higher level parses dest/src tokens before it goes to the
icculus
parents: 18
diff changeset
    59
 */
97
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
    60
typedef void *(*MOJOSHADER_malloc)(int bytes, void *data);
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
    61
typedef void (*MOJOSHADER_free)(void *ptr, void *data);
18
0dbdb2be8bf8 [svn] Bunch More Work. Cleanups, added app-supplied allocators, flexible output, etc.
icculus
parents: 14
diff changeset
    62
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    63
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    64
/*
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    65
 * These are enum values, but they also can be used in bitmasks, so we can
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    66
 *  test if an opcode is acceptable: if (op->shader_types & ourtype) {} ...
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    67
 */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    68
typedef enum
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    69
{
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    70
    MOJOSHADER_TYPE_UNKNOWN  = 0,
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    71
    MOJOSHADER_TYPE_PIXEL    = (1 << 0),
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    72
    MOJOSHADER_TYPE_VERTEX   = (1 << 1),
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    73
    MOJOSHADER_TYPE_GEOMETRY = (1 << 2),  /* (not supported yet.) */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    74
    MOJOSHADER_TYPE_ANY = 0xFFFFFFFF   /* used for bitmasks */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    75
} MOJOSHADER_shaderType;
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
    76
94
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
    77
/*
196
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    78
 * Data types for vertex attribute streams.
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    79
 */
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    80
typedef enum
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    81
{
240
a945af028366 Added UNKNOWN value to the enums in the public API.
Ryan C. Gordon <icculus@icculus.org>
parents: 239
diff changeset
    82
    MOJOSHADER_ATTRIBUTE_UNKNOWN = -1,  /* housekeeping; not returned. */
196
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    83
    MOJOSHADER_ATTRIBUTE_BYTE,
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    84
    MOJOSHADER_ATTRIBUTE_UBYTE,
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    85
    MOJOSHADER_ATTRIBUTE_SHORT,
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    86
    MOJOSHADER_ATTRIBUTE_USHORT,
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    87
    MOJOSHADER_ATTRIBUTE_INT,
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    88
    MOJOSHADER_ATTRIBUTE_UINT,
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    89
    MOJOSHADER_ATTRIBUTE_FLOAT,
236
8e2fc535b210 Support for half-float attribute arrays.
Ryan C. Gordon <icculus@icculus.org>
parents: 219
diff changeset
    90
    MOJOSHADER_ATTRIBUTE_DOUBLE,
8e2fc535b210 Support for half-float attribute arrays.
Ryan C. Gordon <icculus@icculus.org>
parents: 219
diff changeset
    91
    MOJOSHADER_ATTRIBUTE_HALF_FLOAT,  /* MAYBE available in your OpenGL! */
196
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    92
} MOJOSHADER_attributeType;
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    93
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
    94
/*
94
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
    95
 * Data types for uniforms. See MOJOSHADER_uniform for more information.
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
    96
 */
92
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
    97
typedef enum
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
    98
{
240
a945af028366 Added UNKNOWN value to the enums in the public API.
Ryan C. Gordon <icculus@icculus.org>
parents: 239
diff changeset
    99
    MOJOSHADER_UNIFORM_UNKNOWN = -1, /* housekeeping value; never returned. */
147
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   100
    MOJOSHADER_UNIFORM_FLOAT,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   101
    MOJOSHADER_UNIFORM_INT,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   102
    MOJOSHADER_UNIFORM_BOOL,
94
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
   103
} MOJOSHADER_uniformType;
92
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   104
94
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
   105
/*
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
   106
 * These are the uniforms to be set for a shader. "Uniforms" are what Direct3D
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
   107
 *  calls "Constants" ... IDirect3DDevice::SetVertexShaderConstantF() would
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
   108
 *  need this data, for example. These integers are register indexes. So if
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
   109
 *  index==6 and type==MOJOSHADER_UNIFORM_FLOAT, that means we'd expect a
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
   110
 *  4-float vector to be specified for what would be register "c6" in D3D
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
   111
 *  assembly language, before drawing with the shader.
280
61b2abd9c927 Relative addressing fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 278
diff changeset
   112
 * (array_count) means this is an array of uniforms...this happens in some
61b2abd9c927 Relative addressing fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 278
diff changeset
   113
 *  profiles when we see a relative address ("c0[a0.x]", not the usual "c0").
61b2abd9c927 Relative addressing fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 278
diff changeset
   114
 *  In those cases, the shader was built to set some range of constant
61b2abd9c927 Relative addressing fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 278
diff changeset
   115
 *  registers as an array. You should set this array with (array_count)
61b2abd9c927 Relative addressing fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 278
diff changeset
   116
 *  elements from the constant register file, starting at (index) instead of
61b2abd9c927 Relative addressing fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 278
diff changeset
   117
 *  just a single uniform. To be extra difficult, you'll need to fill in the
61b2abd9c927 Relative addressing fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 278
diff changeset
   118
 *  correct values from the MOJOSHADER_constant data into the appropriate
61b2abd9c927 Relative addressing fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 278
diff changeset
   119
 *  parts of the array, overriding the constant register file. Fun!
438
73492129c1af Expose true constant arrays in parseData, load them at link time for GLSL.
Ryan C. Gordon <icculus@icculus.org>
parents: 431
diff changeset
   120
 * (constant) says whether this is a constant array; these need to be loaded
73492129c1af Expose true constant arrays in parseData, load them at link time for GLSL.
Ryan C. Gordon <icculus@icculus.org>
parents: 431
diff changeset
   121
 *  once at creation time, from the constant list and not ever updated from
73492129c1af Expose true constant arrays in parseData, load them at link time for GLSL.
Ryan C. Gordon <icculus@icculus.org>
parents: 431
diff changeset
   122
 *  the constant register file. This is a workaround for limitations in some
73492129c1af Expose true constant arrays in parseData, load them at link time for GLSL.
Ryan C. Gordon <icculus@icculus.org>
parents: 431
diff changeset
   123
 *  profiles.
190
2a2fb0f656cf Added profile-specific variable names to returned parse data.
Ryan C. Gordon <icculus@icculus.org>
parents: 187
diff changeset
   124
 * (name) is a profile-specific variable name; it may be NULL if it isn't
2a2fb0f656cf Added profile-specific variable names to returned parse data.
Ryan C. Gordon <icculus@icculus.org>
parents: 187
diff changeset
   125
 *  applicable to the requested profile.
94
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
   126
 */
462
af8c1ff58453 Make the C struct definitions more C++ friendly.
Ryan C. Gordon <icculus@icculus.org>
parents: 461
diff changeset
   127
typedef struct MOJOSHADER_uniform
92
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   128
{
100
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   129
    MOJOSHADER_uniformType type;
92
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   130
    int index;
280
61b2abd9c927 Relative addressing fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 278
diff changeset
   131
    int array_count;
438
73492129c1af Expose true constant arrays in parseData, load them at link time for GLSL.
Ryan C. Gordon <icculus@icculus.org>
parents: 431
diff changeset
   132
    int constant;
190
2a2fb0f656cf Added profile-specific variable names to returned parse data.
Ryan C. Gordon <icculus@icculus.org>
parents: 187
diff changeset
   133
    const char *name;
92
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   134
} MOJOSHADER_uniform;
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   135
100
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   136
/*
278
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   137
 * These are the constants defined in a shader. These are data values
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   138
 *  hardcoded in a shader (with the DEF, DEFI, DEFB instructions), which
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   139
 *  override your Uniforms. This data is largely for informational purposes,
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   140
 *  since they are compiled in and can't be changed, like Uniforms can be.
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   141
 * These integers are register indexes. So if index==6 and
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   142
 *  type==MOJOSHADER_UNIFORM_FLOAT, that means we'd expect a 4-float vector
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   143
 *  to be specified for what would be register "c6" in D3D assembly language,
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   144
 *  before drawing with the shader.
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   145
 * (value) is the value of the constant, unioned by type.
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   146
 */
462
af8c1ff58453 Make the C struct definitions more C++ friendly.
Ryan C. Gordon <icculus@icculus.org>
parents: 461
diff changeset
   147
typedef struct MOJOSHADER_constant
278
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   148
{
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   149
    MOJOSHADER_uniformType type;
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   150
    int index;
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   151
    union
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   152
    {
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   153
        float f[4];  /* if type==MOJOSHADER_UNIFORM_FLOAT */
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   154
        int i[4];    /* if type==MOJOSHADER_UNIFORM_INT */
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   155
        int b;       /* if type==MOJOSHADER_UNIFORM_BOOL */
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   156
    } value;
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   157
} MOJOSHADER_constant;
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   158
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   159
/*
148
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   160
 * Data types for samplers. See MOJOSHADER_sampler for more information.
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   161
 */
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   162
typedef enum
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   163
{
240
a945af028366 Added UNKNOWN value to the enums in the public API.
Ryan C. Gordon <icculus@icculus.org>
parents: 239
diff changeset
   164
    MOJOSHADER_SAMPLER_UNKNOWN = -1, /* housekeeping value; never returned. */
148
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   165
    MOJOSHADER_SAMPLER_2D,
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   166
    MOJOSHADER_SAMPLER_CUBE,
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   167
    MOJOSHADER_SAMPLER_VOLUME,
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   168
} MOJOSHADER_samplerType;
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   169
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   170
/*
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   171
 * These are the samplers to be set for a shader. ...
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   172
 *  IDirect3DDevice::SetTexture() would need this data, for example.
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   173
 * These integers are the sampler "stage". So if index==6 and
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   174
 *  type==MOJOSHADER_SAMPLER_2D, that means we'd expect a regular 2D texture
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   175
 *  to be specified for what would be register "s6" in D3D assembly language,
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   176
 *  before drawing with the shader.
190
2a2fb0f656cf Added profile-specific variable names to returned parse data.
Ryan C. Gordon <icculus@icculus.org>
parents: 187
diff changeset
   177
 * (name) is a profile-specific variable name; it may be NULL if it isn't
2a2fb0f656cf Added profile-specific variable names to returned parse data.
Ryan C. Gordon <icculus@icculus.org>
parents: 187
diff changeset
   178
 *  applicable to the requested profile.
148
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   179
 */
462
af8c1ff58453 Make the C struct definitions more C++ friendly.
Ryan C. Gordon <icculus@icculus.org>
parents: 461
diff changeset
   180
typedef struct MOJOSHADER_sampler
148
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   181
{
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   182
    MOJOSHADER_samplerType type;
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   183
    int index;
190
2a2fb0f656cf Added profile-specific variable names to returned parse data.
Ryan C. Gordon <icculus@icculus.org>
parents: 187
diff changeset
   184
    const char *name;
148
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   185
} MOJOSHADER_sampler;
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   186
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   187
/*
100
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   188
 * Data types for attributes. See MOJOSHADER_attribute for more information.
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   189
 */
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   190
typedef enum
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   191
{
240
a945af028366 Added UNKNOWN value to the enums in the public API.
Ryan C. Gordon <icculus@icculus.org>
parents: 239
diff changeset
   192
    MOJOSHADER_USAGE_UNKNOWN = -1,  /* housekeeping value; never returned. */
147
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   193
    MOJOSHADER_USAGE_POSITION,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   194
    MOJOSHADER_USAGE_BLENDWEIGHT,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   195
    MOJOSHADER_USAGE_BLENDINDICES,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   196
    MOJOSHADER_USAGE_NORMAL,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   197
    MOJOSHADER_USAGE_POINTSIZE,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   198
    MOJOSHADER_USAGE_TEXCOORD,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   199
    MOJOSHADER_USAGE_TANGENT,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   200
    MOJOSHADER_USAGE_BINORMAL,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   201
    MOJOSHADER_USAGE_TESSFACTOR,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   202
    MOJOSHADER_USAGE_POSITIONT,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   203
    MOJOSHADER_USAGE_COLOR,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   204
    MOJOSHADER_USAGE_FOG,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   205
    MOJOSHADER_USAGE_DEPTH,
98043daf5027 Removed explicit numbers on enums in mojoshader.h.
Ryan C. Gordon <icculus@icculus.org>
parents: 146
diff changeset
   206
    MOJOSHADER_USAGE_SAMPLE,
240
a945af028366 Added UNKNOWN value to the enums in the public API.
Ryan C. Gordon <icculus@icculus.org>
parents: 239
diff changeset
   207
    MOJOSHADER_USAGE_TOTAL,  /* housekeeping value; never returned. */
100
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   208
} MOJOSHADER_usage;
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   209
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   210
/*
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   211
 * These are the attributes to be set for a shader. "Attributes" are what
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   212
 *  Direct3D calls "Vertex Declarations Usages" ...
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   213
 *  IDirect3DDevice::CreateVertexDeclaration() would need this data, for
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   214
 *  example. Each attribute is associated with an array of data that uses one
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   215
 *  element per-vertex. So if usage==MOJOSHADER_USAGE_COLOR and index==1, that
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   216
 *  means we'd expect a secondary color array to be bound to this shader
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   217
 *  before drawing.
190
2a2fb0f656cf Added profile-specific variable names to returned parse data.
Ryan C. Gordon <icculus@icculus.org>
parents: 187
diff changeset
   218
 * (name) is a profile-specific variable name; it may be NULL if it isn't
2a2fb0f656cf Added profile-specific variable names to returned parse data.
Ryan C. Gordon <icculus@icculus.org>
parents: 187
diff changeset
   219
 *  applicable to the requested profile.
100
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   220
 */
462
af8c1ff58453 Make the C struct definitions more C++ friendly.
Ryan C. Gordon <icculus@icculus.org>
parents: 461
diff changeset
   221
typedef struct MOJOSHADER_attribute
100
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   222
{
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   223
    MOJOSHADER_usage usage;
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   224
    int index;
190
2a2fb0f656cf Added profile-specific variable names to returned parse data.
Ryan C. Gordon <icculus@icculus.org>
parents: 187
diff changeset
   225
    const char *name;
100
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   226
} MOJOSHADER_attribute;
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   227
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   228
/*
450
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   229
 * Use this if you want to specify newly-parsed code to swizzle incoming
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   230
 *  data. This can be useful if you know, at parse time, that a shader
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   231
 *  will be processing data on COLOR0 that should be RGBA, but you'll
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   232
 *  be passing it a vertex array full of ARGB instead.
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   233
 */
462
af8c1ff58453 Make the C struct definitions more C++ friendly.
Ryan C. Gordon <icculus@icculus.org>
parents: 461
diff changeset
   234
typedef struct MOJOSHADER_swizzle
450
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   235
{
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   236
    MOJOSHADER_usage usage;
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   237
    unsigned int index;
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   238
    unsigned char swizzles[4];  /* {0,1,2,3} == .xyzw, {2,2,2,2} == .zzzz */
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   239
} MOJOSHADER_swizzle;
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   240
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   241
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   242
/*
524
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   243
 * MOJOSHADER_symbol data.
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   244
 *
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   245
 * These are used to expose high-level information in shader bytecode.
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   246
 *  They associate HLSL variables with registers. This data is used for both
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   247
 *  debugging and optimization.
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   248
 */
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   249
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   250
typedef enum
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   251
{
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   252
    MOJOSHADER_SYMREGSET_BOOL,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   253
    MOJOSHADER_SYMREGSET_INT4,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   254
    MOJOSHADER_SYMREGSET_FLOAT4,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   255
    MOJOSHADER_SYMREGSET_SAMPLER,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   256
} MOJOSHADER_symbolRegisterSet;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   257
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   258
typedef enum
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   259
{
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   260
    MOJOSHADER_SYMCLASS_SCALAR,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   261
    MOJOSHADER_SYMCLASS_VECTOR,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   262
    MOJOSHADER_SYMCLASS_MATRIX_ROWS,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   263
    MOJOSHADER_SYMCLASS_MATRIX_COLUMNS,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   264
    MOJOSHADER_SYMCLASS_OBJECT,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   265
    MOJOSHADER_SYMCLASS_STRUCT,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   266
} MOJOSHADER_symbolClass;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   267
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   268
typedef enum
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   269
{
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   270
    MOJOSHADER_SYMTYPE_VOID,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   271
    MOJOSHADER_SYMTYPE_BOOL,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   272
    MOJOSHADER_SYMTYPE_INT,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   273
    MOJOSHADER_SYMTYPE_FLOAT,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   274
    MOJOSHADER_SYMTYPE_STRING,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   275
    MOJOSHADER_SYMTYPE_TEXTURE,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   276
    MOJOSHADER_SYMTYPE_TEXTURE1D,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   277
    MOJOSHADER_SYMTYPE_TEXTURE2D,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   278
    MOJOSHADER_SYMTYPE_TEXTURE3D,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   279
    MOJOSHADER_SYMTYPE_TEXTURECUBE,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   280
    MOJOSHADER_SYMTYPE_SAMPLER,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   281
    MOJOSHADER_SYMTYPE_SAMPLER1D,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   282
    MOJOSHADER_SYMTYPE_SAMPLER2D,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   283
    MOJOSHADER_SYMTYPE_SAMPLER3D,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   284
    MOJOSHADER_SYMTYPE_SAMPLERCUBE,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   285
    MOJOSHADER_SYMTYPE_PIXELSHADER,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   286
    MOJOSHADER_SYMTYPE_VERTEXSHADER,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   287
    MOJOSHADER_SYMTYPE_PIXELFRAGMENT,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   288
    MOJOSHADER_SYMTYPE_VERTEXFRAGMENT,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   289
    MOJOSHADER_SYMTYPE_UNSUPPORTED,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   290
} MOJOSHADER_symbolType;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   291
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   292
typedef struct MOJOSHADER_symbolStructMember MOJOSHADER_symbolStructMember;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   293
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   294
typedef struct MOJOSHADER_symbolTypeInfo
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   295
{
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   296
    MOJOSHADER_symbolClass parameter_class;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   297
    MOJOSHADER_symbolType parameter_type;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   298
    unsigned int rows;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   299
    unsigned int columns;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   300
    unsigned int elements;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   301
    unsigned int member_count;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   302
    MOJOSHADER_symbolStructMember *members;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   303
} MOJOSHADER_symbolTypeInfo;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   304
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   305
struct MOJOSHADER_symbolStructMember
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   306
{
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   307
    const char *name;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   308
    MOJOSHADER_symbolTypeInfo info;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   309
};
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   310
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   311
typedef struct MOJOSHADER_symbol
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   312
{
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   313
    const char *name;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   314
    MOJOSHADER_symbolRegisterSet register_set;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   315
    unsigned int register_index;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   316
    unsigned int register_count;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   317
    MOJOSHADER_symbolTypeInfo info;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   318
    void *default_value;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   319
} MOJOSHADER_symbol;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   320
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   321
536
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   322
typedef struct MOJOSHADER_error
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   323
{
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   324
    /*
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   325
     * Human-readable error, if there is one. Will be NULL if there was no
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   326
     *  error. The string will be UTF-8 encoded, and English only. Most of
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   327
     *  these shouldn't be shown to the end-user anyhow.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   328
     */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   329
    const char *error;
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   330
523
699696afd731 Allow errors to specify post-processing problems.
Ryan C. Gordon <icculus@icculus.org>
parents: 515
diff changeset
   331
    /*
578
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   332
     * Filename where error happened. This can be NULL if the information
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   333
     *  isn't available.
536
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   334
     */
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   335
    const char *filename;
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   336
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   337
    /*
523
699696afd731 Allow errors to specify post-processing problems.
Ryan C. Gordon <icculus@icculus.org>
parents: 515
diff changeset
   338
     * Position of error, if there is one. Will be -3 if there was no
699696afd731 Allow errors to specify post-processing problems.
Ryan C. Gordon <icculus@icculus.org>
parents: 515
diff changeset
   339
     *  error, -2 if there was an error before processing started, and
699696afd731 Allow errors to specify post-processing problems.
Ryan C. Gordon <icculus@icculus.org>
parents: 515
diff changeset
   340
     *  -1 if there was an error during final processing. If >= 0,
475
ea119c8ce5cd Added error position information to MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 470
diff changeset
   341
     *  MOJOSHADER_parse() sets this to the byte offset (starting at zero) into
ea119c8ce5cd Added error position information to MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 470
diff changeset
   342
     *  the bytecode you supplied, and MOJOSHADER_assemble() sets this to a
489
414b70b829d7 Actually, let's make assembly error positions be option base 1.
Ryan C. Gordon <icculus@icculus.org>
parents: 475
diff changeset
   343
     *  a line number in the source code you supplied (starting at one).
475
ea119c8ce5cd Added error position information to MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 470
diff changeset
   344
     */
ea119c8ce5cd Added error position information to MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 470
diff changeset
   345
    int error_position;
536
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   346
} MOJOSHADER_error;
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   347
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   348
/*
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   349
 * Structure used to return data from parsing of a shader...
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   350
 */
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   351
/* !!! FIXME: most of these ints should be unsigned. */
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   352
typedef struct MOJOSHADER_parseData
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   353
{
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   354
    /*
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   355
     * The number of elements pointed to by (errors).
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   356
     */
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   357
    int error_count;
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   358
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   359
    /*
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   360
     * (error_count) elements of data that specify errors that were generated
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   361
     *  by parsing this shader.
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   362
     * This can be NULL if there were no errors or if (error_count) is zero.
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   363
     */
5af65fe6e917 Allow multiple errors from parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 524
diff changeset
   364
    MOJOSHADER_error *errors;
475
ea119c8ce5cd Added error position information to MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 470
diff changeset
   365
ea119c8ce5cd Added error position information to MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 470
diff changeset
   366
    /*
187
1c709f65cf1b Store profile string in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 148
diff changeset
   367
     * The name of the profile used to parse the shader. Will be NULL on error.
1c709f65cf1b Store profile string in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 148
diff changeset
   368
     */
1c709f65cf1b Store profile string in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 148
diff changeset
   369
    const char *profile;
1c709f65cf1b Store profile string in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 148
diff changeset
   370
1c709f65cf1b Store profile string in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 148
diff changeset
   371
    /*
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   372
     * Bytes of output from parsing. Most profiles produce a string of source
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   373
     *  code, but profiles that do binary output may not be text at all.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   374
     *  Will be NULL on error.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   375
     */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   376
    const char *output;
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   377
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   378
    /*
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   379
     * Byte count for output, not counting any null terminator. Most profiles
113
8ebf445c5305 Print output in testparse.c byte-by-byte instead of as an ASCIZ string.
Ryan C. Gordon <icculus@icculus.org>
parents: 109
diff changeset
   380
     *  produce an ASCII string of source code (which will be null-terminated
8ebf445c5305 Print output in testparse.c byte-by-byte instead of as an ASCIZ string.
Ryan C. Gordon <icculus@icculus.org>
parents: 109
diff changeset
   381
     *  even though that null char isn't included in output_len), but profiles
8ebf445c5305 Print output in testparse.c byte-by-byte instead of as an ASCIZ string.
Ryan C. Gordon <icculus@icculus.org>
parents: 109
diff changeset
   382
     *  that do binary output may not be text at all. Will be 0 on error.
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   383
     */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   384
    int output_len;
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   385
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   386
    /*
356
8e23d7eb90d9 Better attempt at instruction counts, with official numbers from msdn.
Ryan C. Gordon <icculus@icculus.org>
parents: 354
diff changeset
   387
     * Count of Direct3D instruction slots used. This is meaningless in terms
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   388
     *  of the actual output, as the profile will probably grow or reduce
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   389
     *  the count (or for high-level languages, not have that information at
356
8e23d7eb90d9 Better attempt at instruction counts, with official numbers from msdn.
Ryan C. Gordon <icculus@icculus.org>
parents: 354
diff changeset
   390
     *  all). Also, as with Microsoft's own assembler, this value is just a
8e23d7eb90d9 Better attempt at instruction counts, with official numbers from msdn.
Ryan C. Gordon <icculus@icculus.org>
parents: 354
diff changeset
   391
     *  rough estimate, as unpredicable real-world factors make the actual
8e23d7eb90d9 Better attempt at instruction counts, with official numbers from msdn.
Ryan C. Gordon <icculus@icculus.org>
parents: 354
diff changeset
   392
     *  value vary at least a little from this count. Still, it can give you
8e23d7eb90d9 Better attempt at instruction counts, with official numbers from msdn.
Ryan C. Gordon <icculus@icculus.org>
parents: 354
diff changeset
   393
     *  a rough idea of the size of your shader. Will be zero on error.
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   394
     */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   395
    int instruction_count;
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   396
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   397
    /*
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   398
     * The type of shader we parsed. Will be MOJOSHADER_TYPE_UNKNOWN on error.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   399
     */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   400
    MOJOSHADER_shaderType shader_type;
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   401
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   402
    /*
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   403
     * The shader's major version. If this was a "vs_3_0", this would be 3.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   404
     */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   405
    int major_ver;
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   406
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   407
    /*
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   408
     * The shader's minor version. If this was a "ps_1_4", this would be 4.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   409
     *  Two notes: for "vs_2_x", this is 1, and for "vs_3_sw", this is 255.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   410
     */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   411
    int minor_ver;
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   412
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   413
    /*
92
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   414
     * The number of elements pointed to by (uniforms).
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   415
     */
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   416
    int uniform_count;
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   417
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   418
    /*
94
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
   419
     * (uniform_count) elements of data that specify Uniforms to be set for
57adfb4769a0 Simplifed public uniform information.
Ryan C. Gordon <icculus@icculus.org>
parents: 92
diff changeset
   420
     *  this shader. See discussion on MOJOSHADER_uniform for details.
145
5325c8d6077c Don't create unnecessary attributes.
Ryan C. Gordon <icculus@icculus.org>
parents: 113
diff changeset
   421
     * This can be NULL on error or if (uniform_count) is zero.
92
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   422
     */
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   423
    MOJOSHADER_uniform *uniforms;
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   424
100
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   425
    /*
278
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   426
     * The number of elements pointed to by (constants).
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   427
     */
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   428
    int constant_count;
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   429
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   430
    /*
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   431
     * (constant_count) elements of data that specify constants used in
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   432
     *  this shader. See discussion on MOJOSHADER_constant for details.
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   433
     * This can be NULL on error or if (constant_count) is zero.
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   434
     *  This is largely informational: constants are hardcoded into a shader.
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   435
     *  The constants that you can set like parameters are in the "uniforms"
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   436
     *  list.
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   437
     */
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   438
    MOJOSHADER_constant *constants;
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   439
5c432d216078 Report hardcoded constants in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 276
diff changeset
   440
    /*
148
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   441
     * The number of elements pointed to by (samplers).
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   442
     */
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   443
    int sampler_count;
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   444
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   445
    /*
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   446
     * (sampler_count) elements of data that specify Samplers to be set for
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   447
     *  this shader. See discussion on MOJOSHADER_sampler for details.
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   448
     * This can be NULL on error or if (sampler_count) is zero.
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   449
     */
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   450
    MOJOSHADER_sampler *samplers;
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   451
645003ec6623 Hopefully sorted out the reported uniform/attribute mess.
Ryan C. Gordon <icculus@icculus.org>
parents: 147
diff changeset
   452
    /*
100
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   453
     * The number of elements pointed to by (attributes).
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   454
     */
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   455
    int attribute_count;
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   456
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   457
    /*
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   458
     * (attribute_count) elements of data that specify Attributes to be set
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   459
     *  for this shader. See discussion on MOJOSHADER_attribute for details.
145
5325c8d6077c Don't create unnecessary attributes.
Ryan C. Gordon <icculus@icculus.org>
parents: 113
diff changeset
   460
     * This can be NULL on error or if (attribute_count) is zero.
100
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   461
     */
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   462
    MOJOSHADER_attribute *attributes;
2b88649b6f98 First shot at attributes reporting API.
Ryan C. Gordon <icculus@icculus.org>
parents: 97
diff changeset
   463
92
bc1bb138e855 Implemented foundation for reporting uniforms to calling app.
Ryan C. Gordon <icculus@icculus.org>
parents: 46
diff changeset
   464
    /*
450
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   465
     * The number of elements pointed to by (swizzles).
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   466
     */
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   467
    int swizzle_count;
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   468
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   469
    /*
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   470
     * (swizzle_count) elements of data that specify swizzles the shader will
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   471
     *  apply to incoming attributes. This is a copy of what was passed to
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   472
     *  MOJOSHADER_parseData().
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   473
     * This can be NULL on error or if (swizzle_count) is zero.
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   474
     */
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   475
    MOJOSHADER_swizzle *swizzles;
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   476
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   477
    /*
524
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   478
     * The number of elements pointed to by (symbols).
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   479
     */
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   480
    int symbol_count;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   481
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   482
    /*
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   483
     * (symbol_count) elements of data that specify high-level symbol data
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   484
     *  for the shader. This will be parsed from the CTAB section
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   485
     *  in bytecode, and will be a copy of what you provide to
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   486
     *  MOJOSHADER_assemble(). This data is optional.
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   487
     * This can be NULL on error or if (symbol_count) is zero.
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   488
     */
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   489
    MOJOSHADER_symbol *symbols;
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   490
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   491
    /*
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   492
     * This is the malloc implementation you passed to MOJOSHADER_parse().
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   493
     */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   494
    MOJOSHADER_malloc malloc;
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   495
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   496
    /*
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   497
     * This is the free implementation you passed to MOJOSHADER_parse().
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   498
     */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   499
    MOJOSHADER_free free;
97
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
   500
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
   501
    /*
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
   502
     * This is the pointer you passed as opaque data for your allocator.
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
   503
     */
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
   504
    void *malloc_data;
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   505
} MOJOSHADER_parseData;
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   506
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   507
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   508
/*
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   509
 * Profile string for Direct3D assembly language output.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   510
 */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   511
#define MOJOSHADER_PROFILE_D3D "d3d"
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   512
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   513
/*
109
48e95cf41505 Added "passthrough" profile, which just sends the bytecode through unchanged;
Ryan C. Gordon <icculus@icculus.org>
parents: 101
diff changeset
   514
 * Profile string for passthrough of the original bytecode, unchanged.
48e95cf41505 Added "passthrough" profile, which just sends the bytecode through unchanged;
Ryan C. Gordon <icculus@icculus.org>
parents: 101
diff changeset
   515
 */
469
b8cfaae6c4af Renamed "passthrough" profile to "bytecode"
Ryan C. Gordon <icculus@icculus.org>
parents: 465
diff changeset
   516
#define MOJOSHADER_PROFILE_BYTECODE "bytecode"
109
48e95cf41505 Added "passthrough" profile, which just sends the bytecode through unchanged;
Ryan C. Gordon <icculus@icculus.org>
parents: 101
diff changeset
   517
48e95cf41505 Added "passthrough" profile, which just sends the bytecode through unchanged;
Ryan C. Gordon <icculus@icculus.org>
parents: 101
diff changeset
   518
/*
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   519
 * Profile string for GLSL: OpenGL high-level shader language output.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   520
 */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   521
#define MOJOSHADER_PROFILE_GLSL "glsl"
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   522
323
b60c88ec8182 Initial work on ARB1 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 284
diff changeset
   523
/*
407
620d48c5d13a Added framework for GLSL 1.20 support.
Ryan C. Gordon <icculus@icculus.org>
parents: 361
diff changeset
   524
 * Profile string for GLSL 1.20: minor improvements to base GLSL spec.
620d48c5d13a Added framework for GLSL 1.20 support.
Ryan C. Gordon <icculus@icculus.org>
parents: 361
diff changeset
   525
 */
620d48c5d13a Added framework for GLSL 1.20 support.
Ryan C. Gordon <icculus@icculus.org>
parents: 361
diff changeset
   526
#define MOJOSHADER_PROFILE_GLSL120 "glsl120"
620d48c5d13a Added framework for GLSL 1.20 support.
Ryan C. Gordon <icculus@icculus.org>
parents: 361
diff changeset
   527
620d48c5d13a Added framework for GLSL 1.20 support.
Ryan C. Gordon <icculus@icculus.org>
parents: 361
diff changeset
   528
/*
323
b60c88ec8182 Initial work on ARB1 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 284
diff changeset
   529
 * Profile string for OpenGL ARB 1.0 shaders: GL_ARB_(vertex|fragment)_program.
b60c88ec8182 Initial work on ARB1 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 284
diff changeset
   530
 */
b60c88ec8182 Initial work on ARB1 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 284
diff changeset
   531
#define MOJOSHADER_PROFILE_ARB1 "arb1"
b60c88ec8182 Initial work on ARB1 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 284
diff changeset
   532
361
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   533
/*
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   534
 * Profile string for OpenGL ARB 1.0 shaders with Nvidia 2.0 extensions:
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   535
 *  GL_NV_vertex_program2_option and GL_NV_fragment_program2
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   536
 */
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   537
#define MOJOSHADER_PROFILE_NV2 "nv2"
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   538
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   539
/*
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   540
 * Profile string for OpenGL ARB 1.0 shaders with Nvidia 3.0 extensions:
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   541
 *  GL_NV_vertex_program3 and GL_NV_fragment_program2
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   542
 */
421
bfd3d95273ec First piece of work on nv3 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 407
diff changeset
   543
#define MOJOSHADER_PROFILE_NV3 "nv3"
361
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   544
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   545
/*
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   546
 * Profile string for OpenGL ARB 1.0 shaders with Nvidia 4.0 extensions:
454
70c9818840eb Happy September. Minor comment tweak.
Ryan C. Gordon <icculus@icculus.org>
parents: 450
diff changeset
   547
 *  GL_NV_gpu_program4
361
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   548
 */
431
0d0cbe10db02 First shot at nv4 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 422
diff changeset
   549
#define MOJOSHADER_PROFILE_NV4 "nv4"
361
9fa6652cacbd First (untested) work on nv2 profile.
Ryan C. Gordon <icculus@icculus.org>
parents: 356
diff changeset
   550
458
b91904879798 Added MOJOSHADER_maxShaderModel().
Ryan C. Gordon <icculus@icculus.org>
parents: 455
diff changeset
   551
/*
b91904879798 Added MOJOSHADER_maxShaderModel().
Ryan C. Gordon <icculus@icculus.org>
parents: 455
diff changeset
   552
 * Determine the highest supported Shader Model for a profile.
b91904879798 Added MOJOSHADER_maxShaderModel().
Ryan C. Gordon <icculus@icculus.org>
parents: 455
diff changeset
   553
 */
b91904879798 Added MOJOSHADER_maxShaderModel().
Ryan C. Gordon <icculus@icculus.org>
parents: 455
diff changeset
   554
int MOJOSHADER_maxShaderModel(const char *profile);
b91904879798 Added MOJOSHADER_maxShaderModel().
Ryan C. Gordon <icculus@icculus.org>
parents: 455
diff changeset
   555
97
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
   556
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   557
/*
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   558
 * Parse a compiled Direct3D shader's bytecode.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   559
 *
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   560
 * This is your primary entry point into MojoShader. You need to pass it
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   561
 *  a compiled D3D shader and tell it which "profile" you want to use to
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   562
 *  convert it into useful data.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   563
 *
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   564
 * The available profiles are the set of MOJOSHADER_PROFILE_* defines.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   565
 *  Note that MojoShader may be built without support for all listed
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   566
 *  profiles (in which case using one here will return with an error).
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   567
 *
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   568
 * As parsing requires some memory to be allocated, you may provide a custom
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   569
 *  allocator to this function, which will be used to allocate/free memory.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   570
 *  They function just like malloc() and free(). We do not use realloc().
97
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
   571
 *  If you don't care, pass NULL in for the allocator functions. If your
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
   572
 *  allocator needs instance-specific data, you may supply it with the
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
   573
 *  (d) parameter. This pointer is passed as-is to your (m) and (f) functions.
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   574
 *
97
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
   575
 * This function returns a MOJOSHADER_parseData.
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   576
 *
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   577
 * This function will never return NULL, even if the system is completely
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   578
 *  out of memory upon entry (in which case, this function returns a static
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   579
 *  MOJOSHADER_parseData object, which is still safe to pass to
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   580
 *  MOJOSHADER_freeParseData()).
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   581
 *
450
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   582
 * You can tell the generated program to swizzle certain inputs. If you know
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   583
 *  that COLOR0 should be RGBA but you're passing in ARGB, you can specify
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   584
 *  a swizzle of { MOJOSHADER_USAGE_COLOR, 0, {1,2,3,0} } to (swiz). If the
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   585
 *  input register in the code would produce reg.ywzx, that swizzle would
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   586
 *  change it to reg.wzxy ... (swiz) can be NULL.
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   587
 *
187
1c709f65cf1b Store profile string in MOJOSHADER_parseData.
Ryan C. Gordon <icculus@icculus.org>
parents: 148
diff changeset
   588
 * This function is thread safe, so long as (m) and (f) are too, and that
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   589
 *  (tokenbuf) remains intact for the duration of the call. This allows you
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   590
 *  to parse several shaders on separate CPU cores at the same time.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   591
 */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   592
const MOJOSHADER_parseData *MOJOSHADER_parse(const char *profile,
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   593
                                             const unsigned char *tokenbuf,
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   594
                                             const unsigned int bufsize,
450
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   595
                                             const MOJOSHADER_swizzle *swiz,
6a9faf398c1d Allow overriding of swizzle on vertex attributes during bytecode parsing.
Ryan C. Gordon <icculus@icculus.org>
parents: 438
diff changeset
   596
                                             const unsigned int swizcount,
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   597
                                             MOJOSHADER_malloc m,
97
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
   598
                                             MOJOSHADER_free f,
4a41e3d17297 Allow instance data to be passed to the allocator.
Ryan C. Gordon <icculus@icculus.org>
parents: 94
diff changeset
   599
                                             void *d);
46
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   600
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   601
/*
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   602
 * Call this to dispose of parsing results when you are done with them.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   603
 *  This will call the MOJOSHADER_free function you provided to
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   604
 *  MOJOSHADER_parse multiple times, if you provided one.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   605
 *  Passing a NULL here is a safe no-op.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   606
 *
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   607
 * This function is thread safe, so long as any allocator you passed into
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   608
 *  MOJOSHADER_parse() is, too.
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   609
 */
ff5a0ec44f00 [svn] Lots and lots of work on the public API.
icculus
parents: 36
diff changeset
   610
void MOJOSHADER_freeParseData(const MOJOSHADER_parseData *data);
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents:
diff changeset
   611
196
5715754e5549 Initial API proposal for OpenGL glue.
Ryan C. Gordon <icculus@icculus.org>
parents: 190
diff changeset
   612
218
d3fac270bca1 Minor comment added.
Ryan C. Gordon <icculus@icculus.org>
parents: 217
diff changeset
   613
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   614
/* Preprocessor interface... */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   615
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   616
/*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   617
 * Structure used to pass predefined macros. Maps to D3DXMACRO.
675
e85587e4650d Fixing some comments.
Ryan C. Gordon <icculus@icculus.org>
parents: 658
diff changeset
   618
 *  You can have macro arguments: set identifier to "a(b, c)" or whatever.
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   619
 */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   620
typedef struct MOJOSHADER_preprocessorDefine
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   621
{
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   622
    const char *identifier;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   623
    const char *definition;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   624
} MOJOSHADER_preprocessorDefine;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   625
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   626
/*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   627
 * Used with the MOJOSHADER_includeOpen callback. Maps to D3DXINCLUDE_TYPE.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   628
 */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   629
typedef enum
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   630
{
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   631
    MOJOSHADER_INCLUDETYPE_LOCAL,   /* local header: #include "blah.h" */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   632
    MOJOSHADER_INCLUDETYPE_SYSTEM   /* system header: #include <blah.h> */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   633
} MOJOSHADER_includeType;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   634
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   635
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   636
/*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   637
 * Structure used to return data from preprocessing of a shader...
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   638
 */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   639
/* !!! FIXME: most of these ints should be unsigned. */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   640
typedef struct MOJOSHADER_preprocessData
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   641
{
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   642
    /*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   643
     * The number of elements pointed to by (errors).
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   644
     */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   645
    int error_count;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   646
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   647
    /*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   648
     * (error_count) elements of data that specify errors that were generated
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   649
     *  by parsing this shader.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   650
     * This can be NULL if there were no errors or if (error_count) is zero.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   651
     */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   652
    MOJOSHADER_error *errors;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   653
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   654
    /*
579
e408bfc631f5 Replaced some "ASCII" comments with "UTF-8".
Ryan C. Gordon <icculus@icculus.org>
parents: 578
diff changeset
   655
     * Bytes of output from preprocessing. This is a UTF-8 string. We
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   656
     *  guarantee it to be NULL-terminated. Will be NULL on error.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   657
     */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   658
    const char *output;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   659
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   660
    /*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   661
     * Byte count for output, not counting any null terminator.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   662
     *  Will be 0 on error.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   663
     */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   664
    int output_len;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   665
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   666
    /*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   667
     * This is the malloc implementation you passed to MOJOSHADER_parse().
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   668
     */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   669
    MOJOSHADER_malloc malloc;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   670
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   671
    /*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   672
     * This is the free implementation you passed to MOJOSHADER_parse().
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   673
     */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   674
    MOJOSHADER_free free;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   675
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   676
    /*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   677
     * This is the pointer you passed as opaque data for your allocator.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   678
     */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   679
    void *malloc_data;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   680
} MOJOSHADER_preprocessData;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   681
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   682
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   683
/*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   684
 * This callback allows an app to handle #include statements for the
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   685
 *  preprocessor. When the preprocessor sees an #include, it will call this
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   686
 *  function to obtain the contents of the requested file. This is optional;
728
c37993f6f474 Fixed comment typo.
Ryan C. Gordon <icculus@icculus.org>
parents: 675
diff changeset
   687
 *  the preprocessor will open files directly if no callback is supplied, but
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   688
 *  this allows an app to retrieve data from something other than the
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   689
 *  traditional filesystem (for example, headers packed in a .zip file or
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   690
 *  headers generated on-the-fly).
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   691
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   692
 * This function maps to ID3DXInclude::Open()
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   693
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   694
 * (inctype) specifies the type of header we wish to include.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   695
 * (fname) specifies the name of the file specified on the #include line.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   696
 * (parent) is a string of the entire source file containing the include, in
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   697
 *  its original, not-yet-preprocessed state. Note that this is just the
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   698
 *  contents of the specific file, not all source code that the preprocessor
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   699
 *  has seen through other includes, etc.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   700
 * (outdata) will be set by the callback to a pointer to the included file's
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   701
 *  contents. The callback is responsible for allocating this however they
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   702
 *  see fit (we provide allocator functions, but you may ignore them). This
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   703
 *  pointer must remain valid until the includeClose callback runs. This
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   704
 *  string does not need to be NULL-terminated.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   705
 * (outbytes) will be set by the callback to the number of bytes pointed to
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   706
 *  by (outdata).
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   707
 * (m),(f), and (d) are the allocator details that the application passed to
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   708
 *  MojoShader. If these were NULL, MojoShader may have replaced them with its
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   709
 *  own internal allocators.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   710
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   711
 * The callback returns zero on error, non-zero on success.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   712
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   713
 * If you supply an includeOpen callback, you must supply includeClose, too.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   714
 */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   715
typedef int (*MOJOSHADER_includeOpen)(MOJOSHADER_includeType inctype,
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   716
                            const char *fname, const char *parent,
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   717
                            const char **outdata, unsigned int *outbytes,
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   718
                            MOJOSHADER_malloc m, MOJOSHADER_free f, void *d);
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   719
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   720
/*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   721
 * This callback allows an app to clean up the results of a previous
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   722
 *  includeOpen callback.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   723
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   724
 * This function maps to ID3DXInclude::Close()
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   725
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   726
 * (data) is the data that was returned from a previous call to includeOpen.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   727
 *  It is now safe to deallocate this data.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   728
 * (m),(f), and (d) are the same allocator details that were passed to your
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   729
 *  includeOpen callback.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   730
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   731
 * If you supply an includeClose callback, you must supply includeOpen, too.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   732
 */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   733
typedef void (*MOJOSHADER_includeClose)(const char *data,
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   734
                            MOJOSHADER_malloc m, MOJOSHADER_free f, void *d);
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   735
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   736
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   737
/*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   738
 * This function is optional. Even if you are dealing with shader source
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   739
 *  code, you don't need to explicitly use the preprocessor, as the compiler
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   740
 *  and assembler will use it behind the scenes. In fact, you probably never
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   741
 *  need this function unless you are debugging a custom tool (or debugging
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   742
 *  MojoShader itself).
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   743
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   744
 * Preprocessing roughly follows the syntax of an ANSI C preprocessor, as
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   745
 *  Microsoft's Direct3D assembler and HLSL compiler use this syntax. Please
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   746
 *  note that we try to match the output you'd get from Direct3D's
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   747
 *  preprocessor, which has some quirks if you're expecting output that matches
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   748
 *  a generic C preprocessor.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   749
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   750
 * This function maps to D3DXPreprocessShader().
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   751
 *
578
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   752
 * (filename) is a NULL-terminated UTF-8 filename. It can be NULL. We do not
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   753
 *  actually access this file, as we obtain our data from (source). This
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   754
 *  string is copied when we need to report errors while processing (source),
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   755
 *  as opposed to errors in a file referenced via the #include directive in
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   756
 *  (source). If this is NULL, then errors will report the filename as NULL,
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   757
 *  too.
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   758
 *
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   759
 * (source) is an string of UTF-8 text to preprocess. It does not need to be
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   760
 *  NULL-terminated.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   761
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   762
 * (sourcelen) is the length of the string pointed to by (source), in bytes.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   763
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   764
 * (defines) points to (define_count) preprocessor definitions, and can be
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   765
 *  NULL. These are treated by the preprocessor as if the source code started
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   766
 *  with one #define for each entry you pass in here.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   767
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   768
 * (include_open) and (include_close) let the app control the preprocessor's
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   769
 *  behaviour for #include statements. Both are optional and can be NULL, but
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   770
 *  both must be specified if either is specified.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   771
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   772
 * This will return a MOJOSHADER_preprocessorData. You should pass this
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   773
 *  return value to MOJOSHADER_freePreprocessData() when you are done with
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   774
 *  it.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   775
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   776
 * This function will never return NULL, even if the system is completely
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   777
 *  out of memory upon entry (in which case, this function returns a static
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   778
 *  MOJOSHADER_preprocessData object, which is still safe to pass to
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   779
 *  MOJOSHADER_freePreprocessData()).
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   780
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   781
 * As preprocessing requires some memory to be allocated, you may provide a
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   782
 *  custom allocator to this function, which will be used to allocate/free
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   783
 *  memory. They function just like malloc() and free(). We do not use
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   784
 *  realloc(). If you don't care, pass NULL in for the allocator functions.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   785
 *  If your allocator needs instance-specific data, you may supply it with the
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   786
 *  (d) parameter. This pointer is passed as-is to your (m) and (f) functions.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   787
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   788
 * This function is thread safe, so long as the various callback functions
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   789
 *  are, too, and that the parameters remains intact for the duration of the
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   790
 *  call. This allows you to preprocess several shaders on separate CPU cores
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   791
 *  at the same time.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   792
 */
578
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   793
const MOJOSHADER_preprocessData *MOJOSHADER_preprocess(const char *filename,
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   794
                             const char *source, unsigned int sourcelen,
658
22695d3d6b98 Should be an array of structs, not an array of pointers to structs.
Ryan C. Gordon <icculus@icculus.org>
parents: 592
diff changeset
   795
                             const MOJOSHADER_preprocessorDefine *defines,
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   796
                             unsigned int define_count,
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   797
                             MOJOSHADER_includeOpen include_open,
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   798
                             MOJOSHADER_includeClose include_close,
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   799
                             MOJOSHADER_malloc m, MOJOSHADER_free f, void *d);
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   800
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   801
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   802
/*
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   803
 * Call this to dispose of preprocessing results when you are done with them.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   804
 *  This will call the MOJOSHADER_free function you provided to
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   805
 *  MOJOSHADER_preprocess() multiple times, if you provided one.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   806
 *  Passing a NULL here is a safe no-op.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   807
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   808
 * This function is thread safe, so long as any allocator you passed into
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   809
 *  MOJOSHADER_preprocess() is, too.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   810
 */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   811
void MOJOSHADER_freePreprocessData(const MOJOSHADER_preprocessData *data);
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   812
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents: 552
diff changeset
   813
465
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   814
/* Assembler interface... */
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   815
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   816
/*
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   817
 * This function is optional. Use this to convert Direct3D shader assembly
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   818
 *  language into bytecode, which can be handled by MOJOSHADER_parse().
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   819
 *
578
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   820
 * (filename) is a NULL-terminated UTF-8 filename. It can be NULL. We do not
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   821
 *  actually access this file, as we obtain our data from (source). This
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   822
 *  string is copied when we need to report errors while processing (source),
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   823
 *  as opposed to errors in a file referenced via the #include directive in
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   824
 *  (source). If this is NULL, then errors will report the filename as NULL,
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   825
 *  too.
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   826
 *
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   827
 * (source) is an UTF-8 string of valid Direct3D shader assembly source code.
562
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   828
 *  It does not need to be NULL-terminated.
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   829
 *
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   830
 * (sourcelen) is the length of the string pointed to by (source), in bytes.
465
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   831
 *
579
e408bfc631f5 Replaced some "ASCII" comments with "UTF-8".
Ryan C. Gordon <icculus@icculus.org>
parents: 578
diff changeset
   832
 * (comments) points to (comment_count) NULL-terminated UTF-8 strings, and
524
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   833
 *  can be NULL. These strings are inserted as comments in the bytecode.
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   834
 *
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   835
 * (symbols) points to (symbol_count) symbol structs, and can be NULL. These
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   836
 *  become a CTAB field in the bytecode. This is optional, but
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   837
 *  MOJOSHADER_parse() needs CTAB data for all arrays used in a program, or
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   838
 *  relative addressing will not be permitted, so you'll want to at least
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   839
 *  provide symbol information for those. The symbol data is 100% trusted
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   840
 *  at this time; it will not be checked to see if it matches what was
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   841
 *  assembled in any way whatsoever.
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   842
 *
562
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   843
 * (defines) points to (define_count) preprocessor definitions, and can be
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   844
 *  NULL. These are treated by the preprocessor as if the source code started
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   845
 *  with one #define for each entry you pass in here.
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   846
 *
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   847
 * (include_open) and (include_close) let the app control the preprocessor's
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   848
 *  behaviour for #include statements. Both are optional and can be NULL, but
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   849
 *  both must be specified if either is specified.
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   850
 *
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   851
 * This will return a MOJOSHADER_parseData, like MOJOSHADER_parse() would,
470
7d84d3452125 Bunch More Work on the assembler.
Ryan C. Gordon <icculus@icculus.org>
parents: 469
diff changeset
   852
 *  except the profile will be MOJOSHADER_PROFILE_BYTECODE and the output
7d84d3452125 Bunch More Work on the assembler.
Ryan C. Gordon <icculus@icculus.org>
parents: 469
diff changeset
   853
 *  will be the assembled bytecode instead of some other language. This output
7d84d3452125 Bunch More Work on the assembler.
Ryan C. Gordon <icculus@icculus.org>
parents: 469
diff changeset
   854
 *  can be pushed back through MOJOSHADER_parseData() with a different profile.
7d84d3452125 Bunch More Work on the assembler.
Ryan C. Gordon <icculus@icculus.org>
parents: 469
diff changeset
   855
 *
7d84d3452125 Bunch More Work on the assembler.
Ryan C. Gordon <icculus@icculus.org>
parents: 469
diff changeset
   856
 * This function will never return NULL, even if the system is completely
7d84d3452125 Bunch More Work on the assembler.
Ryan C. Gordon <icculus@icculus.org>
parents: 469
diff changeset
   857
 *  out of memory upon entry (in which case, this function returns a static
7d84d3452125 Bunch More Work on the assembler.
Ryan C. Gordon <icculus@icculus.org>
parents: 469
diff changeset
   858
 *  MOJOSHADER_parseData object, which is still safe to pass to
7d84d3452125 Bunch More Work on the assembler.
Ryan C. Gordon <icculus@icculus.org>
parents: 469
diff changeset
   859
 *  MOJOSHADER_freeParseData()).
7d84d3452125 Bunch More Work on the assembler.
Ryan C. Gordon <icculus@icculus.org>
parents: 469
diff changeset
   860
 *
465
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   861
 * As assembling requires some memory to be allocated, you may provide a
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   862
 *  custom allocator to this function, which will be used to allocate/free
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   863
 *  memory. They function just like malloc() and free(). We do not use
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   864
 *  realloc(). If you don't care, pass NULL in for the allocator functions.
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   865
 *  If your allocator needs instance-specific data, you may supply it with the
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   866
 *  (d) parameter. This pointer is passed as-is to your (m) and (f) functions.
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   867
 *
562
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   868
 * This function is thread safe, so long as the various callback functions
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   869
 *  are, too, and that the parameters remains intact for the duration of the
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   870
 *  call. This allows you to assemble several shaders on separate CPU cores
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   871
 *  at the same time.
465
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   872
 */
578
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   873
const MOJOSHADER_parseData *MOJOSHADER_assemble(const char *filename,
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 562
diff changeset
   874
                             const char *source, unsigned int sourcelen,
524
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   875
                             const char **comments, unsigned int comment_count,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   876
                             const MOJOSHADER_symbol *symbols,
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   877
                             unsigned int symbol_count,
658
22695d3d6b98 Should be an array of structs, not an array of pointers to structs.
Ryan C. Gordon <icculus@icculus.org>
parents: 592
diff changeset
   878
                             const MOJOSHADER_preprocessorDefine *defines,
562
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   879
                             unsigned int define_count,
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   880
                             MOJOSHADER_includeOpen include_open,
c9a2bc5129c9 First shot at reworking assembly parser to use preprocessor/lexer.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   881
                             MOJOSHADER_includeClose include_close,
524
03eea2f0762c First (incomplete!) shot at more robust CTAB support.
Ryan C. Gordon <icculus@icculus.org>
parents: 523
diff changeset
   882
                             MOJOSHADER_malloc m, MOJOSHADER_free f, void *d);
465
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   883
0a75f98f785b Initial work on assembler. Not even close to done.
Ryan C. Gordon <icculus@icculus.org>
parents: 462
diff changeset
   884
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   885
/* High level shading language support... */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   886
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   887
/*
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   888
 * Source profile strings for HLSL: Direct3D High Level Shading Language.
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   889
 */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   890
#define MOJOSHADER_SRC_PROFILE_HLSL_VS_1_1 "hlsl_vs_1_1"
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   891
#define MOJOSHADER_SRC_PROFILE_HLSL_VS_2_0 "hlsl_vs_2_0"
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   892
#define MOJOSHADER_SRC_PROFILE_HLSL_VS_3_0 "hlsl_vs_3_0"
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   893
#define MOJOSHADER_SRC_PROFILE_HLSL_PS_1_1 "hlsl_ps_1_1"
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   894
#define MOJOSHADER_SRC_PROFILE_HLSL_PS_1_2 "hlsl_ps_1_2"
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   895
#define MOJOSHADER_SRC_PROFILE_HLSL_PS_1_3 "hlsl_ps_1_3"
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   896
#define MOJOSHADER_SRC_PROFILE_HLSL_PS_1_4 "hlsl_ps_1_4"
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   897
#define MOJOSHADER_SRC_PROFILE_HLSL_PS_2_0 "hlsl_ps_2_0"
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   898
#define MOJOSHADER_SRC_PROFILE_HLSL_PS_3_0 "hlsl_ps_3_0"
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   899
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   900
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   901
/* Abstract Syntax Tree interface... */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   902
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   903
/*
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   904
 * ATTENTION: This adds a lot of stuff to the API, but almost everyone can
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   905
 *  ignore this section. Seriously, go ahead and skip over anything that has
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   906
 *  "AST" in it, unless you know why you'd want to use it.
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   907
 *
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   908
 * ALSO: This API is still evolving! We make no promises at this time to keep
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   909
 *  source or binary compatibility for the AST pieces.
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   910
 */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   911
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   912
/* Structures that make up the parse tree... */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   913
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   914
typedef enum MOJOSHADER_astNodeType
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   915
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   916
    MOJOSHADER_AST_OP_START_RANGE,         /* expression operators. */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   917
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   918
    MOJOSHADER_AST_OP_START_RANGE_UNARY,   /* unary operators. */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   919
    MOJOSHADER_AST_OP_PREINCREMENT,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   920
    MOJOSHADER_AST_OP_PREDECREMENT,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   921
    MOJOSHADER_AST_OP_NEGATE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   922
    MOJOSHADER_AST_OP_COMPLEMENT,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   923
    MOJOSHADER_AST_OP_NOT,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   924
    MOJOSHADER_AST_OP_POSTINCREMENT,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   925
    MOJOSHADER_AST_OP_POSTDECREMENT,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   926
    MOJOSHADER_AST_OP_END_RANGE_UNARY,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   927
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   928
    MOJOSHADER_AST_OP_START_RANGE_BINARY,  /* binary operators. */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   929
    MOJOSHADER_AST_OP_COMMA,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   930
    MOJOSHADER_AST_OP_MULTIPLY,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   931
    MOJOSHADER_AST_OP_DIVIDE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   932
    MOJOSHADER_AST_OP_MODULO,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   933
    MOJOSHADER_AST_OP_ADD,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   934
    MOJOSHADER_AST_OP_SUBTRACT,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   935
    MOJOSHADER_AST_OP_LSHIFT,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   936
    MOJOSHADER_AST_OP_RSHIFT,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   937
    MOJOSHADER_AST_OP_LESSTHAN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   938
    MOJOSHADER_AST_OP_GREATERTHAN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   939
    MOJOSHADER_AST_OP_LESSTHANOREQUAL,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   940
    MOJOSHADER_AST_OP_GREATERTHANOREQUAL,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   941
    MOJOSHADER_AST_OP_EQUAL,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   942
    MOJOSHADER_AST_OP_NOTEQUAL,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   943
    MOJOSHADER_AST_OP_BINARYAND,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   944
    MOJOSHADER_AST_OP_BINARYXOR,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   945
    MOJOSHADER_AST_OP_BINARYOR,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   946
    MOJOSHADER_AST_OP_LOGICALAND,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   947
    MOJOSHADER_AST_OP_LOGICALOR,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   948
    MOJOSHADER_AST_OP_ASSIGN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   949
    MOJOSHADER_AST_OP_MULASSIGN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   950
    MOJOSHADER_AST_OP_DIVASSIGN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   951
    MOJOSHADER_AST_OP_MODASSIGN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   952
    MOJOSHADER_AST_OP_ADDASSIGN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   953
    MOJOSHADER_AST_OP_SUBASSIGN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   954
    MOJOSHADER_AST_OP_LSHIFTASSIGN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   955
    MOJOSHADER_AST_OP_RSHIFTASSIGN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   956
    MOJOSHADER_AST_OP_ANDASSIGN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   957
    MOJOSHADER_AST_OP_XORASSIGN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   958
    MOJOSHADER_AST_OP_ORASSIGN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   959
    MOJOSHADER_AST_OP_DEREF_ARRAY,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   960
    MOJOSHADER_AST_OP_END_RANGE_BINARY,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   961
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   962
    MOJOSHADER_AST_OP_START_RANGE_TERNARY,  /* ternary operators. */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   963
    MOJOSHADER_AST_OP_CONDITIONAL,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   964
    MOJOSHADER_AST_OP_END_RANGE_TERNARY,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   965
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   966
    MOJOSHADER_AST_OP_START_RANGE_DATA,     /* expression operands. */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   967
    MOJOSHADER_AST_OP_IDENTIFIER,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   968
    MOJOSHADER_AST_OP_INT_LITERAL,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   969
    MOJOSHADER_AST_OP_FLOAT_LITERAL,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   970
    MOJOSHADER_AST_OP_STRING_LITERAL,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   971
    MOJOSHADER_AST_OP_BOOLEAN_LITERAL,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   972
    MOJOSHADER_AST_OP_END_RANGE_DATA,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   973
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   974
    MOJOSHADER_AST_OP_START_RANGE_MISC,     /* other expression things. */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   975
    MOJOSHADER_AST_OP_DEREF_STRUCT,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   976
    MOJOSHADER_AST_OP_CALLFUNC,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   977
    MOJOSHADER_AST_OP_CONSTRUCTOR,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   978
    MOJOSHADER_AST_OP_CAST,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   979
    MOJOSHADER_AST_OP_END_RANGE_MISC,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   980
    MOJOSHADER_AST_OP_END_RANGE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   981
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   982
    MOJOSHADER_AST_COMPUNIT_START_RANGE,    /* things in global scope. */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   983
    MOJOSHADER_AST_COMPUNIT_FUNCTION,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   984
    MOJOSHADER_AST_COMPUNIT_TYPEDEF,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   985
    MOJOSHADER_AST_COMPUNIT_STRUCT,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   986
    MOJOSHADER_AST_COMPUNIT_VARIABLE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   987
    MOJOSHADER_AST_COMPUNIT_END_RANGE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   988
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   989
    MOJOSHADER_AST_STATEMENT_START_RANGE,   /* statements in function scope. */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   990
    MOJOSHADER_AST_STATEMENT_EMPTY,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   991
    MOJOSHADER_AST_STATEMENT_BREAK,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   992
    MOJOSHADER_AST_STATEMENT_CONTINUE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   993
    MOJOSHADER_AST_STATEMENT_DISCARD,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   994
    MOJOSHADER_AST_STATEMENT_BLOCK,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   995
    MOJOSHADER_AST_STATEMENT_EXPRESSION,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   996
    MOJOSHADER_AST_STATEMENT_IF,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   997
    MOJOSHADER_AST_STATEMENT_SWITCH,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   998
    MOJOSHADER_AST_STATEMENT_FOR,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
   999
    MOJOSHADER_AST_STATEMENT_DO,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1000
    MOJOSHADER_AST_STATEMENT_WHILE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1001
    MOJOSHADER_AST_STATEMENT_RETURN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1002
    MOJOSHADER_AST_STATEMENT_TYPEDEF,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1003
    MOJOSHADER_AST_STATEMENT_STRUCT,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1004
    MOJOSHADER_AST_STATEMENT_VARDECL,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1005
    MOJOSHADER_AST_STATEMENT_END_RANGE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1006
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1007
    MOJOSHADER_AST_MISC_START_RANGE,        /* misc. syntactic glue. */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1008
    MOJOSHADER_AST_FUNCTION_PARAMS,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1009
    MOJOSHADER_AST_FUNCTION_SIGNATURE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1010
    MOJOSHADER_AST_SCALAR_OR_ARRAY,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1011
    MOJOSHADER_AST_TYPEDEF,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1012
    MOJOSHADER_AST_PACK_OFFSET,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1013
    MOJOSHADER_AST_VARIABLE_LOWLEVEL,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1014
    MOJOSHADER_AST_ANNOTATION,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1015
    MOJOSHADER_AST_VARIABLE_DECLARATION,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1016
    MOJOSHADER_AST_STRUCT_DECLARATION,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1017
    MOJOSHADER_AST_STRUCT_MEMBER,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1018
    MOJOSHADER_AST_SWITCH_CASE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1019
    MOJOSHADER_AST_ARGUMENTS,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1020
    MOJOSHADER_AST_MISC_END_RANGE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1021
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1022
    MOJOSHADER_AST_END_RANGE
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1023
} MOJOSHADER_astNodeType;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1024
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1025
typedef struct MOJOSHADER_astNodeInfo
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1026
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1027
    MOJOSHADER_astNodeType type;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1028
    const char *filename;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1029
    unsigned int line;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1030
} MOJOSHADER_astNodeInfo;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1031
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1032
typedef enum MOJOSHADER_astVariableAttributes
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1033
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1034
    MOJOSHADER_AST_VARATTR_EXTERN = (1 << 0),
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1035
    MOJOSHADER_AST_VARATTR_NOINTERPOLATION = (1 << 1),
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1036
    MOJOSHADER_AST_VARATTR_SHARED = (1 << 2),
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1037
    MOJOSHADER_AST_VARATTR_STATIC = (1 << 3),
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1038
    MOJOSHADER_AST_VARATTR_UNIFORM = (1 << 4),
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1039
    MOJOSHADER_AST_VARATTR_VOLATILE = (1 << 5),
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1040
    MOJOSHADER_AST_VARATTR_CONST = (1 << 6),
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1041
    MOJOSHADER_AST_VARATTR_ROWMAJOR = (1 << 7),
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1042
    MOJOSHADER_AST_VARATTR_COLUMNMAJOR = (1 << 8)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1043
} MOJOSHADER_astVariableAttributes;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1044
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1045
typedef enum MOJOSHADER_astIfAttributes
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1046
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1047
    MOJOSHADER_AST_IFATTR_NONE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1048
    MOJOSHADER_AST_IFATTR_BRANCH,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1049
    MOJOSHADER_AST_IFATTR_FLATTEN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1050
    MOJOSHADER_AST_IFATTR_IFALL,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1051
    MOJOSHADER_AST_IFATTR_IFANY,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1052
    MOJOSHADER_AST_IFATTR_PREDICATE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1053
    MOJOSHADER_AST_IFATTR_PREDICATEBLOCK,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1054
} MOJOSHADER_astIfAttributes;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1055
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1056
typedef enum MOJOSHADER_astSwitchAttributes
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1057
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1058
    MOJOSHADER_AST_SWITCHATTR_NONE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1059
    MOJOSHADER_AST_SWITCHATTR_FLATTEN,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1060
    MOJOSHADER_AST_SWITCHATTR_BRANCH,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1061
    MOJOSHADER_AST_SWITCHATTR_FORCECASE,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1062
    MOJOSHADER_AST_SWITCHATTR_CALL
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1063
} MOJOSHADER_astSwitchAttributes;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1064
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1065
/* You can cast any AST node pointer to this. */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1066
typedef struct MOJOSHADER_astGeneric
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1067
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1068
    MOJOSHADER_astNodeInfo ast;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1069
} MOJOSHADER_astGeneric;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1070
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1071
typedef MOJOSHADER_astGeneric MOJOSHADER_astExpression;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1072
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1073
typedef struct MOJOSHADER_astArguments
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1074
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1075
    MOJOSHADER_astNodeInfo ast;  /* Always MOJOSHADER_AST_ARGUMENTS */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1076
    MOJOSHADER_astExpression *argument;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1077
    struct MOJOSHADER_astArguments *next;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1078
} MOJOSHADER_astArguments;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1079
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1080
typedef struct MOJOSHADER_astExpressionUnary
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1081
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1082
    MOJOSHADER_astNodeInfo ast;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1083
    MOJOSHADER_astExpression *operand;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1084
} MOJOSHADER_astExpressionUnary;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1085
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1086
typedef struct MOJOSHADER_astExpressionBinary
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1087
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1088
    MOJOSHADER_astNodeInfo ast;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1089
    MOJOSHADER_astExpression *left;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1090
    MOJOSHADER_astExpression *right;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1091
} MOJOSHADER_astExpressionBinary;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1092
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1093
typedef struct MOJOSHADER_astExpressionTernary
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1094
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1095
    MOJOSHADER_astNodeInfo ast;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1096
    MOJOSHADER_astExpression *left;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1097
    MOJOSHADER_astExpression *center;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1098
    MOJOSHADER_astExpression *right;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1099
} MOJOSHADER_astExpressionTernary;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1100
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1101
typedef struct MOJOSHADER_astExpressionIdentifier
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1102
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1103
    MOJOSHADER_astNodeInfo ast;  /* Always MOJOSHADER_AST_OP_IDENTIFIER */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1104
    const char *identifier;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1105
} MOJOSHADER_astExpressionIdentifier;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1106
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1107
typedef struct MOJOSHADER_astExpressionIntLiteral
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1108
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1109
    MOJOSHADER_astNodeInfo ast;  /* Always MOJOSHADER_AST_OP_INT_LITERAL */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1110
    int value;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1111
} MOJOSHADER_astExpressionIntLiteral;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1112
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1113
typedef struct MOJOSHADER_astExpressionFloatLiteral
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1114
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1115
    MOJOSHADER_astNodeInfo ast;  /* Always MOJOSHADER_AST_OP_FLOAT_LITERAL */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1116
    double value;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1117
} MOJOSHADER_astExpressionFloatLiteral;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1118
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1119
typedef struct MOJOSHADER_astExpressionStringLiteral
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1120
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1121
    MOJOSHADER_astNodeInfo ast;  /* Always MOJOSHADER_AST_OP_STRING_LITERAL */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1122
    const char *string;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1123
} MOJOSHADER_astExpressionStringLiteral;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1124
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1125
typedef struct MOJOSHADER_astExpressionBooleanLiteral
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1126
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1127
    MOJOSHADER_astNodeInfo ast;  /* Always MOJOSHADER_AST_OP_BOOLEAN_LITERAL */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1128
    int value;  /* Always 1 or 0. */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1129
} MOJOSHADER_astExpressionBooleanLiteral;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1130
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1131
typedef struct MOJOSHADER_astExpressionConstructor
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1132
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1133
    MOJOSHADER_astNodeInfo ast;  /* Always MOJOSHADER_AST_OP_CONSTRUCTOR */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1134
    const char *datatype;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1135
    MOJOSHADER_astArguments *args;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1136
} MOJOSHADER_astExpressionConstructor;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1137
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1138
typedef struct MOJOSHADER_astExpressionDerefStruct
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1139
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1140
    MOJOSHADER_astNodeInfo ast;  /* Always MOJOSHADER_AST_OP_DEREF_STRUCT */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1141
    MOJOSHADER_astExpression *identifier;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1142
    const char *member;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1143
} MOJOSHADER_astExpressionDerefStruct;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1144
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1145
typedef struct MOJOSHADER_astExpressionCallFunction
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1146
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1147
    MOJOSHADER_astNodeInfo ast;  /* Always MOJOSHADER_AST_OP_CALLFUNC */
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1148
    MOJOSHADER_astExpression *identifier;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1149
    MOJOSHADER_astArguments *args;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 904
diff changeset
  1150
} MOJOSHADER_astExpressionCallFunction;