Mesa (master): r600g: add SGE and SLE opcodes

2010-08-18 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: be288c3505429811adc2743c1be2c1971f4483a2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=be288c3505429811adc2743c1be2c1971f4483a2

Author: Dave Airlie airl...@redhat.com
Date:   Wed Aug 18 15:53:29 2010 +1000

r600g: add SGE and SLE opcodes

fixes fp-set-01 and glsl-fs-step

---

 src/gallium/drivers/r600/r600_shader.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index ea1dd1e..1487c4e 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -1216,7 +1216,7 @@ static struct r600_shader_tgsi_instruction 
r600_shader_tgsi_instruction[] = {
{TGSI_OPCODE_MIN,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MIN, 
tgsi_op2},
{TGSI_OPCODE_MAX,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MAX, 
tgsi_op2},
{TGSI_OPCODE_SLT,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_SETGT, 
tgsi_slt},
-   {TGSI_OPCODE_SGE,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
+   {TGSI_OPCODE_SGE,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_SETGE, 
tgsi_op2},
{TGSI_OPCODE_MAD,   1, V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_MULADD, 
tgsi_op3},
{TGSI_OPCODE_SUB,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_ADD, 
tgsi_op2},
{TGSI_OPCODE_LRP,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_lrp},
@@ -1253,7 +1253,7 @@ static struct r600_shader_tgsi_instruction 
r600_shader_tgsi_instruction[] = {
{TGSI_OPCODE_SFL,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
{TGSI_OPCODE_SGT,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
{TGSI_OPCODE_SIN,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
-   {TGSI_OPCODE_SLE,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
+   {TGSI_OPCODE_SLE,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_SETGE, 
tgsi_slt},
{TGSI_OPCODE_SNE,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
{TGSI_OPCODE_STR,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
{TGSI_OPCODE_TEX,   0, SQ_TEX_INST_SAMPLE, tgsi_tex},

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600g: add FRC, FLR, DDX and DDY

2010-08-18 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 3af87162cd0d3107cb2af0812ce4e4680b177725
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3af87162cd0d3107cb2af0812ce4e4680b177725

Author: Dave Airlie airl...@redhat.com
Date:   Wed Aug 18 16:10:16 2010 +1000

r600g: add FRC, FLR, DDX and DDY

the first two are straight op2's and the DDX/DDY are taken from r600c.

---

 src/gallium/drivers/r600/r600_shader.c |8 
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 1487c4e..828082d 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -1227,9 +1227,9 @@ static struct r600_shader_tgsi_instruction 
r600_shader_tgsi_instruction[] = {
/* gap */
{22,0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
{23,0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
-   {TGSI_OPCODE_FRC,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
+   {TGSI_OPCODE_FRC,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FRACT, 
tgsi_op2},
{TGSI_OPCODE_CLAMP, 0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
-   {TGSI_OPCODE_FLR,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
+   {TGSI_OPCODE_FLR,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FLOOR, 
tgsi_op2},
{TGSI_OPCODE_ROUND, 0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
{TGSI_OPCODE_EX2,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_EXP_IEEE, 
tgsi_trans_srcx_replicate},
{TGSI_OPCODE_LG2,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_LOG_IEEE, 
tgsi_trans_srcx_replicate},
@@ -1241,8 +1241,8 @@ static struct r600_shader_tgsi_instruction 
r600_shader_tgsi_instruction[] = {
{TGSI_OPCODE_RCC,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
{TGSI_OPCODE_DPH,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
{TGSI_OPCODE_COS,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
-   {TGSI_OPCODE_DDX,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
-   {TGSI_OPCODE_DDY,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
+   {TGSI_OPCODE_DDX,   0, SQ_TEX_INST_GET_GRADIENTS_H, tgsi_tex},
+   {TGSI_OPCODE_DDY,   0, SQ_TEX_INST_GET_GRADIENTS_V, tgsi_tex},
{TGSI_OPCODE_KILP,  0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},  /* predicated kill */
{TGSI_OPCODE_PK2H,  0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},
{TGSI_OPCODE_PK2US, 0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
tgsi_unsupported},

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glcpp: Add two new tests for testing redefined macros.

2010-08-18 Thread Carl Worth
Module: Mesa
Branch: master
Commit: 105e2137d67b98c24251be3586985fb61aeaf28a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=105e2137d67b98c24251be3586985fb61aeaf28a

Author: Carl Worth cwo...@cworth.org
Date:   Tue Aug 17 23:19:01 2010 -0700

glcpp: Add two new tests for testing redefined macros.

The specification says that redefining a macro is an error, unless the
new definitions is identical to the old one, (identical replacement
lists but ignoring differing amounts of whitespace).

---

 .../glcpp/tests/088-redefine-macro-legitimate.c|5 +++
 .../tests/088-redefine-macro-legitimate.c.expected |6 
 src/glsl/glcpp/tests/089-redefine-macro-error.c|   17 +++
 .../tests/089-redefine-macro-error.c.expected  |   30 
 4 files changed, 58 insertions(+), 0 deletions(-)

diff --git a/src/glsl/glcpp/tests/088-redefine-macro-legitimate.c 
b/src/glsl/glcpp/tests/088-redefine-macro-legitimate.c
new file mode 100644
index 000..0e0666b
--- /dev/null
+++ b/src/glsl/glcpp/tests/088-redefine-macro-legitimate.c
@@ -0,0 +1,5 @@
+#define abc 123
+#define abc 123
+
+#define foo(x) (x)+23
+#define foo(x) ( x ) + 23
diff --git a/src/glsl/glcpp/tests/088-redefine-macro-legitimate.c.expected 
b/src/glsl/glcpp/tests/088-redefine-macro-legitimate.c.expected
new file mode 100644
index 000..6fb66a5
--- /dev/null
+++ b/src/glsl/glcpp/tests/088-redefine-macro-legitimate.c.expected
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/glsl/glcpp/tests/089-redefine-macro-error.c 
b/src/glsl/glcpp/tests/089-redefine-macro-error.c
new file mode 100644
index 000..b3d1391
--- /dev/null
+++ b/src/glsl/glcpp/tests/089-redefine-macro-error.c
@@ -0,0 +1,17 @@
+#define x y
+#define x z
+
+#define abc 123
+#define abc() 123
+
+#define foo() bar
+#define foo(x) bar
+
+#define bar() baz
+#define bar baz
+
+#define biff(a,b) a+b
+#define biff(a,b,c) a+b
+
+#define oper(a,b) a+b
+#define oper(a,b) a*b
diff --git a/src/glsl/glcpp/tests/089-redefine-macro-error.c.expected 
b/src/glsl/glcpp/tests/089-redefine-macro-error.c.expected
new file mode 100644
index 000..6209ead
--- /dev/null
+++ b/src/glsl/glcpp/tests/089-redefine-macro-error.c.expected
@@ -0,0 +1,30 @@
+0:2(9): preprocessor error: Redefinition of macro x
+
+0:5(9): preprocessor error: Redefinition of macro abc
+
+0:8(9): preprocessor error: Redefinition of macro foo
+
+0:11(9): preprocessor error: Redefinition of macro bar
+
+0:14(9): preprocessor error: Redefinition of macro biff
+
+0:17(9): preprocessor error: Redefinition of macro oper
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glcpp: Allow standalone glcpp to accept a filename as first argument.

2010-08-18 Thread Carl Worth
Module: Mesa
Branch: master
Commit: 97638aa77c509cd37dea499202d31357926a0e2a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=97638aa77c509cd37dea499202d31357926a0e2a

Author: Carl Worth cwo...@cworth.org
Date:   Tue Aug 17 23:13:56 2010 -0700

glcpp: Allow standalone glcpp to accept a filename as first argument.

This is useful for debugging the preprocessor.

---

 src/glsl/glcpp/glcpp.c |   14 +++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/glsl/glcpp/glcpp.c b/src/glsl/glcpp/glcpp.c
index a245cb5..e49a1df 100644
--- a/src/glsl/glcpp/glcpp.c
+++ b/src/glsl/glcpp/glcpp.c
@@ -69,12 +69,20 @@ load_text_file(void *ctx, const char *file_name)
 }
 
 int
-main (void)
+main (int argc, char *argv[])
 {
+   char *filename = NULL;
void *ctx = talloc(NULL, void*);
-   const char *shader = load_text_file(ctx, NULL);
char *info_log = talloc_strdup(ctx, );
-   int ret = preprocess(ctx, shader, info_log, NULL);
+   const char *shader;
+   int ret;
+
+   if (argc) {
+   filename = argv[1];
+   }
+
+   shader = load_text_file(ctx, filename);
+   ret = preprocess(ctx, shader, info_log, NULL);
 
printf(%s, shader);
fprintf(stderr, %s, info_log);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glcpp: Add support for redefined macro error.

2010-08-18 Thread Carl Worth
Module: Mesa
Branch: master
Commit: 3882cf21696d2576bd3d855dbc97c9354f72a15f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3882cf21696d2576bd3d855dbc97c9354f72a15f

Author: Carl Worth cwo...@cworth.org
Date:   Tue Aug 17 23:20:58 2010 -0700

glcpp: Add support for redefined macro error.

Carefully avoiding printing any error when the new definition matches
the existing definition.

This fixes the recently-added 088-redefine-macro-legitimate.c and
089-redefine-macro-error.c tests as well as glsparsertest/preprocess1
in piglit.

---

 src/glsl/glcpp/glcpp-parse.y |  125 +-
 1 files changed, 123 insertions(+), 2 deletions(-)

diff --git a/src/glsl/glcpp/glcpp-parse.y b/src/glsl/glcpp/glcpp-parse.y
index c91da15..3275496 100644
--- a/src/glsl/glcpp/glcpp-parse.y
+++ b/src/glsl/glcpp/glcpp-parse.y
@@ -63,6 +63,9 @@ _string_list_contains (string_list_t *list, const char 
*member, int *index);
 static int
 _string_list_length (string_list_t *list);
 
+static int
+_string_list_equal (string_list_t *a, string_list_t *b);
+
 static argument_list_t *
 _argument_list_create (void *ctx);
 
@@ -95,6 +98,9 @@ _token_list_append (token_list_t *list, token_t *token);
 static void
 _token_list_append_list (token_list_t *list, token_list_t *tail);
 
+static int
+_token_list_equal_ignoring_space (token_list_t *a, token_list_t *b);
+
 static active_list_t *
 _active_list_push (active_list_t *list,
   const char *identifier,
@@ -604,6 +610,31 @@ _string_list_length (string_list_t *list)
return length;
 }
 
+int
+_string_list_equal (string_list_t *a, string_list_t *b)
+{
+   string_node_t *node_a, *node_b;
+
+   if (a == NULL  b == NULL)
+   return 1;
+
+   if (a == NULL || b == NULL)
+   return 0;
+
+   for (node_a = a-head, node_b = b-head;
+node_a  node_b;
+node_a = node_a-next, node_b = node_b-next)
+   {
+   if (strcmp (node_a-str, node_b-str))
+   return 0;
+   }
+
+   /* Catch the case of lists being different lengths, (which
+* would cause the loop above to terminate after the shorter
+* list). */
+   return node_a == node_b;
+}
+
 argument_list_t *
 _argument_list_create (void *ctx)
 {
@@ -781,6 +812,61 @@ _token_list_trim_trailing_space (token_list_t *list)
}
 }
 
+int
+_token_list_equal_ignoring_space (token_list_t *a, token_list_t *b)
+{
+   token_node_t *node_a, *node_b;
+
+   node_a = a-head;
+   node_b = b-head;
+
+   while (1)
+   {
+   if (node_a == NULL  node_b == NULL)
+   break;
+
+   if (node_a == NULL || node_b == NULL)
+   return 0;
+
+   if (node_a-token-type == SPACE) {
+   node_a = node_a-next;
+   continue;
+   }
+
+   if (node_b-token-type == SPACE) {
+   node_b = node_b-next;
+   continue;
+   }
+
+   if (node_a-token-type != node_b-token-type)
+   return 0;
+
+   switch (node_a-token-type) {
+   case INTEGER:
+   if (node_a-token-value.ival != 
+   node_b-token-value.ival)
+   {
+   return 0;
+   }
+   break;
+   case IDENTIFIER:
+   case INTEGER_STRING:
+   case OTHER:
+   if (strcmp (node_a-token-value.str,
+   node_b-token-value.str))
+   {
+   return 0;
+   }
+   break;
+   }
+
+   node_a = node_a-next;
+   node_b = node_b-next;
+   }
+
+   return 1;
+}
+
 static void
 _token_print (char **out, token_t *token)
 {
@@ -1522,13 +1608,28 @@ _check_for_reserved_macro_name (glcpp_parser_t *parser, 
YYLTYPE *loc,
}
 }
 
+static int
+_macro_equal (macro_t *a, macro_t *b)
+{
+   if (a-is_function != b-is_function)
+   return 0;
+
+   if (a-is_function) {
+   if (! _string_list_equal (a-parameters, b-parameters))
+   return 0;
+   }
+
+   return _token_list_equal_ignoring_space (a-replacements,
+b-replacements);
+}
+
 void
 _define_object_macro (glcpp_parser_t *parser,
  YYLTYPE *loc,
  const char *identifier,
  token_list_t *replacements)
 {
-   macro_t *macro;
+   macro_t *macro, *previous;
 
if (loc != NULL)
_check_for_reserved_macro_name(parser, loc, identifier);
@@ -1540,6 +1641,16 @@ _define_object_macro (glcpp_parser_t *parser,
macro-identifier = talloc_strdup (macro, 

Mesa (master): glcpp: Refresh generated files.

2010-08-18 Thread Carl Worth
Module: Mesa
Branch: master
Commit: 9751b4ec60291a5fc48fe9ef27324350d148f36e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9751b4ec60291a5fc48fe9ef27324350d148f36e

Author: Carl Worth cwo...@cworth.org
Date:   Tue Aug 17 23:22:42 2010 -0700

glcpp: Refresh generated files.

After a recent change to glcpp-parse.y (adding redefined macro error).

---

 src/glsl/glcpp/glcpp-parse.c |  565 +-
 src/glsl/glcpp/glcpp-parse.h |7 +-
 2 files changed, 343 insertions(+), 229 deletions(-)

diff --git a/src/glsl/glcpp/glcpp-parse.c b/src/glsl/glcpp/glcpp-parse.c
index a19a02a..2c04d7d 100644
--- a/src/glsl/glcpp/glcpp-parse.c
+++ b/src/glsl/glcpp/glcpp-parse.c
@@ -1,9 +1,10 @@
-/* A Bison parser, made by GNU Bison 2.4.3.  */
+
+/* A Bison parser, made by GNU Bison 2.4.1.  */
 
 /* Skeleton implementation for Bison's Yacc-like parsers in C

-  Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-   2009, 2010 Free Software Foundation, Inc.
+  Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -45,7 +46,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION 2.4.3
+#define YYBISON_VERSION 2.4.1
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME yacc.c
@@ -133,6 +134,9 @@ _string_list_contains (string_list_t *list, const char 
*member, int *index);
 static int
 _string_list_length (string_list_t *list);
 
+static int
+_string_list_equal (string_list_t *a, string_list_t *b);
+
 static argument_list_t *
 _argument_list_create (void *ctx);
 
@@ -165,6 +169,9 @@ _token_list_append (token_list_t *list, token_t *token);
 static void
 _token_list_append_list (token_list_t *list, token_list_t *tail);
 
+static int
+_token_list_equal_ignoring_space (token_list_t *a, token_list_t *b);
+
 static active_list_t *
 _active_list_push (active_list_t *list,
   const char *identifier,
@@ -212,7 +219,7 @@ add_builtin_define(glcpp_parser_t *parser, const char 
*name, int value);
 
 
 /* Line 189 of yacc.c  */
-#line 216 glcpp/glcpp-parse.c
+#line 223 glcpp/glcpp-parse.c
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -300,7 +307,7 @@ typedef struct YYLTYPE
 
 
 /* Line 264 of yacc.c  */
-#line 304 glcpp/glcpp-parse.c
+#line 311 glcpp/glcpp-parse.c
 
 #ifdef short
 # undef short
@@ -350,7 +357,7 @@ typedef short int yytype_int16;
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if defined YYENABLE_NLS  YYENABLE_NLS
+# if YYENABLE_NLS
 #  if ENABLE_NLS
 #   include libintl.h /* INFRINGES ON USER NAME SPACE */
 #   define YY_(msgid) dgettext (bison-runtime, msgid)
@@ -625,17 +632,17 @@ static const yytype_int8 yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-   0,   181,   181,   183,   187,   190,   195,   196,   200,   203,
- 209,   212,   215,   218,   226,   245,   255,   260,   265,   284,
- 299,   302,   305,   314,   318,   327,   332,   333,   336,   339,
- 342,   345,   348,   351,   354,   357,   360,   363,   366,   369,
- 372,   375,   378,   381,   384,   387,   390,   393,   396,   399,
- 405,   410,   418,   419,   423,   429,   430,   433,   435,   442,
- 446,   450,   455,   461,   469,   475,   483,   487,   491,   495,
- 499,   506,   507,   508,   509,   510,   511,   512,   513,   514,
- 515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
- 525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
- 535,   536
+   0,   187,   187,   189,   193,   196,   201,   202,   206,   209,
+ 215,   218,   221,   224,   232,   251,   261,   266,   271,   290,
+ 305,   308,   311,   320,   324,   333,   338,   339,   342,   345,
+ 348,   351,   354,   357,   360,   363,   366,   369,   372,   375,
+ 378,   381,   384,   387,   390,   393,   396,   399,   402,   405,
+ 411,   416,   424,   425,   429,   435,   436,   439,   441,   448,
+ 452,   456,   461,   467,   475,   481,   489,   493,   497,   501,
+ 505,   512,   513,   514,   515,   516,   517,   518,   519,   520,
+ 521,   522,   523,   524,   525,   526,   527,   528,   529,   530,
+ 531,   532,   533,   534,   535,   536,   537,   538,   539,   540,
+ 541,   542
 };
 #endif
 
@@ -938,18 +945,9 @@ static const yytype_uint8 yystos[] =
 
 /* Like YYERROR except do call yyerror.  This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  However,
-   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
-   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
-   discussed.  */
+   Once GCC version 2 has supplanted version 1, this can 

Mesa (master): glsl2: Fix cut and paste error in EXT_texture_array builtins .

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: f70ce12529cf76b8eefae9599b35323d87d3dbaa
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f70ce12529cf76b8eefae9599b35323d87d3dbaa

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Tue Aug 17 23:47:11 2010 -0700

glsl2: Fix cut and paste error in EXT_texture_array builtins.

Fixes fd.o bug #29629.

---

 src/glsl/builtins/profiles/EXT_texture_array.frag |4 ++--
 src/glsl/builtins/profiles/EXT_texture_array.vert |4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/glsl/builtins/profiles/EXT_texture_array.frag 
b/src/glsl/builtins/profiles/EXT_texture_array.frag
index d133132..d0ce981 100644
--- a/src/glsl/builtins/profiles/EXT_texture_array.frag
+++ b/src/glsl/builtins/profiles/EXT_texture_array.frag
@@ -2,8 +2,8 @@
 vec4 texture1DArray(sampler1DArray sampler, vec2 coord);
 vec4 texture1DArray(sampler1DArray sampler, vec2 coord, float bias);
 
-vec4 texture2DArray(sampler1DArray sampler, vec2 coord);
-vec4 texture2DArray(sampler1DArray sampler, vec2 coord, float bias);
+vec4 texture2DArray(sampler2DArray sampler, vec3 coord);
+vec4 texture2DArray(sampler2DArray sampler, vec3 coord, float bias);
 
 vec4 shadow1DArray(sampler1DArrayShadow sampler, vec3 coord);
 vec4 shadow1DArray(sampler1DArrayShadow sampler, vec3 coord, float bias);
diff --git a/src/glsl/builtins/profiles/EXT_texture_array.vert 
b/src/glsl/builtins/profiles/EXT_texture_array.vert
index 4f7b2b5..6b1b7f2 100644
--- a/src/glsl/builtins/profiles/EXT_texture_array.vert
+++ b/src/glsl/builtins/profiles/EXT_texture_array.vert
@@ -2,8 +2,8 @@
 vec4 texture1DArray(sampler1DArray sampler, vec2 coord);
 vec4 texture1DArrayLod(sampler1DArray sampler, vec2 coord, float lod);
 
-vec4 texture2DArray(sampler1DArray sampler, vec2 coord);
-vec4 texture2DArrayLod(sampler1DArray sampler, vec2 coord, float lod);
+vec4 texture2DArray(sampler2DArray sampler, vec3 coord);
+vec4 texture2DArrayLod(sampler2DArray sampler, vec3 coord, float lod);
 
 vec4 shadow1DArray(sampler1DArrayShadow sampler, vec3 coord);
 vec4 shadow1DArrayLod(sampler1DArrayShadow sampler, vec3 coord, float lod);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl2: Regenerate builtin_function.cpp.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: a57b1e579d1a76a813f48ae541a1edebb7f07607
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a57b1e579d1a76a813f48ae541a1edebb7f07607

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Tue Aug 17 23:47:51 2010 -0700

glsl2: Regenerate builtin_function.cpp.

---

 src/glsl/builtin_function.cpp | 8668 
 1 files changed, 4334 insertions(+), 4334 deletions(-)

Diff:   
http://cgit.freedesktop.org/mesa/mesa/diff/?id=a57b1e579d1a76a813f48ae541a1edebb7f07607
___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600: implement DP2 opcode

2010-08-18 Thread Andre Maasikas
Module: Mesa
Branch: master
Commit: c17d5de593fbfee91b799894b1c1a8a37a6a9c95
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c17d5de593fbfee91b799894b1c1a8a37a6a9c95

Author: Andre Maasikas amaasi...@gmail.com
Date:   Wed Aug 18 11:57:28 2010 +0300

r600: implement DP2 opcode

---

 src/mesa/drivers/dri/r600/r700_assembler.c |   12 ++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c 
b/src/mesa/drivers/dri/r600/r700_assembler.c
index 94bc261..4902f76 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.c
+++ b/src/mesa/drivers/dri/r600/r700_assembler.c
@@ -3017,7 +3017,14 @@ GLboolean assemble_DOT(r700_AssemblerBase *pAsm)
 return GL_FALSE;
 }
 
-if(OPCODE_DP3 == pAsm-pILInst[pAsm-uiCurInst].Opcode)
+if(OPCODE_DP2 == pAsm-pILInst[pAsm-uiCurInst].Opcode)
+{
+   zerocomp_PVSSRC((pAsm-S[0].src),2);
+   zerocomp_PVSSRC((pAsm-S[0].src),3);
+   zerocomp_PVSSRC((pAsm-S[1].src),2);
+   zerocomp_PVSSRC((pAsm-S[1].src),3);
+}
+else if(OPCODE_DP3 == pAsm-pILInst[pAsm-uiCurInst].Opcode)
 {
 zerocomp_PVSSRC((pAsm-S[0].src), 3);
 zerocomp_PVSSRC((pAsm-S[1].src), 3);
@@ -5694,6 +5701,7 @@ GLboolean AssembleInstr(GLuint uiFirstInst,
 return GL_FALSE;
 break;  
 
+case OPCODE_DP2:
 case OPCODE_DP3: 
 case OPCODE_DP4: 
 case OPCODE_DPH: 
@@ -6019,7 +6027,7 @@ GLboolean AssembleInstr(GLuint uiFirstInst,
 return GL_TRUE;
 
 default:
-radeon_error(internal: unknown instruction\n);
+radeon_error(r600: unknown instruction %d\n, pILInst[i].Opcode);
 return GL_FALSE;
 }
 }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: Use proper index to lookup predicate register array .

2010-08-18 Thread Michał Król
Module: Mesa
Branch: master
Commit: 8690c6a6b4fb0b48e2ae75cd0f64de86b039081c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8690c6a6b4fb0b48e2ae75cd0f64de86b039081c

Author: michal mic...@capacitor.(none)
Date:   Wed Aug 18 13:16:42 2010 +0200

gallivm: Use proper index to lookup predicate register array.

Doesn't fix anything, as those indices were both always 0.

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 0aa64af..ca8db9c 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -802,7 +802,7 @@ emit_store(
 
case TGSI_FILE_PREDICATE:
   lp_exec_mask_store(bld-exec_mask, pred, value,
- bld-preds[index][chan_index]);
+ bld-preds[reg-Register.Index][chan_index]);
   break;
 
default:

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600: implement SSG instruction

2010-08-18 Thread Andre Maasikas
Module: Mesa
Branch: master
Commit: d442a01ac14382d83cdaac87d2832315ceb3e963
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d442a01ac14382d83cdaac87d2832315ceb3e963

Author: Andre Maasikas amaasi...@gmail.com
Date:   Wed Aug 18 14:14:38 2010 +0300

r600: implement SSG instruction

---

 src/mesa/drivers/dri/r600/r700_assembler.c |   66 
 src/mesa/drivers/dri/r600/r700_assembler.h |1 +
 2 files changed, 67 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c 
b/src/mesa/drivers/dri/r600/r700_assembler.c
index 4902f76..2476174 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.c
+++ b/src/mesa/drivers/dri/r600/r700_assembler.c
@@ -4369,6 +4369,65 @@ GLboolean assemble_SLT(r700_AssemblerBase *pAsm)
 return GL_TRUE;
 }
  
+GLboolean assemble_SSG(r700_AssemblerBase *pAsm)
+{
+checkop1(pAsm);
+
+GLuint tmp = gethelpr(pAsm);
+/* tmp = (src  0 ? 1 : src) */
+pAsm-D.dst.opcode = SQ_OP3_INST_CNDGT;
+pAsm-D.dst.op3= 1;
+pAsm-D.dst.rtype = DST_REG_TEMPORARY;
+pAsm-D.dst.reg   = tmp;
+
+if( GL_FALSE == assemble_src(pAsm, 0, -1) )
+{
+return GL_FALSE;
+}
+
+setswizzle_PVSSRC((pAsm-S[1].src), SQ_SEL_1);
+
+if( GL_FALSE == assemble_src(pAsm, 0, 2) )
+{
+return GL_FALSE;
+}
+
+if( GL_FALSE == next_ins(pAsm) )
+{
+return GL_FALSE;
+}
+
+/* dst = (-tmp  0 ? -1 : tmp) */
+pAsm-D.dst.opcode = SQ_OP3_INST_CNDGT;
+pAsm-D.dst.op3= 1;
+
+if( GL_FALSE == assemble_dst(pAsm) )
+{
+return GL_FALSE;
+}
+
+setaddrmode_PVSSRC((pAsm-S[0].src), ADDR_ABSOLUTE);
+pAsm-S[0].src.rtype = SRC_REG_TEMPORARY;
+pAsm-S[0].src.reg   = tmp;
+noswizzle_PVSSRC((pAsm-S[0].src));
+neg_PVSSRC((pAsm-S[0].src));
+
+setswizzle_PVSSRC((pAsm-S[1].src), SQ_SEL_1);
+neg_PVSSRC((pAsm-S[1].src));
+
+setaddrmode_PVSSRC((pAsm-S[2].src), ADDR_ABSOLUTE);
+pAsm-S[2].src.rtype = SRC_REG_TEMPORARY;
+pAsm-S[2].src.reg   = tmp;
+noswizzle_PVSSRC((pAsm-S[2].src));
+
+if( GL_FALSE == next_ins(pAsm) )
+{
+return GL_FALSE;
+}
+
+return GL_TRUE;
+}
+
 GLboolean assemble_STP(r700_AssemblerBase *pAsm) 
 {
 return GL_TRUE;
@@ -5893,6 +5952,13 @@ GLboolean AssembleInstr(GLuint uiFirstInst,
 //return GL_FALSE;
 //break;
 
+case OPCODE_SSG:
+if ( GL_FALSE == assemble_SSG(pR700AsmCode) )
+{
+return GL_FALSE;
+}
+break;
+
 case OPCODE_SWZ: 
 if ( GL_FALSE == assemble_MOV(pR700AsmCode) ) 
 {
diff --git a/src/mesa/drivers/dri/r600/r700_assembler.h 
b/src/mesa/drivers/dri/r600/r700_assembler.h
index ab954ec..f00f4da 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.h
+++ b/src/mesa/drivers/dri/r600/r700_assembler.h
@@ -625,6 +625,7 @@ GLboolean assemble_LOGIC_PRED(r700_AssemblerBase *pAsm, 
BITS opcode);
 GLboolean assemble_TRIG(r700_AssemblerBase *pAsm, BITS opcode);
 
 GLboolean assemble_SLT(r700_AssemblerBase *pAsm);
+GLboolean assemble_SSG(r700_AssemblerBase *pAsm);
 GLboolean assemble_STP(r700_AssemblerBase *pAsm);
 GLboolean assemble_TEX(r700_AssemblerBase *pAsm);
 GLboolean assemble_XPD(r700_AssemblerBase *pAsm);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 18cd153fe31a53f92f7ec1c1f93416ba8e7fd56f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=18cd153fe31a53f92f7ec1c1f93416ba8e7fd56f

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Apr 15 09:04:20 2010 +0200

mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

---

 src/mesa/state_tracker/st_cb_texture.c |4 +++-
 src/mesa/state_tracker/st_texture.c|2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index 4c3e368..a3c1ce3 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -74,9 +74,11 @@ gl_target_to_pipe(GLenum target)
   return PIPE_TEXTURE_1D;
 
case GL_TEXTURE_2D:
-   case GL_TEXTURE_RECTANGLE_NV:
   return PIPE_TEXTURE_2D;
 
+   case GL_TEXTURE_RECTANGLE_NV:
+  return PIPE_TEXTURE_RECT;
+
case GL_TEXTURE_3D:
   return PIPE_TEXTURE_3D;
 
diff --git a/src/mesa/state_tracker/st_texture.c 
b/src/mesa/state_tracker/st_texture.c
index add6e94..c6cf2ba 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -64,7 +64,7 @@ st_texture_create(struct st_context *st,
struct pipe_resource pt, *newtex;
struct pipe_screen *screen = st-pipe-screen;
 
-   assert(target = PIPE_TEXTURE_CUBE);
+   assert(target  PIPE_MAX_TEXTURE_TYPES);
assert(width0  0);
assert(height0  0);
assert(depth0  0);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): gallium: add PIPE_TEXTURE_RECT target

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 84ce64c65c549151b4ed96661d462306aa898751
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=84ce64c65c549151b4ed96661d462306aa898751

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Apr 15 09:02:29 2010 +0200

gallium: add PIPE_TEXTURE_RECT target

This allows to properly support OpenGL rectangle textures in a well
defined way, especially on drivers that don't expose
PIPE_CAP_NPOT_TEXTURES.

---

 src/gallium/docs/source/index.rst |1 +
 src/gallium/docs/source/resources.rst |   43 +
 src/gallium/include/pipe/p_defines.h  |4 ++-
 3 files changed, 47 insertions(+), 1 deletions(-)

diff --git a/src/gallium/docs/source/index.rst 
b/src/gallium/docs/source/index.rst
index 6c19842..2a73e3a 100644
--- a/src/gallium/docs/source/index.rst
+++ b/src/gallium/docs/source/index.rst
@@ -15,6 +15,7 @@ Contents:
debugging
tgsi
screen
+   resources
context
cso
distro
diff --git a/src/gallium/docs/source/resources.rst 
b/src/gallium/docs/source/resources.rst
new file mode 100644
index 000..da0f880
--- /dev/null
+++ b/src/gallium/docs/source/resources.rst
@@ -0,0 +1,43 @@
+Resources
+=
+
+Resources are a core part of Gallium's API.
+
+They represent objects that hold data: textures and buffers.
+
+They are mostly modelled after the resources in Direct3D 10/11, but with a
+different transfer/update mechanism, and more features for OpenGL support.
+
+Resource targets
+
+
+Resource targets determine the type of a resource.
+
+Note that drivers may not actually have the restrictions listed regarding
+coordinate normalization and wrap modes, and in fact efficient OpenCL
+support will probably require drivers that don't have any of them, which
+will probably advertised with an appropriate cap.
+
+TODO: document all targets. Note that both 3D and cube have restrictions
+that depend on the hardware generation.
+TODO: can buffers have a non-R8 format?
+
+PIPE_TEXTURE_RECT
+^
+2D surface with OpenGL GL_TEXTURE_RECTANGLE semantics.
+
+depth must be 1
+- last_level must be 0
+- Must use unnormalized coordinates
+- Must use a clamp wrap mode
+
+PIPE_TEXTURE_2D
+^^^
+2D surface accessed with normalized coordinates.
+
+- If PIPE_CAP_NPOT_TEXTURES is not supported,
+  width and height must be powers of two
+- Mipmaps can be used
+- Must use normalized coordinates
+- No special restrictions on wrap modes
+
diff --git a/src/gallium/include/pipe/p_defines.h 
b/src/gallium/include/pipe/p_defines.h
index 00aa207..35eccf1 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -135,13 +135,15 @@ enum pipe_error {
 #define PIPE_STENCIL_OP_DECR_WRAP  6
 #define PIPE_STENCIL_OP_INVERT 7
 
-/** Texture types */
+/** Texture types.
+ * See the documentation for info on PIPE_TEXTURE_RECT vs PIPE_TEXTURE_2D */
 enum pipe_texture_target {
PIPE_BUFFER   = 0,
PIPE_TEXTURE_1D   = 1,
PIPE_TEXTURE_2D   = 2,
PIPE_TEXTURE_3D   = 3,
PIPE_TEXTURE_CUBE = 4,
+   PIPE_TEXTURE_RECT = 5,
PIPE_MAX_TEXTURE_TYPES
 };
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): gallium: make all checks for PIPE_TEXTURE_2D check for PIPE_TEXTURE_RECT too

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: f907b4c168d6174320c626c8067a11021b29610e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f907b4c168d6174320c626c8067a11021b29610e

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Wed Aug 18 17:28:08 2010 +0200

gallium: make all checks for PIPE_TEXTURE_2D check for PIPE_TEXTURE_RECT too

Searched for them with:
git grep -E 
'[!=]=.*PIPE_TEXTURE_2D|PIPE_TEXTURE_2D.*[!=]=|case.*PIPE_TEXTURE_2D'

Behavior hasn't been changed.

---

 src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c |7 +--
 src/gallium/auxiliary/util/u_blit.c   |3 ++-
 src/gallium/auxiliary/util/u_blitter.c|3 +++
 src/gallium/auxiliary/util/u_gen_mipmap.c |1 +
 src/gallium/auxiliary/util/u_surfaces.h   |4 ++--
 src/gallium/drivers/i915/i915_resource_texture.c  |5 -
 src/gallium/drivers/i965/brw_resource_texture.c   |4 +++-
 src/gallium/drivers/llvmpipe/lp_screen.c  |1 +
 src/gallium/drivers/llvmpipe/lp_texture.c |1 +
 src/gallium/drivers/nv50/nv50_miptree.c   |3 ++-
 src/gallium/drivers/nv50/nv50_tex.c   |1 +
 src/gallium/drivers/nvfx/nv30_fragtex.c   |1 +
 src/gallium/drivers/nvfx/nv40_fragtex.c   |1 +
 src/gallium/drivers/nvfx/nvfx_miptree.c   |3 ++-
 src/gallium/drivers/r300/r300_hyperz.c|3 ++-
 src/gallium/drivers/r300/r300_texture.c   |6 --
 src/gallium/drivers/r300/r300_texture_desc.c  |6 --
 src/gallium/drivers/r600/r600_state.c |1 +
 src/gallium/drivers/r600/r600_texture.c   |3 ++-
 src/gallium/drivers/softpipe/sp_screen.c  |1 +
 src/gallium/drivers/softpipe/sp_tex_sample.c  |2 ++
 src/gallium/drivers/svga/svga_resource_texture.c  |3 ++-
 src/gallium/drivers/svga/svga_tgsi_emit.h |1 +
 src/gallium/tests/python/tests/texture_blit.py|2 +-
 src/mesa/state_tracker/st_cb_bitmap.c |2 +-
 25 files changed, 50 insertions(+), 18 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
index 806c7d5..f6b6162 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
@@ -176,6 +176,7 @@ texture_dims(enum pipe_texture_target tex)
case PIPE_TEXTURE_1D:
   return 1;
case PIPE_TEXTURE_2D:
+   case PIPE_TEXTURE_RECT:
case PIPE_TEXTURE_CUBE:
   return 2;
case PIPE_TEXTURE_3D:
@@ -1749,7 +1750,8 @@ lp_build_sample_2d_linear_aos(struct 
lp_build_sample_context *bld,
LLVMValueRef unswizzled[4];
LLVMValueRef stride;
 
-   assert(bld-static_state-target == PIPE_TEXTURE_2D);
+   assert(bld-static_state-target == PIPE_TEXTURE_2D
+ || bld-static_state-target == PIPE_TEXTURE_RECT);
assert(bld-static_state-min_img_filter == PIPE_TEX_FILTER_LINEAR);
assert(bld-static_state-mag_img_filter == PIPE_TEX_FILTER_LINEAR);
assert(bld-static_state-min_mip_filter == PIPE_TEX_MIPFILTER_NONE);
@@ -2077,7 +2079,8 @@ lp_build_sample_soa(LLVMBuilderRef builder,
}
else if (util_format_fits_8unorm(bld.format_desc) 
 bld.format_desc-nr_channels  1 
-static_state-target == PIPE_TEXTURE_2D 
+(static_state-target == PIPE_TEXTURE_2D ||
+  static_state-target == PIPE_TEXTURE_RECT) 
 static_state-min_img_filter == PIPE_TEX_FILTER_LINEAR 
 static_state-mag_img_filter == PIPE_TEX_FILTER_LINEAR 
 static_state-min_mip_filter == PIPE_TEX_MIPFILTER_NONE 
diff --git a/src/gallium/auxiliary/util/u_blit.c 
b/src/gallium/auxiliary/util/u_blit.c
index 97fa99e..30c7a96 100644
--- a/src/gallium/auxiliary/util/u_blit.c
+++ b/src/gallium/auxiliary/util/u_blit.c
@@ -347,7 +347,8 @@ util_blit_pixels_writemask(struct blit_state *ctx,
dst-face == srcsub.face 
dst-level == srcsub.level 
dst-zslice == srcZ0) ||
-   src_tex-target != PIPE_TEXTURE_2D)
+   (src_tex-target != PIPE_TEXTURE_2D 
+   src_tex-target != PIPE_TEXTURE_RECT))
{
   struct pipe_resource texTemp;
   struct pipe_resource *tex;
diff --git a/src/gallium/auxiliary/util/u_blitter.c 
b/src/gallium/auxiliary/util/u_blitter.c
index b5b86b7..1d95280 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -568,6 +568,8 @@ pipe_tex_to_tgsi_tex(enum pipe_texture_target 
pipe_tex_target)
   return TGSI_TEXTURE_1D;
case PIPE_TEXTURE_2D:
   return TGSI_TEXTURE_2D;
+   case PIPE_TEXTURE_RECT:
+  return TGSI_TEXTURE_2D;
case PIPE_TEXTURE_3D:
   return TGSI_TEXTURE_3D;
case PIPE_TEXTURE_CUBE:
@@ -806,6 +808,7 @@ void util_blitter_copy_region(struct blitter_context 
*blitter,
   /* Draw the quad with the draw_rectangle callback. */
   case PIPE_TEXTURE_1D:
   case PIPE_TEXTURE_2D:
+  case 

Mesa (gallium-rect-textures): u_blitter: use TGSI_TEXTURE_RECT

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: da37dfc9fc8b978fbb68d9372733a16a7e055735
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=da37dfc9fc8b978fbb68d9372733a16a7e055735

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Wed Aug 18 17:30:20 2010 +0200

u_blitter: use TGSI_TEXTURE_RECT

This seems to make sense, although I suspect the semantics of
TGSI_TEXTURE_RECT need to be closely reviewed.

---

 src/gallium/auxiliary/util/u_blitter.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_blitter.c 
b/src/gallium/auxiliary/util/u_blitter.c
index 1d95280..163f3d6 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -569,7 +569,7 @@ pipe_tex_to_tgsi_tex(enum pipe_texture_target 
pipe_tex_target)
case PIPE_TEXTURE_2D:
   return TGSI_TEXTURE_2D;
case PIPE_TEXTURE_RECT:
-  return TGSI_TEXTURE_2D;
+  return TGSI_TEXTURE_RECT;
case PIPE_TEXTURE_3D:
   return TGSI_TEXTURE_3D;
case PIPE_TEXTURE_CUBE:

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 338abab672939328d4b68024cf9494044dfc4103
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=338abab672939328d4b68024cf9494044dfc4103

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Apr 15 09:04:20 2010 +0200

mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

---

 src/mesa/state_tracker/st_cb_texture.c |4 +++-
 src/mesa/state_tracker/st_texture.c|2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index 4c3e368..a3c1ce3 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -74,9 +74,11 @@ gl_target_to_pipe(GLenum target)
   return PIPE_TEXTURE_1D;
 
case GL_TEXTURE_2D:
-   case GL_TEXTURE_RECTANGLE_NV:
   return PIPE_TEXTURE_2D;
 
+   case GL_TEXTURE_RECTANGLE_NV:
+  return PIPE_TEXTURE_RECT;
+
case GL_TEXTURE_3D:
   return PIPE_TEXTURE_3D;
 
diff --git a/src/mesa/state_tracker/st_texture.c 
b/src/mesa/state_tracker/st_texture.c
index add6e94..c6cf2ba 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -64,7 +64,7 @@ st_texture_create(struct st_context *st,
struct pipe_resource pt, *newtex;
struct pipe_screen *screen = st-pipe-screen;
 
-   assert(target = PIPE_TEXTURE_CUBE);
+   assert(target  PIPE_MAX_TEXTURE_TYPES);
assert(width0  0);
assert(height0  0);
assert(depth0  0);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): mesa/st: support using PIPE_TEXTURE_RECT internally

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 6d09c51a358a70d107e682fa6d4f3ba1938579ae
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6d09c51a358a70d107e682fa6d4f3ba1938579ae

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Fri Aug  6 07:39:21 2010 +0200

mesa/st: support using PIPE_TEXTURE_RECT internally

Currently Gallium internals always use PIPE_TEXTURE_2D and normalized
coordinates to access textures.

However, PIPE_TEXTURE_2D is not always supported for NPOT textures,
and PIPE_TEXTURE_RECT requires unnormalized coordinates.

Hence, this change adds support for both kinds of normalization.

---

 src/mesa/state_tracker/st_cb_bitmap.c |   23 ++-
 src/mesa/state_tracker/st_cb_drawpixels.c |   42 ++--
 src/mesa/state_tracker/st_context.c   |5 +++
 src/mesa/state_tracker/st_context.h   |3 +-
 4 files changed, 31 insertions(+), 42 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_bitmap.c 
b/src/mesa/state_tracker/st_cb_bitmap.c
index 91037ab..d40e413 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -275,7 +275,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei 
height,
/**
 * Create texture to hold bitmap pattern.
 */
-   pt = st_texture_create(st, PIPE_TEXTURE_2D, st-bitmap.tex_format,
+   pt = st_texture_create(st, st-internal_target, st-bitmap.tex_format,
   0, width, height, 1,
   PIPE_BIND_SAMPLER_VIEW);
if (!pt) {
@@ -304,7 +304,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei 
height,
 }
 
 static GLuint
-setup_bitmap_vertex_data(struct st_context *st,
+setup_bitmap_vertex_data(struct st_context *st, bool normalized,
  int x, int y, int width, int height,
  float z, const float color[4])
 {
@@ -316,13 +316,19 @@ setup_bitmap_vertex_data(struct st_context *st,
const GLfloat x1 = (GLfloat)(x + width);
const GLfloat y0 = (GLfloat)y;
const GLfloat y1 = (GLfloat)(y + height);
-   const GLfloat sLeft = (GLfloat)0.0, sRight = (GLfloat)1.0;
-   const GLfloat tTop = (GLfloat)0.0, tBot = (GLfloat)1.0 - tTop;
+   GLfloat sLeft = (GLfloat)0.0, sRight = (GLfloat)1.0;
+   GLfloat tTop = (GLfloat)0.0, tBot = (GLfloat)1.0 - tTop;
const GLfloat clip_x0 = (GLfloat)(x0 / fb_width * 2.0 - 1.0);
const GLfloat clip_y0 = (GLfloat)(y0 / fb_height * 2.0 - 1.0);
const GLfloat clip_x1 = (GLfloat)(x1 / fb_width * 2.0 - 1.0);
const GLfloat clip_y1 = (GLfloat)(y1 / fb_height * 2.0 - 1.0);
 
+   if(!normalized)
+   {
+  sRight = width;
+  tBot = height;
+   }
+
/* XXX: Need to improve buffer_write to allow NO_WAIT (as well as
 * no_flush) updates to buffers where we know there is no conflict
 * with previous data.  Currently using max_slots  1 will cause
@@ -462,7 +468,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat 
z,
   for (i = 0; i  st-state.num_samplers; i++) {
  samplers[i] = st-state.samplers[i];
   }
-  samplers[stfp-bitmap_sampler] = st-bitmap.sampler;
+  samplers[stfp-bitmap_sampler] = 
st-bitmap.samplers[sv-texture-target != PIPE_TEXTURE_RECT];
   cso_set_samplers(cso, num, (const struct pipe_sampler_state **) 
samplers);
}
 
@@ -499,7 +505,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat 
z,
z = z * 2.0 - 1.0;
 
/* draw textured quad */
-   offset = setup_bitmap_vertex_data(st, x, y, width, height, z, color);
+   offset = setup_bitmap_vertex_data(st, sv-texture-target != 
PIPE_TEXTURE_RECT, x, y, width, height, z, color);
 
util_draw_vertex_buffer(pipe, st-bitmap.vbuf, offset,
PIPE_PRIM_TRIANGLE_FAN,
@@ -789,7 +795,7 @@ st_init_bitmap_functions(struct dd_function_table 
*functions)
 void
 st_init_bitmap(struct st_context *st)
 {
-   struct pipe_sampler_state *sampler = st-bitmap.sampler;
+   struct pipe_sampler_state *sampler = st-bitmap.samplers[0];
struct pipe_context *pipe = st-pipe;
struct pipe_screen *screen = pipe-screen;
 
@@ -801,7 +807,8 @@ st_init_bitmap(struct st_context *st)
sampler-min_img_filter = PIPE_TEX_FILTER_NEAREST;
sampler-min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
sampler-mag_img_filter = PIPE_TEX_FILTER_NEAREST;
-   sampler-normalized_coords = 1;
+   st-bitmap.samplers[1] = *sampler;
+   st-bitmap.samplers[1].normalized_coords = 1;
 
/* init baseline rasterizer state once */
memset(st-bitmap.rasterizer, 0, sizeof(st-bitmap.rasterizer));
diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c 
b/src/mesa/state_tracker/st_cb_drawpixels.c
index 69a3dd4..d934fdc 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -304,34 +304,9 @@ alloc_texture(struct st_context *st, GLsizei width, 
GLsizei height,
struct pipe_context *pipe = st-pipe;
struct pipe_screen *screen = pipe-screen;
struct 

Mesa (gallium-rect-textures): auxiliary: support using PIPE_TEXTURE_RECT internally

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: d1bb7254071fb21185069ad10e5024cab6e01d41
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d1bb7254071fb21185069ad10e5024cab6e01d41

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Fri Aug  6 07:39:21 2010 +0200

auxiliary: support using PIPE_TEXTURE_RECT internally

Currently Gallium internals always use PIPE_TEXTURE_2D and normalized
coordinates to access textures.

However, PIPE_TEXTURE_2D is not always supported for NPOT textures,
and PIPE_TEXTURE_RECT requires unnormalized coordinates.

Hence, this change adds support for both kinds of normalization.

---

 src/gallium/auxiliary/util/u_blit.c|   67 
 src/gallium/auxiliary/util/u_blitter.c |   48 +++
 2 files changed, 81 insertions(+), 34 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_blit.c 
b/src/gallium/auxiliary/util/u_blit.c
index 30c7a96..6fb341e 100644
--- a/src/gallium/auxiliary/util/u_blit.c
+++ b/src/gallium/auxiliary/util/u_blit.c
@@ -62,6 +62,7 @@ struct blit_state
struct pipe_viewport_state viewport;
struct pipe_clip_state clip;
struct pipe_vertex_element velem[2];
+   enum pipe_texture_target internal_target;
 
void *vs;
void *fs[TGSI_WRITEMASK_XYZW + 1];
@@ -110,7 +111,6 @@ util_create_blit(struct pipe_context *pipe, struct 
cso_context *cso)
ctx-sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
ctx-sampler.min_img_filter = 0; /* set later */
ctx-sampler.mag_img_filter = 0; /* set later */
-   ctx-sampler.normalized_coords = 1;
 
/* vertex elements state */
memset(ctx-velem[0], 0, sizeof(ctx-velem[0]) * 2);
@@ -145,6 +145,11 @@ util_create_blit(struct pipe_context *pipe, struct 
cso_context *cso)
   ctx-vertices[i][1][3] = 1.0f; /* q */
}
 
+   if(pipe-screen-get_param(pipe-screen, PIPE_CAP_NPOT_TEXTURES))
+  ctx-internal_target = PIPE_TEXTURE_2D;
+   else
+  ctx-internal_target = PIPE_TEXTURE_RECT;
+
return ctx;
 }
 
@@ -296,6 +301,7 @@ util_blit_pixels_writemask(struct blit_state *ctx,
unsigned offset;
boolean overlap;
float s0, t0, s1, t1;
+   boolean normalized;
 
assert(filter == PIPE_TEX_MIPFILTER_NEAREST ||
   filter == PIPE_TEX_MIPFILTER_LINEAR);
@@ -335,7 +341,6 @@ util_blit_pixels_writemask(struct blit_state *ctx,
   return;
}
 
-
/* Create a temporary texture when src and dest alias or when src
 * is anything other than a 2d texture.
 * XXX should just use appropriate shader to access 1d / 3d slice / cube 
face,
@@ -373,7 +378,7 @@ util_blit_pixels_writemask(struct blit_state *ctx,
 
   /* create temp texture */
   memset(texTemp, 0, sizeof(texTemp));
-  texTemp.target = PIPE_TEXTURE_2D;
+  texTemp.target = ctx-internal_target;
   texTemp.format = src_tex-format;
   texTemp.last_level = 0;
   texTemp.width0 = srcW;
@@ -393,10 +398,19 @@ util_blit_pixels_writemask(struct blit_state *ctx,
  src_tex, srcsub, srcLeft, srcTop, srcZ0, /* 
src */
  srcW, srcH); /* size */
 
-  s0 = 0.0f; 
-  s1 = 1.0f;
-  t0 = 0.0f;
-  t1 = 1.0f;
+  normalized = tex-target != PIPE_TEXTURE_RECT;
+  if(normalized) {
+ s0 = 0.0f;
+ s1 = 1.0f;
+ t0 = 0.0f;
+ t1 = 1.0f;
+  }
+  else {
+ s0 = 0;
+ s1 = srcW;
+ t0 = 0;
+ t1 = srcH;
+  }
 
   u_sampler_view_default_template(sv_templ, tex, tex-format);
   sampler_view = pipe-create_sampler_view(pipe, tex, sv_templ);
@@ -416,17 +430,25 @@ util_blit_pixels_writemask(struct blit_state *ctx,
  return;
   }
 
-  s0 = srcX0 / (float)(u_minify(sampler_view-texture-width0, 
srcsub.level));
-  s1 = srcX1 / (float)(u_minify(sampler_view-texture-width0, 
srcsub.level));
-  t0 = srcY0 / (float)(u_minify(sampler_view-texture-height0, 
srcsub.level));
-  t1 = srcY1 / (float)(u_minify(sampler_view-texture-height0, 
srcsub.level));
+  s0 = srcX0;
+  s1 = srcX1;
+  t0 = srcY0;
+  t1 = srcY1;
+  normalized = sampler_view-texture-target != PIPE_TEXTURE_RECT;
+  if(normalized)
+  {
+ s0 /= (float)(u_minify(sampler_view-texture-width0, srcsub.level));
+ s1 /= (float)(u_minify(sampler_view-texture-width0, srcsub.level));
+ t0 /= (float)(u_minify(sampler_view-texture-height0, srcsub.level));
+ t1 /= (float)(u_minify(sampler_view-texture-height0, srcsub.level));
+  }
}
 
 
-   assert(screen-is_format_supported(screen, sampler_view-format, 
PIPE_TEXTURE_2D,
+   assert(screen-is_format_supported(screen, sampler_view-format, 
ctx-internal_target,
   sampler_view-texture-nr_samples,
   PIPE_BIND_SAMPLER_VIEW, 0));
-   assert(screen-is_format_supported(screen, dst-format, PIPE_TEXTURE_2D,
+   assert(screen-is_format_supported(screen, 

Mesa (gallium-rect-textures): nv50: use NV50TIC_0_2_TARGET_RECT (?!?)

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: fe7451ae8754d3318b29681812787cc0e1059143
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fe7451ae8754d3318b29681812787cc0e1059143

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Wed Aug 18 17:29:59 2010 +0200

nv50: use NV50TIC_0_2_TARGET_RECT (?!?)

Is this the right thing?!?

---

 src/gallium/drivers/nv50/nv50_tex.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_tex.c 
b/src/gallium/drivers/nv50/nv50_tex.c
index 4db53f7..d41d9c5 100644
--- a/src/gallium/drivers/nv50/nv50_tex.c
+++ b/src/gallium/drivers/nv50/nv50_tex.c
@@ -131,9 +131,11 @@ nv50_tex_construct(struct nv50_sampler_view *view)
tic[2] |= NV50TIC_0_2_TARGET_1D;
break;
case PIPE_TEXTURE_2D:
-   case PIPE_TEXTURE_RECT:
tic[2] |= NV50TIC_0_2_TARGET_2D;
break;
+   case PIPE_TEXTURE_RECT:
+   tic[2] |= NV50TIC_0_2_TARGET_RECT;
+   break;
case PIPE_TEXTURE_3D:
tic[2] |= NV50TIC_0_2_TARGET_3D;
break;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): ir_constant_expression: Implement equal/ notEqual for booleans.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: d12cb77d85ec726a67c2099c4105df63829b45a4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d12cb77d85ec726a67c2099c4105df63829b45a4

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Wed Aug 18 12:06:25 2010 -0700

ir_constant_expression: Implement equal/notEqual for booleans.

Calls to equal(bvec, bvec) or notEqual(bvec, bvec) previously caused an
assertion.  Fixes piglit tests glsl-const-builtin-equal-bool and
glsl-const-builtin-notEqual-bool.

---

 src/glsl/ir_constant_expression.cpp |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/glsl/ir_constant_expression.cpp 
b/src/glsl/ir_constant_expression.cpp
index 0a92424..54f14d1 100644
--- a/src/glsl/ir_constant_expression.cpp
+++ b/src/glsl/ir_constant_expression.cpp
@@ -904,6 +904,9 @@ ir_call::constant_expression_value()
 case GLSL_TYPE_FLOAT:
data.b[c] = op[0]-value.f[c] == op[1]-value.f[c];
break;
+case GLSL_TYPE_BOOL:
+   data.b[c] = op[0]-value.b[c] == op[1]-value.b[c];
+   break;
 default:
assert(!Should not get here.);
 }
@@ -1047,6 +1050,9 @@ ir_call::constant_expression_value()
 case GLSL_TYPE_FLOAT:
data.b[c] = op[0]-value.f[c] != op[1]-value.f[c];
break;
+case GLSL_TYPE_BOOL:
+   data.b[c] = op[0]-value.b[c] != op[1]-value.b[c];
+   break;
 default:
assert(!Should not get here.);
 }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): generate_builtins.py: Clean up generated output a bit.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 011be6b5948e66adb468aef292a7c8e9be600a89
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=011be6b5948e66adb468aef292a7c8e9be600a89

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Wed Aug 18 13:17:27 2010 -0700

generate_builtins.py: Clean up generated output a bit.

This should make it easier to diff the output, clean up some of the
insane whitespace, and make the strings a bit smaller.

We'll probably need to split up the prototype strings eventually, but
for now, this gets it under the 65K mark.

---

 src/glsl/builtins/tools/generate_builtins.py |   12 
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/src/glsl/builtins/tools/generate_builtins.py 
b/src/glsl/builtins/tools/generate_builtins.py
index 2eb67e3..6c38922 100755
--- a/src/glsl/builtins/tools/generate_builtins.py
+++ b/src/glsl/builtins/tools/generate_builtins.py
@@ -38,6 +38,14 @@ def run_compiler(args):
 command = [compiler_path, '--dump-lir'] + args
 p = Popen(command, 1, stdout=PIPE, shell=False)
 output = p.communicate()[0]
+
+# Clean up output a bit by killing whitespace before a closing paren.
+kill_paren_whitespace = re.compile(r'[ \n]*\)', re.MULTILINE);
+output = kill_paren_whitespace.sub(')', output);
+
+# Also toss any duplicate newlines
+output = output.replace('\n\n', '\n')
+
 return (output, p.returncode)
 
 def write_profile(filename, profile):
@@ -51,6 +59,10 @@ def write_profile(filename, profile):
 kill_globals = re.compile(r'^\(declare.*\n', re.MULTILINE);
 proto_ir = kill_globals.sub('', proto_ir)
 
+# Kill pointer addresses.  They're not necessary in prototypes and just
+# clutter the diff output.
+proto_ir = re.sub(r'@0x[0-9a-f]+', '', proto_ir);
+
 print 'static const char *prototypes_for_' + profile + ' ='
 print stringify(proto_ir), ';'
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl/builtins: Add forgotten hyperbolic trig builtins in 1. 30 profiles.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 08a84c6a4aa8f69af6b6981f62d81dd0424dae4a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=08a84c6a4aa8f69af6b6981f62d81dd0424dae4a

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Wed Aug 18 13:16:50 2010 -0700

glsl/builtins: Add forgotten hyperbolic trig builtins in 1.30 profiles.

---

 src/glsl/builtins/profiles/130.frag |   32 
 src/glsl/builtins/profiles/130.vert |   32 
 2 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/src/glsl/builtins/profiles/130.frag 
b/src/glsl/builtins/profiles/130.frag
index 39c73c4..aa7a6ad 100644
--- a/src/glsl/builtins/profiles/130.frag
+++ b/src/glsl/builtins/profiles/130.frag
@@ -47,6 +47,38 @@ vec2  atan(vec2  y_over_x);
 vec3  atan(vec3  y_over_x);
 vec4  atan(vec4  y_over_x);
 
+float sinh(float x);
+vec2  sinh(vec2  x);
+vec3  sinh(vec3  x);
+vec4  sinh(vec4  x);
+
+float cosh(float x);
+vec2  cosh(vec2  x);
+vec3  cosh(vec3  x);
+vec4  cosh(vec4  x);
+
+float tanh(float x);
+vec2  tanh(vec2  x);
+vec3  tanh(vec3  x);
+vec4  tanh(vec4  x);
+
+#if 0
+float asinh(float x);
+vec2  asinh(vec2  x);
+vec3  asinh(vec3  x);
+vec4  asinh(vec4  x);
+
+float acosh(float x);
+vec2  acosh(vec2  x);
+vec3  acosh(vec3  x);
+vec4  acosh(vec4  x);
+
+float atanh(float x);
+vec2  atanh(vec2  x);
+vec3  atanh(vec3  x);
+vec4  atanh(vec4  x);
+#endif
+
 /*
  * 8.2 - Exponential Functions
  */
diff --git a/src/glsl/builtins/profiles/130.vert 
b/src/glsl/builtins/profiles/130.vert
index 1aaad19..d0152b0 100644
--- a/src/glsl/builtins/profiles/130.vert
+++ b/src/glsl/builtins/profiles/130.vert
@@ -47,6 +47,38 @@ vec2  atan(vec2  y_over_x);
 vec3  atan(vec3  y_over_x);
 vec4  atan(vec4  y_over_x);
 
+float sinh(float x);
+vec2  sinh(vec2  x);
+vec3  sinh(vec3  x);
+vec4  sinh(vec4  x);
+
+float cosh(float x);
+vec2  cosh(vec2  x);
+vec3  cosh(vec3  x);
+vec4  cosh(vec4  x);
+
+float tanh(float x);
+vec2  tanh(vec2  x);
+vec3  tanh(vec3  x);
+vec4  tanh(vec4  x);
+
+#if 0
+float asinh(float x);
+vec2  asinh(vec2  x);
+vec3  asinh(vec3  x);
+vec4  asinh(vec4  x);
+
+float acosh(float x);
+vec2  acosh(vec2  x);
+vec3  acosh(vec3  x);
+vec4  acosh(vec4  x);
+
+float atanh(float x);
+vec2  atanh(vec2  x);
+vec3  atanh(vec3  x);
+vec4  atanh(vec4  x);
+#endif
+
 /*
  * 8.2 - Exponential Functions
  */

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl: Refresh autogenerated file builtin_function.cpp.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: cf37ba34301374aecf16fea659ac70b000a11a55
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf37ba34301374aecf16fea659ac70b000a11a55

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Wed Aug 18 13:20:58 2010 -0700

glsl: Refresh autogenerated file builtin_function.cpp.

---

 src/glsl/builtin_function.cpp |20903 +
 1 files changed, 6719 insertions(+), 14184 deletions(-)

Diff:   
http://cgit.freedesktop.org/mesa/mesa/diff/?id=cf37ba34301374aecf16fea659ac70b000a11a55
___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: Make MESA_GLSL=dump include when compile/link fails, and the info log.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 0df61bdb669d03d9c25e49d5698f193deca3cf6d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0df61bdb669d03d9c25e49d5698f193deca3cf6d

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 11:35:15 2010 -0700

mesa: Make MESA_GLSL=dump include when compile/link fails, and the info log.

---

 src/mesa/program/ir_to_mesa.cpp |   25 -
 1 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 7de1939..58d3b41 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2691,10 +2691,18 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct 
gl_shader *shader)
   _mesa_write_shader_to_file(shader);
}
 
-   if ((ctx-Shader.Flags  GLSL_DUMP)  shader-CompileStatus) {
-  printf(GLSL IR for shader %d:\n, shader-Name);
-  _mesa_print_ir(shader-ir, NULL);
-  printf(\n\n);
+   if (ctx-Shader.Flags  GLSL_DUMP) {
+  if (shader-CompileStatus) {
+printf(GLSL IR for shader %d:\n, shader-Name);
+_mesa_print_ir(shader-ir, NULL);
+printf(\n\n);
+  } else {
+printf(GLSL shader %d failed to compile.\n, shader-Name);
+  }
+  if (shader-InfoLog  shader-InfoLog[0] != 0) {
+printf(GLSL shader %d info log:\n, shader-Name);
+printf(%s\n, shader-InfoLog);
+  }
}
 
/* Retain any live IR, but trash the rest. */
@@ -2741,8 +2749,15 @@ _mesa_glsl_link_shader(GLcontext *ctx, struct 
gl_shader_program *prog)
}
 
if (prog-LinkStatus) {
-  if (!ctx-Driver.LinkShader(ctx, prog))
+  if (!ctx-Driver.LinkShader(ctx, prog)) {
 prog-LinkStatus = GL_FALSE;
+printf(GLSL shader program %d failed to link\n, prog-Name);
+  }
+
+  if (prog-InfoLog  prog-InfoLog[0] != 0) {
+printf(GLSL shader program %d info log:\n, prog-Name);
+printf(%s\n, prog-InfoLog);
+  }
}
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: Hang the compiled shader off the shader-ir, not the shader.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 4a6a4316846ead3ec12759c96ecc4b61491aad65
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4a6a4316846ead3ec12759c96ecc4b61491aad65

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 11:36:09 2010 -0700

mesa: Hang the compiled shader off the shader-ir, not the shader.

Otherwise, with repeated program recompile, we never free the results
of the previous compile.

---

 src/mesa/program/ir_to_mesa.cpp |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 58d3b41..8ed3834 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2662,6 +2662,7 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct 
gl_shader *shader)
  _mesa_glsl_lexer_dtor(state);
}
 
+   talloc_free(shader-ir);
shader-ir = new(shader) exec_list;
if (!state-error  !state-translation_unit.is_empty())
   _mesa_ast_to_hir(shader-ir, state);
@@ -2706,7 +2707,7 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct 
gl_shader *shader)
}
 
/* Retain any live IR, but trash the rest. */
-   reparent_ir(shader-ir, shader);
+   reparent_ir(shader-ir, shader-ir);
 
talloc_free(state);
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): ir_to_mesa: Free the ir_to_mesa temporary storage when we' re done.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: abc6d7e0b4b04c75129d24c3cb6f021b92cd46f6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=abc6d7e0b4b04c75129d24c3cb6f021b92cd46f6

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 11:37:18 2010 -0700

ir_to_mesa: Free the ir_to_mesa temporary storage when we're done.

---

 src/mesa/program/ir_to_mesa.cpp |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 8ed3834..4f49943 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2212,10 +2212,12 @@ ir_to_mesa_visitor::ir_to_mesa_visitor()
next_signature_id = 1;
sampler_map = NULL;
current_function = NULL;
+   mem_ctx = talloc_new(NULL);
 }
 
 ir_to_mesa_visitor::~ir_to_mesa_visitor()
 {
+   talloc_free(mem_ctx);
if (this-sampler_map)
   hash_table_dtor(this-sampler_map);
 }
@@ -2445,8 +2447,6 @@ get_mesa_program(GLcontext *ctx, struct gl_shader_program 
*shader_program,
v.ctx = ctx;
v.prog = prog;
 
-   v.mem_ctx = talloc_new(NULL);
-
/* Emit Mesa IR for main(). */
visit_exec_list(shader-ir, v);
v.ir_to_mesa_emit_op0(NULL, OPCODE_END);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl2: Fix copy'n' paste hilarity leading to leaking in the refcount visitor.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 0b09e6410f1173c2f69b601e43c5b14d8ad97345
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0b09e6410f1173c2f69b601e43c5b14d8ad97345

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 11:42:42 2010 -0700

glsl2: Fix copy'n'paste hilarity leading to leaking in the refcount visitor.

---

 src/glsl/ir_dead_code.cpp   |1 -
 src/glsl/ir_variable_refcount.h |2 +-
 2 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/src/glsl/ir_dead_code.cpp b/src/glsl/ir_dead_code.cpp
index fce9212..7ff580d 100644
--- a/src/glsl/ir_dead_code.cpp
+++ b/src/glsl/ir_dead_code.cpp
@@ -101,7 +101,6 @@ do_dead_code(exec_list *instructions)
 }
   }
}
-   talloc_free(v.mem_ctx);
 
return progress;
 }
diff --git a/src/glsl/ir_variable_refcount.h b/src/glsl/ir_variable_refcount.h
index 30dd2bd..059ea09 100644
--- a/src/glsl/ir_variable_refcount.h
+++ b/src/glsl/ir_variable_refcount.h
@@ -67,7 +67,7 @@ public:
 
~ir_variable_refcount_visitor(void)
{
-  this-mem_ctx = talloc_new(NULL);
+  talloc_free(this-mem_ctx);
}
 
virtual ir_visitor_status visit(ir_variable *);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: Free old linked shaders when relinking new shaders.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 5d0f430e8ed01db29d11d22e4b6c3760d8c39f8f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5d0f430e8ed01db29d11d22e4b6c3760d8c39f8f

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 12:02:35 2010 -0700

mesa: Free old linked shaders when relinking new shaders.

---

 src/glsl/linker.cpp |   15 ++-
 src/glsl/main.cpp   |6 +-
 src/glsl/program.h  |2 +-
 src/mesa/program/ir_to_mesa.cpp |2 +-
 4 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 4172e41..b256574 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -674,7 +674,8 @@ get_main_function_signature(gl_shader *sh)
  * shader is returned.
  */
 static struct gl_shader *
-link_intrastage_shaders(struct gl_shader_program *prog,
+link_intrastage_shaders(GLcontext *ctx,
+   struct gl_shader_program *prog,
struct gl_shader **shader_list,
unsigned num_shaders)
 {
@@ -747,7 +748,7 @@ link_intrastage_shaders(struct gl_shader_program *prog,
   return NULL;
}
 
-   gl_shader *const linked = _mesa_new_shader(NULL, 0, main-Type);
+   gl_shader *const linked = ctx-Driver.NewShader(NULL, 0, main-Type);
linked-ir = new(linked) exec_list;
clone_ir_list(linked, linked-ir, main-ir);
 
@@ -1212,7 +1213,7 @@ assign_varying_locations(struct gl_shader_program *prog,
 
 
 void
-link_shaders(struct gl_shader_program *prog)
+link_shaders(GLcontext *ctx, struct gl_shader_program *prog)
 {
prog-LinkStatus = false;
prog-Validated = false;
@@ -1270,12 +1271,16 @@ link_shaders(struct gl_shader_program *prog)
 
prog-Version = max_version;
 
+   for (unsigned int i = 0; i  prog-_NumLinkedShaders; i++) {
+  ctx-Driver.DeleteShader(ctx, prog-_LinkedShaders[i]);
+   }
+
/* Link all shaders for a particular stage and validate the result.
 */
prog-_NumLinkedShaders = 0;
if (num_vert_shaders  0) {
   gl_shader *const sh =
-link_intrastage_shaders(prog, vert_shader_list, num_vert_shaders);
+link_intrastage_shaders(ctx, prog, vert_shader_list, num_vert_shaders);
 
   if (sh == NULL)
 goto done;
@@ -1289,7 +1294,7 @@ link_shaders(struct gl_shader_program *prog)
 
if (num_frag_shaders  0) {
   gl_shader *const sh =
-link_intrastage_shaders(prog, frag_shader_list, num_frag_shaders);
+link_intrastage_shaders(ctx, prog, frag_shader_list, num_frag_shaders);
 
   if (sh == NULL)
 goto done;
diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
index 24d6076..cb9f8a5 100644
--- a/src/glsl/main.cpp
+++ b/src/glsl/main.cpp
@@ -209,6 +209,10 @@ int
 main(int argc, char **argv)
 {
int status = EXIT_SUCCESS;
+   GLcontext local_ctx;
+   GLcontext *ctx = local_ctx;
+
+   ctx-Driver.NewShader = _mesa_new_shader;
 
int c;
int idx = 0;
@@ -265,7 +269,7 @@ main(int argc, char **argv)
}
 
if ((status == EXIT_SUCCESS)  do_link)  {
-  link_shaders(whole_program);
+  link_shaders(ctx, whole_program);
   status = (whole_program-LinkStatus) ? EXIT_SUCCESS : EXIT_FAILURE;
 
   if (strlen(whole_program-InfoLog)  0)
diff --git a/src/glsl/program.h b/src/glsl/program.h
index 0a49203..ea2c4ab 100644
--- a/src/glsl/program.h
+++ b/src/glsl/program.h
@@ -30,4 +30,4 @@ extern C {
 }
 
 extern void
-link_shaders(struct gl_shader_program *prog);
+link_shaders(GLcontext *ctx, struct gl_shader_program *prog);
diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 4f49943..394370d 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2740,7 +2740,7 @@ _mesa_glsl_link_shader(GLcontext *ctx, struct 
gl_shader_program *prog)
_mesa_reference_fragprog(ctx, prog-FragmentProgram, NULL);
 
if (prog-LinkStatus) {
-  link_shaders(prog);
+  link_shaders(ctx, prog);
 
   /* We don't use the linker's uniforms list, and cook up our own at
* generate time.

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: Free linked shaders when deleting the shader program.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 56a0690a81cd6a0e7db4c041430ca38e5063e145
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=56a0690a81cd6a0e7db4c041430ca38e5063e145

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 14:12:52 2010 -0700

mesa: Free linked shaders when deleting the shader program.

---

 src/mesa/main/shaderobj.c |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/shaderobj.c b/src/mesa/main/shaderobj.c
index 863d50f..1755e8a 100644
--- a/src/mesa/main/shaderobj.c
+++ b/src/mesa/main/shaderobj.c
@@ -314,6 +314,12 @@ _mesa_free_shader_program_data(GLcontext *ctx,
free(shProg-TransformFeedback.VaryingNames);
shProg-TransformFeedback.VaryingNames = NULL;
shProg-TransformFeedback.NumVarying = 0;
+
+
+   for (i = 0; i  shProg-_NumLinkedShaders; i++) {
+  ctx-Driver.DeleteShader(ctx, shProg-_LinkedShaders[i]);
+   }
+   shProg-_NumLinkedShaders = 0;
 }
 
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): ir_to_mesa: Stop leaking the ir_instruction * annotation of our compile.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 850c659044d081c53713800cacf8d518fae6cd70
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=850c659044d081c53713800cacf8d518fae6cd70

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 13:48:32 2010 -0700

ir_to_mesa: Stop leaking the ir_instruction * annotation of our compile.

---

 src/mesa/program/ir_to_mesa.cpp |3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 394370d..5299d77 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2412,7 +2412,6 @@ struct gl_program *
 get_mesa_program(GLcontext *ctx, struct gl_shader_program *shader_program,
 struct gl_shader *shader)
 {
-   void *mem_ctx = shader_program;
ir_to_mesa_visitor v;
struct prog_instruction *mesa_instructions, *mesa_inst;
ir_instruction **mesa_instruction_annotation;
@@ -2490,7 +2489,7 @@ get_mesa_program(GLcontext *ctx, struct gl_shader_program 
*shader_program,
mesa_instructions =
   (struct prog_instruction *)calloc(num_instructions,
sizeof(*mesa_instructions));
-   mesa_instruction_annotation = talloc_array(mem_ctx, ir_instruction *,
+   mesa_instruction_annotation = talloc_array(v.mem_ctx, ir_instruction *,
  num_instructions);
 
mesa_inst = mesa_instructions;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl: Garbage collect old prototype for ir_to_mesa.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: e271384219ebc1f9e8afb63b20256f9d56102592
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e271384219ebc1f9e8afb63b20256f9d56102592

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 12:04:43 2010 -0700

glsl: Garbage collect old prototype for ir_to_mesa.

---

 src/glsl/glsl_parser_extras.h |2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index 3b53ba0..9e3cac2 100644
--- a/src/glsl/glsl_parser_extras.h
+++ b/src/glsl/glsl_parser_extras.h
@@ -209,6 +209,4 @@ extern bool _mesa_glsl_process_extension(const char *name, 
YYLTYPE *name_locp,
 extern const char *
 _mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target);
 
-void do_ir_to_mesa(exec_list *instructions);
-
 #endif /* GLSL_PARSER_EXTRAS_H */

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): ir_to_mesa: Fix leak of set_branchtargets temp data.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 3ef83d270b2c24867a0d020b81bdc6c54cb1c9b0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3ef83d270b2c24867a0d020b81bdc6c54cb1c9b0

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 14:13:30 2010 -0700

ir_to_mesa: Fix leak of set_branchtargets temp data.

---

 src/mesa/program/ir_to_mesa.cpp |6 ++
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 5299d77..eb3be91 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2266,8 +2266,8 @@ set_branchtargets(ir_to_mesa_visitor *v,
   }
}
 
-   if_stack = (int *)calloc(if_count, sizeof(*if_stack));
-   loop_stack = (int *)calloc(loop_count, sizeof(*loop_stack));
+   if_stack = talloc_zero_array(v-mem_ctx, int, if_count);
+   loop_stack = talloc_zero_array(v-mem_ctx, int, loop_count);
 
for (i = 0; i  num_instructions; i++) {
   switch (mesa_instructions[i].Opcode) {
@@ -2319,8 +2319,6 @@ set_branchtargets(ir_to_mesa_visitor *v,
 break;
   }
}
-
-   free(if_stack);
 }
 
 static void

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: fpclassify is available on OpenSolaris.

2010-08-18 Thread Vinson Lee
Module: Mesa
Branch: master
Commit: e1c7f3af0cb6769ef20a954459cfb87b9f99b4d6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e1c7f3af0cb6769ef20a954459cfb87b9f99b4d6

Author: Vinson Lee v...@vmware.com
Date:   Wed Aug 18 14:36:08 2010 -0700

mesa: fpclassify is available on OpenSolaris.

There is no explicit predefined macro to distinguish between OpenSolaris
and Solaris. This patch assumes that the difference is in the compilers.
OpenSolaris uses GCC and not the Sun Studio compiler. Assume that the
availability of fpclassify is due to GCC.

This patch was not tested on Solaris. It would break the build on
Solaris with GCC if GCC on Solaris does not have fpclassify.

---

 src/mesa/main/querymatrix.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/mesa/main/querymatrix.c b/src/mesa/main/querymatrix.c
index 32aaa79..36236eb 100644
--- a/src/mesa/main/querymatrix.c
+++ b/src/mesa/main/querymatrix.c
@@ -72,7 +72,8 @@ fpclassify(double x)
 
 #elif defined(__APPLE__) || defined(__CYGWIN__) || defined(__FreeBSD__) || \
  defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || \
- (defined(__sun)  defined(__C99FEATURES__)) || defined(__MINGW32__)
+ (defined(__sun)  defined(__C99FEATURES__)) || defined(__MINGW32__) || \
+ (defined(__sun)  defined(__GNUC__))
 
 /* fpclassify is available. */
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl: Fix uninitialized member in ir_hierarchical_vistor constructor.

2010-08-18 Thread Vinson Lee
Module: Mesa
Branch: master
Commit: 352e62c3c26c75ddce1345962339f78c64d0aa95
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=352e62c3c26c75ddce1345962339f78c64d0aa95

Author: Vinson Lee v...@vmware.com
Date:   Wed Aug 18 16:10:15 2010 -0700

glsl: Fix uninitialized member in ir_hierarchical_vistor constructor.

Class member base_ir was not initialized by the default constructor.

---

 src/glsl/ir_hierarchical_visitor.cpp |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/glsl/ir_hierarchical_visitor.cpp 
b/src/glsl/ir_hierarchical_visitor.cpp
index d475df6..809b08e 100644
--- a/src/glsl/ir_hierarchical_visitor.cpp
+++ b/src/glsl/ir_hierarchical_visitor.cpp
@@ -26,6 +26,7 @@
 
 ir_hierarchical_visitor::ir_hierarchical_visitor()
 {
+   this-base_ir = NULL;
this-callback = NULL;
this-data = NULL;
 }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl: Fix leak-causing typo in destructor that made it another constructor.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 4532feba14fcf4e39ea6e44dd2b6a290697bbd50
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4532feba14fcf4e39ea6e44dd2b6a290697bbd50

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 15:59:31 2010 -0700

glsl: Fix leak-causing typo in destructor that made it another constructor.

---

 src/glsl/ir_set_program_inouts.cpp |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/glsl/ir_set_program_inouts.cpp 
b/src/glsl/ir_set_program_inouts.cpp
index 6586377..534f602 100644
--- a/src/glsl/ir_set_program_inouts.cpp
+++ b/src/glsl/ir_set_program_inouts.cpp
@@ -51,7 +51,7 @@ public:
 hash_table_pointer_hash,
 hash_table_pointer_compare);
}
-   ir_set_program_inouts_visitor()
+   ~ir_set_program_inouts_visitor()
{
   hash_table_dtor(this-ht);
}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): ir_to_mesa: Don't leak the whole linked assembly program.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 3cd233eb5714137dccb6218ad78005511bcc02bd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3cd233eb5714137dccb6218ad78005511bcc02bd

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 16:29:02 2010 -0700

ir_to_mesa: Don't leak the whole linked assembly program.

---

 src/mesa/program/ir_to_mesa.cpp |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index eb3be91..b566706 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2633,6 +2633,7 @@ _mesa_ir_link_shader(GLcontext *ctx, struct 
gl_shader_program *prog)
   if (!ok) {
 return GL_FALSE;
   }
+  _mesa_reference_program(ctx, linked_prog, NULL);
}
 
return GL_TRUE;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): mesa/st: support using PIPE_TEXTURE_RECT internally

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 655c1ad637523c9fc9f90bfff9fdeb393bf20253
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=655c1ad637523c9fc9f90bfff9fdeb393bf20253

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Fri Aug  6 07:39:21 2010 +0200

mesa/st: support using PIPE_TEXTURE_RECT internally

Currently Gallium internals always use PIPE_TEXTURE_2D and normalized
coordinates to access textures.

However, PIPE_TEXTURE_2D is not always supported for NPOT textures,
and PIPE_TEXTURE_RECT requires unnormalized coordinates.

Hence, this change adds support for both kinds of normalization.

---

 src/mesa/state_tracker/st_cb_bitmap.c |   23 ++-
 src/mesa/state_tracker/st_cb_drawpixels.c |   42 ++--
 src/mesa/state_tracker/st_cb_fbo.c|2 +-
 src/mesa/state_tracker/st_context.c   |5 +++
 src/mesa/state_tracker/st_context.h   |3 +-
 5 files changed, 32 insertions(+), 43 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_bitmap.c 
b/src/mesa/state_tracker/st_cb_bitmap.c
index 91037ab..d40e413 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -275,7 +275,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei 
height,
/**
 * Create texture to hold bitmap pattern.
 */
-   pt = st_texture_create(st, PIPE_TEXTURE_2D, st-bitmap.tex_format,
+   pt = st_texture_create(st, st-internal_target, st-bitmap.tex_format,
   0, width, height, 1,
   PIPE_BIND_SAMPLER_VIEW);
if (!pt) {
@@ -304,7 +304,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei 
height,
 }
 
 static GLuint
-setup_bitmap_vertex_data(struct st_context *st,
+setup_bitmap_vertex_data(struct st_context *st, bool normalized,
  int x, int y, int width, int height,
  float z, const float color[4])
 {
@@ -316,13 +316,19 @@ setup_bitmap_vertex_data(struct st_context *st,
const GLfloat x1 = (GLfloat)(x + width);
const GLfloat y0 = (GLfloat)y;
const GLfloat y1 = (GLfloat)(y + height);
-   const GLfloat sLeft = (GLfloat)0.0, sRight = (GLfloat)1.0;
-   const GLfloat tTop = (GLfloat)0.0, tBot = (GLfloat)1.0 - tTop;
+   GLfloat sLeft = (GLfloat)0.0, sRight = (GLfloat)1.0;
+   GLfloat tTop = (GLfloat)0.0, tBot = (GLfloat)1.0 - tTop;
const GLfloat clip_x0 = (GLfloat)(x0 / fb_width * 2.0 - 1.0);
const GLfloat clip_y0 = (GLfloat)(y0 / fb_height * 2.0 - 1.0);
const GLfloat clip_x1 = (GLfloat)(x1 / fb_width * 2.0 - 1.0);
const GLfloat clip_y1 = (GLfloat)(y1 / fb_height * 2.0 - 1.0);
 
+   if(!normalized)
+   {
+  sRight = width;
+  tBot = height;
+   }
+
/* XXX: Need to improve buffer_write to allow NO_WAIT (as well as
 * no_flush) updates to buffers where we know there is no conflict
 * with previous data.  Currently using max_slots  1 will cause
@@ -462,7 +468,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat 
z,
   for (i = 0; i  st-state.num_samplers; i++) {
  samplers[i] = st-state.samplers[i];
   }
-  samplers[stfp-bitmap_sampler] = st-bitmap.sampler;
+  samplers[stfp-bitmap_sampler] = 
st-bitmap.samplers[sv-texture-target != PIPE_TEXTURE_RECT];
   cso_set_samplers(cso, num, (const struct pipe_sampler_state **) 
samplers);
}
 
@@ -499,7 +505,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat 
z,
z = z * 2.0 - 1.0;
 
/* draw textured quad */
-   offset = setup_bitmap_vertex_data(st, x, y, width, height, z, color);
+   offset = setup_bitmap_vertex_data(st, sv-texture-target != 
PIPE_TEXTURE_RECT, x, y, width, height, z, color);
 
util_draw_vertex_buffer(pipe, st-bitmap.vbuf, offset,
PIPE_PRIM_TRIANGLE_FAN,
@@ -789,7 +795,7 @@ st_init_bitmap_functions(struct dd_function_table 
*functions)
 void
 st_init_bitmap(struct st_context *st)
 {
-   struct pipe_sampler_state *sampler = st-bitmap.sampler;
+   struct pipe_sampler_state *sampler = st-bitmap.samplers[0];
struct pipe_context *pipe = st-pipe;
struct pipe_screen *screen = pipe-screen;
 
@@ -801,7 +807,8 @@ st_init_bitmap(struct st_context *st)
sampler-min_img_filter = PIPE_TEX_FILTER_NEAREST;
sampler-min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
sampler-mag_img_filter = PIPE_TEX_FILTER_NEAREST;
-   sampler-normalized_coords = 1;
+   st-bitmap.samplers[1] = *sampler;
+   st-bitmap.samplers[1].normalized_coords = 1;
 
/* init baseline rasterizer state once */
memset(st-bitmap.rasterizer, 0, sizeof(st-bitmap.rasterizer));
diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c 
b/src/mesa/state_tracker/st_cb_drawpixels.c
index 69a3dd4..d934fdc 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -304,34 +304,9 @@ alloc_texture(struct st_context *st, GLsizei width, 
GLsizei height,
struct pipe_context *pipe = st-pipe;
struct 

Mesa (gallium-rect-textures): st/dri: use PIPE_TEXTURE_RECT if appropriate

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 64ab845b7e123e9305ccb260392eda217beaed93
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=64ab845b7e123e9305ccb260392eda217beaed93

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Wed Aug 18 22:57:22 2010 +0200

st/dri: use PIPE_TEXTURE_RECT if appropriate

---

 src/gallium/state_trackers/dri/common/dri_screen.c |5 +
 src/gallium/state_trackers/dri/common/dri_screen.h |1 +
 src/gallium/state_trackers/dri/drm/dri2.c  |4 ++--
 src/gallium/state_trackers/dri/sw/drisw.c  |2 +-
 4 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/gallium/state_trackers/dri/common/dri_screen.c 
b/src/gallium/state_trackers/dri/common/dri_screen.c
index 6ad2c7d..0ab4dd1 100644
--- a/src/gallium/state_trackers/dri/common/dri_screen.c
+++ b/src/gallium/state_trackers/dri/common/dri_screen.c
@@ -383,6 +383,11 @@ dri_init_screen_helper(struct dri_screen *screen,
if (!screen-st_api)
   return NULL;
 
+   if(pscreen-get_param(pscreen, PIPE_CAP_NPOT_TEXTURES))
+  screen-target = PIPE_TEXTURE_2D;
+   else
+  screen-target = PIPE_TEXTURE_RECT;
+
driParseOptionInfo(screen-optionCache,
   __driConfigOptions, __driNConfigOptions);
 
diff --git a/src/gallium/state_trackers/dri/common/dri_screen.h 
b/src/gallium/state_trackers/dri/common/dri_screen.h
index 53ccce1..849f399 100644
--- a/src/gallium/state_trackers/dri/common/dri_screen.h
+++ b/src/gallium/state_trackers/dri/common/dri_screen.h
@@ -68,6 +68,7 @@ struct dri_screen
boolean d_depth_bits_last;
boolean sd_depth_bits_last;
boolean auto_fake_front;
+   enum pipe_texture_target target;
 };
 
 /** cast wrapper */
diff --git a/src/gallium/state_trackers/dri/drm/dri2.c 
b/src/gallium/state_trackers/dri/drm/dri2.c
index 47005c1..93f910a 100644
--- a/src/gallium/state_trackers/dri/drm/dri2.c
+++ b/src/gallium/state_trackers/dri/drm/dri2.c
@@ -195,7 +195,7 @@ dri2_drawable_process_buffers(struct dri_drawable *drawable,
   pipe_resource_reference(drawable-textures[i], NULL);
 
memset(templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = screen-target;
templ.last_level = 0;
templ.width0 = dri_drawable-w;
templ.height0 = dri_drawable-h;
@@ -342,7 +342,7 @@ dri2_create_image_from_name(__DRIcontext *context,
memset(templ, 0, sizeof(templ));
templ.bind = tex_usage;
templ.format = pf;
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = screen-target;
templ.last_level = 0;
templ.width0 = width;
templ.height0 = height;
diff --git a/src/gallium/state_trackers/dri/sw/drisw.c 
b/src/gallium/state_trackers/dri/sw/drisw.c
index 249ccd7..04bba63 100644
--- a/src/gallium/state_trackers/dri/sw/drisw.c
+++ b/src/gallium/state_trackers/dri/sw/drisw.c
@@ -216,7 +216,7 @@ drisw_allocate_textures(struct dri_drawable *drawable,
}
 
memset(templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = screen-target;
templ.width0 = width;
templ.height0 = height;
templ.depth0 = 1;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): auxiliary: support using PIPE_TEXTURE_RECT internally

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 36e1ea53da8943cde1d08df4abd7248ac7eab550
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=36e1ea53da8943cde1d08df4abd7248ac7eab550

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Fri Aug  6 07:39:21 2010 +0200

auxiliary: support using PIPE_TEXTURE_RECT internally

Currently Gallium internals always use PIPE_TEXTURE_2D and normalized
coordinates to access textures.

However, PIPE_TEXTURE_2D is not always supported for NPOT textures,
and PIPE_TEXTURE_RECT requires unnormalized coordinates.

Hence, this change adds support for both kinds of normalization.

---

 src/gallium/auxiliary/util/u_blit.c|   67 
 src/gallium/auxiliary/util/u_blitter.c |   48 +++
 2 files changed, 81 insertions(+), 34 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_blit.c 
b/src/gallium/auxiliary/util/u_blit.c
index 30c7a96..6fb341e 100644
--- a/src/gallium/auxiliary/util/u_blit.c
+++ b/src/gallium/auxiliary/util/u_blit.c
@@ -62,6 +62,7 @@ struct blit_state
struct pipe_viewport_state viewport;
struct pipe_clip_state clip;
struct pipe_vertex_element velem[2];
+   enum pipe_texture_target internal_target;
 
void *vs;
void *fs[TGSI_WRITEMASK_XYZW + 1];
@@ -110,7 +111,6 @@ util_create_blit(struct pipe_context *pipe, struct 
cso_context *cso)
ctx-sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
ctx-sampler.min_img_filter = 0; /* set later */
ctx-sampler.mag_img_filter = 0; /* set later */
-   ctx-sampler.normalized_coords = 1;
 
/* vertex elements state */
memset(ctx-velem[0], 0, sizeof(ctx-velem[0]) * 2);
@@ -145,6 +145,11 @@ util_create_blit(struct pipe_context *pipe, struct 
cso_context *cso)
   ctx-vertices[i][1][3] = 1.0f; /* q */
}
 
+   if(pipe-screen-get_param(pipe-screen, PIPE_CAP_NPOT_TEXTURES))
+  ctx-internal_target = PIPE_TEXTURE_2D;
+   else
+  ctx-internal_target = PIPE_TEXTURE_RECT;
+
return ctx;
 }
 
@@ -296,6 +301,7 @@ util_blit_pixels_writemask(struct blit_state *ctx,
unsigned offset;
boolean overlap;
float s0, t0, s1, t1;
+   boolean normalized;
 
assert(filter == PIPE_TEX_MIPFILTER_NEAREST ||
   filter == PIPE_TEX_MIPFILTER_LINEAR);
@@ -335,7 +341,6 @@ util_blit_pixels_writemask(struct blit_state *ctx,
   return;
}
 
-
/* Create a temporary texture when src and dest alias or when src
 * is anything other than a 2d texture.
 * XXX should just use appropriate shader to access 1d / 3d slice / cube 
face,
@@ -373,7 +378,7 @@ util_blit_pixels_writemask(struct blit_state *ctx,
 
   /* create temp texture */
   memset(texTemp, 0, sizeof(texTemp));
-  texTemp.target = PIPE_TEXTURE_2D;
+  texTemp.target = ctx-internal_target;
   texTemp.format = src_tex-format;
   texTemp.last_level = 0;
   texTemp.width0 = srcW;
@@ -393,10 +398,19 @@ util_blit_pixels_writemask(struct blit_state *ctx,
  src_tex, srcsub, srcLeft, srcTop, srcZ0, /* 
src */
  srcW, srcH); /* size */
 
-  s0 = 0.0f; 
-  s1 = 1.0f;
-  t0 = 0.0f;
-  t1 = 1.0f;
+  normalized = tex-target != PIPE_TEXTURE_RECT;
+  if(normalized) {
+ s0 = 0.0f;
+ s1 = 1.0f;
+ t0 = 0.0f;
+ t1 = 1.0f;
+  }
+  else {
+ s0 = 0;
+ s1 = srcW;
+ t0 = 0;
+ t1 = srcH;
+  }
 
   u_sampler_view_default_template(sv_templ, tex, tex-format);
   sampler_view = pipe-create_sampler_view(pipe, tex, sv_templ);
@@ -416,17 +430,25 @@ util_blit_pixels_writemask(struct blit_state *ctx,
  return;
   }
 
-  s0 = srcX0 / (float)(u_minify(sampler_view-texture-width0, 
srcsub.level));
-  s1 = srcX1 / (float)(u_minify(sampler_view-texture-width0, 
srcsub.level));
-  t0 = srcY0 / (float)(u_minify(sampler_view-texture-height0, 
srcsub.level));
-  t1 = srcY1 / (float)(u_minify(sampler_view-texture-height0, 
srcsub.level));
+  s0 = srcX0;
+  s1 = srcX1;
+  t0 = srcY0;
+  t1 = srcY1;
+  normalized = sampler_view-texture-target != PIPE_TEXTURE_RECT;
+  if(normalized)
+  {
+ s0 /= (float)(u_minify(sampler_view-texture-width0, srcsub.level));
+ s1 /= (float)(u_minify(sampler_view-texture-width0, srcsub.level));
+ t0 /= (float)(u_minify(sampler_view-texture-height0, srcsub.level));
+ t1 /= (float)(u_minify(sampler_view-texture-height0, srcsub.level));
+  }
}
 
 
-   assert(screen-is_format_supported(screen, sampler_view-format, 
PIPE_TEXTURE_2D,
+   assert(screen-is_format_supported(screen, sampler_view-format, 
ctx-internal_target,
   sampler_view-texture-nr_samples,
   PIPE_BIND_SAMPLER_VIEW, 0));
-   assert(screen-is_format_supported(screen, dst-format, PIPE_TEXTURE_2D,
+   assert(screen-is_format_supported(screen, 

Mesa (gallium-rect-textures): st/glx: use PIPE_TEXTURE_RECT if appropriate

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 527a9ef610280097d42bd91a4ed0efe07589d214
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=527a9ef610280097d42bd91a4ed0efe07589d214

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Aug 19 00:55:13 2010 +0200

st/glx: use PIPE_TEXTURE_RECT if appropriate

---

 src/gallium/state_trackers/glx/xlib/xm_st.c |7 ++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/glx/xlib/xm_st.c 
b/src/gallium/state_trackers/glx/xlib/xm_st.c
index c62eb8b..9cd744c 100644
--- a/src/gallium/state_trackers/glx/xlib/xm_st.c
+++ b/src/gallium/state_trackers/glx/xlib/xm_st.c
@@ -38,6 +38,7 @@ struct xmesa_st_framebuffer {
struct pipe_screen *screen;
 
struct st_visual stvis;
+   enum pipe_texture_target target;
 
unsigned texture_width, texture_height, texture_mask;
struct pipe_resource *textures[ST_ATTACHMENT_COUNT];
@@ -139,7 +140,7 @@ xmesa_st_framebuffer_validate_textures(struct 
st_framebuffer_iface *stfbi,
}
 
memset(templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = xstfb-target;
templ.width0 = width;
templ.height0 = height;
templ.depth0 = 1;
@@ -279,6 +280,10 @@ xmesa_create_st_framebuffer(XMesaDisplay xmdpy, 
XMesaBuffer b)
xstfb-buffer = b;
xstfb-screen = xmdpy-screen;
xstfb-stvis = b-xm_visual-stvis;
+   if(xstfb-screen-get_param(xstfb-screen, PIPE_CAP_NPOT_TEXTURES))
+  xstfb-target = PIPE_TEXTURE_2D;
+   else
+  xstfb-target = PIPE_TEXTURE_RECT;
 
stfbi-visual = xstfb-stvis;
stfbi-flush_front = xmesa_st_framebuffer_flush_front;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: ecd85347872eb35716bc3b65b2a6612c97954667
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ecd85347872eb35716bc3b65b2a6612c97954667

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Apr 15 09:04:20 2010 +0200

mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

---

 src/mesa/state_tracker/st_cb_texture.c |6 --
 src/mesa/state_tracker/st_texture.c|2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index 4c3e368..a41c780 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -74,9 +74,11 @@ gl_target_to_pipe(GLenum target)
   return PIPE_TEXTURE_1D;
 
case GL_TEXTURE_2D:
-   case GL_TEXTURE_RECTANGLE_NV:
   return PIPE_TEXTURE_2D;
 
+   case GL_TEXTURE_RECTANGLE_NV:
+  return PIPE_TEXTURE_RECT;
+
case GL_TEXTURE_3D:
   return PIPE_TEXTURE_3D;
 
@@ -449,7 +451,7 @@ compress_with_blit(GLcontext * ctx,
/* Create the temporary source texture
 */
memset(templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = st-internal_target;
templ.format = st_mesa_format_to_pipe_format(mesa_format);
templ.width0 = width;
templ.height0 = height;
diff --git a/src/mesa/state_tracker/st_texture.c 
b/src/mesa/state_tracker/st_texture.c
index add6e94..c6cf2ba 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -64,7 +64,7 @@ st_texture_create(struct st_context *st,
struct pipe_resource pt, *newtex;
struct pipe_screen *screen = st-pipe-screen;
 
-   assert(target = PIPE_TEXTURE_CUBE);
+   assert(target  PIPE_MAX_TEXTURE_TYPES);
assert(width0  0);
assert(height0  0);
assert(depth0  0);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): galahad: check resource_create template

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 14c63fd0d1e875619c84214bcb43ed612bde79a2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=14c63fd0d1e875619c84214bcb43ed612bde79a2

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Aug 19 01:38:33 2010 +0200

galahad: check resource_create template

---

 src/gallium/drivers/galahad/glhd_screen.c |   29 +
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/galahad/glhd_screen.c 
b/src/gallium/drivers/galahad/glhd_screen.c
index 4117485..8e3c614 100644
--- a/src/gallium/drivers/galahad/glhd_screen.c
+++ b/src/gallium/drivers/galahad/glhd_screen.c
@@ -30,6 +30,7 @@
 #include pipe/p_screen.h
 #include pipe/p_state.h
 #include util/u_memory.h
+#include util/u_math.h
 
 #include glhd_public.h
 #include glhd_screen.h
@@ -134,6 +135,34 @@ galahad_screen_resource_create(struct pipe_screen *_screen,
struct pipe_screen *screen = glhd_screen-screen;
struct pipe_resource *result;
 
+   if (templat-target = PIPE_MAX_TEXTURE_TYPES)
+  glhd_warn(Received bogus resource target %d, templat-target);
+
+   if(templat-target != PIPE_TEXTURE_RECT  templat-target != PIPE_BUFFER 
 !screen-get_param(screen, PIPE_CAP_NPOT_TEXTURES))
+   {
+  if(!util_is_pot(templat-width0) || !util_is_pot(templat-height0))
+ glhd_warn(Requested NPOT (%ux%u) non-rectangle texture without NPOT 
support, templat-width0, templat-height0);
+   }
+
+   /* TODO: allow this for OpenCL flexible sampling */
+   if(templat-target == PIPE_TEXTURE_RECT  templat-last_level)
+  glhd_warn(Rectangle textures cannot have mipmaps, but last_level = %u, 
templat-last_level);
+
+   if(templat-target == PIPE_BUFFER  templat-last_level)
+  glhd_warn(Buffers cannot have mipmaps, but last_level = %u, 
templat-last_level);
+
+   if(templat-target != PIPE_TEXTURE_3D  templat-depth0 != 1)
+  glhd_warn(Only 3D textures can have depth != 1, but received target %u 
and depth %u, templat-target, templat-depth0);
+
+   if(templat-target == PIPE_TEXTURE_1D  templat-height0 != 1)
+ glhd_warn(1D textures must have height 1 but got asked for height %u, 
templat-height0);
+
+   if(templat-target == PIPE_TEXTURE_1D  templat-height0 != 1)
+ glhd_warn(Buffers must have height 1 but got asked for height %u, 
templat-height0);
+
+   if(templat-target == PIPE_TEXTURE_CUBE  templat-width0 != 
templat-height0)
+  glhd_warn(Cube maps must be square, but got asked for %ux%u, 
templat-width0, templat-height0);
+
result = screen-resource_create(screen,
 templat);
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): nv50: use NV50TIC_0_2_TARGET_RECT (?!?)

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 53ace33626a32c523b96088043c0d8b76e23dc2d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=53ace33626a32c523b96088043c0d8b76e23dc2d

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Wed Aug 18 17:29:59 2010 +0200

nv50: use NV50TIC_0_2_TARGET_RECT (?!?)

Is this the right thing?!?

---

 src/gallium/drivers/nv50/nv50_tex.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_tex.c 
b/src/gallium/drivers/nv50/nv50_tex.c
index 4db53f7..d41d9c5 100644
--- a/src/gallium/drivers/nv50/nv50_tex.c
+++ b/src/gallium/drivers/nv50/nv50_tex.c
@@ -131,9 +131,11 @@ nv50_tex_construct(struct nv50_sampler_view *view)
tic[2] |= NV50TIC_0_2_TARGET_1D;
break;
case PIPE_TEXTURE_2D:
-   case PIPE_TEXTURE_RECT:
tic[2] |= NV50TIC_0_2_TARGET_2D;
break;
+   case PIPE_TEXTURE_RECT:
+   tic[2] |= NV50TIC_0_2_TARGET_RECT;
+   break;
case PIPE_TEXTURE_3D:
tic[2] |= NV50TIC_0_2_TARGET_3D;
break;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): winsys/sw: use PIPE_TEXTURE_RECT if appropriate

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: afbb41f5ee3d749482cb8cad53596a703f4a8879
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=afbb41f5ee3d749482cb8cad53596a703f4a8879

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Aug 19 01:44:02 2010 +0200

winsys/sw: use PIPE_TEXTURE_RECT if appropriate

---

 src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c |8 +++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c 
b/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
index b997abd..3a76098 100644
--- a/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
+++ b/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
@@ -52,6 +52,7 @@ struct wrapper_sw_winsys
struct sw_winsys base;
struct pipe_screen *screen;
struct pipe_context *pipe;
+   enum pipe_texture_target target;
 };
 
 struct wrapper_sw_displaytarget
@@ -145,7 +146,7 @@ wsw_dt_create(struct sw_winsys *ws,
 * XXX Why don't we just get the template.
 */
memset(templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = wsw-target;
templ.width0 = width;
templ.height0 = height;
templ.format = format;
@@ -291,6 +292,11 @@ wrapper_sw_winsys_warp_pipe_screen(struct pipe_screen 
*screen)
if (!wsw-pipe)
   goto err_free;
 
+   if(screen-get_param(screen, PIPE_CAP_NPOT_TEXTURES))
+  wsw-target = PIPE_TEXTURE_2D;
+   else
+  wsw-target = PIPE_TEXTURE_RECT;
+
return wsw-base;
 
 err_free:

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 7d7ba12491087c884bd682d7858a517b29f6402f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7d7ba12491087c884bd682d7858a517b29f6402f

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Apr 15 09:04:20 2010 +0200

mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

---

 src/mesa/state_tracker/st_cb_texture.c |6 --
 src/mesa/state_tracker/st_texture.c|2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index 4c3e368..a41c780 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -74,9 +74,11 @@ gl_target_to_pipe(GLenum target)
   return PIPE_TEXTURE_1D;
 
case GL_TEXTURE_2D:
-   case GL_TEXTURE_RECTANGLE_NV:
   return PIPE_TEXTURE_2D;
 
+   case GL_TEXTURE_RECTANGLE_NV:
+  return PIPE_TEXTURE_RECT;
+
case GL_TEXTURE_3D:
   return PIPE_TEXTURE_3D;
 
@@ -449,7 +451,7 @@ compress_with_blit(GLcontext * ctx,
/* Create the temporary source texture
 */
memset(templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = st-internal_target;
templ.format = st_mesa_format_to_pipe_format(mesa_format);
templ.width0 = width;
templ.height0 = height;
diff --git a/src/mesa/state_tracker/st_texture.c 
b/src/mesa/state_tracker/st_texture.c
index add6e94..c6cf2ba 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -64,7 +64,7 @@ st_texture_create(struct st_context *st,
struct pipe_resource pt, *newtex;
struct pipe_screen *screen = st-pipe-screen;
 
-   assert(target = PIPE_TEXTURE_CUBE);
+   assert(target  PIPE_MAX_TEXTURE_TYPES);
assert(width0  0);
assert(height0  0);
assert(depth0  0);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): galahad: check resource_create template

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 86f1c6e919b69d308f71a874b558179e51ac3047
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=86f1c6e919b69d308f71a874b558179e51ac3047

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Aug 19 01:38:33 2010 +0200

galahad: check resource_create template

---

 src/gallium/drivers/galahad/glhd_screen.c |   29 +
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/galahad/glhd_screen.c 
b/src/gallium/drivers/galahad/glhd_screen.c
index 4117485..8e3c614 100644
--- a/src/gallium/drivers/galahad/glhd_screen.c
+++ b/src/gallium/drivers/galahad/glhd_screen.c
@@ -30,6 +30,7 @@
 #include pipe/p_screen.h
 #include pipe/p_state.h
 #include util/u_memory.h
+#include util/u_math.h
 
 #include glhd_public.h
 #include glhd_screen.h
@@ -134,6 +135,34 @@ galahad_screen_resource_create(struct pipe_screen *_screen,
struct pipe_screen *screen = glhd_screen-screen;
struct pipe_resource *result;
 
+   if (templat-target = PIPE_MAX_TEXTURE_TYPES)
+  glhd_warn(Received bogus resource target %d, templat-target);
+
+   if(templat-target != PIPE_TEXTURE_RECT  templat-target != PIPE_BUFFER 
 !screen-get_param(screen, PIPE_CAP_NPOT_TEXTURES))
+   {
+  if(!util_is_pot(templat-width0) || !util_is_pot(templat-height0))
+ glhd_warn(Requested NPOT (%ux%u) non-rectangle texture without NPOT 
support, templat-width0, templat-height0);
+   }
+
+   /* TODO: allow this for OpenCL flexible sampling */
+   if(templat-target == PIPE_TEXTURE_RECT  templat-last_level)
+  glhd_warn(Rectangle textures cannot have mipmaps, but last_level = %u, 
templat-last_level);
+
+   if(templat-target == PIPE_BUFFER  templat-last_level)
+  glhd_warn(Buffers cannot have mipmaps, but last_level = %u, 
templat-last_level);
+
+   if(templat-target != PIPE_TEXTURE_3D  templat-depth0 != 1)
+  glhd_warn(Only 3D textures can have depth != 1, but received target %u 
and depth %u, templat-target, templat-depth0);
+
+   if(templat-target == PIPE_TEXTURE_1D  templat-height0 != 1)
+ glhd_warn(1D textures must have height 1 but got asked for height %u, 
templat-height0);
+
+   if(templat-target == PIPE_TEXTURE_1D  templat-height0 != 1)
+ glhd_warn(Buffers must have height 1 but got asked for height %u, 
templat-height0);
+
+   if(templat-target == PIPE_TEXTURE_CUBE  templat-width0 != 
templat-height0)
+  glhd_warn(Cube maps must be square, but got asked for %ux%u, 
templat-width0, templat-height0);
+
result = screen-resource_create(screen,
 templat);
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium-rect-textures): nv50: use NV50TIC_0_2_TARGET_RECT (?!?)

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 05e000d31c6f5441e8bbbce5175c0b6afa29946b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=05e000d31c6f5441e8bbbce5175c0b6afa29946b

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Wed Aug 18 17:29:59 2010 +0200

nv50: use NV50TIC_0_2_TARGET_RECT (?!?)

Is this the right thing?!?

---

 src/gallium/drivers/nv50/nv50_tex.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_tex.c 
b/src/gallium/drivers/nv50/nv50_tex.c
index 4db53f7..d41d9c5 100644
--- a/src/gallium/drivers/nv50/nv50_tex.c
+++ b/src/gallium/drivers/nv50/nv50_tex.c
@@ -131,9 +131,11 @@ nv50_tex_construct(struct nv50_sampler_view *view)
tic[2] |= NV50TIC_0_2_TARGET_1D;
break;
case PIPE_TEXTURE_2D:
-   case PIPE_TEXTURE_RECT:
tic[2] |= NV50TIC_0_2_TARGET_2D;
break;
+   case PIPE_TEXTURE_RECT:
+   tic[2] |= NV50TIC_0_2_TARGET_RECT;
+   break;
case PIPE_TEXTURE_3D:
tic[2] |= NV50TIC_0_2_TARGET_3D;
break;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (nvfx-next-7g): glsl: don' t crash if a field is specified for a non-struct uniform

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: nvfx-next-7g
Commit: 1d57e3e2ec2b62380578ddda8cae668f24d7ddcc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1d57e3e2ec2b62380578ddda8cae668f24d7ddcc

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Wed Aug 18 12:39:18 2010 +0200

glsl: don't crash if a field is specified for a non-struct uniform

This was triggered by the previous bug, but is a separate problem
in the general sense.

---

 src/mesa/program/ir_to_mesa.cpp |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 1f3072f..825c6f4 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -1145,7 +1145,7 @@ get_builtin_uniform_reg(struct gl_program *prog,
   if (!field  statevars[i].field) {
 assert(!FINISHME: whole-structure state var dereference);
   }
-  if (field  strcmp(statevars[i].field, field) != 0)
+  if (field  (!statevars[i].field || strcmp(statevars[i].field, field) 
!= 0))
 continue;
   break;
}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl2: Free the shader compiler at dri screen destruction.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: b83846475bac76268d75f53632faf8aad8cad02c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b83846475bac76268d75f53632faf8aad8cad02c

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 16:56:39 2010 -0700

glsl2: Free the shader compiler at dri screen destruction.

Hooray, we can valgrind again without adding suppressions.  This also
adds an interface for use by an implementation of
glReleaseShaderCompiler().

---

 src/glsl/glsl_parser_extras.cpp|   30 ++
 src/glsl/glsl_parser_extras.h  |3 +++
 src/mesa/drivers/dri/common/dri_util.c |2 ++
 3 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
index d1bb1ae..b864218 100644
--- a/src/glsl/glsl_parser_extras.cpp
+++ b/src/glsl/glsl_parser_extras.cpp
@@ -741,3 +741,33 @@ do_common_optimization(exec_list *ir, bool linked)
 
return progress;
 }
+
+extern C {
+
+/**
+ * To be called at GL teardown time, this frees compiler datastructures.
+ *
+ * After calling this, any previously compiled shaders and shader
+ * programs would be invalid.  So this should happen at approximately
+ * program exit.
+ */
+void
+_mesa_destroy_shader_compiler(void)
+{
+   _mesa_destroy_shader_compiler_caches();
+
+   _mesa_glsl_release_types();
+}
+
+/**
+ * Releases compiler caches to trade off performance for memory.
+ *
+ * Intended to be used with glReleaseShaderCompiler().
+ */
+void
+_mesa_destroy_shader_compiler_caches(void)
+{
+   _mesa_glsl_release_functions();
+}
+
+}
diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index 9e3cac2..b0b1bc3 100644
--- a/src/glsl/glsl_parser_extras.h
+++ b/src/glsl/glsl_parser_extras.h
@@ -178,6 +178,9 @@ extern void _mesa_glsl_warning(const YYLTYPE *locp,
 extern C {
 extern int preprocess(void *ctx, const char **shader, char **info_log,
  const struct gl_extensions *extensions);
+
+extern void _mesa_destroy_shader_compiler();
+extern void _mesa_destroy_shader_compiler_caches();
 }
 
 extern void _mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state,
diff --git a/src/mesa/drivers/dri/common/dri_util.c 
b/src/mesa/drivers/dri/common/dri_util.c
index 5eb8b62..b1a7b3e 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -707,6 +707,8 @@ static void driDestroyScreen(__DRIscreen *psp)
 * stream open to the X-server anymore.
 */
 
+   _mesa_destroy_shader_compiler();
+
if (psp-DriverAPI.DestroyScreen)
(*psp-DriverAPI.DestroyScreen)(psp);
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): ir_to_mesa: Fix leak by improper freeing of a uniform list.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 49dfa89873403967d9f99d08d2e25042dea544e0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=49dfa89873403967d9f99d08d2e25042dea544e0

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 17:12:18 2010 -0700

ir_to_mesa: Fix leak by improper freeing of a uniform list.

---

 src/mesa/program/ir_to_mesa.cpp |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index b566706..7b0c28e 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2743,7 +2743,7 @@ _mesa_glsl_link_shader(GLcontext *ctx, struct 
gl_shader_program *prog)
   /* We don't use the linker's uniforms list, and cook up our own at
* generate time.
*/
-  free(prog-Uniforms);
+  _mesa_free_uniform_list(prog-Uniforms);
   prog-Uniforms = _mesa_new_uniform_list();
}
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glcpp: Refresh autogenerated lexer.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: bd7853768dd7ad52604e3b636ae71dacaa7352fe
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bd7853768dd7ad52604e3b636ae71dacaa7352fe

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Wed Aug 18 17:38:24 2010 -0700

glcpp: Refresh autogenerated lexer.

---

 src/glsl/glcpp/glcpp-lex.c |  589 
 1 files changed, 326 insertions(+), 263 deletions(-)

diff --git a/src/glsl/glcpp/glcpp-lex.c b/src/glsl/glcpp/glcpp-lex.c
index a0de91a..1f0a77b 100644
--- a/src/glsl/glcpp/glcpp-lex.c
+++ b/src/glsl/glcpp/glcpp-lex.c
@@ -54,6 +54,7 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -84,8 +85,6 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX (4294967295U)
 #endif
 
-#endif /* ! C99 */
-
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -159,15 +158,7 @@ typedef void* yyscan_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the 
main buffer.
@@ -358,8 +349,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t 
yyscanner );
*yy_cp = '\0'; \
yyg-yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 41
-#define YY_END_OF_BUFFER 42
+#define YY_NUM_RULES 43
+#define YY_END_OF_BUFFER 44
 /* This struct is not used in this scanner,
but its presence is necessary. */
 struct yy_trans_info
@@ -367,26 +358,26 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_acclist[133] =
+static yyconst flex_int16_t yy_acclist[137] =
 {   0,
-3,3,   42,   37,   41,   38,   41,   39,   41,   41,
-   36,   41,   41,   36,   41,   36,   41,   36,   41,   23,
-   37,   41,   22,   37,   41,   36,   41,   36,   41,   36,
-   41,   35,   37,   41,   35,   37,   41,   36,   41,   38,
-   41,   21,   41,   41,3,   41,4,   41,5,   41,
-   40,   41,   37,   16,   38,   30,   33,   31,2,1,
-   23,   37,   23,   37,   37,   22,   37,   22,   37,   25,
-   27,   29,   28,   26,   35,   37,   35,   37,   32,   38,
-   21,   21,3,4,5,6,5,7,1,   24,
-   37,   35,   37,16396,   24,   37,   35,   37,   16,   35,
-
-   37,16397,16398, 8204,   16, 8204,   35,   37, 8205,   16,
- 8206,   16,16399,   17,16394,   20,   34,   35,   37,   19,
- 8207,   16,   17, 8202,   16,16395,16402, 8203,   16,9,
-8, 8210
+3,3,   44,   39,   43,   40,   43,   41,   43,   43,
+   38,   43,   43,   38,   43,   38,   43,   38,   43,   25,
+   39,   43,   24,   39,   43,   38,   43,   38,   43,   38,
+   43,   37,   39,   43,   37,   39,   43,   38,   43,   40,
+   43,   23,   43,   43,3,   43,4,   43,5,   43,
+   42,   43,   39,   18,   40,   32,   35,   33,2,1,
+   25,   39,   25,   39,   39,   24,   39,   24,   39,   27,
+   29,   31,   30,   28,   37,   39,   37,   39,   34,   40,
+   23,   23,3,4,5,6,5,7,1,   26,
+   39,   37,   39,16398,   26,   39,   37,   39,   18,   37,
+
+   39,16399,16400, 8206,   18, 8206,   37,   39, 8207,   18,
+ 8208,   18,16401,   19,16396,   22,   36,   37,   39,   21,
+ 8209,   18,   19, 8204,   18,16397,16404, 8205,   18,   11,
+   18,9,8, 8212,   10,   18
 } ;
 
-static yyconst flex_int16_t yy_accept[151] =
+static yyconst flex_int16_t yy_accept[166] =
 {   0,
 1,1,1,1,1,2,3,3,3,4,
 6,8,   10,   11,   13,   14,   16,   18,   20,   23,
@@ -394,16 +385,18 @@ static yyconst flex_int16_t yy_accept[151] =
47,   49,   51,   53,   54,   54,   55,   56,   57,   58,
59,   60,   61,   63,   65,   66,   68,   70,   71,   72,
73,   74,   75,   77,   79,   80,   81,   82,   83,   83,
-   83,   83,   83,   83,   83,   84,   85,   86,   87,   88,
-   89,   90,   92,   94,   94,   94,   94,   94,   94,   95,
-   95,   95,   95,   97,   99,   99,   99,   99,   99,   99,
-   99,   99,  100,  100,  100,  100,  100,  100,  102,  102,
-
-  103,  104,  104,  104,  104,  104,  106,  106,  107,  107,
-  107,  107,  107,  107,  109,  109,  109,  111,  111,  113,
-  114,  115,  115,  116,  116,  116,  117,  117,  120,  121,
-  121,  123,  124,  124,  124,  126,  127,  127,  127,  128,
-  128,  128,  130,  131,  132,  132,  132,  133,  133,  133
+   83,   83,   83,   83,   83,  

Mesa (master): glcpp: Add basic #line support ( adapted from the main compiler).

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 9cf62bdfeb3982405b9360500d7e0fa52036f38f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9cf62bdfeb3982405b9360500d7e0fa52036f38f

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Wed Aug 18 17:38:05 2010 -0700

glcpp: Add basic #line support (adapted from the main compiler).

---

 src/glsl/glcpp/glcpp-lex.l |   31 +++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/src/glsl/glcpp/glcpp-lex.l b/src/glsl/glcpp/glcpp-lex.l
index a14e580..c81bd04 100644
--- a/src/glsl/glcpp/glcpp-lex.l
+++ b/src/glsl/glcpp/glcpp-lex.l
@@ -100,6 +100,37 @@ HEXADECIMAL_INTEGER0[xX][0-9a-fA-F]+[uU]?
return OTHER;
 }
 
+{HASH}line{HSPACE}+{DECIMAL_INTEGER}{HSPACE}+{DECIMAL_INTEGER}{HSPACE}*$ {
+   /* Eat characters until the first digit is
+* encountered
+*/
+   char *ptr = yytext;
+   while (!isdigit(*ptr))
+   ptr++;
+
+   /* Subtract one from the line number because
+* yylineno is zero-based instead of
+* one-based.
+*/
+   yylineno = strtol(ptr, ptr, 0) - 1;
+   yylloc-source = strtol(ptr, NULL, 0);
+}
+
+{HASH}line{HSPACE}+{DECIMAL_INTEGER}{HSPACE}*$ {
+   /* Eat characters until the first digit is
+* encountered
+*/
+   char *ptr = yytext;
+   while (!isdigit(*ptr))
+   ptr++;
+
+   /* Subtract one from the line number because
+* yylineno is zero-based instead of
+* one-based.
+*/
+   yylineno = strtol(ptr, ptr, 0) - 1;
+}
+
 {HASH}ifdef/.*\n {
yyextra-lexing_if = 1;
yyextra-space_tokens = 0;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: Don't try to free components of a NULL uniform list.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: f5703a54e2f765237e01eef6ddbd019ca6a58e81
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f5703a54e2f765237e01eef6ddbd019ca6a58e81

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 17:42:34 2010 -0700

mesa: Don't try to free components of a NULL uniform list.

This might happen if we manage to trigger the right linker errors.

---

 src/mesa/program/prog_uniform.c |4 
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/src/mesa/program/prog_uniform.c b/src/mesa/program/prog_uniform.c
index 5aa9878..28acb88 100644
--- a/src/mesa/program/prog_uniform.c
+++ b/src/mesa/program/prog_uniform.c
@@ -44,6 +44,10 @@ void
 _mesa_free_uniform_list(struct gl_uniform_list *list)
 {
GLuint i;
+
+   if (!list)
+  return;
+
for (i = 0; i  list-NumUniforms; i++) {
   free((void *) list-Uniforms[i].Name);
}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl: Also strdup the names of uniform list entries for vec4 types.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: f1d5a9419784e939da1a4bcc482567f315da541a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f1d5a9419784e939da1a4bcc482567f315da541a

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 17:39:57 2010 -0700

glsl: Also strdup the names of uniform list entries for vec4 types.

Fixes double-free since the fix to free all of the uniform list.

---

 src/glsl/linker.cpp |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index b256574..2dc5697 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -843,7 +843,7 @@ assign_uniform_locations(struct gl_shader_program *prog)
 
n-u[0].Name = strdup(var-name);
for (unsigned j = 1; j  vec4_slots; j++)
-  n-u[j].Name = n-u[0].Name;
+  n-u[j].Name = strdup(var-name);
 
hash_table_insert(ht, n, n-u[0].Name);
uniforms.push_tail( n-link);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: Remove unnecessary heaaders from shaderapi.c.

2010-08-18 Thread Vinson Lee
Module: Mesa
Branch: master
Commit: a575067d7029c7af3bb6d650d6bd944ac8bb6bb7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a575067d7029c7af3bb6d650d6bd944ac8bb6bb7

Author: Vinson Lee v...@vmware.com
Date:   Wed Aug 18 18:49:32 2010 -0700

mesa: Remove unnecessary heaaders from shaderapi.c.

---

 src/mesa/main/shaderapi.c |2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index 89b9557..cc350c9 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -46,8 +46,6 @@
 #include program/program.h
 #include program/prog_parameter.h
 #include program/prog_uniform.h
-#include slang/slang_compile.h
-#include slang/slang_link.h
 #include talloc.h
 
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl: Replace sscanf in s_expression reader with strspn and strcspn.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 365ce61997a28a0c0dad79e7d3f7616e57f105f5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=365ce61997a28a0c0dad79e7d3f7616e57f105f5

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Wed Aug 18 18:03:22 2010 -0700

glsl: Replace sscanf in s_expression reader with strspn and strcspn.

This seems to give roughly a 20% speedup.

---

 src/glsl/s_expression.cpp |   49 ++--
 src/glsl/s_expression.h   |2 +-
 2 files changed, 30 insertions(+), 21 deletions(-)

diff --git a/src/glsl/s_expression.cpp b/src/glsl/s_expression.cpp
index 26be23e..4458c48 100644
--- a/src/glsl/s_expression.cpp
+++ b/src/glsl/s_expression.cpp
@@ -28,9 +28,9 @@
 #include assert.h
 #include s_expression.h
 
-s_symbol::s_symbol(const char *tmp)
+s_symbol::s_symbol(const char *tmp, size_t n)
 {
-   this-str = talloc_strdup (this, tmp);
+   this-str = talloc_strndup (this, tmp, n);
assert(this-str != NULL);
 }
 
@@ -51,26 +51,34 @@ s_list::length() const
 static s_expression *
 read_atom(void *ctx, const char * src)
 {
-   char buf[101];
-   int n;
-   if (sscanf(src,  %100[^( \v\t\r\n)]%n, buf, n) != 1)
+   s_expression *expr = NULL;
+
+   // Skip leading spaces.
+   src += strspn(src,  \v\t\r\n);
+
+   size_t n = strcspn(src, ( \v\t\r\n));
+   if (n == 0)
   return NULL; // no atom
-   src += n;
 
// Check if the atom is a number.
char *float_end = NULL;
-   double f = strtod(buf, float_end);
-   if (float_end != buf) {
+   double f = strtod(src, float_end);
+   if (float_end != src) {
   char *int_end = NULL;
-  int i = strtol(buf, int_end, 10);
+  int i = strtol(src, int_end, 10);
   // If strtod matched more characters, it must have a decimal part
   if (float_end  int_end)
-return new(ctx) s_float(f);
-
-  return new(ctx) s_int(i);
+expr = new(ctx) s_float(f);
+  else
+expr = new(ctx) s_int(i);
+   } else {
+  // Not a number; return a symbol.
+  expr = new(ctx) s_symbol(src, n);
}
-   // Not a number; return a symbol.
-   return new(ctx) s_symbol(buf);
+
+   src += n;
+
+   return expr;
 }
 
 s_expression *
@@ -82,10 +90,10 @@ s_expression::read_expression(void *ctx, const char *src)
if (atom != NULL)
   return atom;
 
-   char c;
-   int n;
-   if (sscanf(src,  %c%n, c, n) == 1  c == '(') {
-  src += n;
+   // Skip leading spaces.
+   src += strspn(src,  \v\t\r\n);
+   if (src[0] == '(') {
+  ++src;
 
   s_list *list = new(ctx) s_list;
   s_expression *expr;
@@ -93,11 +101,12 @@ s_expression::read_expression(void *ctx, const char *src)
   while ((expr = read_expression(ctx, src)) != NULL) {
 list-subexpressions.push_tail(expr);
   }
-  if (sscanf(src,  %c%n, c, n) != 1 || c != ')') {
+  src += strspn(src,  \v\t\r\n);
+  if (src[0] != ')') {
 printf(Unclosed expression (check your parenthesis).\n);
 return NULL;
   }
-  src += n;
+  ++src;
   return list;
}
return NULL;
diff --git a/src/glsl/s_expression.h b/src/glsl/s_expression.h
index 1a0c03c..aa22475 100644
--- a/src/glsl/s_expression.h
+++ b/src/glsl/s_expression.h
@@ -113,7 +113,7 @@ private:
 class s_symbol : public s_expression
 {
 public:
-   s_symbol(const char *);
+   s_symbol(const char *, size_t);
 
bool is_symbol() const { return true; }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: Fix the whining for link failures to actually be under MESA_GLSL=dump.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: af2ef53a2701426d32382e861d8f238a449e9cd9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=af2ef53a2701426d32382e861d8f238a449e9cd9

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 18:01:55 2010 -0700

mesa: Fix the whining for link failures to actually be under MESA_GLSL=dump.

---

 src/mesa/program/ir_to_mesa.cpp |5 +
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 7b0c28e..fafc620 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2750,6 +2750,11 @@ _mesa_glsl_link_shader(GLcontext *ctx, struct 
gl_shader_program *prog)
if (prog-LinkStatus) {
   if (!ctx-Driver.LinkShader(ctx, prog)) {
 prog-LinkStatus = GL_FALSE;
+  }
+   }
+
+   if (ctx-Shader.Flags  GLSL_DUMP) {
+  if (!prog-LinkStatus) {
 printf(GLSL shader program %d failed to link\n, prog-Name);
   }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): i965: Don't set the swizzle on an immediate value in the VS.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: bad29dc6dad7ed1bff46c67e61dab01f8d82b557
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bad29dc6dad7ed1bff46c67e61dab01f8d82b557

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 21:18:23 2010 -0700

i965: Don't set the swizzle on an immediate value in the VS.

Fixes glsl-vs-if-nested (70.0 is not = 70.000648 thanks to the
swizzle bits getting set).  Some safety checks are added to make sure
this doesn't happen again as we increase the usage of immediate values
in program generation.

---

 src/mesa/drivers/dri/i965/brw_eu.h  |4 
 src/mesa/drivers/dri/i965/brw_vs_emit.c |   11 +++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_eu.h 
b/src/mesa/drivers/dri/i965/brw_eu.h
index ff0..d15a8f9 100644
--- a/src/mesa/drivers/dri/i965/brw_eu.h
+++ b/src/mesa/drivers/dri/i965/brw_eu.h
@@ -633,6 +633,8 @@ static INLINE struct brw_reg brw_swizzle( struct brw_reg 
reg,
GLuint z,
GLuint w)
 {
+   assert(reg.file != BRW_IMMEDIATE_VALUE);
+
reg.dw1.bits.swizzle = BRW_SWIZZLE4(BRW_GET_SWZ(reg.dw1.bits.swizzle, x),
   BRW_GET_SWZ(reg.dw1.bits.swizzle, y),
   BRW_GET_SWZ(reg.dw1.bits.swizzle, z),
@@ -650,6 +652,7 @@ static INLINE struct brw_reg brw_swizzle1( struct brw_reg 
reg,
 static INLINE struct brw_reg brw_writemask( struct brw_reg reg,
  GLuint mask )
 {
+   assert(reg.file != BRW_IMMEDIATE_VALUE);
reg.dw1.bits.writemask = mask;
return reg;
 }
@@ -657,6 +660,7 @@ static INLINE struct brw_reg brw_writemask( struct brw_reg 
reg,
 static INLINE struct brw_reg brw_set_writemask( struct brw_reg reg,
  GLuint mask )
 {
+   assert(reg.file != BRW_IMMEDIATE_VALUE);
reg.dw1.bits.writemask = mask;
return reg;
 }
diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c 
b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index 7b946eb..7cbf22f 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -1180,10 +1180,12 @@ static struct brw_reg get_arg( struct brw_vs_compile *c,
 
/* Convert 3-bit swizzle to 2-bit.  
 */
-   reg.dw1.bits.swizzle = BRW_SWIZZLE4(GET_SWZ(src-Swizzle, 0),
-  GET_SWZ(src-Swizzle, 1),
-  GET_SWZ(src-Swizzle, 2),
-  GET_SWZ(src-Swizzle, 3));
+   if (reg.file != BRW_IMMEDIATE_VALUE) {
+  reg.dw1.bits.swizzle = BRW_SWIZZLE4(GET_SWZ(src-Swizzle, 0),
+ GET_SWZ(src-Swizzle, 1),
+ GET_SWZ(src-Swizzle, 2),
+ GET_SWZ(src-Swizzle, 3));
+   }
 
/* Note this is ok for non-swizzle instructions: 
 */
@@ -1229,6 +1231,7 @@ static struct brw_reg get_dst( struct brw_vs_compile *c,
   reg = brw_null_reg();
}
 
+   assert(reg.type != BRW_IMMEDIATE_VALUE);
reg.dw1.bits.writemask = dst.WriteMask;
 
return reg;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): i965: Set the if stack pop count when breaking out of a loop inside an if.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 8de8c97275e9555183a7e8f2238143657bbe60b2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8de8c97275e9555183a7e8f2238143657bbe60b2

Author: Eric Anholt e...@anholt.net
Date:   Wed Aug 18 21:21:05 2010 -0700

i965: Set the if stack pop count when breaking out of a loop inside an if.

Otherwise, we might end up with the if stack pointing at the wrong
place.  Fixes GPU hang with glsl-vs-if-loop.

---

 src/mesa/drivers/dri/i965/brw_vs_emit.c |   16 +++-
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c 
b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index 7cbf22f..18eb845 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -1562,6 +1562,7 @@ void brw_vs_emit(struct brw_vs_compile *c )
const GLuint nr_insns = c-vp-program.Base.NumInstructions;
GLuint insn, if_depth = 0, loop_depth = 0;
struct brw_instruction *if_inst[MAX_IF_DEPTH], *loop_inst[MAX_LOOP_DEPTH] = 
{ 0 };
+   int if_depth_in_loop[MAX_LOOP_DEPTH];
const struct brw_indirect stack_index = brw_indirect(0, 0);   
GLuint index;
GLuint file;
@@ -1575,6 +1576,7 @@ void brw_vs_emit(struct brw_vs_compile *c )
 
brw_set_compression_control(p, BRW_COMPRESSION_NONE);
brw_set_access_mode(p, BRW_ALIGN_16);
+   if_depth_in_loop[loop_depth] = 0;
 
for (insn = 0; insn  nr_insns; insn++) {
GLuint i;
@@ -1613,7 +1615,8 @@ void brw_vs_emit(struct brw_vs_compile *c )
   const struct prog_instruction *inst = 
c-vp-program.Base.Instructions[insn];
   struct brw_reg args[3], dst;
   GLuint i;
-  
+  struct brw_instruction *temp;
+
 #if 0
   printf(%d: , insn);
   _mesa_print_instruction(inst);
@@ -1781,6 +1784,7 @@ void brw_vs_emit(struct brw_vs_compile *c )
 if_inst[if_depth] = brw_IF(p, BRW_EXECUTE_8);
 /* Note that brw_IF smashes the predicate_control field. */
 if_inst[if_depth]-header.predicate_control = get_predicate(inst);
+if_depth_in_loop[loop_depth]++;
 if_depth++;
 break;
   case OPCODE_ELSE:
@@ -1790,18 +1794,22 @@ void brw_vs_emit(struct brw_vs_compile *c )
   case OPCODE_ENDIF:
  assert(if_depth  0);
 brw_ENDIF(p, if_inst[--if_depth]);
+if_depth_in_loop[loop_depth]--;
 break; 
   case OPCODE_BGNLOOP:
  loop_inst[loop_depth++] = brw_DO(p, BRW_EXECUTE_8);
+if_depth_in_loop[loop_depth] = 0;
  break;
   case OPCODE_BRK:
 brw_set_predicate_control(p, get_predicate(inst));
- brw_BREAK(p);
+temp = brw_BREAK(p);
+temp-bits3.if_else.pop_count = if_depth_in_loop[loop_depth];
 brw_set_predicate_control(p, BRW_PREDICATE_NONE);
  break;
   case OPCODE_CONT:
 brw_set_predicate_control(p, get_predicate(inst));
- brw_CONT(p);
+temp = brw_CONT(p);
+temp-bits3.if_else.pop_count = if_depth_in_loop[loop_depth];
  brw_set_predicate_control(p, BRW_PREDICATE_NONE);
  break;
   case OPCODE_ENDLOOP: 
@@ -1821,12 +1829,10 @@ void brw_vs_emit(struct brw_vs_compile *c )
if (inst0-header.opcode == BRW_OPCODE_BREAK 
   inst0-bits3.if_else.jump_count == 0) {
   inst0-bits3.if_else.jump_count = br * (inst1 - inst0 + 1);
-  inst0-bits3.if_else.pop_count = 0;
}
else if (inst0-header.opcode == BRW_OPCODE_CONTINUE 
inst0-bits3.if_else.jump_count == 0) {
   inst0-bits3.if_else.jump_count = br * (inst1 - inst0);
-  inst0-bits3.if_else.pop_count = 0;
}
 }
  }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600g: add a chiprev type for r600/r700/ evergreen instead of using family

2010-08-18 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 098064e8cb6950f60c51a44e280cb335f07920b1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=098064e8cb6950f60c51a44e280cb335f07920b1

Author: Dave Airlie airl...@redhat.com
Date:   Thu Aug 19 14:43:11 2010 +1000

r600g: add a chiprev type for r600/r700/evergreen instead of using family

---

 src/gallium/drivers/r600/r600_asm.c |   37 ++
 src/gallium/drivers/r600/r600_asm.h |1 +
 2 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_asm.c 
b/src/gallium/drivers/r600/r600_asm.c
index 9ea9d43..e6efae4 100644
--- a/src/gallium/drivers/r600/r600_asm.c
+++ b/src/gallium/drivers/r600/r600_asm.c
@@ -76,6 +76,27 @@ int r600_bc_init(struct r600_bc *bc, enum radeon_family 
family)
 {
LIST_INITHEAD(bc-cf);
bc-family = family;
+   switch (bc-family) {
+   case CHIP_R600:
+   case CHIP_RV610:
+   case CHIP_RV630:
+   case CHIP_RV670:
+   case CHIP_RV620:
+   case CHIP_RV635:
+   case CHIP_RS780:
+   case CHIP_RS880:
+   bc-chiprev = 0;
+   break;
+   case CHIP_RV770:
+   case CHIP_RV730:
+   case CHIP_RV710:
+   case CHIP_RV740:
+   bc-chiprev = 1;
+   break;
+   default:
+   R600_ERR(unknown family %d\n, bc-family);
+   return -EINVAL;
+   }
return 0;
 }
 
@@ -418,21 +439,11 @@ int r600_bc_build(struct r600_bc *bc)
switch (cf-inst) {
case (V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU  3):
LIST_FOR_EACH_ENTRY(alu, cf-alu, list) {
-   switch (bc-family) {
-   case CHIP_R600:
-   case CHIP_RV610:
-   case CHIP_RV630:
-   case CHIP_RV670:
-   case CHIP_RV620:
-   case CHIP_RV635:
-   case CHIP_RS780:
-   case CHIP_RS880:
+   switch(bc-chiprev) {
+   case 0:
r = r600_bc_alu_build(bc, alu, addr);
break;
-   case CHIP_RV770:
-   case CHIP_RV730:
-   case CHIP_RV710:
-   case CHIP_RV740:
+   case 1:
r = r700_bc_alu_build(bc, alu, addr);
break;
default:
diff --git a/src/gallium/drivers/r600/r600_asm.h 
b/src/gallium/drivers/r600/r600_asm.h
index 10d98af..e944bd0 100644
--- a/src/gallium/drivers/r600/r600_asm.h
+++ b/src/gallium/drivers/r600/r600_asm.h
@@ -122,6 +122,7 @@ struct r600_bc_cf {
 
 struct r600_bc {
enum radeon_family  family;
+   int chiprev; /* 0 - r600, 1 - r700, 2 - evergreen */
struct list_headcf;
struct r600_bc_cf   *cf_last;
unsignedndw;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600g: add SSG, SEQ, SGT and SNE

2010-08-18 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 0d48925a56ad4fb253386110b545abda82a25464
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0d48925a56ad4fb253386110b545abda82a25464

Author: Dave Airlie airl...@redhat.com
Date:   Thu Aug 19 11:41:18 2010 +1000

r600g: add SSG, SEQ, SGT and SNE

---

 src/gallium/drivers/r600/r600_shader.c |   84 +++-
 src/gallium/drivers/r600/r600_sq.h |   16 ++
 2 files changed, 88 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 828082d..3caeaa3 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -684,7 +684,7 @@ static int tgsi_kill(struct r600_shader_ctx *ctx)
memset(alu, 0, sizeof(struct r600_bc_alu));
alu.inst = ctx-inst_info-r600_opcode;
alu.dst.chan = i;
-   alu.src[0].sel = 248;
+   alu.src[0].sel = SQ_ALU_SRC_0;
r = tgsi_src(ctx, inst-Src[0], alu.src[1]);
if (r)
return r;
@@ -743,7 +743,7 @@ static int tgsi_lit(struct r600_shader_ctx *ctx)
/* dst.x, - 1.0  */
memset(alu, 0, sizeof(struct r600_bc_alu));
alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV;
-   alu.src[0].sel  = 249; /*1.0*/
+   alu.src[0].sel  = SQ_ALU_SRC_1; /*1.0*/
alu.src[0].chan = 0;
r = tgsi_dst(ctx, inst-Dst[0], 0, alu.dst);
if (r)
@@ -759,7 +759,7 @@ static int tgsi_lit(struct r600_shader_ctx *ctx)
r = tgsi_src(ctx, inst-Src[0], alu.src[0]);
if (r)
return r;
-   alu.src[1].sel  = 248; /*0.0*/
+   alu.src[1].sel  = SQ_ALU_SRC_0; /*0.0*/
alu.src[1].chan = tgsi_chan(inst-Src[0], 0);
r = tgsi_dst(ctx, inst-Dst[0], 1, alu.dst);
if (r)
@@ -780,7 +780,7 @@ static int tgsi_lit(struct r600_shader_ctx *ctx)
/* dst.w, - 1.0  */
memset(alu, 0, sizeof(struct r600_bc_alu));
alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV;
-   alu.src[0].sel  = 249;
+   alu.src[0].sel  = SQ_ALU_SRC_1;
alu.src[0].chan = 0;
r = tgsi_dst(ctx, inst-Dst[0], 3, alu.dst);
if (r)
@@ -919,6 +919,66 @@ static int tgsi_trans_srcx_replicate(struct 
r600_shader_ctx *ctx)
return 0;
 }
 
+static int tgsi_ssg(struct r600_shader_ctx *ctx)
+{
+   struct tgsi_full_instruction *inst = 
ctx-parse.FullToken.FullInstruction;
+   struct r600_bc_alu alu;
+   struct r600_bc_alu_src r600_src[3];
+   int i, j, r;
+
+   r = tgsi_split_constant(ctx, r600_src);
+   if (r)
+   return r;
+
+   /* tmp = (src  0 ? 1 : src) */
+   for (i = 0; i  4; i++) {
+   memset(alu, 0, sizeof(struct r600_bc_alu));
+   alu.inst = V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_CNDGT;
+   alu.is_op3 = 1;
+   alu.dst.sel = ctx-temp_reg;
+   alu.dst.write = 1;
+
+   alu.src[0] = r600_src[0];
+   alu.src[0].chan = tgsi_chan(inst-Src[0], i);
+
+   alu.src[1].sel = SQ_ALU_SRC_1;
+
+   alu.src[2] = r600_src[0];
+   alu.src[2].chan = tgsi_chan(inst-Src[0], i);
+   if (i == 3)
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx-bc, alu);
+   if (r)
+   return r;
+   }
+
+   /* dst = (-tmp  0 ? -1 : tmp) */
+   for (i = 0; i  4; i++) {
+   memset(alu, 0, sizeof(struct r600_bc_alu));
+   alu.inst = V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_CNDGT;
+   alu.is_op3 = 1;
+   r = tgsi_dst(ctx, inst-Dst[0], i, alu.dst);
+   if (r)
+   return r;
+
+   alu.src[0].sel = ctx-temp_reg;
+   alu.src[0].neg = 1;
+
+   alu.src[1].sel = SQ_ALU_SRC_1;
+   alu.src[1].neg = 1;
+
+   alu.src[2].sel = ctx-temp_reg;
+
+   alu.dst.write = 1;
+   if (i == 3)
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx-bc, alu);
+   if (r)
+   return r;
+   }
+   return 0;
+}
+
 static int tgsi_helper_copy(struct r600_shader_ctx *ctx, struct 
tgsi_full_instruction *inst)
 {
struct r600_bc_alu alu;
@@ -1006,13 +1066,13 @@ static int tgsi_dp(struct r600_shader_ctx *ctx)
switch (ctx-inst_info-tgsi_opcode) {
case TGSI_OPCODE_DP2:
if (i  1) {
-   alu.src[0].sel = alu.src[1].sel = 248;
+   alu.src[0].sel = alu.src[1].sel = SQ_ALU_SRC_0;
alu.src[0].chan = alu.src[1].chan = 0;
}
break;
case TGSI_OPCODE_DP3:
if (i  2) {
-   alu.src[0].sel = alu.src[1].sel = 248;
+   

Mesa (master): r600g: add sin/cos

2010-08-18 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 88f5976484842671ecb2cefcfa91838a43032359
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=88f5976484842671ecb2cefcfa91838a43032359

Author: Dave Airlie airl...@redhat.com
Date:   Thu Aug 19 14:43:44 2010 +1000

r600g: add sin/cos

This pretty much ports the code from r600c, however it doesn't
always seem to work quite perfectly, but I can't find anything in this
code that is wrong. I'm guessing either literal input or constants
aren't working always.

---

 src/gallium/drivers/r600/r600_shader.c |  124 +++-
 src/gallium/drivers/r600/r600_sq.h |1 +
 2 files changed, 123 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 3caeaa3..4d390f9 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -674,6 +674,126 @@ static int tgsi_op2(struct r600_shader_ctx *ctx)
return 0;
 }
 
+/* 
+ * r600 - trunc to -PI..PI range
+ * r700 - normalize by dividing by 2PI
+ * see fdo bug 27901
+ */
+static int tgsi_trig(struct r600_shader_ctx *ctx)
+{
+   struct tgsi_full_instruction *inst = 
ctx-parse.FullToken.FullInstruction;
+   struct r600_bc_alu_src r600_src[3];
+   struct r600_bc_alu alu;
+   int i, r;
+   uint32_t lit_vals[4];
+
+   memset(lit_vals, 0, 4*4);
+   r = tgsi_split_constant(ctx, r600_src);
+   if (r)
+   return r;
+   lit_vals[0] = fui(1.0 /(3.1415926535 * 2));
+   lit_vals[1] = fui(0.5f);
+
+   memset(alu, 0, sizeof(struct r600_bc_alu));
+   alu.inst = V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_MULADD;
+   alu.is_op3 = 1;
+
+   alu.dst.chan = 0;
+   alu.dst.sel = ctx-temp_reg;
+   alu.dst.write = 1;
+
+   alu.src[0] = r600_src[0];
+   alu.src[0].chan = tgsi_chan(inst-Src[0], 0);
+   
+   alu.src[1].sel = SQ_ALU_SRC_LITERAL;
+   alu.src[1].chan = 0;
+   alu.src[2].sel = SQ_ALU_SRC_LITERAL;
+   alu.src[2].chan = 1;
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx-bc, alu);
+   if (r)
+   return r;
+   r = r600_bc_add_literal(ctx-bc, lit_vals);
+   if (r)
+   return r;
+
+   memset(alu, 0, sizeof(struct r600_bc_alu));
+   alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FRACT;
+   
+   alu.dst.chan = 0;
+   alu.dst.sel = ctx-temp_reg;
+   alu.dst.write = 1;
+
+   alu.src[0].sel = ctx-temp_reg;
+   alu.src[0].chan = 0;
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx-bc, alu);
+   if (r)
+   return r;
+
+   if (ctx-bc-chiprev == 0) {
+   lit_vals[0] = fui(3.1415926535897f * 2.0f);
+   lit_vals[1] = fui(-3.1415926535897f);
+   } else {
+   lit_vals[0] = fui(1.0f);
+   lit_vals[1] = fui(-0.5f);
+   }
+
+   memset(alu, 0, sizeof(struct r600_bc_alu));
+   alu.inst = V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_MULADD;
+   alu.is_op3 = 1;
+
+   alu.dst.chan = 0;
+   alu.dst.sel = ctx-temp_reg;
+   alu.dst.write = 1;
+
+   alu.src[0].sel = ctx-temp_reg;
+   alu.src[0].chan = 0;
+   
+   alu.src[1].sel = SQ_ALU_SRC_LITERAL;
+   alu.src[1].chan = 0;
+   alu.src[2].sel = SQ_ALU_SRC_LITERAL;
+   alu.src[2].chan = 1;
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx-bc, alu);
+   if (r)
+   return r;
+   r = r600_bc_add_literal(ctx-bc, lit_vals);
+   if (r)
+   return r;
+
+   memset(alu, 0, sizeof(struct r600_bc_alu));
+   alu.inst = ctx-inst_info-r600_opcode;
+   alu.dst.chan = 0;
+   alu.dst.sel = ctx-temp_reg;
+   alu.dst.write = 1;
+
+   alu.src[0].sel = ctx-temp_reg;
+   alu.src[0].chan = 0;
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx-bc, alu);
+   if (r)
+   return r;
+
+   /* replicate result */
+   for (i = 0; i  4; i++) {
+   memset(alu, 0, sizeof(struct r600_bc_alu));
+   alu.src[0].sel = ctx-temp_reg;
+   alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV;
+   alu.dst.chan = i;
+   r = tgsi_dst(ctx, inst-Dst[0], i, alu.dst);
+   if (r)
+   return r;
+   alu.dst.write = (inst-Dst[0].Register.WriteMask  i)  1;
+   if (i == 3)
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx-bc, alu);
+   if (r)
+   return r;
+   }
+   return 0;
+}
+
 static int tgsi_kill(struct r600_shader_ctx *ctx)
 {
struct tgsi_full_instruction *inst = 
ctx-parse.FullToken.FullInstruction;
@@ -1300,7 +1420,7 @@ static struct r600_shader_tgsi_instruction 
r600_shader_tgsi_instruction[] = {
{TGSI_OPCODE_ABS,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV, 
tgsi_op2},
{TGSI_OPCODE_RCC,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP,