1. 16 Aug, 2011 7 commits
    • Benjamin Franzke's avatar
      dri2: Add __DRI_BUFFER_COUNT token · 8c409403
      Benjamin Franzke authored
      Remove definition from egl_dri2.
      Defining this is egl_dri2.h breaks as soon as
      a new dri2 buffer token is added like with commit
      4501a5d6.
      8c409403
    • Cooper Yuan's avatar
      dri2: add code to dri2_Flush extension. · 9b784069
      Cooper Yuan authored
      It's going to flush client's commands in eglWaitClient(). Before this,
      egl applications using pixmap or pbuffer flicker because of no flush.
      
      Reviewed-by: Alan Hourihane
      9b784069
    • Emma Anholt's avatar
      glsl: When assigning to a whole array, mark the array as accessed. · a313c29c
      Emma Anholt authored
      The vs-varying-array-mat2-col-row-wr test writes a mat2[3] constant to
      a mat2[3] varying out array, and also statically accesses element 1 of
      it on the VS and FS sides.  At link time it would get trimmed down to
      just 2 elements, and then codegen of the VS would end up generating
      assignments to the unallocated last entry of the array.  On the new
      i965 VS backend, that happened to land on the vertex position.
      
      Some issues remain in this test on softpipe, i965/old-vs and
      i965/new-vs on visual inspection, but i965 is passing because only one
      green pixel is probed, not the whole split green/red quad.
      a313c29c
    • Emma Anholt's avatar
      radeon: Explain to the user what went wrong when built without libdrm. · 5880a9a4
      Emma Anholt authored
      Before this commit, even LIBGL_DEBUG=verbose would just fail with:
      libGL error: failed to create dri screen
      5880a9a4
    • Paul Berry's avatar
      glsl: Add validations for ir_call. · 303e05cc
      Paul Berry authored
      
      
      This patch extends ir_validate.cpp to check the following
      characteristics of each ir_call:
      
      - The number of actual parameters must match the number of formal
        parameters in the signature.
      
      - The type of each actual parameter must match the type of the
        corresponding formal parameter in the signature.
      
      - Each "out" or "inout" actual parameter must be an lvalue.
      
      Reviewed-by: default avatarChad Versace <chad@chad-versace.us>
      303e05cc
    • Paul Berry's avatar
      glsl: Make is_lvalue() and variable_referenced() const. · a52b53b5
      Paul Berry authored
      
      
      These functions don't modify the target instruction, so it makes sense
      to make them const.  This allows these functions to be called from ir
      validation code (which uses const to ensure that it doesn't
      accidentally modify the IR being validated).
      
      Reviewed-by: default avatarChad Versace <chad@chad-versace.us>
      Reviewed-by: Kenneth Graunke's avatarKenneth Graunke <kenneth@whitecape.org>
      a52b53b5
    • Paul Berry's avatar
      glsl: Perform implicit type conversions on function call out parameters. · 67b5a326
      Paul Berry authored
      When an out parameter undergoes an implicit type conversion, we need
      to store it in a temporary, and then after the call completes, convert
      the resulting value.  In other words, we convert code like the
      following:
      
      void f(out int x);
      float value;
      f(value);
      
      Into IR that's equivalent to this:
      
      void f(out int x);
      float value;
      int out_parameter_conversion;
      f(out_parameter_conversion);
      value = float(out_parameter_conversion);
      
      This transformation needs to happen during ast-to-IR convertion (as
      opposed to, say, a lowering pass), because it is invalid IR for formal
      and actual parameters to have types that don't match.
      
      Fixes piglit tests
      spec/glsl-1.20/compiler/qualifiers/out-conversion-int-to-float.vert and
      spec/glsl-1.20/execution/qualifiers/vs-out-conversion-*.shader_test,
      and bug 39651.
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=39651
      
      
      
      Reviewed-by: default avatarChad Versace <chad@chad-versace.us>
      67b5a326
  2. 15 Aug, 2011 8 commits
    • Kenneth Graunke's avatar
      docs: Remove GLw from the documentation except for a new FAQ entry. · c548192c
      Kenneth Graunke authored
      
      
      Also remove an outdated reference to GLEW being in tree.
      
      Reviewed-by: Brian Paul's avatarBrian Paul <brianp@vmware.com>
      c548192c
    • Kenneth Graunke's avatar
      glw: Remove GLw source. · 63720114
      Kenneth Graunke authored
      libGLw is an old OpenGL widget library with optional Motif support.
      It almost never changes and very few people actually still care about
      it, so we've decided to ship it separately.
      
      The new home for libGLw is: git://git.freedesktop.org/mesa/glw/
      
      
      
      Reviewed-by: Brian Paul's avatarBrian Paul <brianp@vmware.com>
      63720114
    • Ian Romanick's avatar
      glsl: Modify strategy for accumulating conditions when lowering if-statements · a352e2d0
      Ian Romanick authored
      Previously if-statements were lowered from inner-most to outer-most
      (i.e., bottom-up).  All assignments within an if-statement would have
      the condition of the if-statement appended to its existing condition.
      As a result the assignments from a deeply nested if-statement would
      have a very long and complex condition.
      
      Several shaders in the OpenGL ES2 conformance test suite contain
      non-constant array indexing that has been lowered by the shader
      writer.  These tests usually look something like:
      
          if (i == 0) {
              value = array[0];
          } else if (i == 1) {
              value = array[1];
          } else ...
      
      The IR for the last assignment ends up as:
      
          (assign (expression bool && (expression bool ! (var_ref if_to_cond_assign_condition) ) (expression bool && (expression bool ! (var_ref if_to_cond_assign_condition@20) ) (expression bool && (expression bool ! (var_ref if_to_cond_assign_condition@22) ) (expression bool && (expression bool ! (var_ref if_to_cond_assign_condition@24) ) (var_ref if_to_cond_assign_condition@26) ) ) ) )  (x) (var_ref value) (array_ref (var_ref array) (constant int (5)))
      
      The Mesa IR that is generated from this is just as awesome as you
      might expect.
      
      Three changes are made to the way if-statements are lowered.
      
      1. Two condition variables, if_to_cond_assign_then and
      if_to_cond_assign_else, are created for each if-then-else structure.
      The former contains the "positive" condition, and the later contains
      the "negative" condtion.  This change was implemented in the previous
      patch.
      
      2. Each condition variable is added to a hash-table when it is created.
      
      3. When lowering an if-statement, assignments to existing condtion
      variables get the current condition anded.  This ensures that nested
      condition variables are only set to true when the condition variable
      for all outer if-statements is also true.
      
      Changes #1 and #3 combine to ensure the correctness of the resulting
      code.
      
      4. When a condition assignment is encountered with a condition that is
      a dereference of a previously added condition variable, the condition
      is not modified.
      
      Change #4
      
       prevents the continuous accumulation of conditions on
      assignments.
      
      If the original if-statements were:
      
          if (x) {
              if (a && b && c && d && e) {
                  ...
              } else {
                  ...
              }
          } else {
              if (g && h && i && j && k) {
                  ...
              } else {
                  ...
              }
          }
      
      The lowered code will be
      
          if_to_cond_assign_then@1 = x;
          if_to_cond_assign_then@2 = a && b && c && d && e
              && if_to_cond_assign_then@1;
          ...
          if_to_cond_assign_else@2 = !if_to_cond_assign_then
              && if_to_cond_assign_then@1;
          ...
      
          if_to_cond_assign_else@1 = !if_to_cond_assign_then@1;
          if_to_cond_assign_then@3 = g && h && i && j;
              && if_to_cond_assign_else@1;
          ...
          if_to_cond_assign_else@3 = !if_to_cond_assign_then
              && if_to_cond_assign_else@1;
          ...
      
      Depending on how instructions are emitted, there may be an extra
      instruction due to the duplication of the '&&
      if_to_cond_assign_{then,else}@1' on the nested else conditions.  In
      addition, this may cause some unnecessary register pressure since in
      the simple case (where the nested conditions are not complex) the
      nested then-condition variables are live longer than strictly
      necessary.
      
      Before this change, one of the shaders in the OpenGL ES2 conformance
      test suite's acos_float_frag_xvary generated 348 Mesa IR instructions.
      After this change it only generates 124.  Many, but not all, of these
      instructions would have also been eliminated by CSE.
      
      Reviewed-by: Emma Anholt's avatarEric Anholt <eric@anholt.net>
      a352e2d0
    • Ian Romanick's avatar
      glsl: Slight change to the code generated by if-flattening · 4a026d6b
      Ian Romanick authored
      
      
      Now the condition (for the then-clause) and the inverse condition (for
      the else-clause) get written to separate temporary variables.  In the
      presence of complex conditions, this shouldn't result in more code
      being generated.  If the original if-statement was
      
          if (a && b && c && d && e) {
              ...
          } else {
              ...
          }
      
      The lowered code will be
      
         if_to_cond_assign_then = a && b && c && d && e;
         ...
         if_to_cond_assign_else = !if_to_cond_assign_then;
         ...
      
      Reviewed-by: Emma Anholt's avatarEric Anholt <eric@anholt.net>
      4a026d6b
    • Ian Romanick's avatar
      13df36ec
    • Ian Romanick's avatar
      glsl: Make move_block_to_cond_assign not care which branch it's processing · 5c843785
      Ian Romanick authored
      
      
      This will make some future changes a bit easier to digest.
      
      Reviewed-by: Emma Anholt's avatarEric Anholt <eric@anholt.net>
      5c843785
    • Benjamin Franzke's avatar
      2e71c7d4
    • Benjamin Franzke's avatar
      egl: Native Display autodetection · 85fe9484
      Benjamin Franzke authored
      
      
      EGL doesnt define howto manage different native platforms.
      So mesa has a builtime configurable default platform,
      whith non-standard envvar (EGL_PLATFORM) overwrites.
      This caused unneeded bugreports, when EGL_PLATFORM was forgotten.
      
      Detection is grouped into basic types of NativeDisplays (which itself
      needs to be detected).  The final decision is based on characteristcs
      of these basic types:
      
        File Desciptor based platforms (fbdev):
          - fstat(2) to check for being a fd that belongs to a character device
          - check kernel subsystem (todo)
      
        Pointer to structuctures (x11, wayland, drm/gbm):
          - mincore(2) to check whether its valid pointer to some memory.
          - magic elements (e.g. pointers to exported symbols):
            o wayland display stores interface type pointer (first elm.)
            o gbm stores pointer to its constructor (first elm.)
            o x11 as a fallback (FIXME?)
      
      Reviewed-by: default avatarKristian Høgsberg <krh@bitplanet.net>
      85fe9484
  3. 14 Aug, 2011 1 commit
  4. 13 Aug, 2011 6 commits
  5. 12 Aug, 2011 1 commit
  6. 11 Aug, 2011 5 commits
  7. 10 Aug, 2011 9 commits
  8. 09 Aug, 2011 3 commits