d3d2glsl.c
author icculus
Sun, 09 Mar 2008 16:42:57 -0400
branchtrunk
changeset 13 f2baea592d2a
parent 12 d81712dd1a46
child 14 7075b6e31471
permissions -rw-r--r--
[svn] Whoops, that was 256 5-byte strings, not 5 256-byte strings!
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
     1
/**
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
     2
 * d3d2glsl; generate GLSL programs from bytecode of compiled Direct3D shaders.
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
     3
 *
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
     4
 * Please see the file LICENSE.txt in the source's root directory.
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
     5
 *
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
     6
 *  This file written by Ryan C. Gordon.
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
     7
 */
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
     8
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
     9
// Shader bytecode format is described at MSDN:
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
    10
//  http://msdn2.microsoft.com/en-us/library/ms800307.aspx
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
    11
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
    12
#include <stdio.h>
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
    13
#include <string.h>
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
    14
#include <stdlib.h>
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
    15
#include <stdint.h>
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    16
#include <stdarg.h>
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
    17
9
aea1b254e6a5 [svn] Patched to compile.
icculus
parents: 8
diff changeset
    18
#include "d3d2glsl.h"
aea1b254e6a5 [svn] Patched to compile.
icculus
parents: 8
diff changeset
    19
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    20
#ifdef __GNUC__
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    21
#define ISPRINTF(x,y) __attribute__((format (printf, x, y)))
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    22
#else
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    23
#define ISPRINTF(x,y)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    24
#endif
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    25
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
    26
typedef unsigned int uint;  // this is a printf() helper. don't use for code.
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
    27
typedef uint8_t uint8;
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
    28
typedef uint32_t uint32;
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
    29
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    30
#define D3D2GLSL_SCRATCH_BUFFER_SIZE 256
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    31
#define D3D2GLSL_SCRATCH_BUFFERS 5
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    32
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
    33
// Context...this is state that changes as we parse through a shader...
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
    34
typedef struct D3D2GLSL_context
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
    35
{
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
    36
    const uint32 *tokens;
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
    37
    uint32 tokencount;
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    38
    char *output;
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    39
    uint32 output_len;
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    40
    char *failstr;
13
f2baea592d2a [svn] Whoops, that was 256 5-byte strings, not 5 256-byte strings!
icculus
parents: 12
diff changeset
    41
    char buffers[D3D2GLSL_SCRATCH_BUFFERS][D3D2GLSL_SCRATCH_BUFFER_SIZE];
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
    42
    int bufidx;  // current scratch buffer.
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
    43
} D3D2GLSL_context;
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
    44
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
    45
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
    46
// Byteswap magic...
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
    47
4
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    48
#if ((defined __GNUC__) && (defined __POWERPC__))
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    49
    static inline uint32 SWAP32(uint32 x)
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    50
    {
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    51
        __asm__ __volatile__("lwbrx %0,0,%1" : "=r" (x) : "r" (&x));
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    52
        return x;
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    53
    } // SWAP32
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    54
#elif defined(__POWERPC__)
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    55
    static inline uint32 SWAP32(uint32 x)
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    56
    {
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    57
        return ( (((x) >> 24) & 0x000000FF) | (((x) >>  8) & 0x0000FF00) |
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    58
                 (((x) <<  8) & 0x00FF0000) | (((x) << 24) & 0xFF000000) );
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    59
    } // SWAP32
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    60
#else
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    61
#   define SWAP32(x) (x)
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    62
#endif
e0b2c5b7210c [svn] Implemented byteswapping.
icculus
parents: 2
diff changeset
    63
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
    64
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    65
static inline char *get_scratch_buffer(D3D2GLSL_context *ctx)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    66
{
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    67
    ctx->bufidx = (ctx->bufidx + 1) % D3D2GLSL_SCRATCH_BUFFERS;
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    68
    return ctx->buffers[ctx->bufidx];
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    69
} // get_scratch_buffer
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    70
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    71
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
    72
// Special-case return values from the parsing pipeline...
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    73
#define FAIL (-1)
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
    74
