diff options
Diffstat (limited to 'gs/imdi/imdi_gen.h')
-rw-r--r-- | gs/imdi/imdi_gen.h | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/gs/imdi/imdi_gen.h b/gs/imdi/imdi_gen.h new file mode 100644 index 000000000..cc9951b6e --- /dev/null +++ b/gs/imdi/imdi_gen.h @@ -0,0 +1,108 @@ +#ifndef IMDI_GEN_H +#define IMDI_GEN_H + +/* Integer Multi-Dimensional Interpolation */ +/* + * Copyright 2000 - 2002 Graeme W. Gill + * All rights reserved. + * + * This material is licenced under the GNU GENERAL PUBLIC LICENCE :- + * see the Licence.txt file for licencing details. + */ + +/* Kernel code generation definitions */ + +#include "imdi.h" +#include "arch.h" + +typedef enum { + invalid_dir = 0, + forward = 1, /* 8 Bits per value, pixel interleaved, no padding */ + backward = 2 /* 8 bits per value, plane interleaved */ +} imdi_dir; + +/* -------------------------------------------------- */ +/* High level kernel generation description */ + +/* This sructure allows a series of related kernels to be generated, */ +/* the only variation being the number of input and output dimensions. */ +typedef struct { + int idcombs[10]; /* Input dimension combinations (0 at end) */ + int itres[10]; /* Interpolation table resolutions for each input dimension */ + int stres[10]; /* Simplex table resolutions for each input dimension */ + int odcombs[10]; /* Output dimensions combinations (0 at end) */ + imdi_pixrep incombs[10];/* Input pixel representation combinations */ + imdi_pixrep outcombs[10]; /* Output pixel representation combinations */ + imdi_dir dircombs[10]; /* Direction combinations (not implemented) */ +} gendesc; + +/* -------------------------------------------------- */ +/* Detailed level of generation specification */ + +/* Pixel layout: */ +/* Each channel value is assumed to be read with a */ +/* native machine single read of size bpch, */ +/* and bov and bpv being bit indexes into that value. */ +/* */ +/* If pint == 0, then each read will be of size bpch[], and will */ +/* have its own pointer, will be incremented by chi[]. */ +/* If pint != 0, then the reads will be size bpch[0], from successive */ +/* locations, chi[] apart. */ +/* */ +/* If packed == 0, then separate reads are needed for each input */ +/* channel. */ +/* If packed != 0, then the channel values will be extracted */ +/* from a single read of size bpch[0] */ +/* */ +/* Note that at all times the bit offset and size values */ +/* will be obeyed for each input value. */ + +typedef struct { + int bpch[IXDIDO]; /* Bits per channel read (must be divisible by 8) */ + int chi[IXDIDO]; /* channel increment in multiples of bpch[] (0 == dimensionality) */ + int bov[IXDIDO]; /* Bit offset to value within channel */ + int bpv[IXDIDO]; /* Bits per value within channel */ + int pint; /* Flag - nonz if pixel interleaved (ie. reads from successice locations) */ + int packed; /* Flag - nonz if all channels are packed into a single read */ +} pixlayout; + +/* Structure that specifies the configuration of a generated interpolation kernel. */ +typedef struct { + /* Input to code generator */ + int prec; /* Basic precision:- either 8 or 16 bits, determined by irep */ + int id; /* Number of input dimensions */ + int od; /* Number of output dimensions */ + imdi_pixrep irep;/* Input pixel representation */ + imdi_pixrep orep;/* Output pixel representation */ + int in_signed; /* Bit flag per channel, NZ if treat as signed (runtime setup) */ + int out_signed; /* Bit flag per channel, NZ if treat as signed (runtime setup) */ + pixlayout in; /* Input pixel layout */ + pixlayout out; /* Output pixel layout */ + int dir; /* forward or backward (not implemented */ + int itres; /* Interpolation table resolution */ + int stres; /* Simplex table resolution */ + + /* Returned value */ + char kkeys[100]; /* Kernel keys */ + char kdesc[100]; /* At genspec time */ + char kname[100]; /* At generation time */ +} genspec; + +/* Supported code generators */ + +int gen_c_kernel(genspec *g, mach_arch *a, FILE *fp, int index); /* The 'C' code generator */ + +/* asm, MMX, etc. generators declarations go here ! */ + +#endif /* IMDI_GEN_H */ + + + + + + + + + + + |