Home | History | Annotate | Download | only in tgsi
      1 /**************************************************************************
      2  *
      3  * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
      4  * All Rights Reserved.
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a
      7  * copy of this software and associated documentation files (the
      8  * "Software"), to deal in the Software without restriction, including
      9  * without limitation the rights to use, copy, modify, merge, publish,
     10  * distribute, sub license, and/or sell copies of the Software, and to
     11  * permit persons to whom the Software is furnished to do so, subject to
     12  * the following conditions:
     13  *
     14  * The above copyright notice and this permission notice (including the
     15  * next paragraph) shall be included in all copies or substantial portions
     16  * of the Software.
     17  *
     18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     19  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     20  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
     21  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
     22  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     23  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     24  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     25  *
     26  **************************************************************************/
     27 
     28 #ifndef TGSI_PARSE_H
     29 #define TGSI_PARSE_H
     30 
     31 #include "pipe/p_compiler.h"
     32 #include "pipe/p_shader_tokens.h"
     33 
     34 #if defined __cplusplus
     35 extern "C" {
     36 #endif
     37 
     38 struct tgsi_full_header
     39 {
     40    struct tgsi_header      Header;
     41    struct tgsi_processor   Processor;
     42 };
     43 
     44 struct tgsi_full_dst_register
     45 {
     46    struct tgsi_dst_register               Register;
     47    struct tgsi_src_register               Indirect;
     48    struct tgsi_dimension                  Dimension;
     49    struct tgsi_src_register               DimIndirect;
     50 };
     51 
     52 struct tgsi_full_src_register
     53 {
     54    struct tgsi_src_register         Register;
     55    struct tgsi_src_register         Indirect;
     56    struct tgsi_dimension            Dimension;
     57    struct tgsi_src_register         DimIndirect;
     58 };
     59 
     60 struct tgsi_immediate_array_data
     61 {
     62    union tgsi_immediate_data *u;
     63 };
     64 
     65 struct tgsi_full_declaration
     66 {
     67    struct tgsi_declaration Declaration;
     68    struct tgsi_declaration_range Range;
     69    struct tgsi_declaration_dimension Dim;
     70    struct tgsi_declaration_interp Interp;
     71    struct tgsi_declaration_semantic Semantic;
     72    struct tgsi_immediate_array_data ImmediateData;
     73    struct tgsi_declaration_resource Resource;
     74    struct tgsi_declaration_sampler_view SamplerView;
     75 };
     76 
     77 struct tgsi_full_immediate
     78 {
     79    struct tgsi_immediate   Immediate;
     80    union tgsi_immediate_data u[4];
     81 };
     82 
     83 struct tgsi_full_property
     84 {
     85    struct tgsi_property   Property;
     86    struct tgsi_property_data u[8];
     87 };
     88 
     89 #define TGSI_FULL_MAX_DST_REGISTERS 2
     90 #define TGSI_FULL_MAX_SRC_REGISTERS 5 /* SAMPLE_D has 5 */
     91 #define TGSI_FULL_MAX_TEX_OFFSETS 4
     92 
     93 struct tgsi_full_instruction
     94 {
     95    struct tgsi_instruction             Instruction;
     96    struct tgsi_instruction_predicate   Predicate;
     97    struct tgsi_instruction_label       Label;
     98    struct tgsi_instruction_texture     Texture;
     99    struct tgsi_full_dst_register       Dst[TGSI_FULL_MAX_DST_REGISTERS];
    100    struct tgsi_full_src_register       Src[TGSI_FULL_MAX_SRC_REGISTERS];
    101    struct tgsi_texture_offset          TexOffsets[TGSI_FULL_MAX_TEX_OFFSETS];
    102 };
    103 
    104 union tgsi_full_token
    105 {
    106    struct tgsi_token             Token;
    107    struct tgsi_full_declaration  FullDeclaration;
    108    struct tgsi_full_immediate    FullImmediate;
    109    struct tgsi_full_instruction  FullInstruction;
    110    struct tgsi_full_property     FullProperty;
    111 };
    112 
    113 struct tgsi_parse_context
    114 {
    115    const struct tgsi_token    *Tokens;
    116    unsigned                   Position;
    117    struct tgsi_full_header    FullHeader;
    118    union tgsi_full_token      FullToken;
    119 };
    120 
    121 #define TGSI_PARSE_OK      0
    122 #define TGSI_PARSE_ERROR   1
    123 
    124 unsigned
    125 tgsi_parse_init(
    126    struct tgsi_parse_context *ctx,
    127    const struct tgsi_token *tokens );
    128 
    129 void
    130 tgsi_parse_free(
    131    struct tgsi_parse_context *ctx );
    132 
    133 boolean
    134 tgsi_parse_end_of_tokens(
    135    struct tgsi_parse_context *ctx );
    136 
    137 void
    138 tgsi_parse_token(
    139    struct tgsi_parse_context *ctx );
    140 
    141 static INLINE unsigned
    142 tgsi_num_tokens(const struct tgsi_token *tokens)
    143 {
    144    struct tgsi_header header;
    145    memcpy(&header, tokens, sizeof(header));
    146    return header.HeaderSize + header.BodySize;
    147 }
    148 
    149 void
    150 tgsi_dump_tokens(const struct tgsi_token *tokens);
    151 
    152 struct tgsi_token *
    153 tgsi_dup_tokens(const struct tgsi_token *tokens);
    154 
    155 struct tgsi_token *
    156 tgsi_alloc_tokens(unsigned num_tokens);
    157 
    158 
    159 #if defined __cplusplus
    160 }
    161 #endif
    162 
    163 #endif /* TGSI_PARSE_H */
    164 
    165