Home | History | Annotate | Download | only in tgsi
      1 /**************************************************************************
      2  *
      3  * Copyright 2007 VMware, Inc.
      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 VMWARE 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_ind_register               Indirect;
     48    struct tgsi_dimension                  Dimension;
     49    struct tgsi_ind_register               DimIndirect;
     50 };
     51 
     52 struct tgsi_full_src_register
     53 {
     54    struct tgsi_src_register         Register;
     55    struct tgsi_ind_register         Indirect;
     56    struct tgsi_dimension            Dimension;
     57    struct tgsi_ind_register         DimIndirect;
     58 };
     59 
     60 struct tgsi_full_declaration
     61 {
     62    struct tgsi_declaration Declaration;
     63    struct tgsi_declaration_range Range;
     64    struct tgsi_declaration_dimension Dim;
     65    struct tgsi_declaration_interp Interp;
     66    struct tgsi_declaration_semantic Semantic;
     67    struct tgsi_declaration_image Image;
     68    struct tgsi_declaration_sampler_view SamplerView;
     69    struct tgsi_declaration_array Array;
     70 };
     71 
     72 struct tgsi_full_immediate
     73 {
     74    struct tgsi_immediate   Immediate;
     75    union tgsi_immediate_data u[4];
     76 };
     77 
     78 struct tgsi_full_property
     79 {
     80    struct tgsi_property   Property;
     81    struct tgsi_property_data u[8];
     82 };
     83 
     84 #define TGSI_FULL_MAX_DST_REGISTERS 2
     85 #define TGSI_FULL_MAX_SRC_REGISTERS 5 /* SAMPLE_D has 5 */
     86 #define TGSI_FULL_MAX_TEX_OFFSETS 4
     87 
     88 struct tgsi_full_instruction
     89 {
     90    struct tgsi_instruction             Instruction;
     91    struct tgsi_instruction_predicate   Predicate;
     92    struct tgsi_instruction_label       Label;
     93    struct tgsi_instruction_texture     Texture;
     94    struct tgsi_instruction_memory      Memory;
     95    struct tgsi_full_dst_register       Dst[TGSI_FULL_MAX_DST_REGISTERS];
     96    struct tgsi_full_src_register       Src[TGSI_FULL_MAX_SRC_REGISTERS];
     97    struct tgsi_texture_offset          TexOffsets[TGSI_FULL_MAX_TEX_OFFSETS];
     98 };
     99 
    100 union tgsi_full_token
    101 {
    102    struct tgsi_token             Token;
    103    struct tgsi_full_declaration  FullDeclaration;
    104    struct tgsi_full_immediate    FullImmediate;
    105    struct tgsi_full_instruction  FullInstruction;
    106    struct tgsi_full_property     FullProperty;
    107 };
    108 
    109 struct tgsi_parse_context
    110 {
    111    const struct tgsi_token    *Tokens;
    112    unsigned                   Position;
    113    struct tgsi_full_header    FullHeader;
    114    union tgsi_full_token      FullToken;
    115 };
    116 
    117 #define TGSI_PARSE_OK      0
    118 #define TGSI_PARSE_ERROR   1
    119 
    120 unsigned
    121 tgsi_parse_init(
    122    struct tgsi_parse_context *ctx,
    123    const struct tgsi_token *tokens );
    124 
    125 void
    126 tgsi_parse_free(
    127    struct tgsi_parse_context *ctx );
    128 
    129 boolean
    130 tgsi_parse_end_of_tokens(
    131    struct tgsi_parse_context *ctx );
    132 
    133 void
    134 tgsi_parse_token(
    135    struct tgsi_parse_context *ctx );
    136 
    137 static inline unsigned
    138 tgsi_num_tokens(const struct tgsi_token *tokens)
    139 {
    140    struct tgsi_header header;
    141    memcpy(&header, tokens, sizeof(header));
    142    return header.HeaderSize + header.BodySize;
    143 }
    144 
    145 void
    146 tgsi_dump_tokens(const struct tgsi_token *tokens);
    147 
    148 struct tgsi_token *
    149 tgsi_dup_tokens(const struct tgsi_token *tokens);
    150 
    151 struct tgsi_token *
    152 tgsi_alloc_tokens(unsigned num_tokens);
    153 
    154 void
    155 tgsi_free_tokens(const struct tgsi_token *tokens);
    156 
    157 unsigned
    158 tgsi_get_processor_type(const struct tgsi_token *tokens);
    159 
    160 #if defined __cplusplus
    161 }
    162 #endif
    163 
    164 #endif /* TGSI_PARSE_H */
    165 
    166