tgsi: allow negation of all integer types
[mesa.git] / src / gallium / auxiliary / tgsi / tgsi_parse.h
index 439a57269b7ef4e85565b08113d88b08cdb455b9..808f31bc3878b7142816987d82c7a43f6e95121c 100644 (file)
@@ -28,6 +28,7 @@
 #ifndef TGSI_PARSE_H
 #define TGSI_PARSE_H
 
+#include "pipe/p_compiler.h"
 #include "pipe/p_shader_tokens.h"
 
 #if defined __cplusplus
@@ -43,22 +44,29 @@ struct tgsi_full_header
 struct tgsi_full_dst_register
 {
    struct tgsi_dst_register               Register;
-   struct tgsi_src_register               Indirect;
+   struct tgsi_ind_register               Indirect;
+   struct tgsi_dimension                  Dimension;
+   struct tgsi_ind_register               DimIndirect;
 };
 
 struct tgsi_full_src_register
 {
    struct tgsi_src_register         Register;
-   struct tgsi_src_register         Indirect;
+   struct tgsi_ind_register         Indirect;
    struct tgsi_dimension            Dimension;
-   struct tgsi_src_register         DimIndirect;
+   struct tgsi_ind_register         DimIndirect;
 };
 
 struct tgsi_full_declaration
 {
    struct tgsi_declaration Declaration;
    struct tgsi_declaration_range Range;
+   struct tgsi_declaration_dimension Dim;
+   struct tgsi_declaration_interp Interp;
    struct tgsi_declaration_semantic Semantic;
+   struct tgsi_declaration_resource Resource;
+   struct tgsi_declaration_sampler_view SamplerView;
+   struct tgsi_declaration_array Array;
 };
 
 struct tgsi_full_immediate
@@ -74,7 +82,8 @@ struct tgsi_full_property
 };
 
 #define TGSI_FULL_MAX_DST_REGISTERS 2
-#define TGSI_FULL_MAX_SRC_REGISTERS 4 /* TXD has 4 */
+#define TGSI_FULL_MAX_SRC_REGISTERS 5 /* SAMPLE_D has 5 */
+#define TGSI_FULL_MAX_TEX_OFFSETS 4
 
 struct tgsi_full_instruction
 {
@@ -84,6 +93,7 @@ struct tgsi_full_instruction
    struct tgsi_instruction_texture     Texture;
    struct tgsi_full_dst_register       Dst[TGSI_FULL_MAX_DST_REGISTERS];
    struct tgsi_full_src_register       Src[TGSI_FULL_MAX_SRC_REGISTERS];
+   struct tgsi_texture_offset          TexOffsets[TGSI_FULL_MAX_TEX_OFFSETS];
 };
 
 union tgsi_full_token
@@ -123,12 +133,24 @@ void
 tgsi_parse_token(
    struct tgsi_parse_context *ctx );
 
-unsigned
-tgsi_num_tokens(const struct tgsi_token *tokens);
+static INLINE unsigned
+tgsi_num_tokens(const struct tgsi_token *tokens)
+{
+   struct tgsi_header header;
+   memcpy(&header, tokens, sizeof(header));
+   return header.HeaderSize + header.BodySize;
+}
+
+void
+tgsi_dump_tokens(const struct tgsi_token *tokens);
 
 struct tgsi_token *
 tgsi_dup_tokens(const struct tgsi_token *tokens);
 
+struct tgsi_token *
+tgsi_alloc_tokens(unsigned num_tokens);
+
+
 #if defined __cplusplus
 }
 #endif