#define END_OF_STREAM (-2)
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    75
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    76
static int failf(D3D2GLSL_context *ctx, const char *fmt, ...) ISPRINTF(2,3);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    77
static int failf(D3D2GLSL_context *ctx, const char *fmt, ...)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    78
{
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    79
    if (ctx->failstr == NULL)  // don't change existing error.
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    80
    {
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    81
        char *buffer = get_scratch_buffer(ctx);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    82
        va_list ap;
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    83
        va_start(ap, fmt);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    84
        vsnprintf(buffer, D3D2GLSL_SCRATCH_BUFFER_SIZE, fmt, ap);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    85
        va_end(ap);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    86
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    87
        ctx->failstr = (char *) malloc(strlen(buffer) + 1);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    88
        if (ctx->failstr != NULL)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    89
            strcpy(ctx->failstr, buffer);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    90
    } // if
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    91
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    92
    return FAIL;
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    93
} // failf
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    94
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    95
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    96
static inline int fail(D3D2GLSL_context *ctx, const char *reason)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    97
{
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    98
    return failf(ctx, "%s", reason);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
    99
} // fail
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   100
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   101
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   102
static int output_line(D3D2GLSL_context *ctx, const char *fmt, ...) ISPRINTF(2,3);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   103
static int output_line(D3D2GLSL_context *ctx, const char *fmt, ...)
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
   104
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   105
    if (ctx->failstr != NULL)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   106
        return FAIL;  // we failed previously, don't go on...
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   107
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   108
    char *buffer = get_scratch_buffer(ctx);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   109
    va_list ap;
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   110
    va_start(ap, fmt);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   111
    const int len = vsnprintf(buffer, D3D2GLSL_SCRATCH_BUFFER_SIZE, fmt, ap);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   112
    va_end(ap);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   113
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   114
    if (len >= D3D2GLSL_SCRATCH_BUFFER_SIZE)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   115
    {
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   116
        return failf(ctx, "Internal bug--String is too big (%d vs %d bytes).",
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   117
                     (int) len, (int) D3D2GLSL_SCRATCH_BUFFER_SIZE);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   118
    } // if
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   119
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   120
    const size_t newlen = ctx->output_len + len + 1;
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   121
    char *ptr = (char *) realloc(ctx->output, newlen+1);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   122
    if (ptr == NULL)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   123
        return fail(ctx, "Out of memory");
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   124
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   125
    memcpy(ptr + ctx->output_len, buffer, len);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   126
    ptr[newlen-1] = '\n';
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   127
    ptr[newlen] = '\0';
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   128
    ctx->output = ptr;
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   129
    ctx->output_len = newlen;
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   130
    return 0;
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   131
} // output_line
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   132
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   133
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   134
static int parse_destination_token(D3D2GLSL_context *ctx)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   135
{
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   136
} // parse_destination_token
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
   137
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
   138
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
   139
