[Mesa-dev] [PATCH] glsl: fix Bug 85252 - Segfault in compiler while processing ternary operator with void arguments

2015-07-09 Thread Renaud Gaubert
This is done by returning an rvalue of type void in the
ast_function_expression::hir function instead of a void expression.

This produces (in the case of the ternary) an hir with a call
to the void returning function and an assignement of a void variable
which will be optimized out (the assignement) during the optimization
pass.

This fix results in having a valid subexpression in the many
different cases where the subexpressions are functions whose
return values are void.

Thus preventing to dereference NULL in the following cases:
  * binary operator
  * unary operators
  * ternary operator
  * comparison operators (except equal and nequal operator)

Equal and nequal had to be handled as a special case because
instead of segfaulting on a forbidden syntax it was now accepting
expressions with a void return value on either (or both) side of
the expression.

Piglist tests are on the way

Signed-off-by: Renaud Gaubert ren...@lse.epita.fr
Reviewed-by: Gabriel Laskar gabr...@lse.epita.fr
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85252
---
 src/glsl/ast_function.cpp |  6 +-
 src/glsl/ast_to_hir.cpp   | 10 +-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp
index 92e26bf..776a754 100644
--- a/src/glsl/ast_function.cpp
+++ b/src/glsl/ast_function.cpp
@@ -1785,7 +1785,11 @@ ast_function_expression::hir(exec_list *instructions,
 /* an error has already been emitted */
 value = ir_rvalue::error_value(ctx);
   } else {
-value = generate_call(instructions, sig, actual_parameters, state);
+value = generate_call(instructions, sig, actual_parameters, state);
+if (!value) {
+  ir_variable *const tmp = new(ctx) ir_variable(glsl_type::void_type, 
void_var, ir_var_temporary);
+  value = new(ctx) ir_dereference_variable(tmp);
+}
   }
 
   return value;
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 8cb46be..00cc16c 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -1270,7 +1270,15 @@ ast_expression::do_hir(exec_list *instructions,
*applied to one operand that can make them match, in which
*case this conversion is done.
*/
-  if ((!apply_implicit_conversion(op[0]-type, op[1], state)
+
+  if (op[0]-type == glsl_type::void_type || op[1]-type == 
glsl_type::void_type) {
+
+_mesa_glsl_error( loc, state, `%s':  wrong operand types: no 
operation 
+  `%1$s' exists that takes a left-hand operand of type 'void' or a 
+  right operand of type 'void', (this-oper == ast_equal) ? == : 
!=);
+
+ error_emitted = true;
+  } else if ((!apply_implicit_conversion(op[0]-type, op[1], state)
 !apply_implicit_conversion(op[1]-type, op[0], state))
   || (op[0]-type != op[1]-type)) {
  _mesa_glsl_error( loc, state, operands of `%s' must have the same 
-- 
2.4.5

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


Re: [Mesa-dev] [PATCH 1/2] i965: Set brw-batch.emit only #ifdef DEBUG.

2015-07-09 Thread Iago Toral
Even if your next patch needs more work this one alone still makes
sense:

Reviewed-by: Iago Toral Quiroga ito...@igalia.com

Iago

On Wed, 2015-07-08 at 14:00 -0700, Matt Turner wrote:
 It's only used inside #ifdef DEBUG. Cuts ~1.7k of .text, and more
 importantly prevents a larger code size regression in the next commit
 when the .used field is replaced and calculated on demand.
 
text data  bss  dec  hex  filename
 4945468   19515226192  5166812   4ed6dc  i965_dri.so before
 4943740   19515226192  5165084   4ed01c  i965_dri.so after
 
 And surround the emit and total fields with #ifdef DEBUG to prevent
 such mistakes from happening again.
 ---
  src/mesa/drivers/dri/i965/brw_context.h   | 2 ++
  src/mesa/drivers/dri/i965/intel_batchbuffer.h | 2 +-
  2 files changed, 3 insertions(+), 1 deletion(-)
 
 diff --git a/src/mesa/drivers/dri/i965/brw_context.h 
 b/src/mesa/drivers/dri/i965/brw_context.h
 index 7596139..afb714b 100644
 --- a/src/mesa/drivers/dri/i965/brw_context.h
 +++ b/src/mesa/drivers/dri/i965/brw_context.h
 @@ -872,7 +872,9 @@ struct intel_batchbuffer {
 /** BO for post-sync nonzero writes for gen6 workaround. */
 drm_intel_bo *workaround_bo;
  
 +#ifdef DEBUG
 uint16_t emit, total;
 +#endif
 uint16_t used, reserved_space;
 uint32_t *map;
 uint32_t *cpu_map;
 diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.h 
 b/src/mesa/drivers/dri/i965/intel_batchbuffer.h
 index fdd07e0..f0971e9 100644
 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.h
 +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.h
 @@ -134,8 +134,8 @@ intel_batchbuffer_begin(struct brw_context *brw, int n, 
 enum brw_gpu_ring ring)
  {
 intel_batchbuffer_require_space(brw, n * 4, ring);
  
 -   brw-batch.emit = brw-batch.used;
  #ifdef DEBUG
 +   brw-batch.emit = brw-batch.used;
 brw-batch.total = n;
  #endif
  }


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


[Mesa-dev] [HACK] i965/fs: Fix ordering of src0 alpha and oMask in the framebuffer write payload.

2015-07-09 Thread Francisco Jerez
We were passing src0 alpha and oMask in reverse order.  There seems to
be no good way to pass them in the correct order to the new-style
LOAD_PAYLOAD (how surprising) because src0 alpha is per-channel while
oMask is not.  Just split src0 alpha in fixed-width registers and pass
them to LOAD_PAYLOAD as if they were part of the header as work-around
for now.

I've written a piglit test that demonstrates the problem by using
gl_SampleMask from a fragment shader with multiple color outputs [1].

[1] http://lists.freedesktop.org/archives/piglit/2015-July/016499.html
---
 src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 26 +-
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp 
b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
index 94d6a58..304ae74 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
@@ -1535,6 +1535,19 @@ fs_visitor::emit_single_fb_write(const fs_builder bld,
   length++;
}
 
+   if (src0_alpha.file != BAD_FILE  color0.file != BAD_FILE) {
+  /* Neat, we need to chop the src0 alpha component and pass it as part of
+   * the header even though it has per-channel semantics, because the next
+   * optional field is header-like and LOAD_PAYLOAD requires all such
+   * fields to form a contiguous segment at the beginning of the message.
+   */
+  for (unsigned i = 0; i  exec_size / 8; i++) {
+ setup_color_payload(sources[length], src0_alpha, 1, 8,
+ use_2nd_half || i == 1);
+ length++;
+  }
+   }
+
prog_data-uses_omask =
   prog-OutputsWritten  BITFIELD64_BIT(FRAG_RESULT_SAMPLE_MASK);
if (prog_data-uses_omask) {
@@ -1561,19 +1574,14 @@ fs_visitor::emit_single_fb_write(const fs_builder bld,
  offset(this-outputs[0], bld, 3),
  1, exec_size, false);
   length += 4;
-   } else if (color1.file == BAD_FILE) {
-  if (src0_alpha.file != BAD_FILE) {
- setup_color_payload(sources[length], src0_alpha, 1, exec_size, 
false);
- length++;
-  }
-
-  setup_color_payload(sources[length], color0, components,
-  exec_size, use_2nd_half);
-  length += 4;
} else {
   setup_color_payload(sources[length], color0, components,
   exec_size, use_2nd_half);
   length += 4;
+
+   }
+
+   if (color1.file != BAD_FILE) {
   setup_color_payload(sources[length], color1, components,
   exec_size, use_2nd_half);
   length += 4;
-- 
2.4.3

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


Re: [Mesa-dev] [Mesa-stable] [PATCHv2] i965/gen9: Use custom MOCS entries set up by the kernel.

2015-07-09 Thread Francisco Jerez
Ben Widawsky b...@bwidawsk.net writes:

 On Tue, Jul 07, 2015 at 10:21:28PM +0300, Francisco Jerez wrote:
 Instead of relying on hardware defaults the i915 kernel driver is
 going program custom MOCS tables system-wide on Gen9 hardware.  The
 WT entry previously used for renderbuffers had a number of problems:
 It disabled caching on eLLC, it used a reserved L3 cacheability
 setting, and it used to override the PTE controls making renderbuffers
 always WT on LLC regardless of the kernel's setting.  Instead use an
 entry from the new MOCS tables with parameters: TC=LLC/eLLC, LeCC=PTE,
 L3CC=WB.
 
 The WB entry previously used for anything other than renderbuffers
 has moved to a different index in the new MOCS tables but it should
 have the same caching semantics as the old entry.
 
 Even though the corresponding kernel change (drm/i915: Added
 Programming of the MOCS) is in a way an ABI break it doesn't seem
 necessary to check that the kernel is recent enough because the change
 should only affect Gen9 which is still unreleased hardware.
 
 v2: Update MOCS values for the new Android-incompatible tables
 introduced in v7 of the kernel patch.
 
 Cc: 10.6 mesa-sta...@lists.freedesktop.org

 It'd be cool to get perf data, but certainly not a requirement here since the
 requirement to change is pretty obvious, IMO (mostly, I'm just curious). I do
 like having the References: in the commit for the kernel patch, but that's 
 just
 me, and I can live with whatever.

I ran SynMark on SKL with this patch applied last Monday and didn't spot
any significant differences.  Some of the benchmarks seemed to give
quite erratic results regardless.  Meh...

 ---
  src/mesa/drivers/dri/i965/brw_defines.h| 11 ++-
  src/mesa/drivers/dri/i965/gen8_surface_state.c |  3 +--
  2 files changed, 7 insertions(+), 7 deletions(-)
 
 diff --git a/src/mesa/drivers/dri/i965/brw_defines.h 
 b/src/mesa/drivers/dri/i965/brw_defines.h
 index 66b9abc..8ab8d62 100644
 --- a/src/mesa/drivers/dri/i965/brw_defines.h
 +++ b/src/mesa/drivers/dri/i965/brw_defines.h
 @@ -2491,12 +2491,13 @@ enum brw_wm_barycentric_interp_mode {
  #define BDW_MOCS_WT  0x58
  #define BDW_MOCS_PTE 0x18
  
 -/* Skylake: MOCS is now an index into an array of 64 different configurable
 - * cache settings.  We still use only either write-back or write-through; 
 and
 - * rely on the documented default values.
 +/* Skylake: MOCS is now an index into an array of 62 different caching
 + * configurations programmed by the kernel.

 I'd keep the '64' instead of '62' the latter is a software construct, but
 whatever you like.

It's an actual hardware limitation, the last two entries are reserved by
the hardware and are neither configurable (as the previous comment said)
nor can be programmed by the kernel (as my comment would imply had I
left the 64).


   */
 -#define SKL_MOCS_WB (0b001001  1)
 -#define SKL_MOCS_WT (0b000101  1)
 +/* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */
 +#define SKL_MOCS_WB  (2  1)
 +/* TC=LLC/eLLC, LeCC=PTE, LRUM=3, L3CC=WB */
 +#define SKL_MOCS_PTE (1  1)
  
  #define MEDIA_VFE_STATE 0x7000
  /* GEN7 DW2, GEN8+ DW3 */
 diff --git a/src/mesa/drivers/dri/i965/gen8_surface_state.c 
 b/src/mesa/drivers/dri/i965/gen8_surface_state.c
 index bd3eb00..dfaf762 100644
 --- a/src/mesa/drivers/dri/i965/gen8_surface_state.c
 +++ b/src/mesa/drivers/dri/i965/gen8_surface_state.c
 @@ -401,8 +401,7 @@ gen8_update_renderbuffer_surface(struct brw_context *brw,
irb-mt_layer : (irb-mt_layer / MAX2(mt-num_samples, 1));
 GLenum gl_target =
rb-TexImage ? rb-TexImage-TexObject-Target : GL_TEXTURE_2D;
 -   /* FINISHME: Use PTE MOCS on Skylake. */
 -   uint32_t mocs = brw-gen = 9 ? SKL_MOCS_WT : BDW_MOCS_PTE;
 +   uint32_t mocs = brw-gen = 9 ? SKL_MOCS_PTE : BDW_MOCS_PTE;

 I don't know the policy on const really, but this is a good opportunity to
 const.

Sure, why not, const is always good.

  
 intel_miptree_used_for_rendering(mt);
  

 Reviewed-by: Ben Widawsky b...@bwidawsk.net

Thanks.


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


signature.asc
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 4/4] vc4: unref old fence

2015-07-09 Thread Rob Clark
On Thu, Jul 9, 2015 at 8:36 AM, Emil Velikov emil.l.veli...@gmail.com wrote:
 On 9 July 2015 at 01:46, Rob Clark robdcl...@gmail.com wrote:
 From: Rob Clark robcl...@freedesktop.org

 Some, but not all, state trackers will explicitly unref (and set to
 NULL) the previous *fence before calling pipe-flush().  So driver
 should use fence_ref() which will unref the old fence if not NULL.

 Signed-off-by: Rob Clark robcl...@freedesktop.org
 ---
  src/gallium/drivers/vc4/vc4_context.c | 2 ++
  1 file changed, 2 insertions(+)

 diff --git a/src/gallium/drivers/vc4/vc4_context.c 
 b/src/gallium/drivers/vc4/vc4_context.c
 index 630f8e6..316598f 100644
 --- a/src/gallium/drivers/vc4/vc4_context.c
 +++ b/src/gallium/drivers/vc4/vc4_context.c
 @@ -103,8 +103,10 @@ vc4_pipe_flush(struct pipe_context *pctx, struct 
 pipe_fence_handle **fence,
  vc4_flush(pctx);

  if (fence) {
 +struct pipe_screen *screen = pctx-screen;
  struct vc4_fence *f = vc4_fence_create(vc4-screen,
 
 vc4-last_emit_seqno);
 +screen-fence_reference(screen, fence, NULL);
 The order seems to be reversed comparing to the other patches that
 you've sent. Is that intentional ?

it just made the diff smaller to do it in this order... the order
doesn't really matter

BR,
-R

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


Re: [Mesa-dev] [PATCH 2/2] i965: Optimize intel_batchbuffer_emit_dword().

2015-07-09 Thread Martin Peres

On 09/07/15 11:13, Chris Wilson wrote:

On Wed, Jul 08, 2015 at 05:08:11PM -0700, Matt Turner wrote:

On Wed, Jul 8, 2015 at 4:53 PM, Chris Wilson ch...@chris-wilson.co.uk wrote:

static void upload_viewport_state_pointers(struct brw_context *brw)
{
BEGIN_BATCH(4);
brw-batch.map[0] = (_3DSTATE_VIEWPORT_STATE_POINTERS  16 | (4 - 2) |
 GEN6_CC_VIEWPORT_MODIFY |
 GEN6_SF_VIEWPORT_MODIFY |
 GEN6_CLIP_VIEWPORT_MODIFY);
brw-batch.map[1] = (brw-clip.vp_offset);
brw-batch.map[2] = (brw-sf.vp_offset);
brw-batch.map[3] = (brw-cc.vp_offset);
brw-batch.map += 4;
ADVANCE_BATCH();
}
-Chris

Ah, thanks. I see.

I'll give it another shot.

Playing a bit more, I get reasonable code generation using

uint32_t *out = BEGIN_BATCH(4);
*out++ = (_3DSTATE_VIEWPORT_STATE_POINTERS  16 | (4 - 2) |
  GEN6_CC_VIEWPORT_MODIFY |
  GEN6_SF_VIEWPORT_MODIFY |
  GEN6_CLIP_VIEWPORT_MODIFY);
*out++ = (brw-clip.vp_offset);
*out++ = (brw-sf.vp_offset);
*out++ = (brw-cc.vp_offset);
ADVANCE_BATCH(out);

with BEGIN_BATCH(n) {
uint32_t *ptr = brw-batch.map;
brw-batch.map + =n;
return ptr;
}

That also gives a simple ADVANCE_BATCH(out) assert(out == brw-batch.map),
and works with a little fudging (out - brw-batch.base) for OUT_RELOC.
-Chris


Hey guys,

I tried Chris' patches 
(http://cgit.freedesktop.org/~ickle/mesa/log/?h=brw-batch) and found the 
following results:


Baseline is commit 7916e0d12968f68e3916b221798049e2ea6c2340: i965: 
AMD_pinned_memory and userptr


commit 195a0598da480f9ca2c499b668b76d836b8b65ea: ptr
customer benchmark: +0.5%
Synmark Oglbatch7: -2.29%
Glxgears: +4.78%

commit 37a093052dc92a5976134658b31ff82f25a3d01e: out
customer benchmark: +2.6% (103.1% of baseline)
Synmark Oglbatch7: +2.21% (99.8% of baseline)
Glxgears: +0% (104.78% of baseline)

This is done by iterating 10 times each benchmark for every commit. So, 
this looks like in average, this is a net positive! Thanks Matt and Chris!


Martin

PS: Sorry for the commit number, they are taken from my branch that gets 
rid of the DRI2/3-related commits of Chris' branch.

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


[Mesa-dev] [PATCH] glsl: fix Bug 85252 - Segfault in compiler while processing ternary operator with void arguments

2015-07-09 Thread Renaud Gaubert
This is done by returning an rvalue of type void in the
ast_function_expression::hir function instead of a void expression.

This produces (in the case of the ternary) an hir with a call
to the void returning function and an assignement of a void variable
which will be optimized out (the assignement) during the optimization
pass.

This fix results in having a valid subexpression in the many
different cases where the subexpressions are functions whose
return values are void.

Thus preventing to dereference NULL in the following cases:
  * binary operator
  * unary operators
  * ternary operator
  * comparison operators (except equal and nequal operator)

Equal and nequal had to be handled as a special case because
instead of segfaulting on a forbidden syntax it was now accepting
expressions with a void return value on either (or both) side of
the expression.

Piglist tests are on the way

Signed-off-by: Renaud Gaubert ren...@lse.epita.fr
Reviewed-by: Gabriel Laskar gabr...@lse.epita.fr
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85252
---
 src/glsl/ast_function.cpp |  7 ++-
 src/glsl/ast_to_hir.cpp   | 10 +-
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp
index 92e26bf..3c2b1ea 100644
--- a/src/glsl/ast_function.cpp
+++ b/src/glsl/ast_function.cpp
@@ -1785,7 +1785,12 @@ ast_function_expression::hir(exec_list *instructions,
 /* an error has already been emitted */
 value = ir_rvalue::error_value(ctx);
   } else {
-value = generate_call(instructions, sig, actual_parameters, state);
+value = generate_call(instructions, sig, actual_parameters, state);
+if (!value) {
+  ir_variable *const tmp = new(ctx) ir_variable(glsl_type::void_type, 
void_var, ir_var_temporary);
+  value = new(ctx) ir_dereference_variable(tmp);
+  instructions-push_tail(tmp);
+}
   }
 
   return value;
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 8cb46be..00cc16c 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -1270,7 +1270,15 @@ ast_expression::do_hir(exec_list *instructions,
*applied to one operand that can make them match, in which
*case this conversion is done.
*/
-  if ((!apply_implicit_conversion(op[0]-type, op[1], state)
+
+  if (op[0]-type == glsl_type::void_type || op[1]-type == 
glsl_type::void_type) {
+
+_mesa_glsl_error( loc, state, `%s':  wrong operand types: no 
operation 
+  `%1$s' exists that takes a left-hand operand of type 'void' or a 
+  right operand of type 'void', (this-oper == ast_equal) ? == : 
!=);
+
+ error_emitted = true;
+  } else if ((!apply_implicit_conversion(op[0]-type, op[1], state)
 !apply_implicit_conversion(op[1]-type, op[0], state))
   || (op[0]-type != op[1]-type)) {
  _mesa_glsl_error( loc, state, operands of `%s' must have the same 
-- 
2.4.5

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


Re: [Mesa-dev] [RFC] loader: libudev vs sysfs vs libdrm

2015-07-09 Thread Axel Davy

On 09/07/2015 15:33, Emil Velikov wrote :


Yakes forgot about that one. From a quick look we can (I know it feels
durty) use readlink(
/sys/dev/char/$(major):$(minor)).

Everything seems to be there - bus type and exact location of the
device on the bus. It's limited to sysfs users, but they are more than
the libudev ones (perhaps not by much). How does that sound ?

Cheers,
Emil


The idea behind using udev for the tag was that arbitrary tag could be used,
especially to identify usb devices.

Ofc another solution could be used.

Yours,

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


[Mesa-dev] [PATCH shader-db] Add support for shadertoy tests

2015-07-09 Thread Rob Clark
Attached script grabs shaders from shadertoy, and dumps them out as
.shader_test files which can be run through shader-db for compiler
testing.

shadertoy only gives you a fragment shader (which works based on
gl_FragCoord), so a generic vertex shader is used.  And a blurb is
inserted for the pre-defined uniforms and main() function (which just
calls shadertoy mainImage() fxn).

v2: updated w/ python suggestions from Dylan

---
Note: we probably want to pick a couple shadertoy shaders and commit
them (rather than pulling down *all* shadertoy shaders, which may
change over time, etc).  I can just pick a couple randomly unless
anyone has some requests.  Either way, seems useful to have the script
in git in case anyone else wants to grab new/more shaders.

 grab-shadertoy.py | 66 +++
 1 file changed, 66 insertions(+)
 create mode 100755 grab-shadertoy.py

diff --git a/grab-shadertoy.py b/grab-shadertoy.py
new file mode 100755
index 000..04db411
--- /dev/null
+++ b/grab-shadertoy.py
@@ -0,0 +1,66 @@
+#!/usr/bin/env python3
+
+
+import os, requests, textwrap
+
+url = 'https://www.shadertoy.com/api/v1/shaders'
+key = '?key=NdnKw7'
+
+header = textwrap.dedent(\
+[require]
+GLSL = 1.30
+
+[fragment shader]
+#version 130
+uniform vec3  iResolution;
+uniform float iGlobalTime;
+uniform float iChannelTime[4];
+uniform vec4  iMouse;
+uniform vec4  iDate;
+uniform float iSampleRate;
+uniform vec3  iChannelResolution[4];
+uniform sampler2D iChannel0;
+uniform sampler2D iChannel1;
+uniform sampler2D iChannel2;
+uniform sampler2D iChannel3;
+
+)
+
+footer = textwrap.dedent(\
+
+void main() { mainImage(gl_FragColor, gl_FragCoord.xy); }
+
+[vertex shader]
+#version 130
+in vec2 position;
+
+void main()
+{
+   gl_Position = vec4(position, 0.0, 1.0);
+}
+)
+
+# Get the list of shaders
+r = requests.get(url + key)
+j = r.json()
+print('Found {} shaders'.format(j['Shaders']))
+
+shader_ids = j['Results']
+for id in shader_ids:
+print('Fetching shader: {}'.format(id))
+print('url: {}/{}{}'.format(url, id, key))
+r = requests.get(url + '/' + id + key)
+j = r.json()
+s = j['Shader']
+info = s['info']
+print('Name: ' + info['name'])
+print('Description: ' + info['description'])
+if not os.path.exists('shaders/shadertoy'):
+os.makedirs('shaders/shadertoy')
+for i, p in enumerate(s['renderpass']):
+#print('Inputs: {}'.format(p['inputs']))
+#print('Outputs: {}'.format(p['outputs']))
+with open('shaders/shadertoy/{}_{}.shader_test'.format(id, i), 'w') as 
fobj:
+fobj.write(header)
+fobj.write(p['code'])
+fobj.write(footer)
-- 
2.4.3

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


Re: [Mesa-dev] [PATCH 06/78] i965/nir/vec4: Add setup of uniform variables

2015-07-09 Thread Kenneth Graunke
On Tuesday, June 30, 2015 10:04:47 AM Iago Toral wrote:
 Hi Jason,
 
 On Mon, 2015-06-29 at 16:22 -0700, Jason Ekstrand wrote:
  On Fri, Jun 26, 2015 at 1:06 AM, Eduardo Lima Mitev el...@igalia.com 
  wrote:
   From: Iago Toral Quiroga ito...@igalia.com
  
   This is based on similar code existing in vec4_visitor. It builds the
   uniform register file iterating through each uniform variable. It
   also stores the index of each register at the corresponding offset
   in a map. This map will later be used by load_uniform intrinsic
   instructions to build the correct UNIFORM source register.
  
   Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89580
   ---
src/mesa/drivers/dri/i965/brw_vec4.h   |   2 +
src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 115 
   -
2 files changed, 114 insertions(+), 3 deletions(-)
  
   diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h 
   b/src/mesa/drivers/dri/i965/brw_vec4.h
   index 673df4e..6535f19 100644
   --- a/src/mesa/drivers/dri/i965/brw_vec4.h
   +++ b/src/mesa/drivers/dri/i965/brw_vec4.h
   @@ -414,6 +414,8 @@ public:
   src_reg *nir_inputs;
   int *nir_outputs;
   brw_reg_type *nir_output_types;
   +   unsigned *nir_uniform_offset;
   +   unsigned *nir_uniform_driver_location;
  
protected:
   void emit_vertex();
   diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp 
   b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
   index 2d457a6..40ec66f 100644
   --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
   +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
   @@ -106,19 +106,128 @@ vec4_visitor::nir_setup_outputs(nir_shader *shader)
void
vec4_visitor::nir_setup_uniforms(nir_shader *shader)
{
   -   /* @TODO: Not yet implemented */
   +   uniforms = 0;
   +
   +   nir_uniform_offset =
   +  rzalloc_array(mem_ctx, unsigned, this-uniform_array_size);
   +   memset(nir_uniform_offset, 0, this-uniform_array_size * 
   sizeof(unsigned));
  
  rzalloc memsets the whole thing to 0 for you, this memset is redundant.
  
   +
   +   nir_uniform_driver_location =
   +  rzalloc_array(mem_ctx, unsigned, this-uniform_array_size);
   +   memset(nir_uniform_driver_location, 0,
   +  this-uniform_array_size * sizeof(unsigned));
  
  Same here.
 
 Oh, right.
 
   +
   +   if (shader_prog) {
   +  foreach_list_typed(nir_variable, var, node, shader-uniforms) {
   + /* UBO's, atomics and samplers don't take up space in the
   +uniform file */
   + if (var-interface_type != NULL || var-type-contains_atomic() 
   ||
   + type_size(var-type) == 0) {
  
  I'm curious as to why you have this extra type_size() == 0 condition.
  We don't have that in the FS NIR code.  What caused you to add it?
 
 Take this piglit test for example:
 bin/textureSize vs isampler1D -auto -fbo
 
 here, 'tex' is a uniform of size 0 since type_size() returns 0 for all
 sampler types. If we do not ignore these, we will try to store uniform
 information for them in the various structures we have to track uniform
 data, like uniform_size[] and others. The size allocated for these
 arrays is computed by in the vec4_visitor constructor based on
 stage_prog_data-nr_params (uniform_array_size) and that does not seem
 to make room for zero-sized uniforms. Without that check we would
 process more uniforms than uniform_array_size and overflow the arrays we
 allocate to track uniform information. I understand that
 stage_prog_data-nr_params does not track uniforms that don't use
 register space, so skipping uniforms with no size seems to make sense
 here.
 
 Notice that this is done in the current vec4_visitor too, when we visit
 the variable in vec4_visitor::visit(ir_variable *ir), for ir_var_uniform
 there is this code:
 
 if (ir-is_in_uniform_block() || type_size(ir-type) == 0)
 return; 

Oh, right.  I think we handle sampler uniforms a bit differently in the
vec4 and FS backends, and I was never quite sure why...I know we've had
bugs relating to zero-sized uniforms, but I was never quite able to sort
them out.

This seems fine for now - it keeps the vec4 world doing what it's always
done.




signature.asc
Description: This is a digitally signed message part.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] [v2] i965: Split out gen8 push constant state upload

2015-07-09 Thread Ben Widawsky
On Thu, Jul 09, 2015 at 09:44:52AM -0700, Ben Widawsky wrote:
 While implementing the workaround in the previous patch I noticed things were
 starting to get a bit messy. Since gen8 works differently enough from gen7, I
 thought splitting it out with be good.
 
 While here, get rid of gen8 MOCS which does nothing and was in the wrong place
 anyway.
 
 This patch is totally optional. I'd be willing to just always use buffer #2 on
 gen8+. Pre-HSW this wasn't allowed, but it looks like it's okay for gen8 too.
 
 v2: Move inactive batch generation to the top of the function in order to make
 the rest of the code easier to read.
 
 Jenkins results (still a bunch of spurious failures, I miss Mark):
 http://otc-mesa-ci.jf.intel.com/job/bwidawsk/169/
 
 Signed-off-by: Ben Widawsky b...@bwidawsk.net
 Reviewed-by: Anuj Phogat anuj.pho...@gmail.com (v1)
 ---
 
 I had a minor bug in v1 which prevented me from pushing this sooner. I'd like 
 to
 merge this patch unless anyone has complaints?
 
 ---
  src/mesa/drivers/dri/i965/brw_state.h |  6 +-
  src/mesa/drivers/dri/i965/gen6_gs_state.c |  2 +-
  src/mesa/drivers/dri/i965/gen6_vs_state.c |  3 +-
  src/mesa/drivers/dri/i965/gen6_wm_state.c |  3 +-
  src/mesa/drivers/dri/i965/gen7_vs_state.c | 93 
 ---
  5 files changed, 68 insertions(+), 39 deletions(-)
 
 diff --git a/src/mesa/drivers/dri/i965/brw_state.h 
 b/src/mesa/drivers/dri/i965/brw_state.h
 index 987672f..f45459d 100644
 --- a/src/mesa/drivers/dri/i965/brw_state.h
 +++ b/src/mesa/drivers/dri/i965/brw_state.h
 @@ -368,9 +368,9 @@ brw_upload_pull_constants(struct brw_context *brw,
  
  /* gen7_vs_state.c */
  void
 -gen7_upload_constant_state(struct brw_context *brw,
 -   const struct brw_stage_state *stage_state,
 -   bool active, unsigned opcode);
 +brw_upload_constant_state(struct brw_context *brw,
 +  const struct brw_stage_state *stage_state,
 +  bool active, unsigned opcode);
  
  #ifdef __cplusplus
  }
 diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c 
 b/src/mesa/drivers/dri/i965/gen6_gs_state.c
 index eb4c586..19568b0 100644
 --- a/src/mesa/drivers/dri/i965/gen6_gs_state.c
 +++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
 @@ -48,7 +48,7 @@ gen6_upload_gs_push_constants(struct brw_context *brw)
 }
  
 if (brw-gen = 7)
 -  gen7_upload_constant_state(brw, stage_state, gp, _3DSTATE_CONSTANT_GS);
 +  brw_upload_constant_state(brw, stage_state, gp, _3DSTATE_CONSTANT_GS);
  }
  
  const struct brw_tracked_state gen6_gs_push_constants = {
 diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c 
 b/src/mesa/drivers/dri/i965/gen6_vs_state.c
 index 35d10ef..c33607d 100644
 --- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
 +++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
 @@ -140,8 +140,7 @@ gen6_upload_vs_push_constants(struct brw_context *brw)
if (brw-gen == 7  !brw-is_haswell  !brw-is_baytrail)
   gen7_emit_vs_workaround_flush(brw);
  
 -  gen7_upload_constant_state(brw, stage_state, true /* active */,
 - _3DSTATE_CONSTANT_VS);
 +  brw_upload_constant_state(brw, stage_state, true, 
 _3DSTATE_CONSTANT_VS);
 }
  }
  
 diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c 
 b/src/mesa/drivers/dri/i965/gen6_wm_state.c
 index d1748ba..ced4ad6 100644
 --- a/src/mesa/drivers/dri/i965/gen6_wm_state.c
 +++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
 @@ -50,8 +50,7 @@ gen6_upload_wm_push_constants(struct brw_context *brw)
stage_state, AUB_TRACE_WM_CONSTANTS);
  
 if (brw-gen = 7) {
 -  gen7_upload_constant_state(brw, brw-wm.base, true,
 - _3DSTATE_CONSTANT_PS);
 +  brw_upload_constant_state(brw, brw-wm.base, true, 
 _3DSTATE_CONSTANT_PS);
 }
  }
  
 diff --git a/src/mesa/drivers/dri/i965/gen7_vs_state.c 
 b/src/mesa/drivers/dri/i965/gen7_vs_state.c
 index 4b17d06..6a51934 100644
 --- a/src/mesa/drivers/dri/i965/gen7_vs_state.c
 +++ b/src/mesa/drivers/dri/i965/gen7_vs_state.c
 @@ -29,20 +29,23 @@
  #include program/prog_statevars.h
  #include intel_batchbuffer.h
  
 -
 -void
 -gen7_upload_constant_state(struct brw_context *brw,
 +static void
 +gen8_upload_constant_state(struct brw_context *brw,
 const struct brw_stage_state *stage_state,
 bool active, unsigned opcode)
  {
 -   uint32_t mocs = brw-gen  8 ? GEN7_MOCS_L3 : 0;
  
 -   /* Disable if the shader stage is inactive or there are no push 
 constants. */
 -   active = active  stage_state-push_const_size != 0;
 +   /* FINISHME: determine if we should use mocs on gen9 */
  
 -   int dwords = brw-gen = 8 ? 11 : 7;
 -   BEGIN_BATCH(dwords);
 -   OUT_BATCH(opcode  16 | (dwords - 2));
 +   BEGIN_BATCH(11);
 +   OUT_BATCH(opcode  16 | (11 - 2));
 +
 +   if (!active) {
 +  for (int i = 0; i  11; i++)
 + OUT_BATCH(0);
 +
 +  

[Mesa-dev] [PATCH] i965/hsw: Implement end of batch workaround

2015-07-09 Thread Kenneth Graunke
From: Ben Widawsky benjamin.widaw...@intel.com

This patch can cause an infinite recursion if the previous patch titled, i965:
Track finished batch state isn't present (backporters take notice).

v2: Sent out the wrong patch originally. This patches switches the order of
flushes, doing the generic flush before the CC_STATE, and the required
workaround flush afterwards

v3: Only perform workaround for render ring
Add text to the BATCH_RESERVE comments

v4: Rebase; update citation to mention PRM and Wa name; combine two blocks.

Signed-off-by: Ben Widawsky b...@bwidawsk.net
Reviewed-by: Kenneth Graunke kenn...@whitecape.org
---
 src/mesa/drivers/dri/i965/intel_batchbuffer.c | 27 +--
 src/mesa/drivers/dri/i965/intel_batchbuffer.h |  4 
 2 files changed, 29 insertions(+), 2 deletions(-)

Hey Ben,

I was going to suggest a few minor changes, and then realized it'd save us both
time if I just typed them up.  Here's a v4 of your patch.  If it passes Jenkins,
I'd say let's push it.  Thanks for remembering this!

diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index 969d92c..d93ee6e 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -32,6 +32,7 @@
 #include intel_buffers.h
 #include intel_fbo.h
 #include brw_context.h
+#include brw_defines.h
 
 #include xf86drm.h
 #include i915_drm.h
@@ -206,10 +207,32 @@ brw_finish_batch(struct brw_context *brw)
 */
brw_emit_query_end(brw);
 
-   /* We may also need to snapshot and disable OA counters. */
-   if (brw-batch.ring == RENDER_RING)
+   if (brw-batch.ring == RENDER_RING) {
+  /* We may also need to snapshot and disable OA counters. */
   brw_perf_monitor_finish_batch(brw);
 
+  if (brw-is_haswell) {
+ /* From the Haswell PRM, Volume 2b, Command Reference: Instructions,
+  * 3DSTATE_CC_STATE_POINTERS  Note:
+  *
+  * SW must program 3DSTATE_CC_STATE_POINTERS command at the end of 
every
+  *  3D batch buffer followed by a PIPE_CONTROL with RC flush and CS 
stall.
+  *
+  * From the example in the docs, it seems to expect a regular pipe 
control
+  * flush here as well. We may have done it already, but meh.
+  *
+  * See also WaAvoidRCZCounterRollover.
+  */
+ brw_emit_mi_flush(brw);
+ BEGIN_BATCH(2);
+ OUT_BATCH(_3DSTATE_CC_STATE_POINTERS  16 | (2 - 2));
+ OUT_BATCH(brw-cc.state_offset | 1);
+ ADVANCE_BATCH();
+ brw_emit_pipe_control_flush(brw, PIPE_CONTROL_RENDER_TARGET_FLUSH |
+  PIPE_CONTROL_CS_STALL);
+  }
+   }
+
/* Mark that the current program cache BO has been used by the GPU.
 * It will be reallocated if we need to put new programs in for the
 * next batch.
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.h 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.h
index fdd07e0..8eaedd1 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.h
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.h
@@ -26,6 +26,10 @@ extern C {
  * - 3 DWords for MI_REPORT_PERF_COUNT itself on Gen6+.  == 12 bytes.
  *   On Ironlake, it's 6 DWords, but we have some slack due to the lack of
  *   Sandybridge PIPE_CONTROL madness.
+ *   - CC_STATE workaround on HSW (12 * 4 = 48 bytes)
+ * - 5 dwords for initial mi_flush
+ * - 2 dwords for CC state setup
+ * - 5 dwords for the required pipe control at the end
  */
 #define BATCH_RESERVED 152
 
-- 
2.4.5

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


Re: [Mesa-dev] [PATCH 04/11] dri_interface: drop __NOT_HAVE_DRM_H magic

2015-07-09 Thread Ian Romanick
On 07/08/2015 10:07 AM, Emil Velikov wrote:
 Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
 ---
  include/GL/internal/dri_interface.h | 11 ---
  1 file changed, 11 deletions(-)
 
 diff --git a/include/GL/internal/dri_interface.h 
 b/include/GL/internal/dri_interface.h
 index c827bb6..c0545b1 100644
 --- a/include/GL/internal/dri_interface.h
 +++ b/include/GL/internal/dri_interface.h
 @@ -40,20 +40,9 @@
  #ifndef DRI_INTERFACE_H
  #define DRI_INTERFACE_H
  
 -/* For archs with no drm.h */
 -#if defined(__APPLE__) || defined(__CYGWIN__) || defined(__GNU__)
 -#ifndef __NOT_HAVE_DRM_H
 -#define __NOT_HAVE_DRM_H
 -#endif
 -#endif
 -
 -#ifndef __NOT_HAVE_DRM_H

Shouldn't this get changed to use HAVE_LIBDRM as in later patches?  I
guess drm_context_t and drm_drawable_t are ABI, so they shouldn't ever
change.  It does feel a little icky to redefine them when not necessary.

 -#include drm.h
 -#else
  typedef unsigned int drm_context_t;
  typedef unsigned int drm_drawable_t;
  typedef struct drm_clip_rect drm_clip_rect_t;
 -#endif
  
  /**
   * \name DRI interface structures
 

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


Re: [Mesa-dev] [PATCH 06/11] loader: use HAVE_LIBDRM instead of ! __NOT_HAVE_DRM_H

2015-07-09 Thread Ian Romanick
I can't really speak to the Android.mk or SConscript changes, but the
rest of this patch is

Reviewed-by: Ian Romanick ian.d.roman...@intel.com

You might also see what Jeremy Huddleston Sequoia jerem...@apple.com
thinks, since most of this exists to support his platform. :)

On 07/08/2015 10:07 AM, Emil Velikov wrote:
 Double negatives in English language are normally avoided, plus the
 former seems cleaner and more consistent.
 
 Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
 ---
  src/loader/Android.mk  | 6 ++
  src/loader/Makefile.am | 5 +
  src/loader/SConscript  | 2 --
  src/loader/loader.c| 8 
  src/loader/pci_id_driver_map.c | 2 +-
  5 files changed, 8 insertions(+), 15 deletions(-)
 
 diff --git a/src/loader/Android.mk b/src/loader/Android.mk
 index 92d9fd2..8690565 100644
 --- a/src/loader/Android.mk
 +++ b/src/loader/Android.mk
 @@ -33,10 +33,8 @@ include $(CLEAR_VARS)
  LOCAL_SRC_FILES := \
   $(LOADER_C_FILES)
  
 -# swrast only
 -ifeq ($(MESA_GPU_DRIVERS),swrast)
 -LOCAL_CFLAGS += -D__NOT_HAVE_DRM_H
 -else
 +ifneq ($(filter-out swrast,$(MESA_GPU_DRIVERS)),)
 +LOCAL_CFLAGS += -DHAVE_LIBDRM
  LOCAL_SHARED_LIBRARIES := libdrm
  endif
  
 diff --git a/src/loader/Makefile.am b/src/loader/Makefile.am
 index aef1bd6..5190f7f 100644
 --- a/src/loader/Makefile.am
 +++ b/src/loader/Makefile.am
 @@ -48,10 +48,7 @@ libloader_la_CPPFLAGS += \
  
  endif
  
 -if !HAVE_LIBDRM
 -libloader_la_CPPFLAGS += \
 - -D__NOT_HAVE_DRM_H
 -else
 +if HAVE_LIBDRM
  libloader_la_CPPFLAGS += \
   $(LIBDRM_CFLAGS)
  
 diff --git a/src/loader/SConscript b/src/loader/SConscript
 index 16d1053..d98f11e 100644
 --- a/src/loader/SConscript
 +++ b/src/loader/SConscript
 @@ -8,8 +8,6 @@ env.Prepend(CPPPATH = [
  '#include'
  ])
  
 -env.Append(CPPDEFINES = ['__NOT_HAVE_DRM_H'])
 -
  if env['udev']:
  env.PkgUseModules('UDEV')
  env.Append(CPPDEFINES = ['HAVE_LIBUDEV'])
 diff --git a/src/loader/loader.c b/src/loader/loader.c
 index 8780587..4ed0a1f 100644
 --- a/src/loader/loader.c
 +++ b/src/loader/loader.c
 @@ -85,7 +85,7 @@
  #endif
  #include loader.h
  
 -#ifndef __NOT_HAVE_DRM_H
 +#ifdef HAVE_LIBDRM
  #include xf86drm.h
  #endif
  
 @@ -501,7 +501,7 @@ sysfs_get_pci_id_for_fd(int fd, int *vendor_id, int 
 *chip_id)
  }
  #endif
  
 -#if !defined(__NOT_HAVE_DRM_H)
 +#if defined(HAVE_LIBDRM)
  /* for i915 */
  #include i915_drm.h
  /* for radeon */
 @@ -584,7 +584,7 @@ loader_get_pci_id_for_fd(int fd, int *vendor_id, int 
 *chip_id)
 if (sysfs_get_pci_id_for_fd(fd, vendor_id, chip_id))
return 1;
  #endif
 -#if !defined(__NOT_HAVE_DRM_H)
 +#if HAVE_LIBDRM
 if (drm_get_pci_id_for_fd(fd, vendor_id, chip_id))
return 1;
  #endif
 @@ -695,7 +695,7 @@ loader_get_driver_for_fd(int fd, unsigned driver_types)
  
 if (!loader_get_pci_id_for_fd(fd, vendor_id, chip_id)) {
  
 -#ifndef __NOT_HAVE_DRM_H
 +#if HAVE_LIBDRM
/* fallback to drmGetVersion(): */
drmVersionPtr version = drmGetVersion(fd);
  
 diff --git a/src/loader/pci_id_driver_map.c b/src/loader/pci_id_driver_map.c
 index cb6f705..3c4657f 100644
 --- a/src/loader/pci_id_driver_map.c
 +++ b/src/loader/pci_id_driver_map.c
 @@ -23,7 +23,7 @@
  
  int is_nouveau_vieux(int fd);
  
 -#ifndef __NOT_HAVE_DRM_H
 +#ifdef HAVE_LIBDRM
  
  #include xf86drm.h
  #include nouveau_drm.h
 

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


Re: [Mesa-dev] [PATCH] i965/cs: Initialize GPGPU Thread Count

2015-07-09 Thread Ben Widawsky
On Thu, Jul 02, 2015 at 11:32:03PM -0700, Jordan Justen wrote:
 On 2015-06-25 11:34:59, Ben Widawsky wrote:
  On Thu, Jun 11, 2015 at 09:04:45PM -0700, Jordan Justen wrote:
   +   desc[dw++] = 0;
   +   const uint32_t media_threads =
   +  brw-gen = 8 ?
   +  SET_FIELD(threads, GEN8_MEDIA_GPGPU_THREAD_COUNT) :
   +  SET_FIELD(threads, MEDIA_GPGPU_THREAD_COUNT);
   +   desc[dw++] = media_threads;
  
  What's the deal with, The maximum value for global barriers is limited by 
  the
  number of threads in the system, or by 511, Can we add an assert?
 
 I guess we are using a local barrier, so the maximum value is the
 number of threads in a subslice for local barriers.
 
 How about I add assert(threads = brw-max_cs_threads)? Although, in
 brw_compute:brw_emit_gpgpu_walker we have a similar assertion.
 
 -Jordan


Seems fine either way. The original mail had my r-b

 

   BEGIN_BATCH(4);
   OUT_BATCH(MEDIA_INTERFACE_DESCRIPTOR_LOAD  16 | (4 - 2));
   diff --git a/src/mesa/drivers/dri/i965/brw_defines.h 
   b/src/mesa/drivers/dri/i965/brw_defines.h
   index f6da305..2a8f500 100644
   --- a/src/mesa/drivers/dri/i965/brw_defines.h
   +++ b/src/mesa/drivers/dri/i965/brw_defines.h
   @@ -2495,6 +2495,11 @@ enum brw_wm_barycentric_interp_mode {
# define MEDIA_VFE_STATE_CURBE_ALLOC_MASK   INTEL_MASK(15, 0)

#define MEDIA_INTERFACE_DESCRIPTOR_LOAD 0x7002
   +/* GEN7 DW5, GEN8+ DW6 */
   +# define MEDIA_GPGPU_THREAD_COUNT_SHIFT 0
   +# define MEDIA_GPGPU_THREAD_COUNT_MASK  INTEL_MASK(7, 0)
   +# define GEN8_MEDIA_GPGPU_THREAD_COUNT_SHIFT0
   +# define GEN8_MEDIA_GPGPU_THREAD_COUNT_MASK INTEL_MASK(9, 0)
#define MEDIA_STATE_FLUSH   0x7004
#define GPGPU_WALKER0x7105
/* GEN8+ DW2 */
   -- 
   2.1.4
   
   ___
   mesa-dev mailing list
   mesa-dev@lists.freedesktop.org
   http://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 03/11] radeon: remove dri_mirror state

2015-07-09 Thread Ian Romanick
On 07/08/2015 10:07 AM, Emil Velikov wrote:
 Most of the data stored(duplicated) was unused, and for the one that is
 follow the approach set by other drivers.
 This eliminates the use of legacy (dri1) types.
 
 XXX: The radeon code is the only user of __DRIscreen::drm_version (the
 only __DRIversion outside of dri1 land). Should we move it into radeon
 and/or bump the min. required drm module version ?
 
 Cc: Ian Romanick ian.d.roman...@intel.com

Reviewed-by: Ian Romanick ian.d.roman...@intel.com

I think the cleanups suggested by Michel and Emil sound like a good idea
too, FWIW.

 Cc: Marek Olšák marek.ol...@amd.com
 Cc: Michel Dänzer michel.daen...@amd.com
 Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
 ---
  src/mesa/drivers/dri/radeon/radeon_common.c | 18 +-
  src/mesa/drivers/dri/radeon/radeon_common_context.c |  7 ++-
  src/mesa/drivers/dri/radeon/radeon_common_context.h | 19 +++
  src/mesa/drivers/dri/radeon/radeon_texture.c|  2 +-
  4 files changed, 15 insertions(+), 31 deletions(-)
 
 diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c 
 b/src/mesa/drivers/dri/radeon/radeon_common.c
 index 2a8bd6c9..d834d9b 100644
 --- a/src/mesa/drivers/dri/radeon/radeon_common.c
 +++ b/src/mesa/drivers/dri/radeon/radeon_common.c
 @@ -164,7 +164,7 @@ uint32_t radeonGetAge(radeonContextPtr radeon)
  
   gp.param = RADEON_PARAM_LAST_CLEAR;
   gp.value = (int *)age;
 - ret = drmCommandWriteRead(radeon-dri.fd, DRM_RADEON_GETPARAM,
 + ret = drmCommandWriteRead(radeon-radeonScreen-driScreen-fd, 
 DRM_RADEON_GETPARAM,
 gp, sizeof(gp));
   if (ret) {
   fprintf(stderr, %s: drmRadeonGetParam: %d\n, __func__,
 @@ -358,8 +358,8 @@ void radeonDrawBuffer( struct gl_context *ctx, GLenum 
 mode )
 * that the front-buffer has actually been allocated.
 */
   if (!was_front_buffer_rendering  
 radeon-is_front_buffer_rendering) {
 - radeon_update_renderbuffers(radeon-dri.context,
 - radeon-dri.context-driDrawablePriv, GL_FALSE);
 + radeon_update_renderbuffers(radeon-driContext,
 + radeon-driContext-driDrawablePriv, GL_FALSE);
}
   }
  
 @@ -375,8 +375,8 @@ void radeonReadBuffer( struct gl_context *ctx, GLenum 
 mode )
   || (mode == GL_FRONT);
  
   if (!was_front_buffer_reading  
 rmesa-is_front_buffer_reading) {
 - radeon_update_renderbuffers(rmesa-dri.context,
 - 
 rmesa-dri.context-driReadablePriv, GL_FALSE);
 + radeon_update_renderbuffers(rmesa-driContext,
 + 
 rmesa-driContext-driReadablePriv, GL_FALSE);
   }
   }
   /* nothing, until we implement h/w glRead/CopyPixels or CopyTexImage */
 @@ -399,7 +399,7 @@ void radeon_window_moved(radeonContextPtr radeon)
  void radeon_viewport(struct gl_context *ctx)
  {
   radeonContextPtr radeon = RADEON_CONTEXT(ctx);
 - __DRIcontext *driContext = radeon-dri.context;
 + __DRIcontext *driContext = radeon-driContext;
   void (*old_viewport)(struct gl_context *ctx);
  
   if (_mesa_is_winsys_fbo(ctx-DrawBuffer)) {
 @@ -693,6 +693,7 @@ void rcommonInitCmdBuf(radeonContextPtr rmesa)
  {
   GLuint size;
   struct drm_radeon_gem_info mminfo = { 0 };
 + int fd = rmesa-radeonScreen-driScreen-fd;
  
   /* Initialize command buffer */
   size = 256 * driQueryOptioni(rmesa-optionCache,
 @@ -711,8 +712,7 @@ void rcommonInitCmdBuf(radeonContextPtr rmesa)
   Allocating %d bytes command buffer (max state is %d 
 bytes)\n,
   size * 4, rmesa-hw.max_state_size * 4);
  
 - rmesa-cmdbuf.csm =
 - radeon_cs_manager_gem_ctor(rmesa-radeonScreen-driScreen-fd);
 + rmesa-cmdbuf.csm = radeon_cs_manager_gem_ctor(fd);
   if (rmesa-cmdbuf.csm == NULL) {
   /* FIXME: fatal error */
   return;
 @@ -725,7 +725,7 @@ void rcommonInitCmdBuf(radeonContextPtr rmesa)
 (void (*)(void *))rmesa-glCtx.Driver.Flush, 
 rmesa-glCtx);
  
  
 - if (!drmCommandWriteRead(rmesa-dri.fd, DRM_RADEON_GEM_INFO,
 + if (!drmCommandWriteRead(fd, DRM_RADEON_GEM_INFO,
mminfo, sizeof(mminfo))) {
   radeon_cs_set_limit(rmesa-cmdbuf.cs, RADEON_GEM_DOMAIN_VRAM,
   mminfo.vram_visible);
 diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.c 
 b/src/mesa/drivers/dri/radeon/radeon_common_context.c
 index 3d0ceda..4660d98 100644
 --- a/src/mesa/drivers/dri/radeon/radeon_common_context.c
 +++ b/src/mesa/drivers/dri/radeon/radeon_common_context.c
 @@ -162,10 +162,7 @@ GLboolean radeonInitContext(radeonContextPtr radeon,
   

[Mesa-dev] [PATCH] [v3] i965: Split out gen8 push constant state upload

2015-07-09 Thread Ben Widawsky
While implementing the workaround in the previous patch I noticed things were
starting to get a bit messy. Since gen8 works differently enough from gen7, I
thought splitting it out with be good.

While here, get rid of gen8 MOCS which does nothing and was in the wrong place
anyway.

This patch is totally optional. I'd be willing to just always use buffer #2 on
gen8+. Pre-HSW this wasn't allowed, but it looks like it's okay for gen8 too.

v2: Move inactive batch generation to the top of the function in order to make
the rest of the code easier to read.

Jenkins results (still a bunch of spurious failures, I miss Mark):
http://otc-mesa-ci.jf.intel.com/job/bwidawsk/169/

v3: v2 had a bug in that it both didn't emit the right number of dwords, and it
didn't do ADVANCE_BATCH(). I'm moderately worried that there were no failures as
a result.
http://otc-mesa-ci.jf.intel.com/job/bwidawsk/170/

Signed-off-by: Ben Widawsky b...@bwidawsk.net
Reviewed-by: Anuj Phogat anuj.pho...@gmail.com (v1)
---
 src/mesa/drivers/dri/i965/brw_state.h |  6 +-
 src/mesa/drivers/dri/i965/gen6_gs_state.c |  2 +-
 src/mesa/drivers/dri/i965/gen6_vs_state.c |  3 +-
 src/mesa/drivers/dri/i965/gen6_wm_state.c |  3 +-
 src/mesa/drivers/dri/i965/gen7_vs_state.c | 94 +--
 5 files changed, 69 insertions(+), 39 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_state.h 
b/src/mesa/drivers/dri/i965/brw_state.h
index 987672f..f45459d 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -368,9 +368,9 @@ brw_upload_pull_constants(struct brw_context *brw,
 
 /* gen7_vs_state.c */
 void
-gen7_upload_constant_state(struct brw_context *brw,
-   const struct brw_stage_state *stage_state,
-   bool active, unsigned opcode);
+brw_upload_constant_state(struct brw_context *brw,
+  const struct brw_stage_state *stage_state,
+  bool active, unsigned opcode);
 
 #ifdef __cplusplus
 }
diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c 
b/src/mesa/drivers/dri/i965/gen6_gs_state.c
index eb4c586..19568b0 100644
--- a/src/mesa/drivers/dri/i965/gen6_gs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
@@ -48,7 +48,7 @@ gen6_upload_gs_push_constants(struct brw_context *brw)
}
 
if (brw-gen = 7)
-  gen7_upload_constant_state(brw, stage_state, gp, _3DSTATE_CONSTANT_GS);
+  brw_upload_constant_state(brw, stage_state, gp, _3DSTATE_CONSTANT_GS);
 }
 
 const struct brw_tracked_state gen6_gs_push_constants = {
diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c 
b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index 35d10ef..c33607d 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -140,8 +140,7 @@ gen6_upload_vs_push_constants(struct brw_context *brw)
   if (brw-gen == 7  !brw-is_haswell  !brw-is_baytrail)
  gen7_emit_vs_workaround_flush(brw);
 
-  gen7_upload_constant_state(brw, stage_state, true /* active */,
- _3DSTATE_CONSTANT_VS);
+  brw_upload_constant_state(brw, stage_state, true, _3DSTATE_CONSTANT_VS);
}
 }
 
diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c 
b/src/mesa/drivers/dri/i965/gen6_wm_state.c
index d1748ba..ced4ad6 100644
--- a/src/mesa/drivers/dri/i965/gen6_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
@@ -50,8 +50,7 @@ gen6_upload_wm_push_constants(struct brw_context *brw)
   stage_state, AUB_TRACE_WM_CONSTANTS);
 
if (brw-gen = 7) {
-  gen7_upload_constant_state(brw, brw-wm.base, true,
- _3DSTATE_CONSTANT_PS);
+  brw_upload_constant_state(brw, brw-wm.base, true, 
_3DSTATE_CONSTANT_PS);
}
 }
 
diff --git a/src/mesa/drivers/dri/i965/gen7_vs_state.c 
b/src/mesa/drivers/dri/i965/gen7_vs_state.c
index 4b17d06..f8f0ad2 100644
--- a/src/mesa/drivers/dri/i965/gen7_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_vs_state.c
@@ -29,20 +29,24 @@
 #include program/prog_statevars.h
 #include intel_batchbuffer.h
 
-
-void
-gen7_upload_constant_state(struct brw_context *brw,
+static void
+gen8_upload_constant_state(struct brw_context *brw,
const struct brw_stage_state *stage_state,
bool active, unsigned opcode)
 {
-   uint32_t mocs = brw-gen  8 ? GEN7_MOCS_L3 : 0;
 
-   /* Disable if the shader stage is inactive or there are no push constants. 
*/
-   active = active  stage_state-push_const_size != 0;
+   /* FINISHME: determine if we should use mocs on gen9 */
 
-   int dwords = brw-gen = 8 ? 11 : 7;
-   BEGIN_BATCH(dwords);
-   OUT_BATCH(opcode  16 | (dwords - 2));
+   BEGIN_BATCH(11);
+   OUT_BATCH(opcode  16 | (11 - 2));
+
+   if (!active) {
+  for (int i = 0; i  10; i++)
+ OUT_BATCH(0);
+
+  ADVANCE_BATCH();
+  return;
+   }
 
/* Workaround for SKL+ (we use option #2 until we have a 

Re: [Mesa-dev] [PATCH] glsl: use the fast hash table for ir_validate

2015-07-09 Thread Eric Anholt
Timothy Arceri t_arc...@yahoo.com.au writes:

 ---

  Some of the AoA tests currently get stuck in an optimisation
  loop for a long time and this was taking a large amount of time.
  Its a symptom not a cause but I don't see any issue with using the faster
  version.

  src/glsl/ir_validate.cpp | 17 -
  1 file changed, 8 insertions(+), 9 deletions(-)

 diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp
 index cfe0df3..f3752bd 100644
 --- a/src/glsl/ir_validate.cpp
 +++ b/src/glsl/ir_validate.cpp
 @@ -35,7 +35,7 @@
  
  #include ir.h
  #include ir_hierarchical_visitor.h
 -#include program/hash_table.h
 +#include util/hash_table.h
  #include glsl_types.h
  
  namespace {
 @@ -44,8 +44,8 @@ class ir_validate : public ir_hierarchical_visitor {
  public:
 ir_validate()
 {
 -  this-ht = hash_table_ctor(0, hash_table_pointer_hash,
 -  hash_table_pointer_compare);
 +  this-ht = _mesa_hash_table_create(NULL, _mesa_hash_pointer,
 + _mesa_key_pointer_equal);
  
this-current_function = NULL;
  
 @@ -55,7 +55,7 @@ public:
  
 ~ir_validate()
 {
 -  hash_table_dtor(this-ht);
 +  _mesa_hash_table_destroy(this-ht, NULL);
 }
  
 virtual ir_visitor_status visit(ir_variable *v);
 @@ -94,7 +94,7 @@ ir_validate::visit(ir_dereference_variable *ir)
abort();
 }
  
 -   if (hash_table_find(ht, ir-var) == NULL) {
 +   if (_mesa_hash_table_search(ht, ir-var) == NULL) {
printf(ir_dereference_variable @ %p specifies undeclared variable 
`%s' @ %p\n,
(void *) ir, ir-var-name, (void *) ir-var);
 @@ -730,8 +730,7 @@ ir_validate::visit(ir_variable *ir)
 if (ir-name  ir-is_name_ralloced())
assert(ralloc_parent(ir-name) == ir);
  
 -   hash_table_insert(ht, ir, ir);
 -
 +   _mesa_hash_table_insert(ht, ir, ir);
  
 /* If a variable is an array, verify that the maximum array index is in
  * bounds.  There was once an error in AST-to-HIR conversion that set this
 @@ -887,13 +886,13 @@ ir_validate::validate_ir(ir_instruction *ir, void *data)
  {
 struct hash_table *ht = (struct hash_table *) data;
  
 -   if (hash_table_find(ht, ir)) {
 +   if (_mesa_hash_table_search(ht, ir)) {
printf(Instruction node present twice in ir tree:\n);
ir-print();
printf(\n);
abort();
 }
 -   hash_table_insert(ht, ir, ir);
 +   _mesa_hash_table_insert(ht, ir, ir);
  }

It looks like you should use a set instead of a hash table, since you
don't need a separate data field.


signature.asc
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] mesa: Fix generation of git_sha1.h.tmp for gitlinks

2015-07-09 Thread Chad Versace
Don't assume that $(top_srcdir)/.git is a directory. It may be a
gitlink file [1] if $(top_srcdir) is a submodule checkout or a linked
worktree [2].

[1] A gitlink is a text file that specifies the real location of
the gitdir.
[2] Linked worktrees are a new feature in Git 2.5.

Cc: 10.6, 10.5 mesa-sta...@lists.freedesktop.org
---
 src/mesa/Makefile.am | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/mesa/Makefile.am b/src/mesa/Makefile.am
index c86ded9..eb4a3da 100644
--- a/src/mesa/Makefile.am
+++ b/src/mesa/Makefile.am
@@ -38,8 +38,11 @@ gl_HEADERS = $(top_srcdir)/include/GL/*.h
 
 .PHONY: main/git_sha1.h.tmp
 main/git_sha1.h.tmp:
+   @# Don't assume that $(top_srcdir)/.git is a directory. It may be
+   @# a gitlink file if $(top_srcdir) is a submodule checkout or a linked
+   @# worktree.
@touch main/git_sha1.h.tmp
-   @if test -d $(top_srcdir)/.git; then \
+   @if test -e $(top_srcdir)/.git; then \
if which git  /dev/null; then \
git --git-dir=$(top_srcdir)/.git log -n 1 --oneline | \
sed 's/^\([^ ]*\) .*/#define MESA_GIT_SHA1 git-\1/' \
-- 
2.5.0.rc1

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


[Mesa-dev] [Bug 91290] SIGSEGV glcpp/glcpp-parse.y:1077

2015-07-09 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=91290

Bug ID: 91290
   Summary: SIGSEGV glcpp/glcpp-parse.y:1077
   Product: Mesa
   Version: git
  Hardware: x86-64 (AMD64)
OS: All
Status: NEW
  Keywords: have-backtrace
  Severity: normal
  Priority: medium
 Component: Mesa core
  Assignee: mesa-dev@lists.freedesktop.org
  Reporter: v...@freedesktop.org
QA Contact: mesa-dev@lists.freedesktop.org

mesa: f12302b89836a24255674a251f7a6902b4e9af7c (master 10.7.0-devel)

This minimum shader triggers a null pointer dereference in the GLSL compiler.

frag
#define A 1 /* comment */
#define A 1 /* comment */
/frag

(gdb) bt
#0  _token_list_equal_ignoring_space (b=optimized out, a=optimized out) at
glcpp/glcpp-parse.y:1077
#1  _macro_equal (a=0x20863a0, b=0x2086080) at glcpp/glcpp-parse.y:2112
#2  0x00498117 in _define_object_macro (parser=parser@entry=0x2082110,
loc=loc@entry=0x7ffe7e7b0414, identifier=0x2086150 A, 
replacements=0x2086240) at glcpp/glcpp-parse.y:2141
#3  0x0049b966 in glcpp_parser_parse (parser=parser@entry=0x2082110) at
glcpp/glcpp-parse.y:254
#4  0x004637f2 in glcpp_preprocess (ralloc_ctx=0x2081790,
shader=0x7ffe7e7b14b0, info_log=0x20819b0, 
extensions=optimized out, gl_ctx=optimized out) at glcpp/pp.c:226
#5  0x00428ef4 in _mesa_glsl_compile_shader (ctx=0x7ffe7e7b1540,
shader=0x2080b70, dump_ast=optimized out, 
dump_hir=optimized out) at glsl_parser_extras.cpp:1504
#6  0x00406345 in compile_shader (ctx=0x7ffe7e7b1540, shader=0x2080b70)
at main.cpp:293
#7  0x0040437f in main (argc=2, argv=0x7ffe7e7d4528) at main.cpp:392
(gdb) frame 0
#0  _token_list_equal_ignoring_space (b=optimized out, a=optimized out) at
glcpp/glcpp-parse.y:1077
1077while (node_a-token-type == SPACE)
(gdb) print node_a
$2 = (token_node_t *) 0x0

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 07/19] glsl/types: add new subroutine type (v3)

2015-07-09 Thread Chris Forbes
7-12 inclusive are

Reviewed-by: Chris Forbes chr...@ijw.co.nz

On Thu, Jul 9, 2015 at 7:17 PM, Dave Airlie airl...@gmail.com wrote:
 From: Dave Airlie airl...@redhat.com

 This type will be used to store the name of subroutine types

 as in subroutine void myfunc(void);
 will store myfunc into a subroutine type.

 This is required to the parser can identify a subroutine
 type in a uniform decleration as a valid type, and also for
 looking up the type later.

 Also add contains_subroutine method.

 v2: handle subroutine to int comparisons, needed
 for lowering pass.
 v3: do subroutine to int with it's own IR
 operation to avoid hacking on asserts (Kayden)

 Signed-off-by: Dave Airlie airl...@redhat.com
 ---
  src/glsl/glsl_types.cpp| 63 
 ++
  src/glsl/glsl_types.h  | 19 ++
  src/glsl/ir.cpp|  2 ++
  src/glsl/ir.h  |  1 +
  src/glsl/ir_builder.cpp|  6 
  src/glsl/ir_builder.h  |  1 +
  src/glsl/ir_clone.cpp  |  1 +
  src/glsl/ir_validate.cpp   |  4 +++
  src/glsl/link_uniform_initializers.cpp |  1 +
  9 files changed, 98 insertions(+)

 diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
 index 281ff51..1e3ebb2 100644
 --- a/src/glsl/glsl_types.cpp
 +++ b/src/glsl/glsl_types.cpp
 @@ -32,6 +32,7 @@ mtx_t glsl_type::mutex = _MTX_INITIALIZER_NP;
  hash_table *glsl_type::array_types = NULL;
  hash_table *glsl_type::record_types = NULL;
  hash_table *glsl_type::interface_types = NULL;
 +hash_table *glsl_type::subroutine_types = NULL;
  void *glsl_type::mem_ctx = NULL;

  void
 @@ -159,6 +160,22 @@ glsl_type::glsl_type(const glsl_struct_field *fields, 
 unsigned num_fields,
 mtx_unlock(glsl_type::mutex);
  }

 +glsl_type::glsl_type(const char *subroutine_name) :
 +   gl_type(0),
 +   base_type(GLSL_TYPE_SUBROUTINE),
 +   sampler_dimensionality(0), sampler_shadow(0), sampler_array(0),
 +   sampler_type(0), interface_packing(0),
 +   vector_elements(0), matrix_columns(0),
 +   length(0)
 +{
 +   mtx_lock(glsl_type::mutex);
 +
 +   init_ralloc_type_ctx();
 +   assert(subroutine_name != NULL);
 +   this-name = ralloc_strdup(this-mem_ctx, subroutine_name);
 +   this-vector_elements = 1;
 +   mtx_unlock(glsl_type::mutex);
 +}

  bool
  glsl_type::contains_sampler() const
 @@ -229,6 +246,22 @@ glsl_type::contains_opaque() const {
 }
  }

 +bool
 +glsl_type::contains_subroutine() const
 +{
 +   if (this-is_array()) {
 +  return this-fields.array-contains_subroutine();
 +   } else if (this-is_record()) {
 +  for (unsigned int i = 0; i  this-length; i++) {
 +if (this-fields.structure[i].type-contains_subroutine())
 +   return true;
 +  }
 +  return false;
 +   } else {
 +  return this-is_subroutine();
 +   }
 +}
 +
  gl_texture_index
  glsl_type::sampler_index() const
  {
 @@ -826,6 +859,34 @@ glsl_type::get_interface_instance(const 
 glsl_struct_field *fields,
 return t;
  }

 +const glsl_type *
 +glsl_type::get_subroutine_instance(const char *subroutine_name)
 +{
 +   const glsl_type key(subroutine_name);
 +
 +   mtx_lock(glsl_type::mutex);
 +
 +   if (subroutine_types == NULL) {
 +  subroutine_types = hash_table_ctor(64, record_key_hash, 
 record_key_compare);
 +   }
 +
 +   const glsl_type *t = (glsl_type *) hash_table_find(subroutine_types,  
 key);
 +   if (t == NULL) {
 +  mtx_unlock(glsl_type::mutex);
 +  t = new glsl_type(subroutine_name);
 +  mtx_lock(glsl_type::mutex);
 +
 +  hash_table_insert(subroutine_types, (void *) t, t);
 +   }
 +
 +   assert(t-base_type == GLSL_TYPE_SUBROUTINE);
 +   assert(strcmp(t-name, subroutine_name) == 0);
 +
 +   mtx_unlock(glsl_type::mutex);
 +
 +   return t;
 +}
 +

  const glsl_type *
  glsl_type::get_mul_type(const glsl_type *type_a, const glsl_type *type_b)
 @@ -958,6 +1019,7 @@ glsl_type::component_slots() const
 case GLSL_TYPE_SAMPLER:
 case GLSL_TYPE_ATOMIC_UINT:
 case GLSL_TYPE_VOID:
 +   case GLSL_TYPE_SUBROUTINE:
 case GLSL_TYPE_ERROR:
break;
 }
 @@ -1331,6 +1393,7 @@ glsl_type::count_attribute_slots() const
 case GLSL_TYPE_IMAGE:
 case GLSL_TYPE_ATOMIC_UINT:
 case GLSL_TYPE_VOID:
 +   case GLSL_TYPE_SUBROUTINE:
 case GLSL_TYPE_ERROR:
break;
 }
 diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h
 index f54a939..0f4dc80 100644
 --- a/src/glsl/glsl_types.h
 +++ b/src/glsl/glsl_types.h
 @@ -59,6 +59,7 @@ enum glsl_base_type {
 GLSL_TYPE_INTERFACE,
 GLSL_TYPE_ARRAY,
 GLSL_TYPE_VOID,
 +   GLSL_TYPE_SUBROUTINE,
 GLSL_TYPE_ERROR
  };

 @@ -264,6 +265,11 @@ struct glsl_type {
   const char *block_name);

 /**
 +* Get the instance of an subroutine type
 +*/
 +   static const glsl_type *get_subroutine_instance(const char 
 *subroutine_name);
 +
 +   /**
  * Get the type resulting 

Re: [Mesa-dev] [PATCH 1/4] radeon, r200: remove unused variable texmicrotile

2015-07-09 Thread Roland Scheidegger
Ohhh ripping out some more of my _very_ old code, how dare you :-).
Too bad some parts (fast z clear for instance) never made it past UMS
for these chips, quake3 never was as fast again ;-). I wonder how well
things actually work these days with enabled hyperz, it has some, let's
say, limitations...

Reviewed-by: Roland Scheidegger srol...@vmware.com



Am 09.07.2015 um 22:13 schrieb Emil Velikov:
 Dead since at least 2009 with commit ccf7814a315(radeon: major cleanups
 removing old dead codepaths.)
 
 Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
 ---
  src/mesa/drivers/dri/r200/r200_context.c | 3 ---
  src/mesa/drivers/dri/r200/r200_context.h | 1 -
  src/mesa/drivers/dri/radeon/radeon_context.c | 3 ---
  src/mesa/drivers/dri/radeon/radeon_context.h | 1 -
  4 files changed, 8 deletions(-)
 
 diff --git a/src/mesa/drivers/dri/r200/r200_context.c 
 b/src/mesa/drivers/dri/r200/r200_context.c
 index fb15082..40cc50a 100644
 --- a/src/mesa/drivers/dri/r200/r200_context.c
 +++ b/src/mesa/drivers/dri/r200/r200_context.c
 @@ -234,9 +234,6 @@ GLboolean r200CreateContext( gl_api api,
rmesa-using_hyperz = GL_TRUE;
 }
   
 -   if ( sPriv-drm_version.minor = 15 )
 -  rmesa-texmicrotile = GL_TRUE;
 -
 /* Init default driver functions then plug in our R200-specific functions
  * (the texture functions are especially important)
  */
 diff --git a/src/mesa/drivers/dri/r200/r200_context.h 
 b/src/mesa/drivers/dri/r200/r200_context.h
 index eb498f7..2ca1c7a 100644
 --- a/src/mesa/drivers/dri/r200/r200_context.h
 +++ b/src/mesa/drivers/dri/r200/r200_context.h
 @@ -618,7 +618,6 @@ struct r200_context {
 struct r200_swtcl_info swtcl;
  
 GLboolean using_hyperz;
 -   GLboolean texmicrotile;
  
struct ati_fragment_shader *afs_loaded;
  };
 diff --git a/src/mesa/drivers/dri/radeon/radeon_context.c 
 b/src/mesa/drivers/dri/radeon/radeon_context.c
 index d4d1935..edb154c 100644
 --- a/src/mesa/drivers/dri/radeon/radeon_context.c
 +++ b/src/mesa/drivers/dri/radeon/radeon_context.c
 @@ -199,9 +199,6 @@ r100CreateContext( gl_api api,
rmesa-using_hyperz = GL_TRUE;
 }
  
 -   if ( sPriv-drm_version.minor = 15 )
 -  rmesa-texmicrotile = GL_TRUE;
 -
 /* Init default driver functions then plug in our Radeon-specific 
 functions
  * (the texture functions are especially important)
  */
 diff --git a/src/mesa/drivers/dri/radeon/radeon_context.h 
 b/src/mesa/drivers/dri/radeon/radeon_context.h
 index 4032532..badabd9 100644
 --- a/src/mesa/drivers/dri/radeon/radeon_context.h
 +++ b/src/mesa/drivers/dri/radeon/radeon_context.h
 @@ -426,7 +426,6 @@ struct r100_context {
   struct r100_swtcl_info swtcl;
  
   GLboolean using_hyperz;
 - GLboolean texmicrotile;
  
   /* Performance counters
*/
 

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


Re: [Mesa-dev] [PATCH 09/11] android: dri: correctly set HAVE_LIBDRM

2015-07-09 Thread Chih-Wei Huang
Emil Velikov 於 西元2015年07月09日 01:07 寫道:
 Set the macro if we're not building swrast alone.
 
 Cc: Chih-Wei Huang cwhu...@linux.org.tw
 Cc: Eric Anholt e...@anholt.net
 Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
 ---
   src/gallium/targets/dri/Android.mk | 8 +++-
   1 file changed, 3 insertions(+), 5 deletions(-)
 
 diff --git a/src/gallium/targets/dri/Android.mk 
 b/src/gallium/targets/dri/Android.mk
 index 5ba129b..bccc91a 100644
 --- a/src/gallium/targets/dri/Android.mk
 +++ b/src/gallium/targets/dri/Android.mk
 @@ -35,17 +35,15 @@ endif
   
   LOCAL_SRC_FILES := target.c
   
 -LOCAL_CFLAGS := -DDRI_TARGET -DHAVE_LIBDRM
 +LOCAL_CFLAGS := -DDRI_TARGET
   
   LOCAL_SHARED_LIBRARIES := \
   libdl \
   libglapi \
   libexpat \
   
 -# swrast only?
 -ifeq ($(MESA_GPU_DRIVERS),swrast)
 -LOCAL_CFLAGS += -D__NOT_HAVE_DRM_H
 -else
 +ifneq ($(filter-out swrast,$(MESA_GPU_DRIVERS)),)
 +LOCAL_CFLAGS += -DHAVE_LIBDRM
   LOCAL_SHARED_LIBRARIES += libdrm
   endif

Looks good to me.

Reviewed-by: Chih-Wei Huang cwhu...@linux.org.tw



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


Re: [Mesa-dev] [PATCH 3/4] radeon, r200: allow hyperz for radeon DRM module v2

2015-07-09 Thread Michel Dänzer
On 10.07.2015 05:13, Emil Velikov wrote:
 The original code only half considered hyperz as an option. As per
 previous commit major != 2 cannot occur we can simply things, and
 allow users to set the option if they choose to do so.
 
 Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
 ---
  src/mesa/drivers/dri/r200/r200_context.c | 10 ++
  src/mesa/drivers/dri/radeon/radeon_context.c |  9 ++---
  2 files changed, 4 insertions(+), 15 deletions(-)
 
 diff --git a/src/mesa/drivers/dri/r200/r200_context.c 
 b/src/mesa/drivers/dri/r200/r200_context.c
 index 40cc50a..2a42ab3 100644
 --- a/src/mesa/drivers/dri/r200/r200_context.c
 +++ b/src/mesa/drivers/dri/r200/r200_context.c
 @@ -225,14 +225,8 @@ GLboolean r200CreateContext( gl_api api,
 rmesa-radeon.initialMaxAnisotropy = 
 driQueryOptionf(rmesa-radeon.optionCache,
   def_max_anisotropy);
  
 -   if ( sPriv-drm_version.major == 1
 -driQueryOptionb( rmesa-radeon.optionCache, hyperz ) ) {
 -  if ( sPriv-drm_version.minor  13 )
 -  fprintf( stderr, DRM version 1.%d too old to support HyperZ, 
 -   disabling.\n, sPriv-drm_version.minor );
 -  else
 -  rmesa-using_hyperz = GL_TRUE;
 -   }

This code only set rmesa-using_hyperz = GL_TRUE if
sPriv-drm_version.major == 1. It was disabled for KMS in commit
e541845959761e9f47d14ade6b58a32db04ef7e4 (r200: Fix piglit paths test.).


 +   if (driQueryOptionb( rmesa-radeon.optionCache, hyperz))
 +  rmesa-using_hyperz = GL_TRUE;

This enables it again for KMS. Maybe that's okay though, especially if
the driconf option is disabled by default.


The rest of the series is

Reviewed-by: Michel Dänzer michel.daen...@amd.com


-- 
Earthling Michel Dänzer   |   http://www.amd.com
Libre software enthusiast | Mesa and X developer
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 2/2] i965: Optimize intel_batchbuffer_emit_dword().

2015-07-09 Thread Chris Wilson
On Wed, Jul 08, 2015 at 05:08:11PM -0700, Matt Turner wrote:
 On Wed, Jul 8, 2015 at 4:53 PM, Chris Wilson ch...@chris-wilson.co.uk wrote:
  static void upload_viewport_state_pointers(struct brw_context *brw)
  {
 BEGIN_BATCH(4);
 brw-batch.map[0] = (_3DSTATE_VIEWPORT_STATE_POINTERS  16 | (4 - 2) |
  GEN6_CC_VIEWPORT_MODIFY |
  GEN6_SF_VIEWPORT_MODIFY |
  GEN6_CLIP_VIEWPORT_MODIFY);
 brw-batch.map[1] = (brw-clip.vp_offset);
 brw-batch.map[2] = (brw-sf.vp_offset);
 brw-batch.map[3] = (brw-cc.vp_offset);
 brw-batch.map += 4;
 ADVANCE_BATCH();
  }
  -Chris
 
 Ah, thanks. I see.
 
 I'll give it another shot.

Playing a bit more, I get reasonable code generation using

uint32_t *out = BEGIN_BATCH(4);
*out++ = (_3DSTATE_VIEWPORT_STATE_POINTERS  16 | (4 - 2) |
  GEN6_CC_VIEWPORT_MODIFY |
  GEN6_SF_VIEWPORT_MODIFY |
  GEN6_CLIP_VIEWPORT_MODIFY);
*out++ = (brw-clip.vp_offset);
*out++ = (brw-sf.vp_offset);
*out++ = (brw-cc.vp_offset);
ADVANCE_BATCH(out);

with BEGIN_BATCH(n) {
uint32_t *ptr = brw-batch.map;
brw-batch.map + =n;
return ptr;
}

That also gives a simple ADVANCE_BATCH(out) assert(out == brw-batch.map),
and works with a little fudging (out - brw-batch.base) for OUT_RELOC.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 0/2] egl, i965: Support importing R8 and GR88 dma_bufs as textures

2015-07-09 Thread Chad Versace
Teach EGL_EXT_image_dma_buf_import about DRM_FORMAT_R8 and
DRM_FORMAT_GR88 in egl_dri2.c. Then add the plumbing to i965 to import
R8 and GR88 dma_bufs as textures.

This Mesa series shouldn't land until my kernel patch lands:
To: dri-de...@freedesktop.org
Subject: [PATCH] drm/fourcc: Add formats R8, RG88, GR88
Date: Wed, 8 Jul 2015 10:19:34 -0700

The Mesa patches build and run correctly, though, without the kernel
patch because all the kernel patch does is define the new formats in
drm_fourcc.h. I've duplicated the format definitions in egl_dri2.c so
that building Mesa won't require unreleased kernel headers.

This patch series lives on the tag:
git://github.com/chadversary/mesa refs/tags/i965-drm-fourcc-r8-gr88-v01

I also sent patches for a Piglit test, which passes on Broadwell:
Subject: [PATCH] ext_image_dma_buf: Add tests for R8 and GR88
Date: Mon, 22 Jun 2015 06:40:14 -0700

Chad Versace (2):
  egl: Add support for DRM_FORMAT_R8, RG88, and GR88
  i965: Support importing R8 and GR88 dma_bufs

 include/GL/internal/dri_interface.h  |  9 +++--
 src/egl/drivers/dri2/egl_dri2.c  | 19 +++
 src/mesa/drivers/dri/i965/intel_screen.c |  6 ++
 3 files changed, 32 insertions(+), 2 deletions(-)

-- 
2.5.0.rc1

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


[Mesa-dev] [PATCH 1/2] egl: Add support for DRM_FORMAT_R8, RG88, and GR88

2015-07-09 Thread Chad Versace
The Kodi/XBMC developers want to transcode NV12 to RGB with OpenGL shaders,
importing the two source planes through EGL_EXT_image_dma_buf_import. That
requires importing the Y plane as an R8 EGLImage and the UV plane as either an
RG88 or GR88 EGLImage.

This patch teaches the driver-independent part of EGL about the new
formats. Real driver support is left for follow-up patches.

CC: Peter Frühberger peter.fruehber...@gmail.com
Cc: Rainer Hochecker rainer.hochec...@onlinehome.de
Signed-off-by: Chad Versace chad.vers...@intel.com
---
 src/egl/drivers/dri2/egl_dri2.c | 19 +++
 1 file changed, 19 insertions(+)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 65194cb..9813dd5 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -53,6 +53,22 @@
 #include egl_dri2.h
 #include ../util/u_atomic.h
 
+/* The kernel header drm_fourcc.h defines the DRM formats below.  We duplicate
+ * some of the definitions here so that building Mesa won't bleeding-edge
+ * kernel headers.
+ */
+#ifndef DRM_FORMAT_R8
+#define DRM_FORMAT_R8fourcc_code('R', '8', ' ', ' ') /* [7:0] R */
+#endif
+
+#ifndef DRM_FORMAT_RG88
+#define DRM_FORMAT_RG88  fourcc_code('R', 'G', '8', '8') /* [15:0] R:G 
8:8 little endian */
+#endif
+
+#ifndef DRM_FORMAT_GR88
+#define DRM_FORMAT_GR88  fourcc_code('G', 'R', '8', '8') /* [15:0] G:R 
8:8 little endian */
+#endif
+
 const __DRIuseInvalidateExtension use_invalidate = {
.base = { __DRI_USE_INVALIDATE, 1 }
 };
@@ -1679,6 +1695,9 @@ dri2_check_dma_buf_format(const _EGLImageAttribs *attrs)
unsigned i, plane_n;
 
switch (attrs-DMABufFourCC.Value) {
+   case DRM_FORMAT_R8:
+   case DRM_FORMAT_RG88:
+   case DRM_FORMAT_GR88:
case DRM_FORMAT_RGB332:
case DRM_FORMAT_BGR233:
case DRM_FORMAT_XRGB:
-- 
2.5.0.rc1

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


[Mesa-dev] [PATCH 2/2] i965: Support importing R8 and GR88 dma_bufs

2015-07-09 Thread Chad Versace
EGL_EXT_image_dma_buf_import now supports those formats.

CC: Peter Frühberger peter.fruehber...@gmail.com
Cc: Rainer Hochecker rainer.hochec...@onlinehome.de
Signed-off-by: Chad Versace chad.vers...@intel.com
---
 include/GL/internal/dri_interface.h  | 9 +++--
 src/mesa/drivers/dri/i965/intel_screen.c | 6 ++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/include/GL/internal/dri_interface.h 
b/include/GL/internal/dri_interface.h
index c827bb6..97b6972 100644
--- a/include/GL/internal/dri_interface.h
+++ b/include/GL/internal/dri_interface.h
@@ -1101,12 +1101,15 @@ struct __DRIdri2ExtensionRec {
 
 
 /**
- * Four CC formats that matches with WL_DRM_FORMAT_* from wayland_drm.h
- * and GBM_FORMAT_* from gbm.h, used with createImageFromNames.
+ * Four CC formats that matches with WL_DRM_FORMAT_* from wayland_drm.h,
+ * GBM_FORMAT_* from gbm.h, and DRM_FORMAT_* from drm_fourcc.h. Used with
+ * createImageFromNames.
  *
  * \since 5
  */
 
+#define __DRI_IMAGE_FOURCC_R8  0x20203852
+#define __DRI_IMAGE_FOURCC_GR880x38385247
 #define __DRI_IMAGE_FOURCC_RGB565  0x36314752
 #define __DRI_IMAGE_FOURCC_ARGB0x34325241
 #define __DRI_IMAGE_FOURCC_XRGB0x34325258
@@ -1141,6 +1144,8 @@ struct __DRIdri2ExtensionRec {
 #define __DRI_IMAGE_COMPONENTS_Y_U_V   0x3003
 #define __DRI_IMAGE_COMPONENTS_Y_UV0x3004
 #define __DRI_IMAGE_COMPONENTS_Y_XUXV  0x3005
+#define __DRI_IMAGE_COMPONENTS_R   0x3006
+#define __DRI_IMAGE_COMPONENTS_RG  0x3007
 
 
 /**
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c 
b/src/mesa/drivers/dri/i965/intel_screen.c
index c0f5c92..c4e7193 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -229,6 +229,12 @@ static struct intel_image_format intel_image_formats[] = {
{ __DRI_IMAGE_FOURCC_RGB565, __DRI_IMAGE_COMPONENTS_RGB, 1,
  { { 0, 0, 0, __DRI_IMAGE_FORMAT_RGB565, 2 } } },
 
+   { __DRI_IMAGE_FOURCC_R8, __DRI_IMAGE_COMPONENTS_R, 1,
+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 }, } },
+
+   { __DRI_IMAGE_FOURCC_GR88, __DRI_IMAGE_COMPONENTS_RG, 1,
+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88, 2 }, } },
+
{ __DRI_IMAGE_FOURCC_YUV410, __DRI_IMAGE_COMPONENTS_Y_U_V, 3,
  { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
{ 1, 2, 2, __DRI_IMAGE_FORMAT_R8, 1 },
-- 
2.5.0.rc1

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


[Mesa-dev] [Bug 90903] egl_dri2.c:dri2_load fails to load libglapi on osx

2015-07-09 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=90903

Emil Velikov emil.l.veli...@gmail.com changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |FIXED

--- Comment #2 from Emil Velikov emil.l.veli...@gmail.com ---
Pushed to master. Thanks !

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [Bug 90249] Fails to build egl_dri2 on osx

2015-07-09 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=90249

Emil Velikov emil.l.veli...@gmail.com changed:

   What|Removed |Added

 Status|NEW |RESOLVED
URL||https://www.khronos.org/bug
   ||zilla/show_bug.cgi?id=1356
 Resolution|--- |FIXED

--- Comment #3 from Emil Velikov emil.l.veli...@gmail.com ---
As requested on the ML an upstream bug is opened with Khronos. Please keep us
posted on the progress.

Meanwhile I've pushed this to master.

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] glsl: fix Bug 85252 - Segfault in compiler while processing ternary operator with void arguments

2015-07-09 Thread Samuel Iglesias Gonsálvez
On 07/07/15 21:47, Renaud Gaubert wrote:
 This is done by returning an rvalue of type void in the
 ast_function_expression::hir function instead of a void expression.
 
 This produces (in the case of the ternary) an hir with a call
 to the void returning function and an assignement of a void variable
 which will be optimized out (the assignement) during the optimization
 pass.
 
 This fix results in having a valid subexpression in the many
 different cases where the subexpressions are functions whose
 return values are void.
 
 Thus preventing to dereference NULL in the following cases:
   * binary operator
   * unary operators
   * ternary operator
   * comparison operators (except equal and nequal operator)
 
 Equal and nequal had to be handled as a special case because
 instead of segfaulting on a forbidden syntax it was now accepting
 expressions with a void return value on either (or both) side of
 the expression.
 
 Piglist tests are on the way
 
 Signed-off-by: Renaud Gaubert ren...@lse.epita.fr
 Reviewed-by: Gabriel Laskar gabr...@lse.epita.fr
 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85252
 ---
  src/glsl/ast_function.cpp |  6 +-
  src/glsl/ast_to_hir.cpp   | 10 +-
  2 files changed, 14 insertions(+), 2 deletions(-)
 
 diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp
 index 92e26bf..776a754 100644
 --- a/src/glsl/ast_function.cpp
 +++ b/src/glsl/ast_function.cpp
 @@ -1785,7 +1785,11 @@ ast_function_expression::hir(exec_list *instructions,
/* an error has already been emitted */
value = ir_rvalue::error_value(ctx);
} else {
 -  value = generate_call(instructions, sig, actual_parameters, state);
 +value = generate_call(instructions, sig, actual_parameters, state);
 +if (!value) {
 +  ir_variable *const tmp = new(ctx) 
 ir_variable(glsl_type::void_type, void_var, ir_var_temporary);

You forgot to add the ir_variable to the IR. Something like:

   instructions-push_tail(tmp);

should be enough.

Sam


 +  value = new(ctx) ir_dereference_variable(tmp);
 +}
}
  
return value;
 diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
 index 8cb46be..00cc16c 100644
 --- a/src/glsl/ast_to_hir.cpp
 +++ b/src/glsl/ast_to_hir.cpp
 @@ -1270,7 +1270,15 @@ ast_expression::do_hir(exec_list *instructions,
 *applied to one operand that can make them match, in which
 *case this conversion is done.
 */
 -  if ((!apply_implicit_conversion(op[0]-type, op[1], state)
 +
 +  if (op[0]-type == glsl_type::void_type || op[1]-type == 
 glsl_type::void_type) {
 +
 +_mesa_glsl_error( loc, state, `%s':  wrong operand types: no 
 operation 
 +  `%1$s' exists that takes a left-hand operand of type 'void' or a 
 +  right operand of type 'void', (this-oper == ast_equal) ? == : 
 !=);
 +
 + error_emitted = true;
 +  } else if ((!apply_implicit_conversion(op[0]-type, op[1], state)
  !apply_implicit_conversion(op[1]-type, op[0], state))
|| (op[0]-type != op[1]-type)) {
   _mesa_glsl_error( loc, state, operands of `%s' must have the same 
 
 
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [Bug 66346] shader_query.cpp:49: error: invalid conversion from 'void*' to 'GLuint'

2015-07-09 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=66346

Emil Velikov emil.l.veli...@gmail.com changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |FIXED

--- Comment #17 from Emil Velikov emil.l.veli...@gmail.com ---
A slightly different fix has landed as below. Perhaps one day we'll either get
this upstreamed with Khronos or have our build apply/revert it on demand.
Not a huge deal either way :-)


 #ifdef __APPLE__
+#ifdef BUILDING_MESA
+/* Avoid uint - void* warnings */
+typedef unsigned long GLhandleARB;
+#else
 typedef void *GLhandleARB;
+#endif

-- 
You are receiving this mail because:
You are the assignee for the bug.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [Bug 79706] [TRACKER] Mesa regression tracker

2015-07-09 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=79706
Bug 79706 depends on bug 66346, which changed state.

Bug 66346 Summary: shader_query.cpp:49: error: invalid conversion from 'void*' 
to 'GLuint'
https://bugs.freedesktop.org/show_bug.cgi?id=66346

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |FIXED

-- 
You are receiving this mail because:
You are the assignee for the bug.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [RFC] r600 geometry streams (and ARB_gpu_shader5 support)

2015-07-09 Thread Dave Airlie
This applies on top of the two patches I've sent already,
and enables the geometry streams, which is the final
piece missing for ARB_gpu_shader5 on evergreen and cayman.
(I'll do doc update patches later)

Glenn wrote most of this, I just spent some time making it work
and cleaning up the code. Though I suspect it could do with more
cleaning.

The main thing I don't really like is we try and emit all
outputs into each ring so we waste a bit of space, however
it does work, though the special casing to avoid POSITION
going into any other streams kinda makes me wonder if anything
else needs that special casing.

Dave.

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


[Mesa-dev] [PATCH 4/6] r600g/sb: add support for multiple streams to SB backend

2015-07-09 Thread Dave Airlie
From: Glenn Kennard glenn.kenn...@gmail.com

This adds a peephole and removes an assert that isn't
actually valid with some of the stream emit instructions.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/gallium/drivers/r600/sb/sb_bc_finalize.cpp |  2 --
 src/gallium/drivers/r600/sb/sb_bc_parser.cpp   | 18 +++---
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp 
b/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp
index 8c2cd14..48d56ac 100644
--- a/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp
+++ b/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp
@@ -761,8 +761,6 @@ void bc_finalizer::finalize_cf(cf_node* c) {
mask |= (1  chan);
}
 
-   assert(reg = 0  mask);
-
if (reg = 0)
update_ngpr(reg);
 
diff --git a/src/gallium/drivers/r600/sb/sb_bc_parser.cpp 
b/src/gallium/drivers/r600/sb/sb_bc_parser.cpp
index 4879c03..25b0f55 100644
--- a/src/gallium/drivers/r600/sb/sb_bc_parser.cpp
+++ b/src/gallium/drivers/r600/sb/sb_bc_parser.cpp
@@ -757,10 +757,22 @@ int bc_parser::prepare_ir() {
c-bc.end_of_program = eop;
 
} else if (flags  CF_EMIT) {
-   c-flags |= NF_DONT_KILL | NF_DONT_HOIST | NF_DONT_MOVE;
+   /* quick peephole */
+   cf_node *prev = static_castcf_node *(c-prev);
+   if (c-bc.op == CF_OP_CUT_VERTEX 
+   prev  prev-is_valid() 
+   prev-bc.op == CF_OP_EMIT_VERTEX 
+   c-bc.count == prev-bc.count) {
+   prev-bc.set_op(CF_OP_EMIT_CUT_VERTEX);
+   prev-bc.end_of_program = c-bc.end_of_program;
+   c-remove();
+   }
+   else {
+   c-flags |= NF_DONT_KILL | NF_DONT_HOIST | 
NF_DONT_MOVE;
 
-   
c-src.push_back(sh-get_special_value(SV_GEOMETRY_EMIT));
-   
c-dst.push_back(sh-get_special_value(SV_GEOMETRY_EMIT));
+   
c-src.push_back(sh-get_special_value(SV_GEOMETRY_EMIT));
+   
c-dst.push_back(sh-get_special_value(SV_GEOMETRY_EMIT));
+   }
}
}
 
-- 
2.4.3

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


[Mesa-dev] [PATCH 6/6] r600g: enable ARB_gpu_shader5 on evergreen and up

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/gallium/drivers/r600/r600_pipe.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index 67caa69..0db1c1c 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -299,7 +299,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum 
pipe_cap param)
 
case PIPE_CAP_GLSL_FEATURE_LEVEL:
if (family = CHIP_CEDAR)
-  return 330;
+  return 400;
/* pre-evergreen geom shaders need newer kernel */
if (rscreen-b.info.drm_minor = 37)
   return 330;
-- 
2.4.3

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


Re: [Mesa-dev] [PATCH 3/4] ilo: unref old fence

2015-07-09 Thread Chia-I Wu
On Thu, Jul 9, 2015 at 8:46 AM, Rob Clark robdcl...@gmail.com wrote:
 From: Rob Clark robcl...@freedesktop.org

 Some, but not all, state trackers will explicitly unref (and set to
 NULL) the previous *fence before calling pipe-flush().  So driver
 should use fence_ref() which will unref the old fence if not NULL.
Looks good.  Thanks.

 Signed-off-by: Rob Clark robcl...@freedesktop.org
 ---
  src/gallium/drivers/ilo/ilo_context.c | 2 ++
  1 file changed, 2 insertions(+)

 diff --git a/src/gallium/drivers/ilo/ilo_context.c 
 b/src/gallium/drivers/ilo/ilo_context.c
 index 3d5c7b6..b9a16aa 100644
 --- a/src/gallium/drivers/ilo/ilo_context.c
 +++ b/src/gallium/drivers/ilo/ilo_context.c
 @@ -62,6 +62,8 @@ ilo_flush(struct pipe_context *pipe,
   (flags  PIPE_FLUSH_END_OF_FRAME) ? frame end : user request);

 if (f) {
 +  struct pipe_screen *screen = pipe-screen;
 +  screen-fence_reference(screen, f, NULL);
*f = ilo_screen_fence_create(pipe-screen, ilo-cp-last_submitted_bo);
 }
  }
 --
 2.4.3




-- 
o...@lunarg.com
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 1/6] r600g: add support for streams to the assembler.

2015-07-09 Thread Dave Airlie
From: Glenn Kennard glenn.kenn...@gmail.com

This just adds support to the assembler dumper and allows
stream instructions to be generated. Also fix up the stream
debugging to add stream info.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/gallium/drivers/r600/eg_asm.c  | 1 +
 src/gallium/drivers/r600/r600_asm.c| 2 ++
 src/gallium/drivers/r600/r600_asm.h| 1 +
 src/gallium/drivers/r600/r600_shader.c | 6 --
 src/gallium/drivers/r600/sb/sb_bc_dump.cpp | 3 +++
 5 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/eg_asm.c 
b/src/gallium/drivers/r600/eg_asm.c
index 42e8b0b..c32d317 100644
--- a/src/gallium/drivers/r600/eg_asm.c
+++ b/src/gallium/drivers/r600/eg_asm.c
@@ -115,6 +115,7 @@ int eg_bytecode_cf_build(struct r600_bytecode *bc, struct 
r600_bytecode_cf *cf)
S_SQ_CF_WORD1_BARRIER(1) |
S_SQ_CF_WORD1_COND(cf-cond) |
S_SQ_CF_WORD1_POP_COUNT(cf-pop_count) |
+   S_SQ_CF_WORD1_COUNT(cf-count) |

S_SQ_CF_WORD1_END_OF_PROGRAM(cf-end_of_program);
}
}
diff --git a/src/gallium/drivers/r600/r600_asm.c 
b/src/gallium/drivers/r600/r600_asm.c
index 762cc7f..40639d0 100644
--- a/src/gallium/drivers/r600/r600_asm.c
+++ b/src/gallium/drivers/r600/r600_asm.c
@@ -2029,6 +2029,8 @@ void r600_bytecode_disasm(struct r600_bytecode *bc)
fprintf(stderr, CND:%X , cf-cond);
if (cf-pop_count)
fprintf(stderr, POP:%X , 
cf-pop_count);
+   if (cf-count  (cfop-flags  CF_EMIT))
+   fprintf(stderr, STREAM%d , cf-count);
fprintf(stderr, \n);
}
}
diff --git a/src/gallium/drivers/r600/r600_asm.h 
b/src/gallium/drivers/r600/r600_asm.h
index e37d926..b282907 100644
--- a/src/gallium/drivers/r600/r600_asm.h
+++ b/src/gallium/drivers/r600/r600_asm.h
@@ -149,6 +149,7 @@ struct r600_bytecode_cf {
unsignedid;
unsignedcond;
unsignedpop_count;
+   unsignedcount;
unsignedcf_addr; /* control flow addr */
struct r600_bytecode_kcache kcache[4];
unsignedr6xx_uses_waterfall;
diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 1a72bf6..dbff313 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -93,8 +93,10 @@ static void r600_dump_streamout(struct 
pipe_stream_output_info *so)
for (i = 0; i  so-num_outputs; i++) {
unsigned mask = ((1  so-output[i].num_components) - 1) 
so-output[i].start_component;
-   fprintf(stderr,   %i: MEM_STREAM0_BUF%i[%i..%i] - 
OUT[%i].%s%s%s%s%s\n,
-   i, so-output[i].output_buffer,
+   fprintf(stderr,   %i: MEM_STREAM%d_BUF%i[%i..%i] - 
OUT[%i].%s%s%s%s%s\n,
+   i,
+   so-output[i].stream,
+   so-output[i].output_buffer,
so-output[i].dst_offset, so-output[i].dst_offset + 
so-output[i].num_components - 1,
so-output[i].register_index,
mask  1 ? x : ,
diff --git a/src/gallium/drivers/r600/sb/sb_bc_dump.cpp 
b/src/gallium/drivers/r600/sb/sb_bc_dump.cpp
index 5232782..631fac2 100644
--- a/src/gallium/drivers/r600/sb/sb_bc_dump.cpp
+++ b/src/gallium/drivers/r600/sb/sb_bc_dump.cpp
@@ -182,6 +182,9 @@ void bc_dump::dump(cf_node n) {
 
if (n.bc.pop_count)
s   POP:  n.bc.pop_count;
+
+   if (n.bc.count  (n.bc.op_ptr-flags  CF_EMIT))
+   s   STREAM  n.bc.count;
}
 
if (!n.bc.barrier)
-- 
2.4.3

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


[Mesa-dev] [PATCH 2/6] radeon: add streamout status 1-3 queries.

2015-07-09 Thread Dave Airlie
From: Glenn Kennard glenn.kenn...@gmail.com

This adds support for queries against the non-0 vertex streams.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/gallium/drivers/radeon/r600_query.c   | 18 --
 src/gallium/drivers/radeon/r600d_common.h |  3 +++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_query.c 
b/src/gallium/drivers/radeon/r600_query.c
index 71f4a15..9ad2452 100644
--- a/src/gallium/drivers/radeon/r600_query.c
+++ b/src/gallium/drivers/radeon/r600_query.c
@@ -54,6 +54,8 @@ struct r600_query {
uint64_t end_result;
/* Fence for GPU_FINISHED. */
struct pipe_fence_handle *fence;
+   /* For transform feedback: which stream the query is for */
+   unsigned stream;
 };
 
 
@@ -157,6 +159,17 @@ static void r600_update_occlusion_query_state(struct 
r600_common_context *rctx,
}
 }
 
+static unsigned event_type_for_stream(struct r600_query *query)
+{
+   switch (query-stream) {
+   default:
+   case 0: return EVENT_TYPE_SAMPLE_STREAMOUTSTATS;
+   case 1: return EVENT_TYPE_SAMPLE_STREAMOUTSTATS1; /* enum values 
snarfed from SI kernel sid.h */
+   case 2: return EVENT_TYPE_SAMPLE_STREAMOUTSTATS2;
+   case 3: return EVENT_TYPE_SAMPLE_STREAMOUTSTATS3;
+   }
+}
+
 static void r600_emit_query_begin(struct r600_common_context *ctx, struct 
r600_query *query)
 {
struct radeon_winsys_cs *cs = ctx-rings.gfx.cs;
@@ -191,7 +204,7 @@ static void r600_emit_query_begin(struct 
r600_common_context *ctx, struct r600_q
case PIPE_QUERY_SO_STATISTICS:
case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
radeon_emit(cs, PKT3(PKT3_EVENT_WRITE, 2, 0));
-   radeon_emit(cs, EVENT_TYPE(EVENT_TYPE_SAMPLE_STREAMOUTSTATS) | 
EVENT_INDEX(3));
+   radeon_emit(cs, EVENT_TYPE(event_type_for_stream(query)) | 
EVENT_INDEX(3));
radeon_emit(cs, va);
radeon_emit(cs, (va  32UL)  0xFF);
break;
@@ -248,7 +261,7 @@ static void r600_emit_query_end(struct r600_common_context 
*ctx, struct r600_que
case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
va += query-buffer.results_end + query-result_size/2;
radeon_emit(cs, PKT3(PKT3_EVENT_WRITE, 2, 0));
-   radeon_emit(cs, EVENT_TYPE(EVENT_TYPE_SAMPLE_STREAMOUTSTATS) | 
EVENT_INDEX(3));
+   radeon_emit(cs, EVENT_TYPE(event_type_for_stream(query)) | 
EVENT_INDEX(3));
radeon_emit(cs, va);
radeon_emit(cs, (va  32UL)  0xFF);
break;
@@ -369,6 +382,7 @@ static struct pipe_query *r600_create_query(struct 
pipe_context *ctx, unsigned q
/* NumPrimitivesWritten, PrimitiveStorageNeeded. */
query-result_size = 32;
query-num_cs_dw = 6;
+   query-stream = index;
break;
case PIPE_QUERY_PIPELINE_STATISTICS:
/* 11 values on EG, 8 on R600. */
diff --git a/src/gallium/drivers/radeon/r600d_common.h 
b/src/gallium/drivers/radeon/r600d_common.h
index 74c8d87..5a56a54 100644
--- a/src/gallium/drivers/radeon/r600d_common.h
+++ b/src/gallium/drivers/radeon/r600d_common.h
@@ -66,6 +66,9 @@
 #define PKT3_SET_SH_REG0x76 /* SI and later */
 #define PKT3_SET_UCONFIG_REG   0x79 /* CIK and later */
 
+#define EVENT_TYPE_SAMPLE_STREAMOUTSTATS1  0x1 /* EG and later */
+#define EVENT_TYPE_SAMPLE_STREAMOUTSTATS2  0x2 /* EG and later */
+#define EVENT_TYPE_SAMPLE_STREAMOUTSTATS3  0x3 /* EG and later */
 #define EVENT_TYPE_PS_PARTIAL_FLUSH0x10
 #define EVENT_TYPE_CACHE_FLUSH_AND_INV_TS_EVENT 0x14
 #define EVENT_TYPE_ZPASS_DONE  0x15
-- 
2.4.3

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


[Mesa-dev] [PATCH 5/6] r600g: add streamout support

2015-07-09 Thread Dave Airlie
From: Glenn Kennard glenn.kenn...@gmail.com

This adds the main chunk of the geometry shader multiple stream
support to the r600 driver.

Glenn wrote the original pass, and I took his code and hacked
it into a working state.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/gallium/drivers/r600/evergreen_state.c   |  29 ++--
 src/gallium/drivers/r600/r600_pipe.c |   2 +-
 src/gallium/drivers/r600/r600_shader.c   | 200 ---
 src/gallium/drivers/r600/r600_shader.h   |   6 +-
 src/gallium/drivers/r600/r600_state.c|   6 +-
 src/gallium/drivers/r600/r600_state_common.c |   7 +
 6 files changed, 180 insertions(+), 70 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 4ddbc0b..788bf54 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -2988,8 +2988,12 @@ void evergreen_update_gs_state(struct pipe_context *ctx, 
struct r600_pipe_shader
struct r600_command_buffer *cb = shader-command_buffer;
struct r600_shader *rshader = shader-shader;
struct r600_shader *cp_shader = shader-gs_copy_shader-shader;
-   unsigned gsvs_itemsize =
-   (cp_shader-ring_item_size * 
rshader-gs_max_out_vertices)  2;
+   unsigned gsvs_itemsizes[4] = {
+   (cp_shader-ring_item_sizes[0] * 
rshader-gs_max_out_vertices)  2,
+   (cp_shader-ring_item_sizes[1] * 
rshader-gs_max_out_vertices)  2,
+   (cp_shader-ring_item_sizes[2] * 
rshader-gs_max_out_vertices)  2,
+   (cp_shader-ring_item_sizes[3] * 
rshader-gs_max_out_vertices)  2
+   };
 
r600_init_command_buffer(cb, 64);
 
@@ -3008,21 +3012,24 @@ void evergreen_update_gs_state(struct pipe_context 
*ctx, struct r600_pipe_shader
S_028B90_ENABLE(rshader-gs_num_invocations  
0));
}
r600_store_context_reg_seq(cb, R_02891C_SQ_GS_VERT_ITEMSIZE, 4);
-   r600_store_value(cb, cp_shader-ring_item_size  2);
-   r600_store_value(cb, 0);
-   r600_store_value(cb, 0);
-   r600_store_value(cb, 0);
+   r600_store_value(cb, cp_shader-ring_item_sizes[0]  2);
+   r600_store_value(cb, cp_shader-ring_item_sizes[1]  2);
+   r600_store_value(cb, cp_shader-ring_item_sizes[2]  2);
+   r600_store_value(cb, cp_shader-ring_item_sizes[3]  2);
 
r600_store_context_reg(cb, R_028900_SQ_ESGS_RING_ITEMSIZE,
-  (rshader-ring_item_size)  2);
+  (rshader-ring_item_sizes[0])  2);
 
r600_store_context_reg(cb, R_028904_SQ_GSVS_RING_ITEMSIZE,
-  gsvs_itemsize);
+  gsvs_itemsizes[0] +
+  gsvs_itemsizes[1] +
+  gsvs_itemsizes[2] +
+  gsvs_itemsizes[3]);
 
r600_store_context_reg_seq(cb, R_02892C_SQ_GSVS_RING_OFFSET_1, 3);
-   r600_store_value(cb, gsvs_itemsize);
-   r600_store_value(cb, gsvs_itemsize);
-   r600_store_value(cb, gsvs_itemsize);
+   r600_store_value(cb, gsvs_itemsizes[0]);
+   r600_store_value(cb, gsvs_itemsizes[0] + gsvs_itemsizes[1]);
+   r600_store_value(cb, gsvs_itemsizes[0] + gsvs_itemsizes[1] + 
gsvs_itemsizes[2]);
 
/* FIXME calculate these values somehow ??? */
r600_store_context_reg_seq(cb, R_028A54_GS_PER_ES, 3);
diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index 143e98e..67caa69 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -352,7 +352,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum 
pipe_cap param)
case PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS:
return 16384;
case PIPE_CAP_MAX_VERTEX_STREAMS:
-   return 1;
+   return family = CHIP_CEDAR ? 4 : 1;
 
case PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE:
return 2047;
diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index dbff313..ef19706 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -311,7 +311,9 @@ struct r600_shader_ctx {
int gs_out_ring_offset;
int gs_next_vertex;
struct r600_shader  *gs_for_vs;
-   int gs_export_gpr_treg;
+   int gs_export_gpr_tregs[4];
+   const struct pipe_stream_output_info*gs_stream_output_info;
+   unsignedenabled_stream_buffers_mask; /* 
See r600_streamout.enabled_stream_buffers_mask */
 };
 
 struct r600_shader_tgsi_instruction {
@@ -319,7 +321,7 @@ struct r600_shader_tgsi_instruction {

[Mesa-dev] [PATCH 3/6] radeon: add support for streams to the common streamout code.

2015-07-09 Thread Dave Airlie
From: Glenn Kennard glenn.kenn...@gmail.com

This just adds to the common radeon streamout code, support
for multiple streams.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/gallium/drivers/radeon/r600_pipe_common.h |  1 +
 src/gallium/drivers/radeon/r600_streamout.c   | 23 +--
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h 
b/src/gallium/drivers/radeon/r600_pipe_common.h
index a471426..22d940e 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.h
+++ b/src/gallium/drivers/radeon/r600_pipe_common.h
@@ -327,6 +327,7 @@ struct r600_streamout {
/* External state which comes from the vertex shader,
 * it must be set explicitly when binding a shader. */
unsigned*stride_in_dw;
+   unsignedenabled_stream_buffers_mask; /* stream0 
buffers0-3 in 4 LSB */
 
/* The state of VGT_STRMOUT_(CONFIG|EN). */
struct r600_atomenable_atom;
diff --git a/src/gallium/drivers/radeon/r600_streamout.c 
b/src/gallium/drivers/radeon/r600_streamout.c
index bc8bf97..a602dac 100644
--- a/src/gallium/drivers/radeon/r600_streamout.c
+++ b/src/gallium/drivers/radeon/r600_streamout.c
@@ -195,7 +195,11 @@ static void r600_emit_streamout_begin(struct 
r600_common_context *rctx, struct r
r600_write_context_reg(cs, rctx-chip_class = EVERGREEN ?
   R_028B98_VGT_STRMOUT_BUFFER_CONFIG :
   R_028B20_VGT_STRMOUT_BUFFER_EN,
-  rctx-streamout.enabled_mask);
+  (rctx-streamout.enabled_mask |
+   (rctx-streamout.enabled_mask  4) |
+   (rctx-streamout.enabled_mask  8) |
+   (rctx-streamout.enabled_mask  12)) 
+
rctx-streamout.enabled_stream_buffers_mask);
 
for (i = 0; i  rctx-streamout.num_targets; i++) {
if (!t[i])
@@ -326,11 +330,18 @@ static bool r600_get_strmout_en(struct 
r600_common_context *rctx)
 static void r600_emit_streamout_enable(struct r600_common_context *rctx,
   struct r600_atom *atom)
 {
-   r600_write_context_reg(rctx-rings.gfx.cs,
-  rctx-chip_class = EVERGREEN ?
-  R_028B94_VGT_STRMOUT_CONFIG :
-  R_028AB0_VGT_STRMOUT_EN,
-  
S_028B94_STREAMOUT_0_EN(r600_get_strmout_en(rctx)));
+   unsigned reg = R_028AB0_VGT_STRMOUT_EN;
+   unsigned val = S_028B94_STREAMOUT_0_EN(r600_get_strmout_en(rctx));
+   if (rctx-chip_class = EVERGREEN) {
+   reg = R_028B94_VGT_STRMOUT_CONFIG;
+   val |=
+   S_028B94_RAST_STREAM(0) |
+   S_028B94_STREAMOUT_1_EN(r600_get_strmout_en(rctx)) |
+   S_028B94_STREAMOUT_2_EN(r600_get_strmout_en(rctx)) |
+   S_028B94_STREAMOUT_3_EN(r600_get_strmout_en(rctx));
+   }
+
+   r600_write_context_reg(rctx-rings.gfx.cs, reg, val);
 }
 
 static void r600_set_streamout_enable(struct r600_common_context *rctx, bool 
enable)
-- 
2.4.3

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


Re: [Mesa-dev] [PATCH 16/78] i965/nir/vec4: Implement store_output intrinsic

2015-07-09 Thread Eduardo Lima Mitev
On 06/30/2015 06:51 PM, Jason Ekstrand wrote:
 On Fri, Jun 26, 2015 at 1:06 AM, Eduardo Lima Mitev el...@igalia.com wrote:
 The index into the output_reg array where to store the destination register 
 is
 fetched from the nir_outputs map built during nir_setup_outputs stage.

 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89580
 ---
  src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 17 +++--
  1 file changed, 15 insertions(+), 2 deletions(-)

 diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp 
 b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
 index 8a2d335..55d4490 100644
 --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
 +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
 @@ -520,10 +520,23 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr 
 *instr)
 }

 case nir_intrinsic_store_output_indirect:
 +  has_indirect = true;
/* fallthrough */
 -   case nir_intrinsic_store_output:
 -  /* @TODO: Not yet implemented */
 +   case nir_intrinsic_store_output: {
 +  int offset = instr-const_index[0];
 +  int output = nir_outputs[offset];
 +
 +  src = get_nir_src(instr-src[0], nir_output_types[offset]);
 +  dest = dst_reg(src);
 +
 +  dest.writemask = brw_writemask_for_size(instr-num_components);
 +
 +  if (has_indirect)
 + dest.reladdr = new(mem_ctx) src_reg(get_nir_src(instr-src[1]));
 +
 +  output_reg[output] = dest;
 
 I'm very confused about the amount of indirection going on here.  It
 seems to me that we should be setting these outputs up in
 setup_outputs() rather than storring off a map from ints to other ints
 and setting it up here.  I didn't make this comment on the patch for
 setup_outputs() because I wanted to wait to see it used before I
 commented on it.
 
 I'm guessing you did it this way because the nir_assign_var_locations
 is giving you bogus values.  If so, then it might be better to just
 assign variable locations in setup_outputs() rather than having a
 remap table.  The whole point of nir_lower_io is to make IO easy for
 the back-end.  If you need a re-map table, then it's no longer making
 it easy and we need to think more about what's going on.
 --Jason
 

That double indirection felt bad since the beginning, but it was needed
to store the original variable's location (var-data.location). Let me
explain:

We are (re)using the plumbering in vec4_visitor to setup URB, so the
only thing we need to do is to store the out register in output_reg
map at the correct location. And that location is given by the original
location in the shader (var-data.location).

So, in this case, nir_assign_var_locations pass, which constructs
var-data.driver_location, is not useful to us, except to give us
consecutive indexes to construct the other map we have, the type map,
which is needed to carry the correct type from the original variable to
the output register.

So, before knowing that I could modify nir_lower_io, my best shot at
transferring the original variable location was to create this
nir_outputs map. Now, what I have done is to put that value in
const_index[1] of the intrinsic instruction, which was previously
unused. What do you think?

That removes the offset to offset map, but we still need the type map.

About your comment on initializing the register during setup stage, I'm
a bit confused: the register that we need to store is not available
during setup stage, because we still don't have local registers allocated.

break;
 +   }

 case nir_intrinsic_load_vertex_id:
unreachable(should be lowered by lower_vertex_id());
 --

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


Re: [Mesa-dev] [PATCH] r600g: fix sampler/ubo indexing on cayman

2015-07-09 Thread Glenn Kennard

On Thu, 09 Jul 2015 07:37:59 +0200, Dave Airlie airl...@gmail.com wrote:


From: Dave Airlie airl...@redhat.com

Cayman needs a different method to upload the CF IDX0/1

This fixes 31 piglits when ARB_gpu_shader5 is forced on
with cayman.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/gallium/drivers/r600/eg_asm.c | 17 +++--
 src/gallium/drivers/r600/eg_sq.h  | 11 +++
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/r600/eg_asm.c  
b/src/gallium/drivers/r600/eg_asm.c

index d04921e..c32d317 100644
--- a/src/gallium/drivers/r600/eg_asm.c
+++ b/src/gallium/drivers/r600/eg_asm.c
@@ -161,6 +161,9 @@ int egcm_load_index_reg(struct r600_bytecode *bc,  
unsigned id, bool inside_alu_c

alu.op = ALU_OP1_MOVA_INT;
alu.src[0].sel = bc-index_reg[id];
alu.src[0].chan = 0;
+   if (bc-chip_class == CAYMAN)
+		alu.dst.sel = id == 0 ? CM_V_SQ_MOVA_DST_CF_IDX0 :  
CM_V_SQ_MOVA_DST_CF_IDX1;

+
alu.last = 1;
r = r600_bytecode_add_alu(bc, alu);
if (r)
@@ -168,12 +171,14 @@ int egcm_load_index_reg(struct r600_bytecode *bc,  
unsigned id, bool inside_alu_c

bc-ar_loaded = 0; /* clobbered */


Could split ar_loaded into 3 bits for AR/IDX0/IDX1 for cayman, however I  
think it would be better to teach SB to handle sampler/ubo indexing and  
keep things simple here.



-   memset(alu, 0, sizeof(alu));
-   alu.op = id == 0 ? ALU_OP0_SET_CF_IDX0 : ALU_OP0_SET_CF_IDX1;
-   alu.last = 1;
-   r = r600_bytecode_add_alu(bc, alu);
-   if (r)
-   return r;
+   if (bc-chip_class == EVERGREEN) {
+   memset(alu, 0, sizeof(alu));
+   alu.op = id == 0 ? ALU_OP0_SET_CF_IDX0 : ALU_OP0_SET_CF_IDX1;
+   alu.last = 1;
+   r = r600_bytecode_add_alu(bc, alu);
+   if (r)
+   return r;
+   }
/* Must split ALU group as index only applies to following group */
if (inside_alu_clause) {
diff --git a/src/gallium/drivers/r600/eg_sq.h  
b/src/gallium/drivers/r600/eg_sq.h

index b534872..10caa07 100644
--- a/src/gallium/drivers/r600/eg_sq.h
+++ b/src/gallium/drivers/r600/eg_sq.h
@@ -521,4 +521,15 @@
#define V_SQ_REL_ABSOLUTE 0
 #define V_SQ_REL_RELATIVE 1
+
+/* CAYMAN has special encoding for MOVA_INT destination */
+#define CM_V_SQ_MOVA_DST_AR_X 0
+#define CM_V_SQ_MOVA_DST_CF_PC 1
+#define CM_V_SQ_MOVA_DST_CF_IDX0 2
+#define CM_V_SQ_MOVA_DST_CF_IDX1 3



+#define CM_V_SQ_MOVA_DST_CF_CLAUSE_GLOBAL_7_0 4
+#define CM_V_SQ_MOVA_DST_CF_CLAUSE_GLOBAL_15_8 5
+#define CM_V_SQ_MOVA_DST_CF_CLAUSE_GLOBAL_23_16 6
+#define CM_V_SQ_MOVA_DST_CF_CLAUSE_GLOBAL_31_24 7


Can't think of any useful cases for the cayman specific ALU global  
register. Drop these four?



+
 #endif



Reviewed-by: Glenn Kennard glenn.kenn...@gmail.com
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] r600g: move sampler/ubo index registers before temp reg

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

temp_reg needs to be last, as we increment things
away from it, otherwise on cayman some tests were overwriting
the index regs.

Fixes 2 piglit with ARB_gpu_shader5 forced on cayman.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/gallium/drivers/r600/r600_shader.c | 13 ++---
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index af7622e..1a72bf6 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -1931,15 +1931,14 @@ static int r600_shader_from_tgsi(struct r600_context 
*rctx,
ctx.file_offset[TGSI_FILE_IMMEDIATE] = V_SQ_ALU_SRC_LITERAL;
ctx.bc-ar_reg = ctx.file_offset[TGSI_FILE_TEMPORARY] +
ctx.info.file_max[TGSI_FILE_TEMPORARY] + 1;
+   ctx.bc-index_reg[0] = ctx.bc-ar_reg + 1;
+   ctx.bc-index_reg[1] = ctx.bc-ar_reg + 2;
+
if (ctx.type == TGSI_PROCESSOR_GEOMETRY) {
-   ctx.gs_export_gpr_treg = ctx.bc-ar_reg + 1;
-   ctx.temp_reg = ctx.bc-ar_reg + 2;
-   ctx.bc-index_reg[0] = ctx.bc-ar_reg + 3;
-   ctx.bc-index_reg[1] = ctx.bc-ar_reg + 4;
+   ctx.gs_export_gpr_treg = ctx.bc-ar_reg + 3;
+   ctx.temp_reg = ctx.bc-ar_reg + 4;
} else {
-   ctx.temp_reg = ctx.bc-ar_reg + 1;
-   ctx.bc-index_reg[0] = ctx.bc-ar_reg + 2;
-   ctx.bc-index_reg[1] = ctx.bc-ar_reg + 3;
+   ctx.temp_reg = ctx.bc-ar_reg + 3;
}
 
shader-max_arrays = 0;
-- 
2.4.3

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


[Mesa-dev] [PATCH 12/19] glsl/ir: add subroutine lowering pass (v2.1)

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This lowers the enhanced ir_call using the lookaside table
of subroutines into an if ladder. This initially was done
at the AST level but it caused some ordering issues so a separate
pass was required.

v2: clone return value derefs.
v2.1: update for subroutine-int convert.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/glsl/Makefile.sources   |   1 +
 src/glsl/glsl_parser_extras.cpp |   1 +
 src/glsl/ir_optimization.h  |   2 +
 src/glsl/lower_subroutine.cpp   | 109 
 4 files changed, 113 insertions(+)
 create mode 100644 src/glsl/lower_subroutine.cpp

diff --git a/src/glsl/Makefile.sources b/src/glsl/Makefile.sources
index d784a81..3f113c8 100644
--- a/src/glsl/Makefile.sources
+++ b/src/glsl/Makefile.sources
@@ -154,6 +154,7 @@ LIBGLSL_FILES = \
lower_packed_varyings.cpp \
lower_named_interface_blocks.cpp \
lower_packing_builtins.cpp \
+   lower_subroutine.cpp \
lower_texture_projection.cpp \
lower_variable_index_to_cond_assign.cpp \
lower_vec_index_to_cond_assign.cpp \
diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
index ba869f9..a2de278 100644
--- a/src/glsl/glsl_parser_extras.cpp
+++ b/src/glsl/glsl_parser_extras.cpp
@@ -1558,6 +1558,7 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct 
gl_shader *shader,
   struct gl_shader_compiler_options *options =
  ctx-Const.ShaderCompilerOptions[shader-Stage];
 
+  lower_subroutine(shader-ir, state);
   /* Do some optimization at compile time to reduce shader IR size
* and reduce later work if the same shader is linked multiple times
*/
diff --git a/src/glsl/ir_optimization.h b/src/glsl/ir_optimization.h
index e6939f3..fef5a83 100644
--- a/src/glsl/ir_optimization.h
+++ b/src/glsl/ir_optimization.h
@@ -135,6 +135,8 @@ void optimize_dead_builtin_variables(exec_list 
*instructions,
 
 bool lower_vertex_id(gl_shader *shader);
 
+bool lower_subroutine(exec_list *instructions, struct _mesa_glsl_parse_state 
*state);
+
 ir_rvalue *
 compare_index_block(exec_list *instructions, ir_variable *index,
unsigned base, unsigned components, void *mem_ctx);
diff --git a/src/glsl/lower_subroutine.cpp b/src/glsl/lower_subroutine.cpp
new file mode 100644
index 000..e5635a2
--- /dev/null
+++ b/src/glsl/lower_subroutine.cpp
@@ -0,0 +1,109 @@
+/*
+ * Copyright ?? 2015 Red Hat
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the Software),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file lower_subroutine.cpp
+ *
+ * lowers subroutines to an if ladder.
+ */
+
+#include glsl_types.h
+#include glsl_parser_extras.h
+#include ir.h
+#include ir_builder.h
+
+using namespace ir_builder;
+namespace {
+
+class lower_subroutine_visitor : public ir_hierarchical_visitor {
+public:
+   lower_subroutine_visitor()
+   {
+  this-progress = false;
+   }
+
+   ir_visitor_status visit_leave(ir_call *);
+   bool progress;
+   struct _mesa_glsl_parse_state *state;
+};
+
+}
+
+bool
+lower_subroutine(exec_list *instructions, struct _mesa_glsl_parse_state *state)
+{
+   lower_subroutine_visitor v;
+   v.state = state;
+   visit_list_elements(v, instructions);
+   return v.progress;
+}
+
+ir_visitor_status
+lower_subroutine_visitor::visit_leave(ir_call *ir)
+{
+   if (!ir-sub_var)
+  return visit_continue;
+
+   void *mem_ctx = ralloc_parent(ir);
+   ir_if *last_branch = NULL;
+   ir_dereference_variable *return_deref = ir-return_deref;
+
+   for (int s = this-state-num_subroutines - 1; s = 0; s--) {
+  ir_rvalue *var;
+  ir_constant *lc = new(mem_ctx)ir_constant(s);
+  ir_function *fn = this-state-subroutines[s];
+  bool is_compat = false;
+
+  for (int i = 0; i  fn-num_subroutine_types; i++) {
+ if (ir-sub_var-type-without_array() == fn-subroutine_types[i]) {
+is_compat = true;
+break;
+

[Mesa-dev] [PATCH 18/19] st/mesa: add subroutine bits (v1.1)

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

Just add support for the subroutine type to the
glsl-tgsi convertor.

v1.1: add subroutine to int support.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 25e30c7..a1dd70f 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -797,7 +797,7 @@ glsl_to_tgsi_visitor::get_opcode(ir_instruction *ir, 
unsigned op,
case TGSI_OPCODE_##c: \
   if (type == GLSL_TYPE_DOUBLE) \
  op = TGSI_OPCODE_##d; \
-  else if (type == GLSL_TYPE_INT)   \
+  else if (type == GLSL_TYPE_INT || type == GLSL_TYPE_SUBROUTINE)   \
  op = TGSI_OPCODE_##i; \
   else if (type == GLSL_TYPE_UINT) \
  op = TGSI_OPCODE_##u; \
@@ -1090,6 +1090,7 @@ type_size(const struct glsl_type *type)
   return size;
case GLSL_TYPE_SAMPLER:
case GLSL_TYPE_IMAGE:
+   case GLSL_TYPE_SUBROUTINE:
   /* Samplers take up one slot in UNIFORMS[], but they're baked in
* at link time.
*/
@@ -1470,6 +1471,9 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
  result_src = op[0];
   }
   break;
+   case ir_unop_subroutine_to_int:
+  emit_asm(ir, TGSI_OPCODE_MOV, result_dst, op[0]);
+  break;
case ir_unop_abs:
   emit_asm(ir, TGSI_OPCODE_ABS, result_dst, op[0]);
   break;
-- 
2.4.3

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


[Mesa-dev] [PATCH 15/19] program_resource: add subroutine support

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This fleshes out the ARB_program_query support for the
APIs that ARB_shader_subroutine introduces, leaving
some TODOs for later addition.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/main/shader_query.cpp | 46 ++
 1 file changed, 46 insertions(+)

diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp
index a6246a3..4fa5913 100644
--- a/src/mesa/main/shader_query.cpp
+++ b/src/mesa/main/shader_query.cpp
@@ -61,6 +61,7 @@ DECL_RESOURCE_FUNC(UBO, gl_uniform_block);
 DECL_RESOURCE_FUNC(UNI, gl_uniform_storage);
 DECL_RESOURCE_FUNC(ATC, gl_active_atomic_buffer);
 DECL_RESOURCE_FUNC(XFB, gl_transform_feedback_varying_info);
+DECL_RESOURCE_FUNC(SUB, gl_subroutine_function);
 
 void GLAPIENTRY
 _mesa_BindAttribLocation(GLhandleARB program, GLuint index,
@@ -497,6 +498,24 @@ _mesa_program_resource_name(struct gl_program_resource 
*res)
   return RESOURCE_VAR(res)-name;
case GL_UNIFORM:
   return RESOURCE_UNI(res)-name;
+   case GL_VERTEX_SUBROUTINE_UNIFORM:
+   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  /* TODO
+ case GL_COMPUTE_SUBROUTINE_UNIFORM:
+ case GL_TESS_CONTROL_SUBROUTINE_UNIFORM:
+ case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
+  */
+  return RESOURCE_UNI(res)-name + 9;
+   case GL_VERTEX_SUBROUTINE:
+   case GL_GEOMETRY_SUBROUTINE:
+   case GL_FRAGMENT_SUBROUTINE:
+  /* TODO
+ case GL_COMPUTE_SUBROUTINE:
+ case GL_TESS_CONTROL_SUBROUTINE:
+ case GL_TESS_EVALUATION_SUBROUTINE:
+  */
+  return RESOURCE_SUB(res)-name;
default:
   assert(!support for resource type not implemented);
}
@@ -515,6 +534,9 @@ _mesa_program_resource_array_size(struct 
gl_program_resource *res)
case GL_PROGRAM_OUTPUT:
   return RESOURCE_VAR(res)-data.max_array_access;
case GL_UNIFORM:
+   case GL_VERTEX_SUBROUTINE_UNIFORM:
+   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
   return RESOURCE_UNI(res)-array_elements;
case GL_ATOMIC_COUNTER_BUFFER:
case GL_UNIFORM_BLOCK:
@@ -571,6 +593,12 @@ _mesa_program_resource_find_name(struct gl_shader_program 
*shProg,
   case GL_TRANSFORM_FEEDBACK_VARYING:
   case GL_UNIFORM_BLOCK:
   case GL_UNIFORM:
+  case GL_VERTEX_SUBROUTINE_UNIFORM:
+  case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+  case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  case GL_VERTEX_SUBROUTINE:
+  case GL_GEOMETRY_SUBROUTINE:
+  case GL_FRAGMENT_SUBROUTINE:
  if (strncmp(rname, name, baselen) == 0) {
 /* Basename match, check if array or struct. */
 if (name[baselen] == '\0' ||
@@ -651,6 +679,12 @@ _mesa_program_resource_find_index(struct gl_shader_program 
*shProg,
   case GL_PROGRAM_INPUT:
   case GL_PROGRAM_OUTPUT:
   case GL_UNIFORM:
+  case GL_VERTEX_SUBROUTINE_UNIFORM:
+  case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+  case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  case GL_VERTEX_SUBROUTINE:
+  case GL_GEOMETRY_SUBROUTINE:
+  case GL_FRAGMENT_SUBROUTINE:
  if (++idx == (int) index)
 return res;
  break;
@@ -740,6 +774,8 @@ program_resource_location(struct gl_shader_program *shProg,
 {
unsigned index, offset;
int array_index = -1;
+   long offset_ret;
+   const GLchar *base_name_end;
 
if (res-Type == GL_PROGRAM_INPUT || res-Type == GL_PROGRAM_OUTPUT) {
   array_index = array_index_of_resource(res, name);
@@ -780,6 +816,16 @@ program_resource_location(struct gl_shader_program *shProg,
   /* location in remap table + array element offset */
   return RESOURCE_UNI(res)-remap_location + offset;
 
+   case GL_VERTEX_SUBROUTINE_UNIFORM:
+   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  /* TODO
+ case GL_COMPUTE_SUBROUTINE_UNIFORM:
+ case GL_TESS_CONTROL_SUBROUTINE_UNIFORM:
+ case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
+  */
+  offset_ret = parse_program_resource_name(name, base_name_end);
+  return 
RESOURCE_UNI(res)-subroutine[_mesa_shader_stage_from_subroutine_uniform(res-Type)].index
 + ((offset_ret != -1) ? offset_ret : 0);
default:
   return -1;
}
-- 
2.4.3

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


[Mesa-dev] [PATCH 19/19] st/mesa: enable shader subroutine

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

I'm not sure if we shouldn't enable this everywhere
and rip out the API checks,

discuss,

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/state_tracker/st_extensions.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/mesa/state_tracker/st_extensions.c 
b/src/mesa/state_tracker/st_extensions.c
index b1057f3..3b828fa 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -598,6 +598,7 @@ void st_init_extensions(struct pipe_screen *screen,
extensions-ARB_half_float_vertex = GL_TRUE;
extensions-ARB_internalformat_query = GL_TRUE;
extensions-ARB_map_buffer_range = GL_TRUE;
+   extensions-ARB_shader_subroutine = GL_TRUE;
extensions-ARB_texture_border_clamp = GL_TRUE; /* XXX temp */
extensions-ARB_texture_cube_map = GL_TRUE;
extensions-ARB_texture_env_combine = GL_TRUE;
-- 
2.4.3

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


[Mesa-dev] [PATCH 17/19] mesa: fill out the ARB_shader_subroutine APIs

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This fleshes out the APIs, using the program resource
APIs where they should match.

It also sets the default values to valid subroutines.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/main/shaderapi.c | 457 +-
 src/mesa/main/shaderapi.h |   3 +
 2 files changed, 457 insertions(+), 3 deletions(-)

diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index 48ab217..1a46749 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -1071,6 +1071,7 @@ _mesa_use_program(struct gl_context *ctx, struct 
gl_shader_program *shProg)
   use_shader_program(ctx, i, shProg, ctx-Shader);
_mesa_active_program(ctx, shProg, glUseProgram);
 
+   _mesa_shader_program_init_subroutine_defaults(shProg);
if (ctx-Driver.UseProgram)
   ctx-Driver.UseProgram(ctx, shProg);
 }
@@ -1993,15 +1994,75 @@ GLint GLAPIENTRY
 _mesa_GetSubroutineUniformLocation(GLuint program, GLenum shadertype,
const GLchar *name)
 {
-   return -1;
-}
+   GET_CURRENT_CONTEXT(ctx);
+   const char *api_name = glGetSubroutineUniformLocation;
+   struct gl_shader_program *shProg;
+   GLenum resource_type;
+   gl_shader_stage stage;
+
+   if (!ctx-Extensions.ARB_shader_subroutine) {
+  _mesa_error(ctx, GL_INVALID_OPERATION, api_name);
+  return -1;
+   }
+
+   if (!_mesa_validate_shader_target(ctx, shadertype)) {
+  _mesa_error(ctx, GL_INVALID_OPERATION, api_name);
+  return -1;
+   }
 
+   shProg = _mesa_lookup_shader_program_err(ctx, program, api_name);
+   if (!shProg)
+  return -1;
+
+   stage = _mesa_shader_enum_to_shader_stage(shadertype);
+   if (!shProg-_LinkedShaders[stage]) {
+  _mesa_error(ctx, GL_INVALID_OPERATION, api_name);
+  return -1;
+   }
+
+   resource_type = _mesa_shader_stage_to_subroutine_uniform(stage);
+   return _mesa_program_resource_location(shProg, resource_type, name);
+}
 
 GLuint GLAPIENTRY
 _mesa_GetSubroutineIndex(GLuint program, GLenum shadertype,
  const GLchar *name)
 {
-   return GL_INVALID_INDEX;
+   GET_CURRENT_CONTEXT(ctx);
+   const char *api_name = glGetSubroutineIndex;
+   struct gl_shader_program *shProg;
+   struct gl_program_resource *res;
+   GLenum resource_type;
+   gl_shader_stage stage;
+
+   if (!ctx-Extensions.ARB_shader_subroutine) {
+  _mesa_error(ctx, GL_INVALID_OPERATION, api_name);
+  return -1;
+   }
+
+   if (!_mesa_validate_shader_target(ctx, shadertype)) {
+  _mesa_error(ctx, GL_INVALID_OPERATION, api_name);
+  return -1;
+   }
+
+   shProg = _mesa_lookup_shader_program_err(ctx, program, api_name);
+   if (!shProg)
+  return -1;
+
+   stage = _mesa_shader_enum_to_shader_stage(shadertype);
+   if (!shProg-_LinkedShaders[stage]) {
+  _mesa_error(ctx, GL_INVALID_OPERATION, api_name);
+  return -1;
+   }
+
+   resource_type = _mesa_shader_stage_to_subroutine(stage);
+   res = _mesa_program_resource_find_name(shProg, resource_type, name);
+   if (!res) {
+  _mesa_error(ctx, GL_INVALID_OPERATION, api_name);
+ return -1;
+   }
+
+   return _mesa_program_resource_index(shProg, res);
 }
 
 
@@ -2009,6 +2070,91 @@ GLvoid GLAPIENTRY
 _mesa_GetActiveSubroutineUniformiv(GLuint program, GLenum shadertype,
GLuint index, GLenum pname, GLint *values)
 {
+   GET_CURRENT_CONTEXT(ctx);
+   const char *api_name = glGetActiveSubroutineUniformiv;
+   struct gl_shader_program *shProg;
+   struct gl_shader *sh;
+   gl_shader_stage stage;
+   struct gl_program_resource *res;
+   const struct gl_uniform_storage *uni;
+   GLenum resource_type;
+   int count, i, j;
+   if (!ctx-Extensions.ARB_shader_subroutine) {
+  _mesa_error(ctx, GL_INVALID_OPERATION, api_name);
+  return;
+   }
+
+   if (!_mesa_validate_shader_target(ctx, shadertype)) {
+  _mesa_error(ctx, GL_INVALID_OPERATION, api_name);
+  return;
+   }
+
+   shProg = _mesa_lookup_shader_program_err(ctx, program, api_name);
+   if (!shProg)
+  return;
+
+   stage = _mesa_shader_enum_to_shader_stage(shadertype);
+   resource_type = _mesa_shader_stage_to_subroutine_uniform(stage);
+
+   sh = shProg-_LinkedShaders[stage];
+   if (!sh) {
+  _mesa_error(ctx, GL_INVALID_OPERATION, api_name);
+  return;
+   }
+
+   switch (pname) {
+   case GL_NUM_COMPATIBLE_SUBROUTINES: {
+  res = _mesa_program_resource_find_index(shProg, resource_type, index);
+  if (res) {
+ uni = res-Data;
+ count = 0;
+ for (i = 0; i  sh-NumSubroutineFunctions; i++) {
+struct gl_subroutine_function *fn = sh-SubroutineFunctions[i];
+for (j = 0; j  fn-num_compat_types; j++) {
+   if (fn-types[j] == uni-type) {
+  count++;
+  break;
+   }
+}
+ }
+ values[0] = count;
+  }
+  break;
+   }
+   case GL_COMPATIBLE_SUBROUTINES: {
+  res = 

[Mesa-dev] [PATCH 13/19] mesa/mtypes: add gl_subroutine_function and uniform storage to shader

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This adds the necessary storage for subroutine info to gl_shader.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/main/mtypes.h | 15 +++
 1 file changed, 15 insertions(+)

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index a93fe94..c53bf2d 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2359,6 +2359,15 @@ struct gl_ati_fragment_shader_state
struct ati_fragment_shader *Current;
 };
 
+/**
+ *  Shader subroutine function definition
+ */
+struct gl_subroutine_function
+{
+   char *name;
+   int num_compat_types;
+   const struct glsl_type **types;
+};
 
 /**
  * A GLSL vertex or fragment shader object.
@@ -2509,6 +2518,12 @@ struct gl_shader
*/
   unsigned LocalSize[3];
} Comp;
+
+   GLuint NumSubroutineUniformTypes;
+   GLuint NumSubroutineUniforms;
+   struct gl_uniform_storage **SubroutineUniformRemapTable;
+   GLuint NumSubroutineFunctions;
+   struct gl_subroutine_function *SubroutineFunctions;
 };
 
 
-- 
2.4.3

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


[Mesa-dev] [PATCH 14/19] glsl: add uniform and program resource support

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This adds linker support for subroutine uniforms, they
have some subtle differences from real uniforms, we also hide
them and they are given internal uniform names.

This also adds the subroutine locations and subroutine uniforms
to the program resource tracking for later use.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/glsl/ir_uniform.h  |  2 +
 src/glsl/link_uniforms.cpp | 56 +--
 src/glsl/linker.cpp| 94 +-
 3 files changed, 146 insertions(+), 6 deletions(-)

diff --git a/src/glsl/ir_uniform.h b/src/glsl/ir_uniform.h
index e1b8014..be1b38d 100644
--- a/src/glsl/ir_uniform.h
+++ b/src/glsl/ir_uniform.h
@@ -114,6 +114,8 @@ struct gl_uniform_storage {
 
struct gl_opaque_uniform_index image[MESA_SHADER_STAGES];
 
+   struct gl_opaque_uniform_index subroutine[MESA_SHADER_STAGES];
+
/**
 * Storage used by the driver for the uniform
 */
diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
index 11ae06f..78a830a 100644
--- a/src/glsl/link_uniforms.cpp
+++ b/src/glsl/link_uniforms.cpp
@@ -47,9 +47,10 @@
 static unsigned
 values_for_type(const glsl_type *type)
 {
-   if (type-is_sampler()) {
+   if (type-is_sampler() || type-is_subroutine()) {
   return 1;
-   } else if (type-is_array()  type-fields.array-is_sampler()) {
+   } else if (type-is_array()  (type-fields.array-is_sampler() ||
+   type-fields.array-is_subroutine())) {
   return type-array_size();
} else {
   return type-component_slots();
@@ -284,6 +285,7 @@ public:
count_uniform_size(struct string_to_uint_map *map)
   : num_active_uniforms(0), num_values(0), num_shader_samplers(0),
 num_shader_images(0), num_shader_uniform_components(0),
+num_shader_subroutines(0),
 is_ubo_var(false), map(map)
{
   /* empty */
@@ -294,6 +296,7 @@ public:
   this-num_shader_samplers = 0;
   this-num_shader_images = 0;
   this-num_shader_uniform_components = 0;
+  this-num_shader_subroutines = 0;
}
 
void process(ir_variable *var)
@@ -331,6 +334,11 @@ public:
 */
unsigned num_shader_uniform_components;
 
+   /**
+* Number of subroutine uniforms used
+*/
+   unsigned num_shader_subroutines;
+
bool is_ubo_var;
 
 private:
@@ -348,7 +356,9 @@ private:
* count it for each shader target.
*/
   const unsigned values = values_for_type(type);
-  if (type-contains_sampler()) {
+  if (type-contains_subroutine()) {
+ this-num_shader_subroutines += values;
+  } else if (type-contains_sampler()) {
  this-num_shader_samplers += values;
   } else if (type-contains_image()) {
  this-num_shader_images += values;
@@ -421,6 +431,7 @@ public:
   this-shader_shadow_samplers = 0;
   this-next_sampler = 0;
   this-next_image = 0;
+  this-next_subroutine = 0;
   memset(this-targets, 0, sizeof(this-targets));
}
 
@@ -535,6 +546,24 @@ private:
   }
}
 
+   void handle_subroutines(const glsl_type *base_type,
+   struct gl_uniform_storage *uniform)
+   {
+  if (base_type-is_subroutine()) {
+ uniform-subroutine[shader_type].index = this-next_subroutine;
+ uniform-subroutine[shader_type].active = true;
+
+ /* Increment the subroutine index by 1 for non-arrays and by the
+  * number of array elements for arrays.
+  */
+ this-next_subroutine += MAX2(1, uniform-array_elements);
+
+  } else {
+ uniform-subroutine[shader_type].index = ~0;
+ uniform-subroutine[shader_type].active = false;
+  }
+   }
+
virtual void visit_field(const glsl_type *type, const char *name,
 bool row_major)
{
@@ -588,6 +617,7 @@ private:
   /* This assigns uniform indices to sampler and image uniforms. */
   handle_samplers(base_type, this-uniforms[id]);
   handle_images(base_type, this-uniforms[id]);
+  handle_subroutines(base_type, this-uniforms[id]);
 
   /* If there is already storage associated with this uniform or if the
* uniform is set as builtin, it means that it was set while processing
@@ -672,6 +702,7 @@ private:
struct gl_uniform_storage *uniforms;
unsigned next_sampler;
unsigned next_image;
+   unsigned next_subroutine;
 
 public:
union gl_constant_value *values;
@@ -952,8 +983,11 @@ link_assign_uniform_locations(struct gl_shader_program 
*prog,
   sh-num_samplers = uniform_size.num_shader_samplers;
   sh-NumImages = uniform_size.num_shader_images;
   sh-num_uniform_components = uniform_size.num_shader_uniform_components;
-
   sh-num_combined_uniform_components = sh-num_uniform_components;
+  sh-NumSubroutineUniforms = uniform_size.num_shader_subroutines;
+
+  sh-SubroutineUniformRemapTable = ralloc_array(sh, struct 
gl_uniform_storage *, 

[Mesa-dev] [PATCH 07/19] glsl/types: add new subroutine type (v3)

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This type will be used to store the name of subroutine types

as in subroutine void myfunc(void);
will store myfunc into a subroutine type.

This is required to the parser can identify a subroutine
type in a uniform decleration as a valid type, and also for
looking up the type later.

Also add contains_subroutine method.

v2: handle subroutine to int comparisons, needed
for lowering pass.
v3: do subroutine to int with it's own IR
operation to avoid hacking on asserts (Kayden)

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/glsl/glsl_types.cpp| 63 ++
 src/glsl/glsl_types.h  | 19 ++
 src/glsl/ir.cpp|  2 ++
 src/glsl/ir.h  |  1 +
 src/glsl/ir_builder.cpp|  6 
 src/glsl/ir_builder.h  |  1 +
 src/glsl/ir_clone.cpp  |  1 +
 src/glsl/ir_validate.cpp   |  4 +++
 src/glsl/link_uniform_initializers.cpp |  1 +
 9 files changed, 98 insertions(+)

diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
index 281ff51..1e3ebb2 100644
--- a/src/glsl/glsl_types.cpp
+++ b/src/glsl/glsl_types.cpp
@@ -32,6 +32,7 @@ mtx_t glsl_type::mutex = _MTX_INITIALIZER_NP;
 hash_table *glsl_type::array_types = NULL;
 hash_table *glsl_type::record_types = NULL;
 hash_table *glsl_type::interface_types = NULL;
+hash_table *glsl_type::subroutine_types = NULL;
 void *glsl_type::mem_ctx = NULL;
 
 void
@@ -159,6 +160,22 @@ glsl_type::glsl_type(const glsl_struct_field *fields, 
unsigned num_fields,
mtx_unlock(glsl_type::mutex);
 }
 
+glsl_type::glsl_type(const char *subroutine_name) :
+   gl_type(0),
+   base_type(GLSL_TYPE_SUBROUTINE),
+   sampler_dimensionality(0), sampler_shadow(0), sampler_array(0),
+   sampler_type(0), interface_packing(0),
+   vector_elements(0), matrix_columns(0),
+   length(0)
+{
+   mtx_lock(glsl_type::mutex);
+
+   init_ralloc_type_ctx();
+   assert(subroutine_name != NULL);
+   this-name = ralloc_strdup(this-mem_ctx, subroutine_name);
+   this-vector_elements = 1;
+   mtx_unlock(glsl_type::mutex);
+}
 
 bool
 glsl_type::contains_sampler() const
@@ -229,6 +246,22 @@ glsl_type::contains_opaque() const {
}
 }
 
+bool
+glsl_type::contains_subroutine() const
+{
+   if (this-is_array()) {
+  return this-fields.array-contains_subroutine();
+   } else if (this-is_record()) {
+  for (unsigned int i = 0; i  this-length; i++) {
+if (this-fields.structure[i].type-contains_subroutine())
+   return true;
+  }
+  return false;
+   } else {
+  return this-is_subroutine();
+   }
+}
+
 gl_texture_index
 glsl_type::sampler_index() const
 {
@@ -826,6 +859,34 @@ glsl_type::get_interface_instance(const glsl_struct_field 
*fields,
return t;
 }
 
+const glsl_type *
+glsl_type::get_subroutine_instance(const char *subroutine_name)
+{
+   const glsl_type key(subroutine_name);
+
+   mtx_lock(glsl_type::mutex);
+
+   if (subroutine_types == NULL) {
+  subroutine_types = hash_table_ctor(64, record_key_hash, 
record_key_compare);
+   }
+
+   const glsl_type *t = (glsl_type *) hash_table_find(subroutine_types,  key);
+   if (t == NULL) {
+  mtx_unlock(glsl_type::mutex);
+  t = new glsl_type(subroutine_name);
+  mtx_lock(glsl_type::mutex);
+
+  hash_table_insert(subroutine_types, (void *) t, t);
+   }
+
+   assert(t-base_type == GLSL_TYPE_SUBROUTINE);
+   assert(strcmp(t-name, subroutine_name) == 0);
+
+   mtx_unlock(glsl_type::mutex);
+
+   return t;
+}
+
 
 const glsl_type *
 glsl_type::get_mul_type(const glsl_type *type_a, const glsl_type *type_b)
@@ -958,6 +1019,7 @@ glsl_type::component_slots() const
case GLSL_TYPE_SAMPLER:
case GLSL_TYPE_ATOMIC_UINT:
case GLSL_TYPE_VOID:
+   case GLSL_TYPE_SUBROUTINE:
case GLSL_TYPE_ERROR:
   break;
}
@@ -1331,6 +1393,7 @@ glsl_type::count_attribute_slots() const
case GLSL_TYPE_IMAGE:
case GLSL_TYPE_ATOMIC_UINT:
case GLSL_TYPE_VOID:
+   case GLSL_TYPE_SUBROUTINE:
case GLSL_TYPE_ERROR:
   break;
}
diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h
index f54a939..0f4dc80 100644
--- a/src/glsl/glsl_types.h
+++ b/src/glsl/glsl_types.h
@@ -59,6 +59,7 @@ enum glsl_base_type {
GLSL_TYPE_INTERFACE,
GLSL_TYPE_ARRAY,
GLSL_TYPE_VOID,
+   GLSL_TYPE_SUBROUTINE,
GLSL_TYPE_ERROR
 };
 
@@ -264,6 +265,11 @@ struct glsl_type {
  const char *block_name);
 
/**
+* Get the instance of an subroutine type
+*/
+   static const glsl_type *get_subroutine_instance(const char 
*subroutine_name);
+
+   /**
 * Get the type resulting from a multiplication of \p type_a * \p type_b
 */
static const glsl_type *get_mul_type(const glsl_type *type_a,
@@ -514,6 +520,13 @@ struct glsl_type {
/**
 * Query if a type is unnamed/anonymous (named by the parser)
 */
+
+   bool is_subroutine() const
+   

[Mesa-dev] ARB_shader_subroutine (again)

2015-07-09 Thread Dave Airlie
I've rebased this series, it's in my arb_shader_subroutine branch.

I've also implemented Ken's idea for a subroutine-int conversion
and put the changes into each patch that it affects.

Otherwise not much different from when I last posted.

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


[Mesa-dev] [PATCH 08/19] mesa: add inline conversion functions for ARB_shader_subroutine

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This handles converting the shader stages to the internal
prefix along with the program resource interfaces.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/main/shaderobj.h | 84 +++
 1 file changed, 84 insertions(+)

diff --git a/src/mesa/main/shaderobj.h b/src/mesa/main/shaderobj.h
index 3d696a1..67c717b 100644
--- a/src/mesa/main/shaderobj.h
+++ b/src/mesa/main/shaderobj.h
@@ -120,6 +120,90 @@ _mesa_shader_enum_to_shader_stage(GLenum v)
 }
 
 
+static inline const char *
+_mesa_shader_stage_to_subroutine_prefix(gl_shader_stage stage)
+{
+  switch (stage) {
+  case MESA_SHADER_VERTEX:
+return __subu_v;
+  case MESA_SHADER_GEOMETRY:
+return __subu_g;
+  case MESA_SHADER_FRAGMENT:
+return __subu_f;
+  case MESA_SHADER_COMPUTE:
+return __subu_c;
+  default:
+return NULL;
+  }
+}
+
+static inline gl_shader_stage
+_mesa_shader_stage_from_subroutine_uniform(GLenum subuniform)
+{
+   switch (subuniform) {
+   default:
+   case GL_VERTEX_SUBROUTINE_UNIFORM:
+  return MESA_SHADER_VERTEX;
+   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+  return MESA_SHADER_GEOMETRY;
+   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  return MESA_SHADER_FRAGMENT;
+   case GL_COMPUTE_SUBROUTINE_UNIFORM:
+  return MESA_SHADER_COMPUTE;
+   /* TODO - COMPUTE, TESS */
+   }
+}
+
+static inline gl_shader_stage
+_mesa_shader_stage_from_subroutine(GLenum subroutine)
+{
+   switch (subroutine) {
+   case GL_VERTEX_SUBROUTINE:
+  return MESA_SHADER_VERTEX;
+   case GL_GEOMETRY_SUBROUTINE:
+  return MESA_SHADER_GEOMETRY;
+   case GL_FRAGMENT_SUBROUTINE:
+  return MESA_SHADER_FRAGMENT;
+   case GL_COMPUTE_SUBROUTINE:
+  return MESA_SHADER_COMPUTE;
+   /* TODO - TESS */
+   }
+}
+
+static inline GLenum
+_mesa_shader_stage_to_subroutine(gl_shader_stage stage)
+{
+   switch (stage) {
+   default:
+   case MESA_SHADER_VERTEX:
+  return GL_VERTEX_SUBROUTINE;
+   case MESA_SHADER_GEOMETRY:
+  return GL_GEOMETRY_SUBROUTINE;
+   case MESA_SHADER_FRAGMENT:
+  return GL_FRAGMENT_SUBROUTINE;
+   case MESA_SHADER_COMPUTE:
+  return GL_COMPUTE_SUBROUTINE;
+   /* TODO - TESS */
+   }
+}
+
+static inline GLenum
+_mesa_shader_stage_to_subroutine_uniform(gl_shader_stage stage)
+{
+   switch (stage) {
+   default:
+   case MESA_SHADER_VERTEX:
+  return GL_VERTEX_SUBROUTINE_UNIFORM;
+   case MESA_SHADER_GEOMETRY:
+  return GL_GEOMETRY_SUBROUTINE_UNIFORM;
+   case MESA_SHADER_FRAGMENT:
+  return GL_FRAGMENT_SUBROUTINE_UNIFORM;
+   case MESA_SHADER_COMPUTE:
+  return GL_COMPUTE_SUBROUTINE_UNIFORM;
+   /* TODO - TESS */
+   }
+}
+
 #ifdef __cplusplus
 }
 #endif
-- 
2.4.3

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


[Mesa-dev] [PATCH 04/19] mesa: Add glGet support for ARB_shader_subroutine implementation limits

2015-07-09 Thread Dave Airlie
From: Chris Forbes chr...@ijw.co.nz

Reviewed-by: Tapani Pälli tapani.pa...@intel.com
Reviewed-by: Kenneth Graunke kenn...@whitecape.org
Signed-off-by: Chris Forbes chr...@ijw.co.nz
Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/main/config.h   | 6 ++
 src/mesa/main/get.c  | 1 +
 src/mesa/main/get_hash_params.py | 4 
 src/mesa/main/tests/enum_strings.cpp | 9 +
 4 files changed, 20 insertions(+)

diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h
index 9c3baf4..07c3474 100644
--- a/src/mesa/main/config.h
+++ b/src/mesa/main/config.h
@@ -272,6 +272,12 @@
 #define MAX_VERTEX_STREAMS  4
 /*@}*/
 
+/** For GL_ARB_shader_subroutine */
+/*@{*/
+#define MAX_SUBROUTINES   256
+#define MAX_SUBROUTINE_UNIFORM_LOCATIONS  1024
+/*@}*/
+
 /** For GL_INTEL_performance_query */
 /*@{*/
 #define MAX_PERFQUERY_QUERY_NAME_LENGTH 256
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 3d6d639..ac9cba3 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -401,6 +401,7 @@ EXTRA_EXT(ARB_explicit_uniform_location);
 EXTRA_EXT(ARB_clip_control);
 EXTRA_EXT(EXT_polygon_offset_clamp);
 EXTRA_EXT(ARB_framebuffer_no_attachments);
+EXTRA_EXT(ARB_shader_subroutine);
 
 static const int
 extra_ARB_color_buffer_float_or_glcore[] = {
diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
index c25e1b6..842ed6c 100644
--- a/src/mesa/main/get_hash_params.py
+++ b/src/mesa/main/get_hash_params.py
@@ -824,6 +824,10 @@ descriptor=[
   [ MIN_FRAGMENT_INTERPOLATION_OFFSET, 
CONTEXT_FLOAT(Const.MinFragmentInterpolationOffset), extra_ARB_gpu_shader5 ],
   [ MAX_FRAGMENT_INTERPOLATION_OFFSET, 
CONTEXT_FLOAT(Const.MaxFragmentInterpolationOffset), extra_ARB_gpu_shader5 ],
   [ FRAGMENT_INTERPOLATION_OFFSET_BITS, 
CONST(FRAGMENT_INTERPOLATION_OFFSET_BITS), extra_ARB_gpu_shader5 ],
+
+# GL_ARB_shader_subroutine
+  [ MAX_SUBROUTINES, CONST(MAX_SUBROUTINES), extra_ARB_shader_subroutine ],
+  [ MAX_SUBROUTINE_UNIFORM_LOCATIONS, 
CONST(MAX_SUBROUTINE_UNIFORM_LOCATIONS), extra_ARB_shader_subroutine ],
 ]}
 
 ]
diff --git a/src/mesa/main/tests/enum_strings.cpp 
b/src/mesa/main/tests/enum_strings.cpp
index dc5fe75..d40b82a 100644
--- a/src/mesa/main/tests/enum_strings.cpp
+++ b/src/mesa/main/tests/enum_strings.cpp
@@ -1731,6 +1731,10 @@ const struct enum_info everything[] = {
{ 0x8DDF, GL_MAX_GEOMETRY_UNIFORM_COMPONENTS },
{ 0x8DE0, GL_MAX_GEOMETRY_OUTPUT_VERTICES },
{ 0x8DE1, GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS },
+   { 0x8DE5, GL_ACTIVE_SUBROUTINES },
+   { 0x8DE6, GL_ACTIVE_SUBROUTINE_UNIFORMS },
+   { 0x8DE7, GL_MAX_SUBROUTINES },
+   { 0x8DE8, GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS },
{ 0x8DF0, GL_LOW_FLOAT },
{ 0x8DF1, GL_MEDIUM_FLOAT },
{ 0x8DF2, GL_HIGH_FLOAT },
@@ -1759,6 +1763,11 @@ const struct enum_info everything[] = {
{ 0x8E44, GL_TEXTURE_SWIZZLE_B },
{ 0x8E45, GL_TEXTURE_SWIZZLE_A },
{ 0x8E46, GL_TEXTURE_SWIZZLE_RGBA },
+   { 0x8E47, GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS },
+   { 0x8E48, GL_ACTIVE_SUBROUTINE_MAX_LENGTH },
+   { 0x8E49, GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH },
+   { 0x8E4A, GL_NUM_COMPATIBLE_SUBROUTINES },
+   { 0x8E4B, GL_COMPATIBLE_SUBROUTINES },
{ 0x8E4C, GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION },
{ 0x8E4D, GL_FIRST_VERTEX_CONVENTION },
{ 0x8E4E, GL_LAST_VERTEX_CONVENTION },
-- 
2.4.3

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


[Mesa-dev] [PATCH 02/19] glapi: Add ARB_shader_subroutine functions and enums (v2)

2015-07-09 Thread Dave Airlie
From: Chris Forbes chr...@ijw.co.nz

v2: fix output=true and LENGTH typo

Reviewed-by: Tapani Pälli tapani.pa...@intel.com
Reviewed-by: Kenneth Graunke kenn...@whitecape.org
Signed-off-by: Chris Forbes chr...@ijw.co.nz
Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mapi/glapi/gen/ARB_shader_subroutine.xml | 84 
 src/mapi/glapi/gen/Makefile.am   |  1 +
 src/mapi/glapi/gen/gl_API.xml|  6 +-
 3 files changed, 90 insertions(+), 1 deletion(-)
 create mode 100644 src/mapi/glapi/gen/ARB_shader_subroutine.xml

diff --git a/src/mapi/glapi/gen/ARB_shader_subroutine.xml 
b/src/mapi/glapi/gen/ARB_shader_subroutine.xml
new file mode 100644
index 000..04b75cb
--- /dev/null
+++ b/src/mapi/glapi/gen/ARB_shader_subroutine.xml
@@ -0,0 +1,84 @@
+?xml version=1.0?
+!DOCTYPE OpenGLAPI SYSTEM gl_API.dtd
+
+!-- Note: no GLX protocol info yet. --
+
+OpenGLAPI
+
+category name=GL_ARB_shader_subroutine number=90
+
+function name=GetSubroutineUniformLocation offset=assign
+param name=program type=GLuint/
+param name=shadertype type=GLenum/
+param name=name type=const GLchar */
+return type=GLint/
+/function
+
+function name=GetSubroutineIndex offset=assign
+param name=program type=GLuint/
+param name=shadertype type=GLenum/
+param name=name type=const GLchar */
+return type=GLuint/
+/function
+
+function name=GetActiveSubroutineUniformiv offset=assign
+param name=program type=GLuint/
+param name=shadertype type=GLenum/
+param name=index type=GLuint/
+param name=pname type=GLenum/
+param name=values type=GLint * output=true/
+/function
+
+function name=GetActiveSubroutineUniformName offset=assign
+param name=program type=GLuint/
+param name=shadertype type=GLenum/
+param name=index type=GLuint/
+param name=bufsize type=GLsizei/
+param name=length type=GLsizei * output=true/
+param name=name type=GLchar * output=true/
+/function
+
+function name=GetActiveSubroutineName offset=assign
+param name=program type=GLuint/
+param name=shadertype type=GLenum/
+param name=index type=GLuint/
+param name=bufsize type=GLsizei/
+param name=length type=GLsizei * output=true/
+param name=name type=GLchar * output=true/
+/function
+
+function name=UniformSubroutinesuiv offset=assign
+param name=shadertype type=GLenum/
+param name=count type=GLsizei/
+param name=indices type=const GLuint */
+/function
+
+function name=GetUniformSubroutineuiv offset=assign
+param name=shadertype type=GLenum/
+param name=location type=GLint/
+param name=params type=GLuint * output=true/
+/function
+
+function name=GetProgramStageiv offset=assign
+param name=program type=GLuint/
+param name=shadertype type=GLenum/
+param name=pname type=GLenum/
+param name=values type=GLint * output=true/
+/function
+
+enum name=ACTIVE_SUBROUTINES value=0x8DE5/
+enum name=ACTIVE_SUBROUTINE_UNIFORMS value=0x8DE6/
+enum name=ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS value=0x8E47/
+enum name=ACTIVE_SUBROUTINE_MAX_LENGTH value=0x8E48/
+enum name=ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH value=0x8E49/
+
+enum name=MAX_SUBROUTINES value=0x8DE7/
+enum name=MAX_SUBROUTINE_UNIFORM_LOCATIONS value=0x8DE8/
+
+enum name=NUM_COMPATIBLE_SUBROUTINES value=0x8E4A/
+enum name=COMPATIBLE_SUBROUTINES value=0x8E4B/
+
+!-- UNIFORM_SIZE, UNIFORM_NAME_LENGTH already in GL3.1 --
+
+/category
+/OpenGLAPI
diff --git a/src/mapi/glapi/gen/Makefile.am b/src/mapi/glapi/gen/Makefile.am
index 5b163b0..1922c15 100644
--- a/src/mapi/glapi/gen/Makefile.am
+++ b/src/mapi/glapi/gen/Makefile.am
@@ -151,6 +151,7 @@ API_XML = \
ARB_separate_shader_objects.xml \
ARB_shader_atomic_counters.xml \
ARB_shader_image_load_store.xml \
+   ARB_shader_subroutine.xml \
ARB_sync.xml \
ARB_texture_barrier.xml \
ARB_texture_buffer_object.xml \
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
index 2f33075..64314cf 100644
--- a/src/mapi/glapi/gen/gl_API.xml
+++ b/src/mapi/glapi/gen/gl_API.xml
@@ -8072,7 +8072,11 @@
 
 xi:include href=ARB_vertex_type_2_10_10_10_rev.xml 
xmlns:xi=http://www.w3.org/2001/XInclude/
 
-!-- ARB extensions #86...#93 --
+!-- ARB extensions #86...#89 --
+
+xi:include href=ARB_shader_subroutine.xml 
xmlns:xi=http://www.w3.org/2001/XInclude/
+
+!-- ARB extensions #91...#93 --
 
 xi:include href=ARB_draw_indirect.xml 
xmlns:xi=http://www.w3.org/2001/XInclude/
 
-- 
2.4.3

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


[Mesa-dev] [PATCH 11/19] glsl: add ast/parser support for subroutine parsing storage (v3.1)

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This is the guts of the GLSL parser and AST support for
shader subroutines.

The code creates a subroutine type in the parser, and
uses that there to validate the identifiers. The parser
also distinguishes between subroutine types/function prototypes
/uniforms and subroutine defintions for functions.

Then in the AST conversion it recreates the types, and
stores the subroutine definition info or subroutine info
into the ir_function along with a side lookup table in
the parser state. It also converts subroutine calls into
the enhanced ir_call.

v2: move to handling method calls in
function handling not in field selection.
v3: merge Chris's previous parser patches in here, to
make it clearer what's changed in one place.
v3.1: add more documentation, drop unused include

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/glsl/ast.h   |  15 +
 src/glsl/ast_function.cpp| 120 +--
 src/glsl/ast_to_hir.cpp  |  98 
 src/glsl/ast_type.cpp|   7 ++-
 src/glsl/glsl_lexer.ll   |   8 +++
 src/glsl/glsl_parser.yy  | 114 +
 src/glsl/glsl_parser_extras.cpp  |  22 +++
 src/glsl/glsl_parser_extras.h|  19 +++
 src/glsl/hir_field_selection.cpp |  39 -
 9 files changed, 326 insertions(+), 116 deletions(-)

diff --git a/src/glsl/ast.h b/src/glsl/ast.h
index ef74e51..968aad4 100644
--- a/src/glsl/ast.h
+++ b/src/glsl/ast.h
@@ -304,6 +304,16 @@ private:
 * Is this function call actually a constructor?
 */
bool cons;
+   ir_rvalue *
+   handle_method(exec_list *instructions,
+ struct _mesa_glsl_parse_state *state);
+};
+
+class ast_subroutine_list : public ast_node
+{
+public:
+   virtual void print(void) const;
+   exec_list declarations;
 };
 
 class ast_array_specifier : public ast_node {
@@ -514,6 +524,10 @@ struct ast_type_qualifier {
  unsigned stream:1; /** Has stream value assigned  */
  unsigned explicit_stream:1; /** stream value assigned explicitly by 
shader code */
  /** \} */
+
+ /** \name Qualifiers for GL_ARB_shader_subroutine */
+ unsigned subroutine:1;  /** Is this marked 'subroutine' */
+ unsigned subroutine_def:1; /** Is this marked 'subroutine' with a 
list of types */
   }
   /** \brief Set of flags, accessed by name. */
   q;
@@ -636,6 +650,7 @@ struct ast_type_qualifier {
ast_type_qualifier q,
ast_node* node);
 
+   ast_subroutine_list *subroutine_list;
 };
 
 class ast_declarator_list;
diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp
index 92e26bf..f32de7c 100644
--- a/src/glsl/ast_function.cpp
+++ b/src/glsl/ast_function.cpp
@@ -26,6 +26,7 @@
 #include glsl_types.h
 #include ir.h
 #include main/core.h /* for MIN2 */
+#include main/shaderobj.h
 
 static ir_rvalue *
 convert_component(ir_rvalue *src, const glsl_type *desired_type);
@@ -355,6 +356,8 @@ fix_parameter(void *mem_ctx, ir_rvalue *actual, const 
glsl_type *formal_type,
 static ir_rvalue *
 generate_call(exec_list *instructions, ir_function_signature *sig,
  exec_list *actual_parameters,
+  ir_variable *sub_var,
+ ir_rvalue *array_idx,
  struct _mesa_glsl_parse_state *state)
 {
void *ctx = state;
@@ -421,7 +424,8 @@ generate_call(exec_list *instructions, 
ir_function_signature *sig,
 
   deref = new(ctx) ir_dereference_variable(var);
}
-   ir_call *call = new(ctx) ir_call(sig, deref, actual_parameters);
+
+   ir_call *call = new(ctx) ir_call(sig, deref, actual_parameters, sub_var, 
array_idx);
instructions-push_tail(call);
 
/* Also emit any necessary out-parameter conversions. */
@@ -489,6 +493,40 @@ done:
return sig;
 }
 
+static ir_function_signature *
+match_subroutine_by_name(const char *name,
+ exec_list *actual_parameters,
+ struct _mesa_glsl_parse_state *state,
+ ir_variable **var_r)
+{
+   void *ctx = state;
+   ir_function_signature *sig = NULL;
+   ir_function *f, *found = NULL;
+   const char *new_name;
+   ir_variable *var;
+   bool is_exact = false;
+
+   new_name = ralloc_asprintf(ctx, %s_%s, 
_mesa_shader_stage_to_subroutine_prefix(state-stage), name);
+   var = state-symbols-get_variable(new_name);
+   if (!var)
+  return NULL;
+
+   for (int i = 0; i  state-num_subroutine_types; i++) {
+  f = state-subroutine_types[i];
+  if (strcmp(f-name, var-type-without_array()-name))
+ continue;
+  found = f;
+  break;
+   }
+
+   if (!found)
+  return NULL;
+   *var_r = var;
+   sig = found-matching_signature(state, actual_parameters,
+  false, is_exact);
+   return sig;
+}
+
 static void
 print_function_prototypes(_mesa_glsl_parse_state *state, 

[Mesa-dev] [PATCH 06/19] glsl: Make `subroutine` a reserved keyword

2015-07-09 Thread Dave Airlie
From: Chris Forbes chr...@ijw.co.nz

Reviewed-by: Tapani Pälli tapani.pa...@intel.com
Reviewed-by: Kenneth Graunke kenn...@whitecape.org
Signed-off-by: Chris Forbes chr...@ijw.co.nz
Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/glsl/glsl_lexer.ll | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/glsl/glsl_lexer.ll b/src/glsl/glsl_lexer.ll
index 10db5b8..5fd22b4 100644
--- a/src/glsl/glsl_lexer.ll
+++ b/src/glsl/glsl_lexer.ll
@@ -577,7 +577,7 @@ usamplerBuffer  KEYWORD(140, 300, 140, 0, 
USAMPLERBUFFER);
 resource   KEYWORD(0, 300, 0, 0, RESOURCE);
 patch  KEYWORD(0, 300, 0, 0, PATCH);
 sample KEYWORD_WITH_ALT(400, 300, 400, 0, 
yyextra-ARB_gpu_shader5_enable, SAMPLE);
-subroutine KEYWORD(0, 300, 0, 0, SUBROUTINE);
+subroutine KEYWORD_WITH_ALT(400, 300, 400, 0, 
yyextra-ARB_shader_subroutine_enable, SUBROUTINE);
 
 
 [_a-zA-Z][_a-zA-Z0-9]* {
-- 
2.4.3

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


[Mesa-dev] [PATCH 03/19] mesa: Add extension tracking for arb_shader_subroutine (v2)

2015-07-09 Thread Dave Airlie
From: Chris Forbes chr...@ijw.co.nz

v2: [airlied]: merge version check update.

Reviewed-by: Tapani Pälli tapani.pa...@intel.com
Reviewed-by: Kenneth Graunke kenn...@whitecape.org
Signed-off-by: Chris Forbes chr...@ijw.co.nz
Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/main/extensions.c | 1 +
 src/mesa/main/mtypes.h | 1 +
 src/mesa/main/version.c| 2 +-
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 4176a69..24ae33e 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -154,6 +154,7 @@ static const struct extension extension_table[] = {
{ GL_ARB_shader_objects,  o(dummy_true),  
GL, 2002 },
{ GL_ARB_shader_precision,o(ARB_shader_precision),
GL, 2010 },
{ GL_ARB_shader_stencil_export,   
o(ARB_shader_stencil_export),   GL, 2009 },
+   { GL_ARB_shader_subroutine,   o(ARB_shader_subroutine),   
GLC,2010 },
{ GL_ARB_shader_texture_lod,  o(ARB_shader_texture_lod),  
GL, 2009 },
{ GL_ARB_shading_language_100,o(dummy_true),  
GLL,2003 },
{ GL_ARB_shading_language_packing,
o(ARB_shading_language_packing),GL, 2011 },
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 7b55677..a93fe94 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -3685,6 +3685,7 @@ struct gl_extensions
GLboolean ARB_shader_image_load_store;
GLboolean ARB_shader_precision;
GLboolean ARB_shader_stencil_export;
+   GLboolean ARB_shader_subroutine;
GLboolean ARB_shader_texture_lod;
GLboolean ARB_shading_language_packing;
GLboolean ARB_shading_language_420pack;
diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
index 8bc00ac..fd7ae53 100644
--- a/src/mesa/main/version.c
+++ b/src/mesa/main/version.c
@@ -309,7 +309,7 @@ compute_version(const struct gl_extensions *extensions,
  extensions-ARB_gpu_shader5 
  extensions-ARB_gpu_shader_fp64 
  extensions-ARB_sample_shading 
- false /*extensions-ARB_shader_subroutine*/ 
+ extensions-ARB_shader_subroutine 
  extensions-ARB_tessellation_shader 
  extensions-ARB_texture_buffer_object_rgb32 
  extensions-ARB_texture_cube_map_array 
-- 
2.4.3

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


[Mesa-dev] [PATCH 09/19] glsl/ir: add subroutine information storage to ir_function (v1.1)

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

We need to store two sets of info into the ir_function,
if this is a function definition with a subroutine list
(subroutine_def) or if it a subroutine prototype.

v1.1: add some more documentation.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/glsl/ir.cpp   |  4 
 src/glsl/ir.h | 16 
 src/glsl/ir_clone.cpp |  7 +++
 src/glsl/ir_print_visitor.cpp |  2 +-
 4 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
index 38a5e2a..2fbc631 100644
--- a/src/glsl/ir.cpp
+++ b/src/glsl/ir.cpp
@@ -1853,6 +1853,7 @@ static void
 steal_memory(ir_instruction *ir, void *new_ctx)
 {
ir_variable *var = ir-as_variable();
+   ir_function *fn = ir-as_function();
ir_constant *constant = ir-as_constant();
if (var != NULL  var-constant_value != NULL)
   steal_memory(var-constant_value, ir);
@@ -1860,6 +1861,9 @@ steal_memory(ir_instruction *ir, void *new_ctx)
if (var != NULL  var-constant_initializer != NULL)
   steal_memory(var-constant_initializer, ir);
 
+   if (fn != NULL  fn-subroutine_types)
+  ralloc_steal(new_ctx, fn-subroutine_types);
+
/* The components of aggregate constants are not visited by the normal
 * visitor, so steal their values by hand.
 */
diff --git a/src/glsl/ir.h b/src/glsl/ir.h
index 092c96b..b5a9e99 100644
--- a/src/glsl/ir.h
+++ b/src/glsl/ir.h
@@ -1121,6 +1121,22 @@ public:
 * List of ir_function_signature for each overloaded function with this 
name.
 */
struct exec_list signatures;
+
+   /**
+* is this function a subroutine type declaration
+* e.g. subroutine void type1(float arg1);
+*/
+   bool is_subroutine;
+
+   /**
+* is this function associated to a subroutine type
+* e.g. subroutine (type1, type2) function_name { function_body };
+* would have this flag set and num_subroutine_types 2,
+* and pointers to the type1 and type2 types.
+*/
+   bool is_subroutine_def;
+   int num_subroutine_types;
+   const struct glsl_type **subroutine_types;
 };
 
 inline const char *ir_function_signature::function_name() const
diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp
index 49834ff..bf25d6c 100644
--- a/src/glsl/ir_clone.cpp
+++ b/src/glsl/ir_clone.cpp
@@ -267,6 +267,13 @@ ir_function::clone(void *mem_ctx, struct hash_table *ht) 
const
 {
ir_function *copy = new(mem_ctx) ir_function(this-name);
 
+   copy-is_subroutine = this-is_subroutine;
+   copy-is_subroutine_def = this-is_subroutine_def;
+   copy-num_subroutine_types = this-num_subroutine_types;
+   copy-subroutine_types = ralloc_array(mem_ctx, const struct glsl_type *, 
copy-num_subroutine_types);
+   for (int i = 0; i  copy-num_subroutine_types; i++)
+ copy-subroutine_types[i] = this-subroutine_types[i];
+
foreach_in_list(const ir_function_signature, sig, this-signatures) {
   ir_function_signature *sig_copy = sig-clone(mem_ctx, ht);
   copy-add_signature(sig_copy);
diff --git a/src/glsl/ir_print_visitor.cpp b/src/glsl/ir_print_visitor.cpp
index 4cbcad4..f210175 100644
--- a/src/glsl/ir_print_visitor.cpp
+++ b/src/glsl/ir_print_visitor.cpp
@@ -229,7 +229,7 @@ void ir_print_visitor::visit(ir_function_signature *ir)
 
 void ir_print_visitor::visit(ir_function *ir)
 {
-   fprintf(f, (function %s\n, ir-name);
+   fprintf(f, (%s function %s\n, ir-is_subroutine ? subroutine : , 
ir-name);
indentation++;
foreach_in_list(ir_function_signature, sig, ir-signatures) {
   indent();
-- 
2.4.3

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


[Mesa-dev] [PATCH 01/19] mesa: Add stubs for ARB_shader_subroutine entrypoints

2015-07-09 Thread Dave Airlie
From: Chris Forbes chr...@ijw.co.nz

Reviewed-by: Tapani Pälli tapani.pa...@intel.com
Reviewed-by: Kenneth Graunke kenn...@whitecape.org
Signed-off-by: Chris Forbes chr...@ijw.co.nz
Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/main/shaderapi.c | 63 +++
 src/mesa/main/shaderapi.h | 35 ++
 2 files changed, 98 insertions(+)

diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index a4296ad..48ab217 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -1984,3 +1984,66 @@ _mesa_CreateShaderProgramv(GLenum type, GLsizei count,
 
return _mesa_create_shader_program(ctx, GL_TRUE, type, count, strings);
 }
+
+
+/**
+ * ARB_shader_subroutine
+ */
+GLint GLAPIENTRY
+_mesa_GetSubroutineUniformLocation(GLuint program, GLenum shadertype,
+   const GLchar *name)
+{
+   return -1;
+}
+
+
+GLuint GLAPIENTRY
+_mesa_GetSubroutineIndex(GLuint program, GLenum shadertype,
+ const GLchar *name)
+{
+   return GL_INVALID_INDEX;
+}
+
+
+GLvoid GLAPIENTRY
+_mesa_GetActiveSubroutineUniformiv(GLuint program, GLenum shadertype,
+   GLuint index, GLenum pname, GLint *values)
+{
+}
+
+
+GLvoid GLAPIENTRY
+_mesa_GetActiveSubroutineUniformName(GLuint program, GLenum shadertype,
+ GLuint index, GLsizei bufsize,
+ GLsizei *length, GLchar *name)
+{
+}
+
+
+GLvoid GLAPIENTRY
+_mesa_GetActiveSubroutineName(GLuint program, GLenum shadertype,
+  GLuint index, GLsizei bufsize,
+  GLsizei *length, GLchar *name)
+{
+}
+
+
+GLvoid GLAPIENTRY
+_mesa_UniformSubroutinesuiv(GLenum shadertype, GLsizei count,
+const GLuint *indices)
+{
+}
+
+
+GLvoid GLAPIENTRY
+_mesa_GetUniformSubroutineuiv(GLenum shadertype, GLint location,
+  GLuint *params)
+{
+}
+
+
+GLvoid GLAPIENTRY
+_mesa_GetProgramStageiv(GLuint program, GLenum shadertype,
+GLenum pname, GLint *values)
+{
+}
diff --git a/src/mesa/main/shaderapi.h b/src/mesa/main/shaderapi.h
index aba6d5d..eda7170 100644
--- a/src/mesa/main/shaderapi.h
+++ b/src/mesa/main/shaderapi.h
@@ -264,6 +264,41 @@ _mesa_get_program_resourceiv(struct gl_shader_program 
*shProg,
  GLsizei bufSize, GLsizei *length,
  GLint *params);
 
+/* GL_ARB_shader_subroutine */
+extern GLint GLAPIENTRY
+_mesa_GetSubroutineUniformLocation(GLuint program, GLenum shadertype,
+   const GLchar *name);
+
+extern GLuint GLAPIENTRY
+_mesa_GetSubroutineIndex(GLuint program, GLenum shadertype,
+ const GLchar *name);
+
+extern GLvoid GLAPIENTRY
+_mesa_GetActiveSubroutineUniformiv(GLuint program, GLenum shadertype,
+   GLuint index, GLenum pname, GLint *values);
+
+extern GLvoid GLAPIENTRY
+_mesa_GetActiveSubroutineUniformName(GLuint program, GLenum shadertype,
+ GLuint index, GLsizei bufsize,
+ GLsizei *length, GLchar *name);
+
+extern GLvoid GLAPIENTRY
+_mesa_GetActiveSubroutineName(GLuint program, GLenum shadertype,
+  GLuint index, GLsizei bufsize,
+  GLsizei *length, GLchar *name);
+
+extern GLvoid GLAPIENTRY
+_mesa_UniformSubroutinesuiv(GLenum shadertype, GLsizei count,
+const GLuint *indices);
+
+extern GLvoid GLAPIENTRY
+_mesa_GetUniformSubroutineuiv(GLenum shadertype, GLint location,
+  GLuint *params);
+
+extern GLvoid GLAPIENTRY
+_mesa_GetProgramStageiv(GLuint program, GLenum shadertype,
+GLenum pname, GLint *values);
+
 #ifdef __cplusplus
 }
 #endif
-- 
2.4.3

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


[Mesa-dev] [PATCH 05/19] glsl: Add extension plumbing and define for ARB_shader_subroutine

2015-07-09 Thread Dave Airlie
From: Chris Forbes chr...@ijw.co.nz

Reviewed-by: Tapani Pälli tapani.pa...@intel.com
Reviewed-by: Kenneth Graunke kenn...@whitecape.org
Signed-off-by: Chris Forbes chr...@ijw.co.nz
Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/glsl/glcpp/glcpp-parse.y| 3 +++
 src/glsl/glsl_parser_extras.cpp | 1 +
 src/glsl/glsl_parser_extras.h   | 2 ++
 src/glsl/standalone_scaffolding.cpp | 1 +
 4 files changed, 7 insertions(+)

diff --git a/src/glsl/glcpp/glcpp-parse.y b/src/glsl/glcpp/glcpp-parse.y
index a11b6b2..99b7cdf 100644
--- a/src/glsl/glcpp/glcpp-parse.y
+++ b/src/glsl/glcpp/glcpp-parse.y
@@ -2483,6 +2483,9 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t 
*parser, intmax_t versio
 
   if (extensions-ARB_shader_precision)
  add_builtin_define(parser, GL_ARB_shader_precision, 1);
+
+  if (extensions-ARB_shader_subroutine)
+ add_builtin_define(parser, GL_ARB_shader_subroutine, 1);
   }
}
 
diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
index 046d5d7..676489f 100644
--- a/src/glsl/glsl_parser_extras.cpp
+++ b/src/glsl/glsl_parser_extras.cpp
@@ -570,6 +570,7 @@ static const _mesa_glsl_extension 
_mesa_glsl_supported_extensions[] = {
EXT(ARB_shader_image_load_store,true,  false, 
ARB_shader_image_load_store),
EXT(ARB_shader_precision,   true,  false, ARB_shader_precision),
EXT(ARB_shader_stencil_export,  true,  false, 
ARB_shader_stencil_export),
+   EXT(ARB_shader_subroutine,  true,  false, 
ARB_shader_subroutine),
EXT(ARB_shader_texture_lod, true,  false, 
ARB_shader_texture_lod),
EXT(ARB_shading_language_420pack,   true,  false, 
ARB_shading_language_420pack),
EXT(ARB_shading_language_packing,   true,  false, 
ARB_shading_language_packing),
diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index 02ddbbd..726a427 100644
--- a/src/glsl/glsl_parser_extras.h
+++ b/src/glsl/glsl_parser_extras.h
@@ -462,6 +462,8 @@ struct _mesa_glsl_parse_state {
bool ARB_shader_precision_warn;
bool ARB_shader_stencil_export_enable;
bool ARB_shader_stencil_export_warn;
+   bool ARB_shader_subroutine_enable;
+   bool ARB_shader_subroutine_warn;
bool ARB_shader_texture_lod_enable;
bool ARB_shader_texture_lod_warn;
bool ARB_shading_language_420pack_enable;
diff --git a/src/glsl/standalone_scaffolding.cpp 
b/src/glsl/standalone_scaffolding.cpp
index 172c6f4..15546c2 100644
--- a/src/glsl/standalone_scaffolding.cpp
+++ b/src/glsl/standalone_scaffolding.cpp
@@ -133,6 +133,7 @@ void initialize_context_to_defaults(struct gl_context *ctx, 
gl_api api)
ctx-Extensions.ARB_sample_shading = true;
ctx-Extensions.ARB_shader_bit_encoding = true;
ctx-Extensions.ARB_shader_stencil_export = true;
+   ctx-Extensions.ARB_shader_subroutine = true;
ctx-Extensions.ARB_shader_texture_lod = true;
ctx-Extensions.ARB_shading_language_420pack = true;
ctx-Extensions.ARB_shading_language_packing = true;
-- 
2.4.3

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


[Mesa-dev] [PATCH 10/19] glsl/ir: allow ir_call to handle subroutine calling

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This adds a ir_variable which contains the subroutine uniform
and an array rvalue for the deref of that uniform, these
are stored in the ir_call and lowered later.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/glsl/ir.h | 21 -
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/src/glsl/ir.h b/src/glsl/ir.h
index b5a9e99..691c8b6 100644
--- a/src/glsl/ir.h
+++ b/src/glsl/ir.h
@@ -1708,7 +1708,18 @@ public:
ir_call(ir_function_signature *callee,
   ir_dereference_variable *return_deref,
   exec_list *actual_parameters)
-  : ir_instruction(ir_type_call), return_deref(return_deref), 
callee(callee)
+  : ir_instruction(ir_type_call), return_deref(return_deref), 
callee(callee), sub_var(NULL), array_idx(NULL)
+   {
+  assert(callee-return_type != NULL);
+  actual_parameters-move_nodes_to( this-actual_parameters);
+  this-use_builtin = callee-is_builtin();
+   }
+
+   ir_call(ir_function_signature *callee,
+  ir_dereference_variable *return_deref,
+  exec_list *actual_parameters,
+  ir_variable *var, ir_rvalue *array_idx)
+  : ir_instruction(ir_type_call), return_deref(return_deref), 
callee(callee), sub_var(var), array_idx(array_idx)
{
   assert(callee-return_type != NULL);
   actual_parameters-move_nodes_to( this-actual_parameters);
@@ -1756,6 +1767,14 @@ public:
 
/** Should this call only bind to a built-in function? */
bool use_builtin;
+
+   /*
+* ARB_shader_subroutine support -
+* the subroutine uniform variable and array index
+* rvalue to be used in the lowering pass later.
+*/
+   ir_variable *sub_var;
+   ir_rvalue *array_idx;
 };
 
 
-- 
2.4.3

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


[Mesa-dev] [PATCH 16/19] program: add subroutine uniform support (v1.1)

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

Add support for the subroutine uniform type ir-mesa.cpp

v1.1: add subroutine to int to switch

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/program/ir_to_mesa.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 0b2eb12..6ee6ee8 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -534,6 +534,7 @@ type_size(const struct glsl_type *type)
   return size;
case GLSL_TYPE_SAMPLER:
case GLSL_TYPE_IMAGE:
+   case GLSL_TYPE_SUBROUTINE:
   /* Samplers take up one slot in UNIFORMS[], but they're baked in
* at link time.
*/
@@ -1342,6 +1343,7 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
case ir_unop_dFdx_fine:
case ir_unop_dFdy_coarse:
case ir_unop_dFdy_fine:
+   case ir_unop_subroutine_to_int:
   assert(!not supported);
   break;
 
@@ -2451,6 +2453,7 @@ _mesa_associate_uniform_storage(struct gl_context *ctx,
break;
 case GLSL_TYPE_SAMPLER:
 case GLSL_TYPE_IMAGE:
+ case GLSL_TYPE_SUBROUTINE:
format = uniform_native;
columns = 1;
break;
-- 
2.4.3

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


Re: [Mesa-dev] [PATCH 0/4] fence refcnting fixes

2015-07-09 Thread Christian König

On 08.07.2015 22:34, Rob Clark wrote:

From: Rob Clark robcl...@freedesktop.org

This isn't at all clear for pipe driver writers currently, since it
is not documented anywhere.  But radeon/nouveau/llvmpipe seem to drop
the ref on the **fence passed in to pipe-flush() (if *fence!=NULL).
Freedreno/ilo/vc4 where not doing this.  Some state trackers do call
screen-fence_reference(screen, fence, NULL) before pipe-flush(),
but others do not.

Add a comment for pipe-flush() to clairify what is expected of the
driver, and fixup freedreno/ilo/vc4 to comply.

Note: that ilo/vc4 patches are untested


Oh, yes please. That also annoyed me once or twice while hacking on the 
state trackers.


Since I'm not into the drivers those changes are Acked-by: Christian 
König christian.koe...@amd.com


Do you want to take care of the state trackers as well or should I look 
into the video state trackers to fix this myself?


Regards,
Christian.



Rob Clark (4):
   gallium: clarify reference counting for fence
   freedreno: unref old fence
   ilo: unref old fence
   vc4: unref old fence

  src/gallium/drivers/freedreno/freedreno_context.c | 2 +-
  src/gallium/drivers/freedreno/freedreno_fence.c   | 2 +-
  src/gallium/drivers/ilo/ilo_context.c | 5 -
  src/gallium/drivers/ilo/ilo_screen.c  | 2 +-
  src/gallium/drivers/vc4/vc4_context.c | 3 ++-
  src/gallium/drivers/vc4/vc4_fence.c   | 2 +-
  src/gallium/include/pipe/p_context.h  | 8 +++-
  7 files changed, 17 insertions(+), 7 deletions(-)



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


Re: [Mesa-dev] [PATCH] r600g: move sampler/ubo index registers before temp reg

2015-07-09 Thread Glenn Kennard

On Thu, 09 Jul 2015 08:00:48 +0200, Dave Airlie airl...@gmail.com wrote:


From: Dave Airlie airl...@redhat.com

temp_reg needs to be last, as we increment things
away from it, otherwise on cayman some tests were overwriting
the index regs.

Fixes 2 piglit with ARB_gpu_shader5 forced on cayman.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/gallium/drivers/r600/r600_shader.c | 13 ++---
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c  
b/src/gallium/drivers/r600/r600_shader.c

index af7622e..1a72bf6 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -1931,15 +1931,14 @@ static int r600_shader_from_tgsi(struct  
r600_context *rctx,

ctx.file_offset[TGSI_FILE_IMMEDIATE] = V_SQ_ALU_SRC_LITERAL;
ctx.bc-ar_reg = ctx.file_offset[TGSI_FILE_TEMPORARY] +
ctx.info.file_max[TGSI_FILE_TEMPORARY] + 1;
+   ctx.bc-index_reg[0] = ctx.bc-ar_reg + 1;
+   ctx.bc-index_reg[1] = ctx.bc-ar_reg + 2;
+
if (ctx.type == TGSI_PROCESSOR_GEOMETRY) {
-   ctx.gs_export_gpr_treg = ctx.bc-ar_reg + 1;
-   ctx.temp_reg = ctx.bc-ar_reg + 2;
-   ctx.bc-index_reg[0] = ctx.bc-ar_reg + 3;
-   ctx.bc-index_reg[1] = ctx.bc-ar_reg + 4;
+   ctx.gs_export_gpr_treg = ctx.bc-ar_reg + 3;
+   ctx.temp_reg = ctx.bc-ar_reg + 4;
} else {
-   ctx.temp_reg = ctx.bc-ar_reg + 1;
-   ctx.bc-index_reg[0] = ctx.bc-ar_reg + 2;
-   ctx.bc-index_reg[1] = ctx.bc-ar_reg + 3;
+   ctx.temp_reg = ctx.bc-ar_reg + 3;
}
shader-max_arrays = 0;


Reviewed-by: Glenn Kennard glenn.kenn...@gmail.com
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 0/4] fence refcnting fixes

2015-07-09 Thread Rob Clark
On Thu, Jul 9, 2015 at 4:21 AM, Christian König deathsim...@vodafone.de wrote:
 On 08.07.2015 22:34, Rob Clark wrote:

 From: Rob Clark robcl...@freedesktop.org

 This isn't at all clear for pipe driver writers currently, since it
 is not documented anywhere.  But radeon/nouveau/llvmpipe seem to drop
 the ref on the **fence passed in to pipe-flush() (if *fence!=NULL).
 Freedreno/ilo/vc4 where not doing this.  Some state trackers do call
 screen-fence_reference(screen, fence, NULL) before pipe-flush(),
 but others do not.

 Add a comment for pipe-flush() to clairify what is expected of the
 driver, and fixup freedreno/ilo/vc4 to comply.

 Note: that ilo/vc4 patches are untested


 Oh, yes please. That also annoyed me once or twice while hacking on the
 state trackers.

 Since I'm not into the drivers those changes are Acked-by: Christian König
 christian.koe...@amd.com

 Do you want to take care of the state trackers as well or should I look into
 the video state trackers to fix this myself?

I guess w/ the doc change + fixing drivers, we don't strictly need to
change the other state trackers to explicitly unref their last_fence,
if that is what you had in mind?  It probably wouldn't hurt, but
shouldn't be required..

BR,
-R

 Regards,
 Christian.



 Rob Clark (4):
gallium: clarify reference counting for fence
freedreno: unref old fence
ilo: unref old fence
vc4: unref old fence

   src/gallium/drivers/freedreno/freedreno_context.c | 2 +-
   src/gallium/drivers/freedreno/freedreno_fence.c   | 2 +-
   src/gallium/drivers/ilo/ilo_context.c | 5 -
   src/gallium/drivers/ilo/ilo_screen.c  | 2 +-
   src/gallium/drivers/vc4/vc4_context.c | 3 ++-
   src/gallium/drivers/vc4/vc4_fence.c   | 2 +-
   src/gallium/include/pipe/p_context.h  | 8 +++-
   7 files changed, 17 insertions(+), 7 deletions(-)


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


Re: [Mesa-dev] [PATCH 02/11] i915; remove unused driFd variable

2015-07-09 Thread Emil Velikov
On 8 July 2015 at 18:08, Matt Turner matts...@gmail.com wrote:
 On Wed, Jul 8, 2015 at 10:07 AM, Emil Velikov emil.l.veli...@gmail.com 
 wrote:
 Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
 ---
  src/mesa/drivers/dri/i915/intel_context.c | 1 -
  src/mesa/drivers/dri/i915/intel_context.h | 2 --
  2 files changed, 3 deletions(-)

 diff --git a/src/mesa/drivers/dri/i915/intel_context.c 
 b/src/mesa/drivers/dri/i915/intel_context.c
 index 5618dcd..c780103 100644
 --- a/src/mesa/drivers/dri/i915/intel_context.c
 +++ b/src/mesa/drivers/dri/i915/intel_context.c
 @@ -428,7 +428,6 @@ intelInitContext(struct intel_context *intel,

 driContextPriv-driverPrivate = intel;
 intel-driContext = driContextPriv;
 -   intel-driFd = sPriv-fd;

 intel-gen = intelScreen-gen;

 diff --git a/src/mesa/drivers/dri/i915/intel_context.h 
 b/src/mesa/drivers/dri/i915/intel_context.h
 index 350d35d..4ec4015 100644
 --- a/src/mesa/drivers/dri/i915/intel_context.h
 +++ b/src/mesa/drivers/dri/i915/intel_context.h
 @@ -273,8 +273,6 @@ struct intel_context

 bool use_early_z;

 -   int driFd;
 -
 __DRIcontext *driContext;
 struct intel_screen *intelScreen;

 --

 s/;/:/ in the subject.

 Wow, that's some DRI1 stuff!

I suspect there is more, so if anyone is interested ;-)

 Reviewed-by: Matt Turner matts...@gmail.com

Thanks
Emil
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] New stable-branch 10.6 candidate pushed

2015-07-09 Thread Emil Velikov
Hello list,

The candidate for the Mesa 10.6.2 is now available. Currently we have:
 - 37 queued
 - 26 nominated (outstanding)
 - and 2 rejected/obsolete patches

We have a moderate list of fixes this time around, most of which in
the glsl, core mesa, and the i965  nouveau.

From a users perspective have the usual GPU lockup and incorrect
rendering patches, we revert of the use of SHA1, which was unused
and added confusing configure options/extra linking, further
libudev related fixes.

Note: The series contains three fixes which have not been nominated
but address patches that has been cherry-picked for 10.6. Namely:

commit 25daf2592c21881eed3cbe1e8439f32878b3eb2f
Author: Kenneth Graunke kenn...@whitecape.org

Revert glsl: clone inputs and outputs during linking

(cherry picked from commit 6218c68bece0cea671f2940a651119a87ab8b24e)

commit 6b6e14ac35750e0a7f8194923877a842f9a43e3f
Author: Kenneth Graunke kenn...@whitecape.org

Revert i965: Delete linked GLSL IR when using NIR.

(cherry picked from commit cae701fc8ed0faefd1cf57f6143031edcab2)

commit 5e9254194594b863f55f4efcafca7fbb5b21ec8f
Author: Neil Roberts n...@linux.intel.com

i965: Don't try to print the GLSL IR if it has been freed

(cherry picked from commit c0ca6c30eaf7f488f154c462a01a8945cb4a3103)



Take a look at section Mesa stable queue for more information.

Testing
---
The following results are against piglit 246791c51ec.


Changes - classic i965(snb)
---
Fixes:
 - glx
+ glx_arb_sync_control
   + swapbuffersmsc-divisor-zero fail  pass
   + timing -divisor 1   fail  pass
   + timing -divisor 2   fail  pass
   + timing -fullscreen -divisor 1   fail  pass
   + timing -fullscreen -divisor 2   fail  pass
   + timing -fullscreen -msc-delta 1 fail  pass
   + timing -fullscreen -msc-delta 2 fail  pass
   + timing -msc-delta 1 fail  pass
   + timing -msc-delta 2 fail  pass
   + timing -waitformsc -divisor 1   fail  pass
   + timing -waitformsc -divisor 2   fail  pass
   + timing -waitformsc -msc-delta 1 fail  pass
   + timing -waitformsc -msc-delta 2 fail  pass
 - spec
+ !opengl 1.4
   + fdo25614-genmipmap  skip  pass


Changes - swrast classic

Fixes:
 - spec
+ !opengl 1.1
   + drawbuffer-modesfail  pass
+ !opengl 1.4
   + fdo25614-genmipmap  skip  pass


Changes - gallium softpipe
--
Fixes:
 - spec
+ !opengl 1.4
   + fdo25614-genmipmap  skip  pass


Changes - gallium llvmpipe (LLVM 3.6)
-
Fixes:
 - spec
+ !opengl 1.4
   + fdo25614-genmipmap  skip  pass


Testing reports/general approval

Any testing reports (or general approval of the state of the branch)
will be greatly appreciated.


Trivial merge conflicts
---
commit cc7caf9239903ca3604e90613c4696e7c0f7b0e1
Author: Tapani Pälli tapani.pa...@intel.com

glsl: Allow dynamic sampler array indexing with GLSL ES  3.00

(cherry picked from commit edb8383c98ee23385731d0fc23a6b6673528a8ec)


commit b150817c197a8e0772114641fed3eb19284f4540
Author: Tapani Pälli tapani.pa...@intel.com

i965: use EmitNoIndirectSampler for gen  7

(cherry picked from commit 8852e26e93af1fc4b72bf9d57e847f53e1a1371b)


commit afa43fa696e7dd65ebce4c1e95892a4886d6049e
Author: Neil Roberts n...@linux.intel.com

i965/skl: Set the pulls bary bit in 3DSTATE_PS_EXTRA

(cherry picked from commit 493af150fb3b1c007d791b24dcd5ea8a92ad763c)


commit 2ca2f3701b9928374911c603178cf92da1e5167b
Author: Kenneth Graunke kenn...@whitecape.org

i965/vs: Fix matNxM vertex attributes where M != 4.

(cherry picked from commit 73d0e7f3451eaeb62ac039d2dcee1e1c6787e3db)



The plan is to have 10.6.2 this Friday(10th of July).

If you have any questions or comments that you would like to share
before the release, please go ahead.


Cheers,
Emil


Mesa stable queue
-

Nominated (26)
==

Anuj Phogat (8):
  mesa: Turn get_readpixels_transfer_ops() in to a global function
  meta: Fix transfer operations check in meta pbo path for readpixels
  mesa: Fix conditions to test signed, unsigned integer format
  mesa: Add a mesa utility function 
_mesa_need_signed_unsigned_int_conversion()
  meta: Abort meta pbo path if readpixels need signed-unsigned
  meta: Don't do fragment color clamping in case of 

Re: [Mesa-dev] [PATCH 4/4] vc4: unref old fence

2015-07-09 Thread Emil Velikov
On 9 July 2015 at 01:46, Rob Clark robdcl...@gmail.com wrote:
 From: Rob Clark robcl...@freedesktop.org

 Some, but not all, state trackers will explicitly unref (and set to
 NULL) the previous *fence before calling pipe-flush().  So driver
 should use fence_ref() which will unref the old fence if not NULL.

 Signed-off-by: Rob Clark robcl...@freedesktop.org
 ---
  src/gallium/drivers/vc4/vc4_context.c | 2 ++
  1 file changed, 2 insertions(+)

 diff --git a/src/gallium/drivers/vc4/vc4_context.c 
 b/src/gallium/drivers/vc4/vc4_context.c
 index 630f8e6..316598f 100644
 --- a/src/gallium/drivers/vc4/vc4_context.c
 +++ b/src/gallium/drivers/vc4/vc4_context.c
 @@ -103,8 +103,10 @@ vc4_pipe_flush(struct pipe_context *pctx, struct 
 pipe_fence_handle **fence,
  vc4_flush(pctx);

  if (fence) {
 +struct pipe_screen *screen = pctx-screen;
  struct vc4_fence *f = vc4_fence_create(vc4-screen,
 vc4-last_emit_seqno);
 +screen-fence_reference(screen, fence, NULL);
The order seems to be reversed comparing to the other patches that
you've sent. Is that intentional ?

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


Re: [Mesa-dev] [PATCH] i965: bump libdrm requirement to 2.4.61 and drop in-tree workaround

2015-07-09 Thread Samuel Iglesias Gonsálvez
On 08/07/15 18:57, Emil Velikov wrote:
 Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
 ---
  configure.ac | 2 +-
  src/mesa/drivers/dri/i965/intel_screen.c | 5 -
  2 files changed, 1 insertion(+), 6 deletions(-)
 
 diff --git a/configure.ac b/configure.ac
 index d819bef..eb7180b 100644
 --- a/configure.ac
 +++ b/configure.ac
 @@ -68,7 +68,7 @@ AC_SUBST([OSMESA_VERSION])
  dnl Versions for external dependencies
  LIBDRM_REQUIRED=2.4.38
  LIBDRM_RADEON_REQUIRED=2.4.56
 -LIBDRM_INTEL_REQUIRED=2.4.60
 +LIBDRM_INTEL_REQUIRED=2.4.61
  LIBDRM_NVVIEUX_REQUIRED=2.4.33
  LIBDRM_NOUVEAU_REQUIRED=2.4.62
  LIBDRM_FREEDRENO_REQUIRED=2.4.57
 diff --git a/src/mesa/drivers/dri/i965/intel_screen.c 
 b/src/mesa/drivers/dri/i965/intel_screen.c
 index c0f5c92..fd343ee 100644
 --- a/src/mesa/drivers/dri/i965/intel_screen.c
 +++ b/src/mesa/drivers/dri/i965/intel_screen.c
 @@ -1330,11 +1330,6 @@ set_max_gl_versions(struct intel_screen *screen)
 }
  }
  
 -/* drop when libdrm 2.4.61 is released */
 -#ifndef I915_PARAM_REVISION
 -#define I915_PARAM_REVISION 32
 -#endif
 -
  static int
  brw_get_revision(int fd)
  {
 

Reviewed-by: Samuel Iglesias Gonsálvez sigles...@igalia.com

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


Re: [Mesa-dev] [PATCH 03/11] radeon: remove dri_mirror state

2015-07-09 Thread Emil Velikov
On 9 July 2015 at 04:45, Michel Dänzer mic...@daenzer.net wrote:
 On 09.07.2015 02:07, Emil Velikov wrote:
 Most of the data stored(duplicated) was unused, and for the one that is
 follow the approach set by other drivers.
 This eliminates the use of legacy (dri1) types.

 The commentary below should have been after the --- separator, not in
 the actual Git commit log. With that fixed, this patch is

 Reviewed-by: Michel Dänzer michel.daen...@amd.com


 XXX: The radeon code is the only user of __DRIscreen::drm_version (the
 only __DRIversion outside of dri1 land). Should we move it into radeon
 and/or bump the min. required drm module version ?

 Moving this into radeon sounds good to me, but I'm not sure what exactly
 you mean by bumping the minimum required version, or what it's supposed
 to be good for.

 FWIW though, any code which is specific to radeon DRM major version 1
 can be removed, because that's the UMS major version.

Here is what we have atm.

radeon/r200_context.c:

if (major == 1  minor  13)
 printf(boho no hyperz for you\n)
}

if (minor =15) // major check anyone ?
 r_context.texmicrotile = true; // unused since 2009
ccf7814a315(radeon: major cleanups removing old dead codepaths.)


radeon_screen.c:

if (major = 2)
 drmCommandReadWrite(DRM_RADEON_INFO)
else
 drmCommandReadWrite(DRM_RADEON_GETPARAM)

Considering the amdgpu work (major number), I think we can just error
out if major !=2 and cleanup the above ?

Cheers,
Emil
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 03/11] radeon: remove dri_mirror state

2015-07-09 Thread Marek Olšák
major != 2 can't occur. You don't have to check the major version at
all and you can just assume it's always 2.

Marek

On Thu, Jul 9, 2015 at 2:55 PM, Emil Velikov emil.l.veli...@gmail.com wrote:
 On 9 July 2015 at 04:45, Michel Dänzer mic...@daenzer.net wrote:
 On 09.07.2015 02:07, Emil Velikov wrote:
 Most of the data stored(duplicated) was unused, and for the one that is
 follow the approach set by other drivers.
 This eliminates the use of legacy (dri1) types.

 The commentary below should have been after the --- separator, not in
 the actual Git commit log. With that fixed, this patch is

 Reviewed-by: Michel Dänzer michel.daen...@amd.com


 XXX: The radeon code is the only user of __DRIscreen::drm_version (the
 only __DRIversion outside of dri1 land). Should we move it into radeon
 and/or bump the min. required drm module version ?

 Moving this into radeon sounds good to me, but I'm not sure what exactly
 you mean by bumping the minimum required version, or what it's supposed
 to be good for.

 FWIW though, any code which is specific to radeon DRM major version 1
 can be removed, because that's the UMS major version.

 Here is what we have atm.

 radeon/r200_context.c:

 if (major == 1  minor  13)
  printf(boho no hyperz for you\n)
 }

 if (minor =15) // major check anyone ?
  r_context.texmicrotile = true; // unused since 2009
 ccf7814a315(radeon: major cleanups removing old dead codepaths.)


 radeon_screen.c:

 if (major = 2)
  drmCommandReadWrite(DRM_RADEON_INFO)
 else
  drmCommandReadWrite(DRM_RADEON_GETPARAM)

 Considering the amdgpu work (major number), I think we can just error
 out if major !=2 and cleanup the above ?

 Cheers,
 Emil
 ___
 mesa-dev mailing list
 mesa-dev@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [RFC] loader: libudev vs sysfs vs libdrm

2015-07-09 Thread Emil Velikov
On 8 July 2015 at 18:35, Eric Anholt e...@anholt.net wrote:
 Emil Velikov emil.l.veli...@gmail.com writes:

 Hello all,

 A recent patch by Chris, fixing some libudev fun in our loader, made
 me think if we can clear it up a bit.

 Having three different ways of retrieving the vendor/device ID does
 feel a bit excessive. Plus as one gets fixed others are likely to
 break - and they do.
 So here is a summary of each method, from portability POV.
  - libudev: widely common across Linux distributions (but not all).
  - sysfs: written by Gary Wong to target GNU Hurd and *BSD. The *BSD
 folk never got to using it though :-\

 Huh?  There's no sysfs on BSD.  I actually don't see a reason for this
 path to exist, unless we wanted to drop libudev entirely.  We should
 pick one of these two, certainly.

There seems to be a libudev equivalent (but not identical from our
POV) for *BSD as is some sysfs work. Don't think that either one is
baked enough atm.

  - libdrm: used as a last resource fall-back after the above two. the
 sole option used by *BSD, MacOS and Android.

 libdrm seems like a nice middle ground that can be used everywhere.
 Which begs the question: from a technical POV, is there any
 advantage/disadvantage of using one over the other ?

 This use the kernel driver name thing is a bad hack, without some
 mapping in userspace from kernel driver name to userspace driver name.
 It's a hack that non-pci are relying on so far, though.

Knowing how Winbooze has handled this policy, I agree with you here.

Yet something is amiss. Am I reading the code correctly or are the
three methods are for retrieving the vendor/device ID? The kernel
driver name does not (seem to) pay any role in determining the dri
module name. The mapping from device/vendor IDs the common code.

Thanks
Emil
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 19/19] st/mesa: enable shader subroutine

2015-07-09 Thread Roland Scheidegger
Should expose that only if hw has glsl 130 support?

Roland

Am 09.07.2015 um 09:17 schrieb Dave Airlie:
 From: Dave Airlie airl...@redhat.com
 
 I'm not sure if we shouldn't enable this everywhere
 and rip out the API checks,
 
 discuss,
 
 Signed-off-by: Dave Airlie airl...@redhat.com
 ---
  src/mesa/state_tracker/st_extensions.c | 1 +
  1 file changed, 1 insertion(+)
 
 diff --git a/src/mesa/state_tracker/st_extensions.c 
 b/src/mesa/state_tracker/st_extensions.c
 index b1057f3..3b828fa 100644
 --- a/src/mesa/state_tracker/st_extensions.c
 +++ b/src/mesa/state_tracker/st_extensions.c
 @@ -598,6 +598,7 @@ void st_init_extensions(struct pipe_screen *screen,
 extensions-ARB_half_float_vertex = GL_TRUE;
 extensions-ARB_internalformat_query = GL_TRUE;
 extensions-ARB_map_buffer_range = GL_TRUE;
 +   extensions-ARB_shader_subroutine = GL_TRUE;
 extensions-ARB_texture_border_clamp = GL_TRUE; /* XXX temp */
 extensions-ARB_texture_cube_map = GL_TRUE;
 extensions-ARB_texture_env_combine = GL_TRUE;
 

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


[Mesa-dev] [PATCH v2] i965/fs: Don't use the pixel interpolater for centroid interpolation

2015-07-09 Thread Neil Roberts
For centroid interpolation we can just directly use the values set up
in the shader payload instead of querying the pixel interpolator. To
do this we need to modify brw_compute_barycentric_interp_modes to
detect when interpolateAtCentroid is called.

v2: Rebase on top of changes to set the pulls bary bit on SKL
---

As an aside, I was deliberating over whether to call the function
set_up_blah instead of setup_blah because I think the former is more
correct. The rest of Mesa seems to use setup so maybe it's more
important to be consistent than correct.

 src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 52 +++---
 src/mesa/drivers/dri/i965/brw_wm.c   | 55 
 2 files changed, 88 insertions(+), 19 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp 
b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
index 5d1ea21..fd7f1b8 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
@@ -1238,6 +1238,25 @@ fs_visitor::emit_percomp(const fs_builder bld, const 
fs_inst inst,
}
 }
 
+/* For most messages, we need one reg of ignored data; the hardware requires
+ * mlen==1 even when there is no payload. in the per-slot offset case, we'll
+ * replace this with the proper source data.
+ */
+static void
+setup_pixel_interpolater_instruction(fs_visitor *v,
+ nir_intrinsic_instr *instr,
+ fs_inst *inst,
+ int mlen = 1)
+{
+  inst-mlen = mlen;
+  inst-regs_written = 2 * v-dispatch_width / 8;
+  inst-pi_noperspective = instr-variables[0]-var-data.interpolation ==
+   INTERP_QUALIFIER_NOPERSPECTIVE;
+
+  assert(v-stage == MESA_SHADER_FRAGMENT);
+  ((struct brw_wm_prog_data *) v-prog_data)-pulls_bary = true;
+}
+
 void
 fs_visitor::nir_emit_intrinsic(const fs_builder bld, nir_intrinsic_instr 
*instr)
 {
@@ -1482,25 +1501,23 @@ fs_visitor::nir_emit_intrinsic(const fs_builder bld, 
nir_intrinsic_instr *instr
case nir_intrinsic_interp_var_at_centroid:
case nir_intrinsic_interp_var_at_sample:
case nir_intrinsic_interp_var_at_offset: {
-  assert(stage == MESA_SHADER_FRAGMENT);
-
-  ((struct brw_wm_prog_data *) prog_data)-pulls_bary = true;
-
   fs_reg dst_xy = bld.vgrf(BRW_REGISTER_TYPE_F, 2);
 
-  /* For most messages, we need one reg of ignored data; the hardware
-   * requires mlen==1 even when there is no payload. in the per-slot
-   * offset case, we'll replace this with the proper source data.
-   */
   fs_reg src = vgrf(glsl_type::float_type);
-  int mlen = 1; /* one reg unless overriden */
   fs_inst *inst;
 
   switch (instr-intrinsic) {
-  case nir_intrinsic_interp_var_at_centroid:
- inst = bld.emit(FS_OPCODE_INTERPOLATE_AT_CENTROID,
- dst_xy, src, fs_reg(0u));
+  case nir_intrinsic_interp_var_at_centroid: {
+ enum brw_wm_barycentric_interp_mode interp_mode;
+ if (instr-variables[0]-var-data.interpolation ==
+ INTERP_QUALIFIER_NOPERSPECTIVE)
+interp_mode = BRW_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC;
+ else
+interp_mode = BRW_WM_PERSPECTIVE_CENTROID_BARYCENTRIC;
+ uint8_t reg = payload.barycentric_coord_reg[interp_mode];
+ dst_xy = fs_reg(brw_vec16_grf(reg, 0));
  break;
+  }
 
   case nir_intrinsic_interp_var_at_sample: {
  /* XXX: We should probably handle non-constant sample id's */
@@ -1509,6 +1526,7 @@ fs_visitor::nir_emit_intrinsic(const fs_builder bld, 
nir_intrinsic_instr *instr
  unsigned msg_data = const_sample ? const_sample-i[0]  4 : 0;
  inst = bld.emit(FS_OPCODE_INTERPOLATE_AT_SAMPLE, dst_xy, src,
  fs_reg(msg_data));
+ setup_pixel_interpolater_instruction(this, instr, inst);
  break;
   }
 
@@ -1521,6 +1539,7 @@ fs_visitor::nir_emit_intrinsic(const fs_builder bld, 
nir_intrinsic_instr *instr
 
 inst = bld.emit(FS_OPCODE_INTERPOLATE_AT_SHARED_OFFSET, dst_xy, 
src,
 fs_reg(off_x | (off_y  4)));
+setup_pixel_interpolater_instruction(this, instr, inst);
  } else {
 src = vgrf(glsl_type::ivec2_type);
 fs_reg offset_src = retype(get_nir_src(instr-src[0]),
@@ -1550,9 +1569,10 @@ fs_visitor::nir_emit_intrinsic(const fs_builder bld, 
nir_intrinsic_instr *instr
bld.SEL(offset(src, bld, i), itemp, fs_reg(7)));
 }
 
-mlen = 2 * dispatch_width / 8;
 inst = bld.emit(FS_OPCODE_INTERPOLATE_AT_PER_SLOT_OFFSET, dst_xy, 
src,
 fs_reg(0u));
+setup_pixel_interpolater_instruction(this, instr, inst,
+ 2 * dispatch_width / 8);
  }
  break;
   }
@@ -1561,12 +1581,6 @@ 

Re: [Mesa-dev] [RFC] loader: libudev vs sysfs vs libdrm

2015-07-09 Thread Emil Velikov
On 8 July 2015 at 18:55, Axel Davy axel.d...@ens.fr wrote:
 On 08/07/2015 00:15, Emil Velikov wrote :



 Can anyone shed a light/cast their 2c ?

 Thanks
 Emil
 ___


 The DRI3/Wayland/Gallium Nine DRI_PRIME path uses libudev,
 and I'm not sure it could work without.

 It is based on the ID_PATH_TAG advertised by udev with the device.

 Perhaps there is another way to compute that tag though.

Yakes forgot about that one. From a quick look we can (I know it feels
durty) use readlink(
/sys/dev/char/$(major):$(minor)).

Everything seems to be there - bus type and exact location of the
device on the bus. It's limited to sysfs users, but they are more than
the libudev ones (perhaps not by much). How does that sound ?

Cheers,
Emil
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 03/11] radeon: remove dri_mirror state

2015-07-09 Thread Emil Velikov
On 9 July 2015 at 14:16, Marek Olšák mar...@gmail.com wrote:
 major != 2 can't occur. You don't have to check the major version at
 all and you can just assume it's always 2.

That's even better than expected. Thanks !

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


Re: [Mesa-dev] [PATCH 2/2] i965: Support importing R8 and GR88 dma_bufs

2015-07-09 Thread Emil Velikov
On 9 July 2015 at 09:39, Chad Versace chad.vers...@intel.com wrote:
 EGL_EXT_image_dma_buf_import now supports those formats.

Do I have an old version of it (v6) or I simply cannot see those listed ?

Thanks
Emil
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [RFC] Compatibility between old dri modules and new loaders, and vice verse

2015-07-09 Thread Emil Velikov
On 30 June 2015 at 16:29, Emil Velikov emil.l.veli...@gmail.com wrote:
 On 22 June 2015 at 23:19, Dave Airlie airl...@gmail.com wrote:
 On 23 June 2015 at 08:16, Ian Romanick i...@freedesktop.org wrote:
 On 06/22/2015 11:54 AM, Dave Airlie wrote:

 As kindly hinted by Marek, currently we do have a wide selection of
 supported dri  loader combinations.

 Although we like to think that things never break, we have to admit
 that not many of us test every possible combinations of dri modules
 and loaders. With the chances getting smaller as the time gap (age)
 between the two increases. As such I would like to ask if we're
 interested in gradually depreciating as the gap grows beyond X years.

 The rough idea that I have in my mind is:
 - Check for obsolete extensions (requirements for such) - both in the
 dri modules and the loaders (including the xserver).
 - Add some WARN messages (You're using an old loader/DRI module.
 Update to XXX or later) when such code path is hit.
 - After X mesa releases, we remove the dri extension from the
 module(s) and bump the requirement(s) in the loader(s).

 And now the more important question why ?
  - Very rarely tested and not actively supported - if it works it
 works, we only cover one stable branch.
  - Having a quick look at the the if extension  extension.version
 = y maze does leave most of us speechless.
  - Will allow us to start removing a few of the nasty quirks/hacks
 that we currently have laying around.

 Worth mentioning:
  - Depreciation period will be based on the longest time frame set by
 LTS versions of distros. For example if Debian A ships X and mesa 3
 years apart, while Ubuntu does is ~2.5 and RedHat ~2.8, we'll stick
 with 3 years.
  - libGL dri1 support... it's been almost four years since the removal
 of the dri1 modules. Since then the only activity that I've noticed by
 Connor Behan on the r128 front. Although it seems that he has covered
 the ddx and is just looking at the kernel side of things. Should we
 consider mesa X (10.6 ?) as the last one that supports such old
 modules in it's libGL and give it a much needed cleanup ?


 How would people feel about this - do we have any strong ack/nack
 about the idea ? Are there many people/companies that support distros
 where the xserver  mesa gap is over, say 2 years ?

 We still ship 7.11 based dri1 drivers in RHEL6, and there is still a
 chance of us rebasing to newer Mesa in that depending on schedules.

 ajax might have a different opinion, on how likely that is, but
 that would be at least another year from now where we'd want DRI1
 to work.

 OK, so DRI1 support for libGL is here to say (a little bit more).

 A time line would be good.  I think it will take a fair amount of time
 to get a new loaderdriver interface in order.  If we can't change
 anything for two years, then there's not a lot of point to thinking
 about it now.  If it's a year or less away, that's a different story.

 The other possibility would be for RHEL to ship more than one libGL...
 one for DRI1 drivers and one for everything else.  I don't know how
 horrible that would be.

 That would worse than impossible, it's bad enough nvidia overwrite
 libGL I don't want us to do it as well to ourselves :-)

 Perhaps we can think about new interface when the vendor neutral GL
 comes around. Until then we can try cleaning up the existing code ?

 There is some ~120 lines of spaghetti code that we can nuke from
 libEGL/libgbm, not to mention
  - libGL could shed a similar amount
  - we can drop the nasty symbol hacks - dlopen(libGL/libglapi.so, RTLD_GLOBAL)
  - replace the explicit glFlush from libEGL with flush_with_flags()
  - remove unused extensions in the DRI modules.

 To iterate, the above proposal is to remove support for things that
 barely anyone uses nowadays - i.e. mixing dri modules with loader(s)
 that are couple of years apart. Alternatively can someone come forward
 if they're using/testing/supporting such setups (barring DRI1) ?

Anyone ? For further enjoyment, Boyan has pointed out that the
systemTimeExtension has found its way into glx/dri{sw,2,3}.
I'm suspecting that this DRI1 extension has been blindly copy/pasted
around it never had any users outside of the old dri1 modules.

Cheers,
Emil
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] i965/fs: Reimplement nir_op_uadd_carry and _usub_borrow without accumulator.

2015-07-09 Thread Ilia Mirkin
FYI there's already a lowering pass that does this in the GLSL IR
(CARRY_TO_ARITH in lower_instructions). Perhaps the right place to do
this is NIR though, just wanted to let you know.

On Thu, Jul 9, 2015 at 3:51 PM, Francisco Jerez curroje...@riseup.net wrote:
 This gets rid of two no16() fall-backs and should allow better
 scheduling of the generated IR.  There are no uses of usubBorrow() or
 uaddCarry() in shader-db so no changes are expected.  However the
 arb_gpu_shader5/execution/built-in-functions/fs-usubBorrow and
 arb_gpu_shader5/execution/built-in-functions/fs-uaddCarry piglit
 tests go from 40 to 28 instructions.  The reason is that the plain ADD
 instruction can easily be CSE'ed with the original addition, and the
 negation can easily be propagated into the source modifier of another
 instruction, so effectively both operations can be performed with just
 one instruction.

 No piglit regressions.
 ---
  src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 33 
 +---
  1 file changed, 13 insertions(+), 20 deletions(-)

 diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp 
 b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
 index 6d9e9d3..3b6aa0a 100644
 --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
 +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
 @@ -829,29 +829,22 @@ fs_visitor::nir_emit_alu(const fs_builder bld, 
 nir_alu_instr *instr)
bld.emit(SHADER_OPCODE_INT_QUOTIENT, result, op[0], op[1]);
break;

 -   case nir_op_uadd_carry: {
 -  if (devinfo-gen = 7)
 - no16(SIMD16 explicit accumulator operands unsupported\n);
 -
 -  struct brw_reg acc = retype(brw_acc_reg(dispatch_width),
 -  BRW_REGISTER_TYPE_UD);
 -
 -  bld.ADDC(bld.null_reg_ud(), op[0], op[1]);
 -  bld.MOV(result, fs_reg(acc));
 +   case nir_op_uadd_carry:
 +  /* Use signed operands for the ADD to be easily CSE'ed with the 
 original
 +   * addition (e.g. in case we're implementing the uaddCarry() GLSL
 +   * built-in).
 +   */
 +  bld.ADD(result, retype(op[0], BRW_REGISTER_TYPE_D),
 +  retype(op[1], BRW_REGISTER_TYPE_D));
 +  bld.CMP(result, retype(result, BRW_REGISTER_TYPE_UD), op[0],
 +  BRW_CONDITIONAL_L);
 +  bld.MOV(result, negate(result));
break;
 -   }

 -   case nir_op_usub_borrow: {
 -  if (devinfo-gen = 7)
 - no16(SIMD16 explicit accumulator operands unsupported\n);
 -
 -  struct brw_reg acc = retype(brw_acc_reg(dispatch_width),
 -  BRW_REGISTER_TYPE_UD);
 -
 -  bld.SUBB(bld.null_reg_ud(), op[0], op[1]);
 -  bld.MOV(result, fs_reg(acc));
 +   case nir_op_usub_borrow:
 +  bld.CMP(result, op[0], op[1], BRW_CONDITIONAL_L);
 +  bld.MOV(result, negate(result));
break;
 -   }

 case nir_op_umod:
bld.emit(SHADER_OPCODE_INT_REMAINDER, result, op[0], op[1]);
 --
 2.4.3

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


Re: [Mesa-dev] [RFC] gallium: add interface for writable shader images

2015-07-09 Thread Marek Olšák
I'd like to discuss one more thing that will affect whether image
slots will be global (shared by all shaders) or not.

Which image unit an image uniform uses is not a compile-time thing,
but it's specified later using glUniform1i. That means we need a
per-shader table that maps image uniforms to global image units. One
possible solution is to add this pipe_context function:

void (*set_shader_image_mapping)(
   struct pipe_context *, unsigned shader,
   unsigned start_decl_index, unsigned count,
   unsigned *decl_to_slot_mapping);

This is only required if the shader image slots are global and not
per-shader. (if they are per-shader, st/mesa can reorder the slots for
each shader independently just like it already does for textures and
UBOs) Shader storage buffer objects suffer from the same issue. Atomic
counters don't.

Therefore, image slots must be per-shader (like sampler slots) to
avoid this craziness and keep things simple.

Marek



On Tue, Jul 7, 2015 at 10:49 PM, Roland Scheidegger srol...@vmware.com wrote:
 Am 07.07.2015 um 22:35 schrieb Jose Fonseca:
 On 07/07/15 21:28, Ilia Mirkin wrote:
 On Tue, Jul 7, 2015 at 4:24 PM, Jose Fonseca jfons...@vmware.com wrote:
 I'm not experienced with the semantics around resources that can be
 read/written by shaders, so I can't really make educated comments.

 But overall this looks good to me FWIW.

 On 05/07/15 14:25, Marek Olšák wrote:

 From: Marek Olšák marek.ol...@amd.com

 Other approaches are being considered:

 1) Don't use resource wrappers (views) and pass all view parameters
  (format, layer range, level) to set_shader_images just like
  set_vertex_buffers, set_constant_buffer, or even
 glBindImageTexture
 do.


 I don't know how much pipe drivers leverage this nowadays, but these
 structures are convenient placeholders for driver data, particular
 when they
 don't support something (e.g., a certain format, or need some
 swizzling),
 natively.


 2) Use pipe_sampler_view instead of pipe_image_view,
  and maybe even use set_sampler_views instead of set_shader_images.
  set_sampler_views would have to use start_slot =
 PIPE_MAX_SAMPLERS
 for
  all writable images to allow for OpenGL textures in the lower
 slots.


 If pipe_sampler_view  and pipe_image_view are the same, we could
 indeed use
 one structure for both.  While still keeping the separate
 create/bind/destroy functions.

 The big difference is that a sampler view has a first/last layer and
 first/last level, while image views are more like surfaces which just
 have the one of each. But they also need a byte range for buffer
 images.

 D3D11_TEX2D_ARRAY_UAV allows to specify first/last layer
 https://msdn.microsoft.com/en-us/library/windows/desktop/ff476242.aspx ,
 so it sounds that once pipe_image_view is updated to handle D3D11, the
 difference would reduce to the absence of last_level

 Of course we could just ignore that and guarantee that first==last for
 images.

 Yes, it might not be a bad idea.


 You could of course argue then isn't it really more like pipe_surface?
 At least in d3d11 clearly they are much closer in concept to rts. The
 actual structures are of course mostly the same in gallium, the
 differences boil down to pipe_surface having (long obsolete)
 width/height parameters and a writable flag, whereas sampler views
 instead have swizzling fields (I don't think they'd have any use for
 this), support multiple levels (again, not needed for shader images /
 uavs), and have a target parameter (in d3d10, rts actually have a target
 parameter too, but it is of no practical consequence, hence there was no
 need for that in gallium - I'm not sure if it would be required for
 shader images / uavs, uavs certainly have such target parameter too but
 I'm not sure it matters).
 But in any case, I'm pretty impartial to what structure is used, as long
 as it is created/destroyed separately.

 Roland

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


Re: [Mesa-dev] [PATCH 09/19] glsl/ir: add subroutine information storage to ir_function (v1.1)

2015-07-09 Thread Chris Forbes
Do you really need is_subroutine_def ? It seems redundant with
num_subroutine_types0.

On Thu, Jul 9, 2015 at 7:17 PM, Dave Airlie airl...@gmail.com wrote:
 From: Dave Airlie airl...@redhat.com

 We need to store two sets of info into the ir_function,
 if this is a function definition with a subroutine list
 (subroutine_def) or if it a subroutine prototype.

 v1.1: add some more documentation.

 Signed-off-by: Dave Airlie airl...@redhat.com
 ---
  src/glsl/ir.cpp   |  4 
  src/glsl/ir.h | 16 
  src/glsl/ir_clone.cpp |  7 +++
  src/glsl/ir_print_visitor.cpp |  2 +-
  4 files changed, 28 insertions(+), 1 deletion(-)

 diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
 index 38a5e2a..2fbc631 100644
 --- a/src/glsl/ir.cpp
 +++ b/src/glsl/ir.cpp
 @@ -1853,6 +1853,7 @@ static void
  steal_memory(ir_instruction *ir, void *new_ctx)
  {
 ir_variable *var = ir-as_variable();
 +   ir_function *fn = ir-as_function();
 ir_constant *constant = ir-as_constant();
 if (var != NULL  var-constant_value != NULL)
steal_memory(var-constant_value, ir);
 @@ -1860,6 +1861,9 @@ steal_memory(ir_instruction *ir, void *new_ctx)
 if (var != NULL  var-constant_initializer != NULL)
steal_memory(var-constant_initializer, ir);

 +   if (fn != NULL  fn-subroutine_types)
 +  ralloc_steal(new_ctx, fn-subroutine_types);
 +
 /* The components of aggregate constants are not visited by the normal
  * visitor, so steal their values by hand.
  */
 diff --git a/src/glsl/ir.h b/src/glsl/ir.h
 index 092c96b..b5a9e99 100644
 --- a/src/glsl/ir.h
 +++ b/src/glsl/ir.h
 @@ -1121,6 +1121,22 @@ public:
  * List of ir_function_signature for each overloaded function with this 
 name.
  */
 struct exec_list signatures;
 +
 +   /**
 +* is this function a subroutine type declaration
 +* e.g. subroutine void type1(float arg1);
 +*/
 +   bool is_subroutine;
 +
 +   /**
 +* is this function associated to a subroutine type
 +* e.g. subroutine (type1, type2) function_name { function_body };
 +* would have this flag set and num_subroutine_types 2,
 +* and pointers to the type1 and type2 types.
 +*/
 +   bool is_subroutine_def;
 +   int num_subroutine_types;
 +   const struct glsl_type **subroutine_types;
  };

  inline const char *ir_function_signature::function_name() const
 diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp
 index 49834ff..bf25d6c 100644
 --- a/src/glsl/ir_clone.cpp
 +++ b/src/glsl/ir_clone.cpp
 @@ -267,6 +267,13 @@ ir_function::clone(void *mem_ctx, struct hash_table *ht) 
 const
  {
 ir_function *copy = new(mem_ctx) ir_function(this-name);

 +   copy-is_subroutine = this-is_subroutine;
 +   copy-is_subroutine_def = this-is_subroutine_def;
 +   copy-num_subroutine_types = this-num_subroutine_types;
 +   copy-subroutine_types = ralloc_array(mem_ctx, const struct glsl_type *, 
 copy-num_subroutine_types);
 +   for (int i = 0; i  copy-num_subroutine_types; i++)
 + copy-subroutine_types[i] = this-subroutine_types[i];
 +
 foreach_in_list(const ir_function_signature, sig, this-signatures) {
ir_function_signature *sig_copy = sig-clone(mem_ctx, ht);
copy-add_signature(sig_copy);
 diff --git a/src/glsl/ir_print_visitor.cpp b/src/glsl/ir_print_visitor.cpp
 index 4cbcad4..f210175 100644
 --- a/src/glsl/ir_print_visitor.cpp
 +++ b/src/glsl/ir_print_visitor.cpp
 @@ -229,7 +229,7 @@ void ir_print_visitor::visit(ir_function_signature *ir)

  void ir_print_visitor::visit(ir_function *ir)
  {
 -   fprintf(f, (function %s\n, ir-name);
 +   fprintf(f, (%s function %s\n, ir-is_subroutine ? subroutine : , 
 ir-name);
 indentation++;
 foreach_in_list(ir_function_signature, sig, ir-signatures) {
indent();
 --
 2.4.3

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


Re: [Mesa-dev] [RFC] loader: libudev vs sysfs vs libdrm

2015-07-09 Thread Emil Velikov
On 09/07/15 15:40, Axel Davy wrote:
 On 09/07/2015 15:33, Emil Velikov wrote :

 Yakes forgot about that one. From a quick look we can (I know it feels
 durty) use readlink(
 /sys/dev/char/$(major):$(minor)).

 Everything seems to be there - bus type and exact location of the
 device on the bus. It's limited to sysfs users, but they are more than
 the libudev ones (perhaps not by much). How does that sound ?

 Cheers,
 Emil

 The idea behind using udev for the tag was that arbitrary tag could be
 used,
 especially to identify usb devices.
 
So avoid breaking peoples' setup the above example can be used to
produce the very same tag(s). Regardles if it's a device on the pci or
usb bus. Speaking of usb, are there any devices supported with upstream
mesa ?

-Emil

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


Re: [Mesa-dev] [RFC] gallium: add interface for writable shader images

2015-07-09 Thread Ilia Mirkin
On Thu, Jul 9, 2015 at 5:05 PM, Marek Olšák mar...@gmail.com wrote:
 I'd like to discuss one more thing that will affect whether image
 slots will be global (shared by all shaders) or not.

 Which image unit an image uniform uses is not a compile-time thing,
 but it's specified later using glUniform1i. That means we need a
 per-shader table that maps image uniforms to global image units. One
 possible solution is to add this pipe_context function:

 void (*set_shader_image_mapping)(
struct pipe_context *, unsigned shader,
unsigned start_decl_index, unsigned count,
unsigned *decl_to_slot_mapping);

 This is only required if the shader image slots are global and not
 per-shader. (if they are per-shader, st/mesa can reorder the slots for
 each shader independently just like it already does for textures and
 UBOs) Shader storage buffer objects suffer from the same issue. Atomic
 counters don't.

 Therefore, image slots must be per-shader (like sampler slots) to
 avoid this craziness and keep things simple.

I think that's reasonable. The image slots can be fixed at
compile-time (like sampler slots), and we can just stick the right
images into the right places. But in order to do that, we need the
per-stage mapping, so making it like sampler views seems reasonable.

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


[Mesa-dev] [PATCH 4/4] droi/common: remove unused drm_version variable

2015-07-09 Thread Emil Velikov
As of last commit the only user of it (radeon/r200) no longer uses it.
As such let's remove it and cleanup the nasty hacks that we had in place
to support this.

Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
---
 configure.ac| 21 -
 src/mesa/drivers/dri/common/Android.mk  |  5 -
 src/mesa/drivers/dri/common/Makefile.am |  7 ---
 src/mesa/drivers/dri/common/SConscript  |  2 --
 src/mesa/drivers/dri/common/dri_util.c  | 15 ---
 src/mesa/drivers/dri/common/dri_util.h  |  5 -
 6 files changed, 55 deletions(-)

diff --git a/configure.ac b/configure.ac
index 98c57c3..9ffd69d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1375,26 +1375,6 @@ if test x$enable_dri = xyes; then
  [AC_MSG_ERROR([Expat library required for DRI not 
found])])
  EXPAT_LIBS=-lexpat])
 
-DRICOMMON_NEED_LIBDRM=no
-# If we are building any DRI driver other than swrast.
-if test -n $with_dri_drivers; then
-if test x$with_dri_drivers != xswrast; then
-# ... libdrm is required
-if test x$have_libdrm != xyes; then
-AC_MSG_ERROR([DRI drivers requires libdrm = $LIBDRM_REQUIRED])
-fi
-DRICOMMON_NEED_LIBDRM=yes
-fi
-fi
-
-# If we're building any gallium DRI driver other than swrast
-if test -n $with_gallium_drivers -a x$DRICOMMON_NEED_LIBDRM = xno; then
-if test x$with_gallium_drivers != xswrast; then
-# ... build a libdrm aware dricommon
-DRICOMMON_NEED_LIBDRM=yes
-fi
-fi
-
 # put all the necessary libs together
 DRI_LIB_DEPS=$DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIBS -lm 
$PTHREAD_LIBS $DLOPEN_LIBS
 fi
@@ -2283,7 +2263,6 @@ fi
 
 AC_SUBST([ELF_LIB])
 
-AM_CONDITIONAL(DRICOMMON_NEED_LIBDRM, test x$DRICOMMON_NEED_LIBDRM = xyes)
 AM_CONDITIONAL(HAVE_LIBDRM, test x$have_libdrm = xyes)
 AM_CONDITIONAL(HAVE_X11_DRIVER, test x$enable_xlib_glx = xyes)
 AM_CONDITIONAL(HAVE_OSMESA, test x$enable_osmesa = xyes)
diff --git a/src/mesa/drivers/dri/common/Android.mk 
b/src/mesa/drivers/dri/common/Android.mk
index 6e29baf..f1a7330 100644
--- a/src/mesa/drivers/dri/common/Android.mk
+++ b/src/mesa/drivers/dri/common/Android.mk
@@ -43,11 +43,6 @@ LOCAL_EXPORT_C_INCLUDE_DIRS := \
 $(LOCAL_PATH) \
 $(intermediates)
 
-ifneq ($(filter-out swrast,$(MESA_GPU_DRIVERS)),)
-LOCAL_CFLAGS := -DHAVE_LIBDRM
-LOCAL_SHARED_LIBRARIES := libdrm
-endif
-
 LOCAL_SRC_FILES := \
$(DRI_COMMON_FILES) \
$(XMLCONFIG_FILES)
diff --git a/src/mesa/drivers/dri/common/Makefile.am 
b/src/mesa/drivers/dri/common/Makefile.am
index ee6c691..91ce43d 100644
--- a/src/mesa/drivers/dri/common/Makefile.am
+++ b/src/mesa/drivers/dri/common/Makefile.am
@@ -53,10 +53,3 @@ libdri_test_stubs_la_CFLAGS = $(AM_CFLAGS) -DNO_MAIN
 libmegadriver_stub_la_SOURCES = $(megadriver_stub_FILES)
 
 sysconf_DATA = drirc
-
-if DRICOMMON_NEED_LIBDRM
-AM_CFLAGS += $(LIBDRM_CFLAGS)
-libdricommon_la_LIBADD = $(LIBDRM_LIBS)
-else
-AM_CFLAGS += -UHAVE_LIBDRM
-endif
diff --git a/src/mesa/drivers/dri/common/SConscript 
b/src/mesa/drivers/dri/common/SConscript
index adaac29..52d201f 100644
--- a/src/mesa/drivers/dri/common/SConscript
+++ b/src/mesa/drivers/dri/common/SConscript
@@ -32,8 +32,6 @@ drienv.AppendUnique(LIBS = [
 'expat',
 ])
 
-drienv.PkgUseModules('DRM')
-
 sources = drienv.ParseSourceList('Makefile.sources', ['DRI_COMMON_FILES', 
'XMLCONFIG_FILES' ])
 
 dri_common = drienv.ConvenienceLibrary(
diff --git a/src/mesa/drivers/dri/common/dri_util.c 
b/src/mesa/drivers/dri/common/dri_util.c
index 100a727..884a7e0 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -40,9 +40,6 @@
 
 
 #include stdbool.h
-#ifdef HAVE_LIBDRM
-#include xf86drm.h
-#endif
 #include dri_util.h
 #include utils.h
 #include xmlpool.h
@@ -137,18 +134,6 @@ driCreateNewScreen2(int scrn, int fd,
 
 setupLoaderExtensions(psp, extensions);
 
-#ifdef HAVE_LIBDRM
-if (fd != -1) {
-   drmVersionPtr version = drmGetVersion(fd);
-   if (version) {
-  psp-drm_version.major = version-version_major;
-  psp-drm_version.minor = version-version_minor;
-  psp-drm_version.patch = version-version_patchlevel;
-  drmFreeVersion(version);
-   }
-}
-#endif
-
 psp-loaderPrivate = data;
 
 psp-extensions = emptyExtensionList;
diff --git a/src/mesa/drivers/dri/common/dri_util.h 
b/src/mesa/drivers/dri/common/dri_util.h
index 1138bf1..6987f55 100644
--- a/src/mesa/drivers/dri/common/dri_util.h
+++ b/src/mesa/drivers/dri/common/dri_util.h
@@ -149,11 +149,6 @@ struct __DRIscreenRec {
 int fd;
 
 /**
- * DRM (kernel module) version information.
- */
-__DRIversion drm_version;
-
-/**
  * Device-dependent private information (not stored in the SAREA).
  * 
  * This pointer is never touched by the DRI layer.
-- 
2.4.5


[Mesa-dev] [PATCH v2] configure.ac: do not set HAVE_DRI(23) when libdrm is missing

2015-07-09 Thread Emil Velikov
These conditionals are used to guard both dri modules and loader(s).

Currently if we try to build the gallium swrast dri module (without glx)
on a system that's missing libdrm the build will fail.

v2: Make sure we assign prior to checking the have_libdrm variable.

Cc: 10.6 mesa-sta...@lists.freedesktop.org
Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
---
 configure.ac | 18 +-
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/configure.ac b/configure.ac
index eb7180b..98c57c3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -911,6 +911,13 @@ fi
 AM_CONDITIONAL(HAVE_DRI_GLX, test x$enable_glx = xyes -a \
   x$enable_dri = xyes)
 
+# Check for libdrm
+PKG_CHECK_MODULES([LIBDRM], [libdrm = $LIBDRM_REQUIRED],
+  [have_libdrm=yes], [have_libdrm=no])
+if test x$have_libdrm = xyes; then
+   DEFINES=$DEFINES -DHAVE_LIBDRM
+fi
+
 # Select which platform-dependent DRI code gets built
 case $host_os in
 darwin*)
@@ -923,8 +930,8 @@ esac
 
 AM_CONDITIONAL(HAVE_DRICOMMON, test x$enable_dri = xyes )
 AM_CONDITIONAL(HAVE_DRISW, test x$enable_dri = xyes )
-AM_CONDITIONAL(HAVE_DRI2, test x$enable_dri = xyes -a x$dri_platform = 
xdrm )
-AM_CONDITIONAL(HAVE_DRI3, test x$enable_dri3 = xyes -a x$dri_platform = 
xdrm )
+AM_CONDITIONAL(HAVE_DRI2, test x$enable_dri = xyes -a x$dri_platform = 
xdrm -a x$have_libdrm = xyes )
+AM_CONDITIONAL(HAVE_DRI3, test x$enable_dri3 = xyes -a x$dri_platform = 
xdrm -a x$have_libdrm = xyes )
 AM_CONDITIONAL(HAVE_APPLEDRI, test x$enable_dri = xyes -a x$dri_platform = 
xapple )
 
 AC_ARG_ENABLE([shared-glapi],
@@ -1112,13 +1119,6 @@ if test x$with_sha1 = x; then
 fi
 AM_CONDITIONAL([ENABLE_SHADER_CACHE], [test x$enable_shader_cache = xyes])
 
-# Check for libdrm
-PKG_CHECK_MODULES([LIBDRM], [libdrm = $LIBDRM_REQUIRED],
-  [have_libdrm=yes], [have_libdrm=no])
-if test x$have_libdrm = xyes; then
-   DEFINES=$DEFINES -DHAVE_LIBDRM
-fi
-
 case $host_os in
 linux*)
 need_pci_id=yes ;;
-- 
2.4.5

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


Re: [Mesa-dev] [PATCH 2/2] i965: Support importing R8 and GR88 dma_bufs

2015-07-09 Thread Emil Velikov
On 9 July 2015 at 21:21, Chad Versace chad.vers...@intel.com wrote:
 On Thu 09 Jul 2015, Emil Velikov wrote:
 On 9 July 2015 at 09:39, Chad Versace chad.vers...@intel.com wrote:
  EGL_EXT_image_dma_buf_import now supports those formats.
 
 Do I have an old version of it (v6) or I simply cannot see those listed ?

 I should have been more clear when I said EGL_EXT_image_dma_buf_import
 now supports those formats. I meant now supports those formats as of
 the previous patch.

 The EGL_EXT_image_dma_buf_import spec itself lists no DRM formats. v6 of
 the spec refers to drm_fourcc.h for formats by saying this:

 * EGL_LINUX_DRM_FOURCC_EXT: The pixel format of the buffer, as
   specified by drm_fourcc.h and used as the pixel_format parameter of
   the drm_mode_fb_cmd2 ioctl.
I was blindly searching for DRI_IMAGE_FOURCC, silly me. Thank you for
kindly pointing me in the correct direction.

Afaics Gwenole sent out an identical set of patches ~an year ago, and
they seems to have fallen through the cracks.

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


Re: [Mesa-dev] [PATCH] i965/fs: Reimplement nir_op_uadd_carry and _usub_borrow without accumulator.

2015-07-09 Thread Francisco Jerez
Ilia Mirkin imir...@alum.mit.edu writes:

 FYI there's already a lowering pass that does this in the GLSL IR
 (CARRY_TO_ARITH in lower_instructions). Perhaps the right place to do
 this is NIR though, just wanted to let you know.

Ah, I wasn't aware of that flag, that seems even better.  I just tried
it and it seems to generate one instruction more per op than my assembly
code (apparently because our implementation of b2i is suboptimal, could
probably be fixed), but it would also work to get rid of the no16()
calls, which is all I care about right now.

I'll resend using your approach tomorrow.

 On Thu, Jul 9, 2015 at 3:51 PM, Francisco Jerez curroje...@riseup.net wrote:
 This gets rid of two no16() fall-backs and should allow better
 scheduling of the generated IR.  There are no uses of usubBorrow() or
 uaddCarry() in shader-db so no changes are expected.  However the
 arb_gpu_shader5/execution/built-in-functions/fs-usubBorrow and
 arb_gpu_shader5/execution/built-in-functions/fs-uaddCarry piglit
 tests go from 40 to 28 instructions.  The reason is that the plain ADD
 instruction can easily be CSE'ed with the original addition, and the
 negation can easily be propagated into the source modifier of another
 instruction, so effectively both operations can be performed with just
 one instruction.

 No piglit regressions.
 ---
  src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 33 
 +---
  1 file changed, 13 insertions(+), 20 deletions(-)

 diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp 
 b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
 index 6d9e9d3..3b6aa0a 100644
 --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
 +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
 @@ -829,29 +829,22 @@ fs_visitor::nir_emit_alu(const fs_builder bld, 
 nir_alu_instr *instr)
bld.emit(SHADER_OPCODE_INT_QUOTIENT, result, op[0], op[1]);
break;

 -   case nir_op_uadd_carry: {
 -  if (devinfo-gen = 7)
 - no16(SIMD16 explicit accumulator operands unsupported\n);
 -
 -  struct brw_reg acc = retype(brw_acc_reg(dispatch_width),
 -  BRW_REGISTER_TYPE_UD);
 -
 -  bld.ADDC(bld.null_reg_ud(), op[0], op[1]);
 -  bld.MOV(result, fs_reg(acc));
 +   case nir_op_uadd_carry:
 +  /* Use signed operands for the ADD to be easily CSE'ed with the 
 original
 +   * addition (e.g. in case we're implementing the uaddCarry() GLSL
 +   * built-in).
 +   */
 +  bld.ADD(result, retype(op[0], BRW_REGISTER_TYPE_D),
 +  retype(op[1], BRW_REGISTER_TYPE_D));
 +  bld.CMP(result, retype(result, BRW_REGISTER_TYPE_UD), op[0],
 +  BRW_CONDITIONAL_L);
 +  bld.MOV(result, negate(result));
break;
 -   }

 -   case nir_op_usub_borrow: {
 -  if (devinfo-gen = 7)
 - no16(SIMD16 explicit accumulator operands unsupported\n);
 -
 -  struct brw_reg acc = retype(brw_acc_reg(dispatch_width),
 -  BRW_REGISTER_TYPE_UD);
 -
 -  bld.SUBB(bld.null_reg_ud(), op[0], op[1]);
 -  bld.MOV(result, fs_reg(acc));
 +   case nir_op_usub_borrow:
 +  bld.CMP(result, op[0], op[1], BRW_CONDITIONAL_L);
 +  bld.MOV(result, negate(result));
break;
 -   }

 case nir_op_umod:
bld.emit(SHADER_OPCODE_INT_REMAINDER, result, op[0], op[1]);
 --
 2.4.3

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


signature.asc
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 04/11] dri_interface: drop __NOT_HAVE_DRM_H magic

2015-07-09 Thread Emil Velikov
On 9 July 2015 at 18:50, Ian Romanick i...@freedesktop.org wrote:
 On 07/08/2015 10:07 AM, Emil Velikov wrote:
 Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
 ---
  include/GL/internal/dri_interface.h | 11 ---
  1 file changed, 11 deletions(-)

 diff --git a/include/GL/internal/dri_interface.h 
 b/include/GL/internal/dri_interface.h
 index c827bb6..c0545b1 100644
 --- a/include/GL/internal/dri_interface.h
 +++ b/include/GL/internal/dri_interface.h
 @@ -40,20 +40,9 @@
  #ifndef DRI_INTERFACE_H
  #define DRI_INTERFACE_H

 -/* For archs with no drm.h */
 -#if defined(__APPLE__) || defined(__CYGWIN__) || defined(__GNU__)
 -#ifndef __NOT_HAVE_DRM_H
 -#define __NOT_HAVE_DRM_H
 -#endif
 -#endif
 -
 -#ifndef __NOT_HAVE_DRM_H

 Shouldn't this get changed to use HAVE_LIBDRM as in later patches?
I thought about that, but that depends on if the versions of xserver
that we care about define it. From a quick look that is not the case
for older xservers, on the other hand drm* users which explicitly
include drm.h. If others don't mind when/if things break, I'm fine
using HAVE_LIBDRM here.

 I
 guess drm_context_t and drm_drawable_t are ABI, so they shouldn't ever
 change.  It does feel a little icky to redefine them when not necessary.

Yes it is rather nasty. Note that all of the junk is DRI1 stuff. I
was thinking about nuking/moving it, but with the see the old dri
loader new module, and vice versa topic still open, I've decided to
leave thing as is.

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


Re: [Mesa-dev] [PATCH 4/4] droi/common: remove unused drm_version variable

2015-07-09 Thread Emil Velikov
The title should obviously say dri/common: consider that fixed.

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


[Mesa-dev] [HACK] i965/fs: Fix rescale_texcoord() for SIMD16 and remove no16 fall-back.

2015-07-09 Thread Francisco Jerez
Aside from the trivial GRF underallocation problem in the
devinfo-gen  6  is_rect if-block, the texrect scale uniform
look-up code was assuming a one-to-one mapping between UNIFORM
register indices and the param array, which only holds during the
SIMD8 run.

It seems dubious that this needs to manipulate the param array
directly even though it doesn't have a fixed meaning (all constants if
you're building SIMD8, push constants if you're building SIMD16).  We
would probably be better off not using the ancient state token
tracking stuff which forces you to recompile the program anytime a
sampler uniform binding changes and doesn't work at all for
ARB_gpu_shader5-style variable indexing of samplers.  Instead this
could be implemented like images do by passing sampler metadata
preemptively at a fixed offset from the sampler uniform that is later
on eliminated by the optimizer in case it's not needed.

This depends on another patch I sent a while ago i965/fs: Don't
overwrite fs_visitor::uniforms and ::param_size during the SIMD16
run. [1].  No piglit regressions.

[1] http://lists.freedesktop.org/archives/mesa-dev/2015-May/083484.html
---
 src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 23 +++
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp 
b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
index 94d6a58..dcd2e4e 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
@@ -708,17 +708,23 @@ fs_visitor::rescale_texcoord(fs_reg coordinate, int 
coord_components,
 0
   };
 
-  no16(rectangle scale uniform setup not supported on SIMD16\n);
-  if (dispatch_width == 16) {
-return coordinate;
-  }
-
   GLuint index = _mesa_add_state_reference(params,
   (gl_state_index *)tokens);
   /* Try to find existing copies of the texrect scale uniforms. */
   for (unsigned i = 0; i  uniforms; i++) {
- if (stage_prog_data-param[i] ==
- prog-Parameters-ParameterValues[index][0]) {
+ /* Neat, there's an extra level of indirection between the fake
+  * UNIFORM file and the push/pull param arrays, but *only* during
+  * non-SIMD8 runs (i.e. SIMD16).
+  */
+ const gl_constant_value *param =
+(dispatch_width == 8 ? stage_prog_data-param[i] :
+ push_constant_loc[i] = 0 ?
+stage_prog_data-param[push_constant_loc[i]] :
+ pull_constant_loc[i] = 0 ?
+stage_prog_data-pull_param[pull_constant_loc[i]] :
+ NULL);
+
+ if (param == prog-Parameters-ParameterValues[index][0]) {
 scale_x = fs_reg(UNIFORM, i);
 scale_y = fs_reg(UNIFORM, i + 1);
 break;
@@ -727,6 +733,7 @@ fs_visitor::rescale_texcoord(fs_reg coordinate, int 
coord_components,
 
   /* If we didn't already set them up, do so now. */
   if (scale_x.file == BAD_FILE) {
+ assert(dispatch_width == 8);
  scale_x = fs_reg(UNIFORM, uniforms);
  scale_y = fs_reg(UNIFORM, uniforms + 1);
 
@@ -742,7 +749,7 @@ fs_visitor::rescale_texcoord(fs_reg coordinate, int 
coord_components,
 * tracking to get the scaling factor.
 */
if (devinfo-gen  6  is_rect) {
-  fs_reg dst = fs_reg(GRF, alloc.allocate(coord_components));
+  fs_reg dst = bld.vgrf(BRW_REGISTER_TYPE_F, coord_components);
   fs_reg src = coordinate;
   coordinate = dst;
 
-- 
2.4.3

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


Re: [Mesa-dev] [HACK] i965/fs: Fix ordering of src0 alpha and oMask in the framebuffer write payload.

2015-07-09 Thread Jason Ekstrand
On Jul 9, 2015 7:57 AM, Francisco Jerez curroje...@riseup.net wrote:

 We were passing src0 alpha and oMask in reverse order.  There seems to
 be no good way to pass them in the correct order to the new-style
 LOAD_PAYLOAD (how surprising) because src0 alpha is per-channel while
 oMask is not.  Just split src0 alpha in fixed-width registers and pass
 them to LOAD_PAYLOAD as if they were part of the header as work-around
 for now.

Bah... I came across this when I did the LOAD_PAYLOAD rework but thought it
was only theoretical.  I wasn't very familiar with what omask actually did
and, since piglit didn't hit it, I wasn't sure if it was a real problem or
not.  I probably should have done more digging and written a piglit test at
the time. My bad.

One solution that I proposed at the time was to turn header_size into
header_mask in the obvious way. We can still use 8 bits because we should
never have a header source higher than 8.

Thoughts?
--Jason

 I've written a piglit test that demonstrates the problem by using
 gl_SampleMask from a fragment shader with multiple color outputs [1].

 [1] http://lists.freedesktop.org/archives/piglit/2015-July/016499.html
 ---
  src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 26
+-
  1 file changed, 17 insertions(+), 9 deletions(-)

 diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 index 94d6a58..304ae74 100644
 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
 @@ -1535,6 +1535,19 @@ fs_visitor::emit_single_fb_write(const fs_builder
bld,
length++;
 }

 +   if (src0_alpha.file != BAD_FILE  color0.file != BAD_FILE) {
 +  /* Neat, we need to chop the src0 alpha component and pass it as
part of
 +   * the header even though it has per-channel semantics, because
the next
 +   * optional field is header-like and LOAD_PAYLOAD requires all such
 +   * fields to form a contiguous segment at the beginning of the
message.
 +   */
 +  for (unsigned i = 0; i  exec_size / 8; i++) {
 + setup_color_payload(sources[length], src0_alpha, 1, 8,
 + use_2nd_half || i == 1);
 + length++;
 +  }
 +   }
 +
 prog_data-uses_omask =
prog-OutputsWritten  BITFIELD64_BIT(FRAG_RESULT_SAMPLE_MASK);
 if (prog_data-uses_omask) {
 @@ -1561,19 +1574,14 @@ fs_visitor::emit_single_fb_write(const fs_builder
bld,
   offset(this-outputs[0], bld, 3),
   1, exec_size, false);
length += 4;
 -   } else if (color1.file == BAD_FILE) {
 -  if (src0_alpha.file != BAD_FILE) {
 - setup_color_payload(sources[length], src0_alpha, 1, exec_size,
false);
 - length++;
 -  }
 -
 -  setup_color_payload(sources[length], color0, components,
 -  exec_size, use_2nd_half);
 -  length += 4;
 } else {
setup_color_payload(sources[length], color0, components,
exec_size, use_2nd_half);
length += 4;
 +
 +   }
 +
 +   if (color1.file != BAD_FILE) {
setup_color_payload(sources[length], color1, components,
exec_size, use_2nd_half);
length += 4;
 --
 2.4.3

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


[Mesa-dev] [PATCH] i965/fs: Reimplement nir_op_uadd_carry and _usub_borrow without accumulator.

2015-07-09 Thread Francisco Jerez
This gets rid of two no16() fall-backs and should allow better
scheduling of the generated IR.  There are no uses of usubBorrow() or
uaddCarry() in shader-db so no changes are expected.  However the
arb_gpu_shader5/execution/built-in-functions/fs-usubBorrow and
arb_gpu_shader5/execution/built-in-functions/fs-uaddCarry piglit
tests go from 40 to 28 instructions.  The reason is that the plain ADD
instruction can easily be CSE'ed with the original addition, and the
negation can easily be propagated into the source modifier of another
instruction, so effectively both operations can be performed with just
one instruction.

No piglit regressions.
---
 src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 33 +---
 1 file changed, 13 insertions(+), 20 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp 
b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
index 6d9e9d3..3b6aa0a 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
@@ -829,29 +829,22 @@ fs_visitor::nir_emit_alu(const fs_builder bld, 
nir_alu_instr *instr)
   bld.emit(SHADER_OPCODE_INT_QUOTIENT, result, op[0], op[1]);
   break;
 
-   case nir_op_uadd_carry: {
-  if (devinfo-gen = 7)
- no16(SIMD16 explicit accumulator operands unsupported\n);
-
-  struct brw_reg acc = retype(brw_acc_reg(dispatch_width),
-  BRW_REGISTER_TYPE_UD);
-
-  bld.ADDC(bld.null_reg_ud(), op[0], op[1]);
-  bld.MOV(result, fs_reg(acc));
+   case nir_op_uadd_carry:
+  /* Use signed operands for the ADD to be easily CSE'ed with the original
+   * addition (e.g. in case we're implementing the uaddCarry() GLSL
+   * built-in).
+   */
+  bld.ADD(result, retype(op[0], BRW_REGISTER_TYPE_D),
+  retype(op[1], BRW_REGISTER_TYPE_D));
+  bld.CMP(result, retype(result, BRW_REGISTER_TYPE_UD), op[0],
+  BRW_CONDITIONAL_L);
+  bld.MOV(result, negate(result));
   break;
-   }
 
-   case nir_op_usub_borrow: {
-  if (devinfo-gen = 7)
- no16(SIMD16 explicit accumulator operands unsupported\n);
-
-  struct brw_reg acc = retype(brw_acc_reg(dispatch_width),
-  BRW_REGISTER_TYPE_UD);
-
-  bld.SUBB(bld.null_reg_ud(), op[0], op[1]);
-  bld.MOV(result, fs_reg(acc));
+   case nir_op_usub_borrow:
+  bld.CMP(result, op[0], op[1], BRW_CONDITIONAL_L);
+  bld.MOV(result, negate(result));
   break;
-   }
 
case nir_op_umod:
   bld.emit(SHADER_OPCODE_INT_REMAINDER, result, op[0], op[1]);
-- 
2.4.3

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


[Mesa-dev] [PATCH 3/4] radeon, r200: allow hyperz for radeon DRM module v2

2015-07-09 Thread Emil Velikov
The original code only half considered hyperz as an option. As per
previous commit major != 2 cannot occur we can simply things, and
allow users to set the option if they choose to do so.

Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
---
 src/mesa/drivers/dri/r200/r200_context.c | 10 ++
 src/mesa/drivers/dri/radeon/radeon_context.c |  9 ++---
 2 files changed, 4 insertions(+), 15 deletions(-)

diff --git a/src/mesa/drivers/dri/r200/r200_context.c 
b/src/mesa/drivers/dri/r200/r200_context.c
index 40cc50a..2a42ab3 100644
--- a/src/mesa/drivers/dri/r200/r200_context.c
+++ b/src/mesa/drivers/dri/r200/r200_context.c
@@ -225,14 +225,8 @@ GLboolean r200CreateContext( gl_api api,
rmesa-radeon.initialMaxAnisotropy = 
driQueryOptionf(rmesa-radeon.optionCache,
def_max_anisotropy);
 
-   if ( sPriv-drm_version.major == 1
-driQueryOptionb( rmesa-radeon.optionCache, hyperz ) ) {
-  if ( sPriv-drm_version.minor  13 )
-fprintf( stderr, DRM version 1.%d too old to support HyperZ, 
- disabling.\n, sPriv-drm_version.minor );
-  else
-rmesa-using_hyperz = GL_TRUE;
-   }
+   if (driQueryOptionb( rmesa-radeon.optionCache, hyperz))
+  rmesa-using_hyperz = GL_TRUE;
  
/* Init default driver functions then plug in our R200-specific functions
 * (the texture functions are especially important)
diff --git a/src/mesa/drivers/dri/radeon/radeon_context.c 
b/src/mesa/drivers/dri/radeon/radeon_context.c
index edb154c..a9e2ab5 100644
--- a/src/mesa/drivers/dri/radeon/radeon_context.c
+++ b/src/mesa/drivers/dri/radeon/radeon_context.c
@@ -191,13 +191,8 @@ r100CreateContext( gl_api api,
rmesa-radeon.initialMaxAnisotropy = 
driQueryOptionf(rmesa-radeon.optionCache,
  def_max_anisotropy);
 
-   if ( driQueryOptionb( rmesa-radeon.optionCache, hyperz ) ) {
-  if ( sPriv-drm_version.minor  13 )
-fprintf( stderr, DRM version 1.%d too old to support HyperZ, 
- disabling.\n, sPriv-drm_version.minor );
-  else
-rmesa-using_hyperz = GL_TRUE;
-   }
+   if (driQueryOptionb(rmesa-radeon.optionCache, hyperz))
+  rmesa-using_hyperz = GL_TRUE;
 
/* Init default driver functions then plug in our Radeon-specific functions
 * (the texture functions are especially important)
-- 
2.4.5

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


[Mesa-dev] [PATCH 1/4] radeon, r200: remove unused variable texmicrotile

2015-07-09 Thread Emil Velikov
Dead since at least 2009 with commit ccf7814a315(radeon: major cleanups
removing old dead codepaths.)

Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
---
 src/mesa/drivers/dri/r200/r200_context.c | 3 ---
 src/mesa/drivers/dri/r200/r200_context.h | 1 -
 src/mesa/drivers/dri/radeon/radeon_context.c | 3 ---
 src/mesa/drivers/dri/radeon/radeon_context.h | 1 -
 4 files changed, 8 deletions(-)

diff --git a/src/mesa/drivers/dri/r200/r200_context.c 
b/src/mesa/drivers/dri/r200/r200_context.c
index fb15082..40cc50a 100644
--- a/src/mesa/drivers/dri/r200/r200_context.c
+++ b/src/mesa/drivers/dri/r200/r200_context.c
@@ -234,9 +234,6 @@ GLboolean r200CreateContext( gl_api api,
 rmesa-using_hyperz = GL_TRUE;
}
  
-   if ( sPriv-drm_version.minor = 15 )
-  rmesa-texmicrotile = GL_TRUE;
-
/* Init default driver functions then plug in our R200-specific functions
 * (the texture functions are especially important)
 */
diff --git a/src/mesa/drivers/dri/r200/r200_context.h 
b/src/mesa/drivers/dri/r200/r200_context.h
index eb498f7..2ca1c7a 100644
--- a/src/mesa/drivers/dri/r200/r200_context.h
+++ b/src/mesa/drivers/dri/r200/r200_context.h
@@ -618,7 +618,6 @@ struct r200_context {
struct r200_swtcl_info swtcl;
 
GLboolean using_hyperz;
-   GLboolean texmicrotile;
 
   struct ati_fragment_shader *afs_loaded;
 };
diff --git a/src/mesa/drivers/dri/radeon/radeon_context.c 
b/src/mesa/drivers/dri/radeon/radeon_context.c
index d4d1935..edb154c 100644
--- a/src/mesa/drivers/dri/radeon/radeon_context.c
+++ b/src/mesa/drivers/dri/radeon/radeon_context.c
@@ -199,9 +199,6 @@ r100CreateContext( gl_api api,
 rmesa-using_hyperz = GL_TRUE;
}
 
-   if ( sPriv-drm_version.minor = 15 )
-  rmesa-texmicrotile = GL_TRUE;
-
/* Init default driver functions then plug in our Radeon-specific functions
 * (the texture functions are especially important)
 */
diff --git a/src/mesa/drivers/dri/radeon/radeon_context.h 
b/src/mesa/drivers/dri/radeon/radeon_context.h
index 4032532..badabd9 100644
--- a/src/mesa/drivers/dri/radeon/radeon_context.h
+++ b/src/mesa/drivers/dri/radeon/radeon_context.h
@@ -426,7 +426,6 @@ struct r100_context {
struct r100_swtcl_info swtcl;
 
GLboolean using_hyperz;
-   GLboolean texmicrotile;
 
/* Performance counters
 */
-- 
2.4.5

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


[Mesa-dev] [PATCH 2/4] radeon, r200: remove support for UMS radeon DRM module

2015-07-09 Thread Emil Velikov
As mentioned by Michel Dänzer
 FWIW though, any code which is specific to radeon DRM major version 1
  can be removed, because that's the UMS major version.

and Marek Olšák
 major != 2 can't occur. You don't have to check the major version at
  all and you can just assume it's always 2.

Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
---
 src/mesa/drivers/dri/radeon/radeon_screen.c | 44 +++--
 1 file changed, 17 insertions(+), 27 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c 
b/src/mesa/drivers/dri/radeon/radeon_screen.c
index 45d9b2b..98b4741 100644
--- a/src/mesa/drivers/dri/radeon/radeon_screen.c
+++ b/src/mesa/drivers/dri/radeon/radeon_screen.c
@@ -135,36 +135,26 @@ DRI_CONF_END
 static int
 radeonGetParam(__DRIscreen *sPriv, int param, void *value)
 {
-  int ret;
-  drm_radeon_getparam_t gp = { 0 };
   struct drm_radeon_info info = { 0 };
 
-  if (sPriv-drm_version.major = 2) {
-  info.value = (uint64_t)(uintptr_t)value;
-  switch (param) {
-  case RADEON_PARAM_DEVICE_ID:
-  info.request = RADEON_INFO_DEVICE_ID;
-  break;
-  case RADEON_PARAM_NUM_GB_PIPES:
-  info.request = RADEON_INFO_NUM_GB_PIPES;
-  break;
-  case RADEON_PARAM_NUM_Z_PIPES:
-  info.request = RADEON_INFO_NUM_Z_PIPES;
-  break;
-  case RADEON_INFO_TILE_CONFIG:
- info.request = RADEON_INFO_TILE_CONFIG;
-  break;
-  default:
-  return -EINVAL;
-  }
-  ret = drmCommandWriteRead(sPriv-fd, DRM_RADEON_INFO, info, 
sizeof(info));
-  } else {
-  gp.param = param;
-  gp.value = value;
-
-  ret = drmCommandWriteRead(sPriv-fd, DRM_RADEON_GETPARAM, gp, 
sizeof(gp));
+  info.value = (uint64_t)(uintptr_t)value;
+  switch (param) {
+  case RADEON_PARAM_DEVICE_ID:
+info.request = RADEON_INFO_DEVICE_ID;
+break;
+  case RADEON_PARAM_NUM_GB_PIPES:
+info.request = RADEON_INFO_NUM_GB_PIPES;
+break;
+  case RADEON_PARAM_NUM_Z_PIPES:
+info.request = RADEON_INFO_NUM_Z_PIPES;
+break;
+  case RADEON_INFO_TILE_CONFIG:
+info.request = RADEON_INFO_TILE_CONFIG;
+break;
+  default:
+return -EINVAL;
   }
-  return ret;
+  return drmCommandWriteRead(sPriv-fd, DRM_RADEON_INFO, info, sizeof(info));
 }
 
 #if defined(RADEON_R100)
-- 
2.4.5

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


Re: [Mesa-dev] [PATCH 2/2] i965: Support importing R8 and GR88 dma_bufs

2015-07-09 Thread Chad Versace
On Thu 09 Jul 2015, Emil Velikov wrote:
 On 9 July 2015 at 09:39, Chad Versace chad.vers...@intel.com wrote:
  EGL_EXT_image_dma_buf_import now supports those formats.
 
 Do I have an old version of it (v6) or I simply cannot see those listed ?

I should have been more clear when I said EGL_EXT_image_dma_buf_import
now supports those formats. I meant now supports those formats as of
the previous patch.

The EGL_EXT_image_dma_buf_import spec itself lists no DRM formats. v6 of
the spec refers to drm_fourcc.h for formats by saying this:

* EGL_LINUX_DRM_FOURCC_EXT: The pixel format of the buffer, as
  specified by drm_fourcc.h and used as the pixel_format parameter of
  the drm_mode_fb_cmd2 ioctl.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] [v2] i965: Split out gen8 push constant state upload

2015-07-09 Thread Ben Widawsky
While implementing the workaround in the previous patch I noticed things were
starting to get a bit messy. Since gen8 works differently enough from gen7, I
thought splitting it out with be good.

While here, get rid of gen8 MOCS which does nothing and was in the wrong place
anyway.

This patch is totally optional. I'd be willing to just always use buffer #2 on
gen8+. Pre-HSW this wasn't allowed, but it looks like it's okay for gen8 too.

v2: Move inactive batch generation to the top of the function in order to make
the rest of the code easier to read.

Jenkins results (still a bunch of spurious failures, I miss Mark):
http://otc-mesa-ci.jf.intel.com/job/bwidawsk/169/

Signed-off-by: Ben Widawsky b...@bwidawsk.net
Reviewed-by: Anuj Phogat anuj.pho...@gmail.com (v1)
---

I had a minor bug in v1 which prevented me from pushing this sooner. I'd like to
merge this patch unless anyone has complaints?

---
 src/mesa/drivers/dri/i965/brw_state.h |  6 +-
 src/mesa/drivers/dri/i965/gen6_gs_state.c |  2 +-
 src/mesa/drivers/dri/i965/gen6_vs_state.c |  3 +-
 src/mesa/drivers/dri/i965/gen6_wm_state.c |  3 +-
 src/mesa/drivers/dri/i965/gen7_vs_state.c | 93 ---
 5 files changed, 68 insertions(+), 39 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_state.h 
b/src/mesa/drivers/dri/i965/brw_state.h
index 987672f..f45459d 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -368,9 +368,9 @@ brw_upload_pull_constants(struct brw_context *brw,
 
 /* gen7_vs_state.c */
 void
-gen7_upload_constant_state(struct brw_context *brw,
-   const struct brw_stage_state *stage_state,
-   bool active, unsigned opcode);
+brw_upload_constant_state(struct brw_context *brw,
+  const struct brw_stage_state *stage_state,
+  bool active, unsigned opcode);
 
 #ifdef __cplusplus
 }
diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c 
b/src/mesa/drivers/dri/i965/gen6_gs_state.c
index eb4c586..19568b0 100644
--- a/src/mesa/drivers/dri/i965/gen6_gs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c
@@ -48,7 +48,7 @@ gen6_upload_gs_push_constants(struct brw_context *brw)
}
 
if (brw-gen = 7)
-  gen7_upload_constant_state(brw, stage_state, gp, _3DSTATE_CONSTANT_GS);
+  brw_upload_constant_state(brw, stage_state, gp, _3DSTATE_CONSTANT_GS);
 }
 
 const struct brw_tracked_state gen6_gs_push_constants = {
diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c 
b/src/mesa/drivers/dri/i965/gen6_vs_state.c
index 35d10ef..c33607d 100644
--- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
@@ -140,8 +140,7 @@ gen6_upload_vs_push_constants(struct brw_context *brw)
   if (brw-gen == 7  !brw-is_haswell  !brw-is_baytrail)
  gen7_emit_vs_workaround_flush(brw);
 
-  gen7_upload_constant_state(brw, stage_state, true /* active */,
- _3DSTATE_CONSTANT_VS);
+  brw_upload_constant_state(brw, stage_state, true, _3DSTATE_CONSTANT_VS);
}
 }
 
diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c 
b/src/mesa/drivers/dri/i965/gen6_wm_state.c
index d1748ba..ced4ad6 100644
--- a/src/mesa/drivers/dri/i965/gen6_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
@@ -50,8 +50,7 @@ gen6_upload_wm_push_constants(struct brw_context *brw)
   stage_state, AUB_TRACE_WM_CONSTANTS);
 
if (brw-gen = 7) {
-  gen7_upload_constant_state(brw, brw-wm.base, true,
- _3DSTATE_CONSTANT_PS);
+  brw_upload_constant_state(brw, brw-wm.base, true, 
_3DSTATE_CONSTANT_PS);
}
 }
 
diff --git a/src/mesa/drivers/dri/i965/gen7_vs_state.c 
b/src/mesa/drivers/dri/i965/gen7_vs_state.c
index 4b17d06..6a51934 100644
--- a/src/mesa/drivers/dri/i965/gen7_vs_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_vs_state.c
@@ -29,20 +29,23 @@
 #include program/prog_statevars.h
 #include intel_batchbuffer.h
 
-
-void
-gen7_upload_constant_state(struct brw_context *brw,
+static void
+gen8_upload_constant_state(struct brw_context *brw,
const struct brw_stage_state *stage_state,
bool active, unsigned opcode)
 {
-   uint32_t mocs = brw-gen  8 ? GEN7_MOCS_L3 : 0;
 
-   /* Disable if the shader stage is inactive or there are no push constants. 
*/
-   active = active  stage_state-push_const_size != 0;
+   /* FINISHME: determine if we should use mocs on gen9 */
 
-   int dwords = brw-gen = 8 ? 11 : 7;
-   BEGIN_BATCH(dwords);
-   OUT_BATCH(opcode  16 | (dwords - 2));
+   BEGIN_BATCH(11);
+   OUT_BATCH(opcode  16 | (11 - 2));
+
+   if (!active) {
+  for (int i = 0; i  11; i++)
+ OUT_BATCH(0);
+
+  return;
+   }
 
/* Workaround for SKL+ (we use option #2 until we have a need for more
 * constant buffers). This comes from the documentation for 
3DSTATE_CONSTANT_*
@@ -55,44 +58,42 

[Mesa-dev] [Bug 66346] shader_query.cpp:49: error: invalid conversion from 'void*' to 'GLuint'

2015-07-09 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=66346

--- Comment #19 from José Fonseca jfons...@vmware.com ---
(In reply to Vinson Lee from comment #18)
 mesa: 0166b4c165271bd7525a91049e58e390cb596c60 (master 10.7.0-devel)
 
 Still see this build error. BUILDING_MESA is only defined for darwin DRI
 enabled builds.

It should be a matter of adding the define on SCons builds too.

But I don't know if there's much point for building Mesa w/ SCons on Mac -- we
don't actually build an usable libGL there.

-- 
You are receiving this mail because:
You are the assignee for the bug.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


  1   2   >