// one function for each opcode...
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
   140
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   141
typedef int (*parse_instruction_function)(D3D2GLSL_context *ctx);
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   142
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   143
static int parse_NOP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   144
{
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   145
    return 1;  // no-op is a no-op.   :)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   146
} // parse_NOP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   147
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   148
static int parse_MOV(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   149
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   150
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   151
} // parse_MOV
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   152
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   153
static int parse_ADD(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   154
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   155
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   156
} // parse_ADD
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   157
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   158
static int parse_SUB(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   159
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   160
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   161
} // parse_SUB
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   162
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   163
static int parse_MAD(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   164
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   165
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   166
} // parse_MAD
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   167
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   168
static int parse_MUL(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   169
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   170
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   171
} // parse_MUL
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   172
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   173
static int parse_RCP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   174
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   175
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   176
} // parse_RCP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   177
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   178
static int parse_RSQ(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   179
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   180
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   181
} // parse_RSQ
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   182
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   183
static int parse_DP3(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   184
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   185
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   186
} // parse_DP3
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   187
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   188
static int parse_DP4(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   189
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   190
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   191
} // parse_DP4
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   192
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   193
static int parse_MIN(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   194
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   195
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   196
} // parse_MIN
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   197
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   198
static int parse_MAX(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   199
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   200
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   201
} // parse_MAX
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   202
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   203
static int parse_SLT(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   204
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   205
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   206
} // parse_SLT
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   207
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   208
static int parse_SGE(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   209
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   210
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   211
} // parse_SGE
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   212
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   213
static int parse_EXP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   214
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   215
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   216
} // parse_EXP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   217
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   218
static int parse_LOG(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   219
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   220
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   221
} // parse_LOG
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   222
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   223
static int parse_LIT(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   224
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   225
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   226
} // parse_LIT
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   227
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   228
static int parse_DST(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   229
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   230
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   231
} // parse_DST
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   232
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   233
static int parse_LRP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   234
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   235
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   236
} // parse_LRP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   237
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   238
static int parse_FRC(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   239
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   240
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   241
} // parse_FRC
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   242
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   243
static int parse_M4X4(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   244
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   245
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   246
} // parse_M4X4
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   247
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   248
static int parse_M4X3(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   249
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   250
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   251
} // parse_M4X3
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   252
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   253
static int parse_M3X4(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   254
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   255
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   256
} // parse_M3X4
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   257
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   258
static int parse_M3X3(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   259
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   260
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   261
} // parse_M3X3
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   262
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   263
static int parse_M3X2(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   264
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   265
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   266
} // parse_M3X2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   267
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   268
static int parse_CALL(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   269
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   270
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   271
} // parse_CALL
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   272
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   273
static int parse_CALLNZ(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   274
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   275
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   276
} // parse_CALLNZ
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   277
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   278
static int parse_LOOP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   279
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   280
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   281
} // parse_LOOP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   282
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   283
static int parse_RET(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   284
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   285
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   286
} // parse_RET
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   287
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   288
static int parse_ENDLOOP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   289
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   290
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   291
} // parse_ENDLOOP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   292
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   293
static int parse_LABEL(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   294
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   295
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   296
} // parse_LABEL
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   297
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   298
static int parse_DCL(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   299
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   300
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   301
} // parse_DCL
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   302
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   303
static int parse_POW(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   304
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   305
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   306
} // parse_POW
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   307
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   308
static int parse_CRS(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   309
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   310
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   311
} // parse_CRS
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   312
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   313
static int parse_SGN(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   314
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   315
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   316
} // parse_SGN
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   317
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   318
static int parse_ABS(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   319
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   320
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   321
} // parse_ABS
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   322
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   323
static int parse_NRM(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   324
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   325
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   326
} // parse_NRM
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   327
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   328
static int parse_SINCOS(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   329
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   330
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   331
} // parse_SINCOS
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   332
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   333
static int parse_REP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   334
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   335
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   336
} // parse_REP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   337
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   338
static int parse_ENDREP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   339
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   340
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   341
} // parse_ENDREP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   342
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   343
static int parse_IF(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   344
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   345
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   346
} // parse_IF
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   347
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   348
static int parse_IFC(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   349
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   350
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   351
} // parse_IFC
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   352
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   353
static int parse_ELSE(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   354
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   355
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   356
} // parse_ELSE
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   357
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   358
static int parse_ENDIF(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   359
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   360
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   361
} // parse_ENDIF
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   362
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   363
static int parse_BREAK(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   364
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   365
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   366
} // parse_BREAK
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   367
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   368
static int parse_BREAKC(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   369
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   370
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   371
} // parse_BREAKC
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   372
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   373
static int parse_MOVA(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   374
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   375
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   376
} // parse_MOVA
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   377
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   378
static int parse_DEFB(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   379
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   380
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   381
} // parse_DEFB
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   382
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   383
static int parse_DEFI(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   384
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   385
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   386
} // parse_DEFI
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   387
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   388
static int parse_TEXCOORD(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   389
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   390
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   391
} // parse_TEXCOORD
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   392
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   393
static int parse_TEXKILL(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   394
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   395
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   396
} // parse_TEXKILL
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   397
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   398
static int parse_TEX(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   399
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   400
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   401
} // parse_TEX
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   402
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   403
static int parse_TEXBEM(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   404
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   405
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   406
} // parse_TEXBEM
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   407
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   408
static int parse_TEXBEML(D3D2GLSL_context *ctx)
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   409
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   410
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   411
} // parse_TEXBEML
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   412
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   413
static int parse_TEXREG2AR(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   414
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   415
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   416
} // parse_TEXREG2AR
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   417
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   418
static int parse_TEXREG2GB(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   419
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   420
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   421
} // parse_TEXREG2GB
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   422
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   423
static int parse_TEXM3X2PAD(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   424
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   425
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   426
} // parse_TEXM3X2PAD
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   427
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   428
static int parse_TEXM3X2TEX(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   429
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   430
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   431
} // parse_TEXM3X2TEX
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   432
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   433
static int parse_TEXM3X3PAD(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   434
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   435
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   436
} // parse_TEXM3X3PAD
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   437
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   438
static int parse_TEXM3X3TEX(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   439
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   440
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   441
} // parse_TEXM3X3TEX
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   442
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   443
static int parse_RESERVED0(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   444
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   445
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   446
} // parse_RESERVED0
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   447
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   448
static int parse_TEXM3X3SPEC(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   449
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   450
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   451
} // parse_TEXM3X3SPEC
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   452
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   453
static int parse_TEXM3X3VSPEC(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   454
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   455
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   456
} // parse_TEXM3X3VSPEC
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   457
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   458
static int parse_EXPP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   459
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   460
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   461
} // parse_EXPP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   462
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   463
static int parse_LOGP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   464
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   465
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   466
} // parse_LOGP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   467
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   468
static int parse_CND(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   469
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   470
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   471
} // parse_CND
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   472
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   473
static int parse_DEF(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   474
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   475
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   476
} // parse_DEF
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   477
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   478
static int parse_TEXREG2RGB(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   479
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   480
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   481
} // parse_TEXREG2RGB
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   482
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   483
static int parse_TEXDP3TEX(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   484
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   485
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   486
} // parse_TEXDP3TEX
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   487
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   488
static int parse_TEXM3X2DEPTH(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   489
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   490
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   491
} // parse_TEXM3X2DEPTH
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   492
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   493
static int parse_TEXDP3(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   494
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   495
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   496
} // parse_TEXDP3
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   497
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   498
static int parse_TEXM3X3(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   499
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   500
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   501
} // parse_TEXM3X3
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   502
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   503
static int parse_TEXDEPTH(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   504
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   505
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   506
} // parse_TEXDEPTH
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   507
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   508
static int parse_CMP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   509
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   510
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   511
} // parse_CMP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   512
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   513
static int parse_BEM(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   514
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   515
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   516
} // parse_BEM
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   517
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   518
static int parse_DP2ADD(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   519
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   520
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   521
} // parse_DP2ADD
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   522
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   523
static int parse_DSX(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   524
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   525
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   526
} // parse_DSX
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   527
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   528
static int parse_DSY(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   529
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   530
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   531
} // parse_DSY
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   532
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   533
static int parse_TEXLDD(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   534
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   535
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   536
} // parse_TEXLDD
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   537
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   538
static int parse_SETP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   539
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   540
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   541
} // parse_SETP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   542
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   543
static int parse_TEXLDL(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   544
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   545
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   546
} // parse_TEXLDL
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   547
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   548
static int parse_BREAKP(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   549
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   550
    return fail(ctx, "unimplemented.");  // !!! FIXME
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   551
} // parse_BREAKP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   552
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   553
static int parse_RESERVED(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   554
{
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   555
    return fail(ctx, "Tried to use RESERVED opcode.");
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   556
} // parse_BREAKP
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   557
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   558
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   559
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
   560
// Lookup table for instruction opcodes...
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   561
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   562
typedef struct
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   563
{
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   564
    const char *opcode_string;
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   565
    int arg_tokens;
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   566
    //uint32 shader_requirements;
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   567
    parse_instruction_function parser;
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   568
} Instruction;
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   569
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   570
// These have to be in the right order! This array is indexed by the value
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   571
//  of the instruction token.
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   572
static Instruction instructions[] = {
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   573
    #define INSTRUCTION(op, args) { #op, args, parse_##op }
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   574
    INSTRUCTION(NOP, 0),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   575
    INSTRUCTION(MOV, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   576
    INSTRUCTION(ADD, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   577
    INSTRUCTION(SUB, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   578
    INSTRUCTION(MAD, 4),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   579
    INSTRUCTION(MUL, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   580
    INSTRUCTION(RCP, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   581
    INSTRUCTION(RSQ, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   582
    INSTRUCTION(DP3, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   583
    INSTRUCTION(DP4, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   584
    INSTRUCTION(MIN, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   585
    INSTRUCTION(MAX, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   586
    INSTRUCTION(SLT, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   587
    INSTRUCTION(SGE, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   588
    INSTRUCTION(EXP, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   589
    INSTRUCTION(LOG, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   590
    INSTRUCTION(LIT, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   591
    INSTRUCTION(DST, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   592
    INSTRUCTION(LRP, 4),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   593
    INSTRUCTION(FRC, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   594
    INSTRUCTION(M4X4, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   595
    INSTRUCTION(M4X3, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   596
    INSTRUCTION(M3X4, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   597
    INSTRUCTION(M3X3, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   598
    INSTRUCTION(M3X2, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   599
    INSTRUCTION(CALL, 1),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   600
    INSTRUCTION(CALLNZ, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   601
    INSTRUCTION(LOOP, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   602
    INSTRUCTION(RET, 0),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   603
    INSTRUCTION(ENDLOOP, 0),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   604
    INSTRUCTION(LABEL, 1),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   605
    INSTRUCTION(DCL, -1),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   606
    INSTRUCTION(POW, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   607
    INSTRUCTION(CRS, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   608
    INSTRUCTION(SGN, 4),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   609
    INSTRUCTION(ABS, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   610
    INSTRUCTION(NRM, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   611
    INSTRUCTION(SINCOS, 4),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   612
    INSTRUCTION(REP, 1),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   613
    INSTRUCTION(ENDREP, 0),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   614
    INSTRUCTION(IF, 1),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   615
    INSTRUCTION(IFC, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   616
    INSTRUCTION(ELSE, 0),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   617
    INSTRUCTION(ENDIF, 0),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   618
    INSTRUCTION(BREAK, 0),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   619
    INSTRUCTION(BREAKC, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   620
    INSTRUCTION(MOVA, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   621
    INSTRUCTION(DEFB, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   622
    INSTRUCTION(DEFI, 5),
6
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   623
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   624
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   625
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   626
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   627
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   628
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   629
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   630
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   631
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   632
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   633
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   634
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   635
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   636
    INSTRUCTION(RESERVED, 0),
89bff6a08fca [svn] Pad out instructions so indexes match.
icculus
parents: 4
diff changeset
   637
    INSTRUCTION(RESERVED, 0),
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   638
    INSTRUCTION(TEXCOORD, -1),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   639
    INSTRUCTION(TEXKILL, 1),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   640
    INSTRUCTION(TEX, -1),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   641
    INSTRUCTION(TEXBEM, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   642
    INSTRUCTION(TEXBEML, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   643
    INSTRUCTION(TEXREG2AR, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   644
    INSTRUCTION(TEXREG2GB, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   645
    INSTRUCTION(TEXM3X2PAD, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   646
    INSTRUCTION(TEXM3X2TEX, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   647
    INSTRUCTION(TEXM3X3PAD, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   648
    INSTRUCTION(TEXM3X3TEX, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   649
    INSTRUCTION(RESERVED, 0),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   650
    INSTRUCTION(TEXM3X3SPEC, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   651
    INSTRUCTION(TEXM3X3VSPEC, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   652
    INSTRUCTION(EXPP, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   653
    INSTRUCTION(LOGP, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   654
    INSTRUCTION(CND, 4),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   655
    INSTRUCTION(DEF, 5),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   656
    INSTRUCTION(TEXREG2RGB, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   657
    INSTRUCTION(TEXDP3TEX, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   658
    INSTRUCTION(TEXM3X2DEPTH, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   659
    INSTRUCTION(TEXDP3, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   660
    INSTRUCTION(TEXM3X3, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   661
    INSTRUCTION(TEXDEPTH, 1),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   662
    INSTRUCTION(CMP, 4),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   663
    INSTRUCTION(BEM, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   664
    INSTRUCTION(DP2ADD, 4),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   665
    INSTRUCTION(DSX, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   666
    INSTRUCTION(DSY, 2),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   667
    INSTRUCTION(TEXLDD, 5),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   668
    INSTRUCTION(SETP, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   669
    INSTRUCTION(TEXLDL, 3),
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   670
    INSTRUCTION(BREAKP, 1),  // src
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   671
    #undef INSTRUCTION
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   672
};
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   673
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   674
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
   675
// parse various token types...
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
   676
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   677
static int parse_instruction_token(D3D2GLSL_context *ctx)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   678
{
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   679
    const uint32 token = SWAP32(*(ctx->tokens));
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   680
    const uint32 opcode = (token & 0xFFFF);
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   681
    const uint32 controls = ((token >> 16) & 0xFF);
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   682
    const uint32 insttoks = ((token >> 24) & 0x0F);
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   683
    const int coissue = (token & 0x40000000) ? 1 : 0;
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   684
    const int predicated = (token & 0x10000000) ? 1 : 0;
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   685
    const Instruction *instruction = &instructions[opcode];
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   686
    int rc = 0;
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   687
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   688
    if ( opcode >= (sizeof (instructions) / sizeof (instructions[0])) )
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   689
        return 0;  // not an instruction token, or just not handled here.
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   690
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   691
    if ((token & 0x80000000) != 0)
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   692
        return fail(ctx, "instruction token high bit must be zero.");  // so says msdn.
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   693
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   694
    // this isn't right.
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   695
    output_line(ctx, instruction->opcode_string);
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   696
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   697
    if (instruction->arg_tokens >= 0)
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   698
    {
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   699
        if (instruction->arg_tokens != insttoks)
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   700
        {
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   701
            return failf(ctx,
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   702
                    "unexpected number of tokens (%u) for instruction '%s'.",
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   703
                    (uint) insttoks, instruction->opcode_string);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   704
        } // if
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   705
        else if (ctx->tokencount <= instruction->arg_tokens)
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   706
        {
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   707
            return failf(ctx,
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   708
                    "need more tokens (need %u, got %u) for instruction '%s'.",
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   709
                    (uint) instruction->arg_tokens, (uint) ctx->tokencount,
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   710
                    instruction->opcode_string);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   711
        } // else if
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   712
    } // if
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   713
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   714
return insttoks + 1;
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   715
//    return instruction->parser(ctx, tokens + 1);
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   716
} // parse_instruction_token
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   717
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   718
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   719
static int parse_version_token(D3D2GLSL_context *ctx)
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   720
{
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   721
    if (ctx->tokencount == 0)
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   722
        return fail(ctx, "Expected version token, got none at all.");
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   723
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   724
    const uint32 token = SWAP32(*(ctx->tokens));
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   725
    const uint32 shadertype = ((token >> 16) & 0xFFFF);
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   726
    const uint32 major = ((token >> 8) & 0xFF);
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   727
    const uint32 minor = (token & 0xFF);
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   728
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   729
    if (shadertype == 0xFFFF)
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   730
        output_line(ctx, "Pixel shader");
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   731
    else if (shadertype == 0xFFFE)
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   732
        output_line(ctx, "Vertex shader");
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   733
    else
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   734
        return fail(ctx, "geometry shader? Unsupported at the moment.");
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   735
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   736
    output_line(ctx, "Version %u.%u", (uint) major, (uint) minor);
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   737
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   738
    return 1;  // ate one token.
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   739
} // parse_version_token
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   740
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   741
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   742
static int parse_comment_token(D3D2GLSL_context *ctx)
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   743
{
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   744
    const uint32 token = SWAP32(*(ctx->tokens));
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   745
    if ((token & 0xFFFF) != 0xFFFE)
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   746
        return 0;  // not a comment token.
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   747
    else if ((token & 0x80000000) != 0)
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   748
        return fail(ctx, "comment token high bit must be zero.");  // so says msdn.
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   749
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   750
    const uint32 commenttoks = ((token >> 16) & 0xFFFF);
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   751
    const uint32 commentlen = commenttoks * sizeof (uint32);
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   752
    output_line(ctx, "Comment (%u tokens, %u bytes): ",
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   753
                (uint) commenttoks, (uint) commentlen);
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   754
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   755
//    uint32 i = 0;
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   756
//    const char *comment = (const char *) (ctx->tokens+1);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   757
//    while (i < commentlen)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   758
//        fputc(comment[i++], stdout);
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   759
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   760
    return commenttoks + 1;  // comment data plus the initial token.
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   761
} // parse_comment_token
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   762
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   763
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   764
static int parse_end_token(D3D2GLSL_context *ctx)
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   765
{
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   766
    if (SWAP32(*(ctx->tokens)) != 0x0000FFFF)   // end token always 0x0000FFFF.
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   767
        return 0;  // not us, eat no tokens.
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   768
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   769
    output_line(ctx, "END");
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   770
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   771
    if (ctx->tokencount != 1)  // we _must_ be last. If not: fail.
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   772
        return fail(ctx, "end token before end of stream");
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   773
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   774
    return END_OF_STREAM;
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   775
} // parse_end_token
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   776
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   777
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   778
static int parse_phase_token(D3D2GLSL_context *ctx)
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   779
{
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   780
    if (SWAP32(*(ctx->tokens)) != 0x0000FFFD) // phase token always 0x0000FFFD.
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   781
        return 0;  // not us, eat no tokens.
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   782
    return fail(ctx, "not sure what this thing is yet.");
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   783
} // parse_phase_token
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   784
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   785
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   786
static int parse_token(D3D2GLSL_context *ctx)
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   787
{
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   788
    int rc = 0;
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   789
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   790
    if (ctx->failstr != NULL)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   791
        return FAIL;  // just in case...catch previously unhandled fails here.
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   792
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   793
    if (ctx->tokencount == 0)
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   794
        return fail(ctx, "unexpected end of shader.");
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   795
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   796
    if ((rc = parse_comment_token(ctx)) != 0)
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   797
        return rc;
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   798
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   799
    if ((rc = parse_end_token(ctx)) != 0)
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   800
        return rc;
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   801
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   802
    if ((rc = parse_phase_token(ctx)) != 0)
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   803
        return rc;
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   804
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   805
    if ((rc = parse_instruction_token(ctx)) != 0)
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   806
        return rc;
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   807
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   808
    return failf(ctx, "unknown token (%u)", (uint) *ctx->tokens);
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   809
} // parse_token
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   810
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   811
7
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
   812
// API entry point...
18bf77bb8c07 [svn] Cleanups, split things out.
icculus
parents: 6
diff changeset
   813
9
aea1b254e6a5 [svn] Patched to compile.
icculus
parents: 8
diff changeset
   814
int D3D2GLSL_parse(const unsigned char *tokenbuf, const unsigned int bufsize)
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   815
{
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   816
    D3D2GLSL_context ctx;
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   817
    int rc = 0;
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   818
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   819
    memset(&ctx, '\0', sizeof (D3D2GLSL_context));
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   820
    ctx.tokens = (const uint32 *) tokenbuf;
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   821
    ctx.tokencount = bufsize / sizeof (uint32);
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   822
    rc = parse_version_token(&ctx);
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   823
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   824
    // parse out the rest of the tokens after the version token...
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   825
    while (rc > 0)
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   826
    {
11
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   827
        ctx.tokens += rc;
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   828
        ctx.tokencount -= rc;
c9bb617d9b77 [svn] Pass around a context struct, so we can start tracking state, etc.
icculus
parents: 9
diff changeset
   829
        rc = parse_token(&ctx);
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   830
    } // while
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   831
12
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   832
    // !!! FIXME: temp
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   833
    if (ctx.output != NULL)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   834
        printf("%s\n", ctx.output);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   835
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   836
    if (ctx.failstr != NULL)
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   837
        printf("FAIL: %s\n", ctx.failstr);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   838
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   839
    free(ctx.failstr);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   840
    free(ctx.output);
d81712dd1a46 [svn] Cleaned up and improved output and fail state.
icculus
parents: 11
diff changeset
   841
2
c37210f5e87b [svn] Bunch More Work. Parse out instruction tokens, fail in a bunch of new stubs.
icculus
parents: 1
diff changeset
   842
    return (rc == END_OF_STREAM);
1
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   843
} // D3D2GLSL_parse
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   844
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   845
// end of parse.c ...
99ac16070d07 [svn] Initial add.
icculus
parents:
diff changeset
   846