Merge branch '7.8'
authorBrian Paul <brianp@vmware.com>
Thu, 22 Apr 2010 17:10:19 +0000 (11:10 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 22 Apr 2010 17:10:19 +0000 (11:10 -0600)
Conflicts:

src/mesa/state_tracker/st_format.c

1  2 
src/mesa/drivers/dri/r300/r300_state.c
src/mesa/state_tracker/st_format.c

index 02ba300eb02b43ff30fdf5c6e23f6e18713ce4a9,188169ce87a0b776041de0cb0a5f4b64bbc58425..fa33be4998993c083ee7d7b439ce7bfe3f38cebf
@@@ -46,13 -46,13 +46,13 @@@ WITH THE SOFTWARE OR THE USE OR OTHER D
  #include "main/simple_list.h"
  #include "main/api_arrayelt.h"
  
 +#include "drivers/common/meta.h"
  #include "swrast/swrast.h"
  #include "swrast_setup/swrast_setup.h"
  #include "shader/prog_parameter.h"
  #include "shader/prog_statevars.h"
  #include "vbo/vbo.h"
  #include "tnl/tnl.h"
 -#include "tnl/t_vp_build.h"
  
  #include "r300_context.h"
  #include "r300_state.h"
@@@ -589,7 -589,7 +589,7 @@@ static void r300SetDepthState(GLcontex
                                            R500_STENCIL_REFMASK_FRONT_BACK);
        r300->hw.zs.cmd[R300_ZS_CNTL_1] &= ~(R300_ZS_MASK << R300_Z_FUNC_SHIFT);
  
 -      if (ctx->Depth.Test) {
 +      if (ctx->Depth.Test && ctx->DrawBuffer->_DepthBuffer) {
                r300->hw.zs.cmd[R300_ZS_CNTL_0] |= R300_Z_ENABLE;
                if (ctx->Depth.Mask)
                        r300->hw.zs.cmd[R300_ZS_CNTL_0] |= R300_Z_WRITE_ENABLE;
@@@ -1658,20 -1658,21 +1658,21 @@@ void r300VapCntl(r300ContextPtr rmesa, 
                                    (5 << R300_PVS_NUM_CNTLRS_SHIFT) |
                                    (5 << R300_VF_MAX_VTX_NUM_SHIFT));
  
-     if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV515)
-       rmesa->hw.vap_cntl.cmd[R300_VAP_CNTL_INSTR] |= (2 << R300_PVS_NUM_FPUS_SHIFT);
-     else if ((rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV530) ||
-            (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV560) ||
-            (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV570))
+     if ((rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R300) ||
+       (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R350))
+       rmesa->hw.vap_cntl.cmd[R300_VAP_CNTL_INSTR] |= (4 << R300_PVS_NUM_FPUS_SHIFT);
+     else if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV530)
        rmesa->hw.vap_cntl.cmd[R300_VAP_CNTL_INSTR] |= (5 << R300_PVS_NUM_FPUS_SHIFT);
      else if ((rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV410) ||
             (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R420))
        rmesa->hw.vap_cntl.cmd[R300_VAP_CNTL_INSTR] |= (6 << R300_PVS_NUM_FPUS_SHIFT);
      else if ((rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R520) ||
-            (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R580))
+            (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R580) ||
+            (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV560) ||
+            (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV570))
        rmesa->hw.vap_cntl.cmd[R300_VAP_CNTL_INSTR] |= (8 << R300_PVS_NUM_FPUS_SHIFT);
      else
-       rmesa->hw.vap_cntl.cmd[R300_VAP_CNTL_INSTR] |= (4 << R300_PVS_NUM_FPUS_SHIFT);
+       rmesa->hw.vap_cntl.cmd[R300_VAP_CNTL_INSTR] |= (2 << R300_PVS_NUM_FPUS_SHIFT);
  
  }
  
@@@ -2237,68 -2238,6 +2238,68 @@@ void r300UpdateShaderStates(r300Context
        }
  }
  
 +#define EASY_US_OUT_FMT(comps, c0, c1, c2, c3) \
 +      (R500_OUT_FMT_##comps | R500_C0_SEL_##c0 | R500_C1_SEL_##c1 | \
 +       R500_C2_SEL_##c2 | R500_C3_SEL_##c3)
 +static void r300SetupUsOutputFormat(GLcontext *ctx)
 +{
 +      r300ContextPtr rmesa = R300_CONTEXT(ctx);
 +      uint32_t hw_format;
 +      struct radeon_renderbuffer *rrb = radeon_get_colorbuffer(&rmesa->radeon);
 +
 +      if (!rrb) {
 +              return;
 +      }
 +      
 +      switch (rrb->base.Format)
 +      {
 +              case MESA_FORMAT_RGBA5551:
 +              case MESA_FORMAT_RGBA8888:
 +                      hw_format = EASY_US_OUT_FMT(C4_8, A, B, G, R);
 +                      break;
 +              case MESA_FORMAT_RGB565_REV:
 +              case MESA_FORMAT_RGBA8888_REV:
 +                      hw_format = EASY_US_OUT_FMT(C4_8, R, G, B, A);
 +                      break;
 +              case MESA_FORMAT_RGB565:
 +              case MESA_FORMAT_ARGB4444:
 +              case MESA_FORMAT_ARGB1555:
 +              case MESA_FORMAT_XRGB8888:
 +              case MESA_FORMAT_ARGB8888:
 +                      hw_format = EASY_US_OUT_FMT(C4_8, B, G, R, A);
 +                      break;
 +              case MESA_FORMAT_ARGB4444_REV:
 +              case MESA_FORMAT_ARGB1555_REV:
 +              case MESA_FORMAT_XRGB8888_REV:
 +              case MESA_FORMAT_ARGB8888_REV:
 +                      hw_format = EASY_US_OUT_FMT(C4_8, A, R, G, B);
 +                      break;
 +              case MESA_FORMAT_SRGBA8:
 +                      hw_format = EASY_US_OUT_FMT(C4_10_GAMMA, A, B, G, R);
 +                      break;
 +              case MESA_FORMAT_SARGB8:
 +                      hw_format = EASY_US_OUT_FMT(C4_10_GAMMA, B, G, R, A);
 +                      break;
 +              case MESA_FORMAT_SL8:
 +                      hw_format = EASY_US_OUT_FMT(C4_10_GAMMA, A, A, R, A);
 +                      break;
 +              case MESA_FORMAT_A8:
 +                      hw_format = EASY_US_OUT_FMT(C4_8, A, A, A, A);
 +                      break;
 +              case MESA_FORMAT_L8:
 +              case MESA_FORMAT_I8:
 +                      hw_format = EASY_US_OUT_FMT(C4_8, A, A, R, A);
 +                      break;
 +              default:
 +                      assert(!"Unsupported format");
 +                      break;
 +      }
 +
 +      R300_STATECHANGE(rmesa, us_out_fmt);
 +      rmesa->hw.us_out_fmt.cmd[1] = hw_format;
 +}
 +#undef EASY_US_OUT_FMT
 +
  /**
   * Called by Mesa after an internal state update.
   */
@@@ -2328,10 -2267,6 +2329,10 @@@ static void r300InvalidateState(GLconte
                        r300->hw.shade2.cmd[1] &= ~R300_GA_COLOR_CONTROL_PROVOKING_VERTEX_LAST;
        }
  
 +      if (new_state & _NEW_BUFFERS) {
 +              r300SetupUsOutputFormat(ctx);
 +      }
 +
        r300->radeon.NewGLState |= new_state;
  }
  
@@@ -2353,7 -2288,7 +2354,7 @@@ static void r300RenderMode(GLcontext * 
  /**
   * Initialize driver's state callback functions
   */
 -void r300InitStateFuncs(struct dd_function_table *functions)
 +void r300InitStateFuncs(radeonContextPtr radeon, struct dd_function_table *functions)
  {
  
        functions->UpdateState = r300InvalidateState;
        functions->ClipPlane = r300ClipPlane;
        functions->Scissor = radeonScissor;
  
 -      functions->DrawBuffer           = radeonDrawBuffer;
 -      functions->ReadBuffer           = radeonReadBuffer;
 +      functions->DrawBuffer = radeonDrawBuffer;
 +      functions->ReadBuffer = radeonReadBuffer;
 +
 +      functions->CopyPixels = _mesa_meta_CopyPixels;
 +      functions->DrawPixels = _mesa_meta_DrawPixels;
 +      if (radeon->radeonScreen->kernel_mm)
 +              functions->ReadPixels = radeonReadPixels;
  }
  
  void r300InitShaderFunctions(r300ContextPtr r300)
index 8a366d834e7e552c385b88f2fec01359b8f7cf51,91e386c848ad0da67576d8f65ce1f47cdbd2be22..d7f5b1ea2473a113a94f1baadecb0de042eba15f
@@@ -76,8 -76,8 +76,8 @@@ st_format_datatype(enum pipe_format for
            format == PIPE_FORMAT_B5G6R5_UNORM) {
           return GL_UNSIGNED_SHORT;
        }
 -      else if (format == PIPE_FORMAT_Z24S8_UNORM ||
 -               format == PIPE_FORMAT_S8Z24_UNORM) {
 +      else if (format == PIPE_FORMAT_Z24_UNORM_S8_USCALED ||
 +               format == PIPE_FORMAT_S8_USCALED_Z24_UNORM) {
           return GL_UNSIGNED_INT_24_8;
        }
        else {
@@@ -126,18 -126,12 +126,18 @@@ enum pipe_forma
  st_mesa_format_to_pipe_format(gl_format mesaFormat)
  {
     switch (mesaFormat) {
 -      /* fix this */
 -   case MESA_FORMAT_ARGB8888_REV:
 +   case MESA_FORMAT_RGBA8888:
 +      return PIPE_FORMAT_A8B8G8R8_UNORM;
 +   case MESA_FORMAT_RGBA8888_REV:
 +      return PIPE_FORMAT_R8G8B8A8_UNORM;
     case MESA_FORMAT_ARGB8888:
        return PIPE_FORMAT_B8G8R8A8_UNORM;
 +   case MESA_FORMAT_ARGB8888_REV:
 +      return PIPE_FORMAT_A8R8G8B8_UNORM;
     case MESA_FORMAT_XRGB8888:
        return PIPE_FORMAT_B8G8R8X8_UNORM;
 +   case MESA_FORMAT_XRGB8888_REV:
 +      return PIPE_FORMAT_X8R8G8B8_UNORM;
     case MESA_FORMAT_ARGB1555:
        return PIPE_FORMAT_B5G5R5A1_UNORM;
     case MESA_FORMAT_ARGB4444:
     case MESA_FORMAT_Z32:
        return PIPE_FORMAT_Z32_UNORM;
     case MESA_FORMAT_Z24_S8:
 -      return PIPE_FORMAT_S8Z24_UNORM;
 +      return PIPE_FORMAT_S8_USCALED_Z24_UNORM;
     case MESA_FORMAT_S8_Z24:
 -      return PIPE_FORMAT_Z24S8_UNORM;
 +      return PIPE_FORMAT_Z24_UNORM_S8_USCALED;
+    case MESA_FORMAT_Z24_X8:
+       return PIPE_FORMAT_X8Z24_UNORM;
+    case MESA_FORMAT_X8_Z24:
+       return PIPE_FORMAT_Z24X8_UNORM;
     case MESA_FORMAT_YCBCR:
        return PIPE_FORMAT_UYVY;
  #if FEATURE_texture_s3tc
  #endif
     default:
        assert(0);
 -      return 0;
 +      return PIPE_FORMAT_NONE;
     }
  }
  
@@@ -208,16 -206,12 +212,16 @@@ gl_forma
  st_pipe_format_to_mesa_format(enum pipe_format format)
  {
     switch (format) {
 +   case PIPE_FORMAT_A8B8G8R8_UNORM:
 +      return MESA_FORMAT_RGBA8888;
 +   case PIPE_FORMAT_R8G8B8A8_UNORM:
 +      return MESA_FORMAT_RGBA8888_REV;
     case PIPE_FORMAT_B8G8R8A8_UNORM:
        return MESA_FORMAT_ARGB8888;
 -   case PIPE_FORMAT_B8G8R8X8_UNORM:
 -      return MESA_FORMAT_XRGB8888;
     case PIPE_FORMAT_A8R8G8B8_UNORM:
        return MESA_FORMAT_ARGB8888_REV;
 +   case PIPE_FORMAT_B8G8R8X8_UNORM:
 +      return MESA_FORMAT_XRGB8888;
     case PIPE_FORMAT_X8R8G8B8_UNORM:
        return MESA_FORMAT_XRGB8888_REV;
     case PIPE_FORMAT_B5G5R5A1_UNORM:
        return MESA_FORMAT_L8;
     case PIPE_FORMAT_I8_UNORM:
        return MESA_FORMAT_I8;
 -   case PIPE_FORMAT_S8_UNORM:
 +   case PIPE_FORMAT_S8_USCALED:
        return MESA_FORMAT_S8;
  
     case PIPE_FORMAT_R16G16B16A16_SNORM:
        return MESA_FORMAT_Z16;
     case PIPE_FORMAT_Z32_UNORM:
        return MESA_FORMAT_Z32;
 -   case PIPE_FORMAT_S8Z24_UNORM:
 +   case PIPE_FORMAT_S8_USCALED_Z24_UNORM:
        return MESA_FORMAT_Z24_S8;
     case PIPE_FORMAT_X8Z24_UNORM:
        return MESA_FORMAT_Z24_X8;
     case PIPE_FORMAT_Z24X8_UNORM:
        return MESA_FORMAT_X8_Z24;
 -   case PIPE_FORMAT_Z24S8_UNORM:
 +   case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
        return MESA_FORMAT_S8_Z24;
  
     case PIPE_FORMAT_UYVY:
@@@ -384,7 -378,7 +388,7 @@@ default_deep_rgba_format(struct pipe_sc
     if (screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_SNORM, target, tex_usage, geom_flags)) {
        return PIPE_FORMAT_R16G16B16A16_SNORM;
     }
 -   if (tex_usage & PIPE_TEXTURE_USAGE_RENDER_TARGET)
 +   if (tex_usage & PIPE_BIND_RENDER_TARGET)
        return default_rgba_format(screen, target, tex_usage, geom_flags);
     else
        return PIPE_FORMAT_NONE;
@@@ -403,8 -397,8 +407,8 @@@ default_depth_format(struct pipe_scree
     static const enum pipe_format zFormats[] = {
        PIPE_FORMAT_Z16_UNORM,
        PIPE_FORMAT_Z32_UNORM,
 -      PIPE_FORMAT_Z24S8_UNORM,
 -      PIPE_FORMAT_S8Z24_UNORM
 +      PIPE_FORMAT_Z24_UNORM_S8_USCALED,
 +      PIPE_FORMAT_S8_USCALED_Z24_UNORM
     };
     uint i;
     for (i = 0; i < Elements(zFormats); i++) {
   * Given an OpenGL internalFormat value for a texture or surface, return
   * the best matching PIPE_FORMAT_x, or PIPE_FORMAT_NONE if there's no match.
   * \param target  one of PIPE_TEXTURE_x
 - * \param tex_usage  either PIPE_TEXTURE_USAGE_RENDER_TARGET
 - *                   or PIPE_TEXTURE_USAGE_SAMPLER
 + * \param tex_usage  either PIPE_BIND_RENDER_TARGET
 + *                   or PIPE_BIND_SAMPLER_VIEW
   */
  enum pipe_format
  st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
     case GL_COMPRESSED_RGB:
        return default_rgb_format( screen, target, tex_usage, geom_flags );
     case GL_RGBA16:
 -      if (tex_usage & PIPE_TEXTURE_USAGE_RENDER_TARGET)
 +      if (tex_usage & PIPE_BIND_RENDER_TARGET)
           return default_deep_rgba_format( screen, target, tex_usage, geom_flags );
        else
           return default_rgba_format( screen, target, tex_usage, geom_flags );
           return PIPE_FORMAT_Z16_UNORM;
        /* fall-through */
     case GL_DEPTH_COMPONENT24:
 -      if (screen->is_format_supported( screen, PIPE_FORMAT_Z24S8_UNORM, target, tex_usage, geom_flags ))
 -         return PIPE_FORMAT_Z24S8_UNORM;
 -      if (screen->is_format_supported( screen, PIPE_FORMAT_S8Z24_UNORM, target, tex_usage, geom_flags ))
 -         return PIPE_FORMAT_S8Z24_UNORM;
 +      if (screen->is_format_supported( screen, PIPE_FORMAT_Z24_UNORM_S8_USCALED, target, tex_usage, geom_flags ))
 +         return PIPE_FORMAT_Z24_UNORM_S8_USCALED;
 +      if (screen->is_format_supported( screen, PIPE_FORMAT_S8_USCALED_Z24_UNORM, target, tex_usage, geom_flags ))
 +         return PIPE_FORMAT_S8_USCALED_Z24_UNORM;
        /* fall-through */
     case GL_DEPTH_COMPONENT32:
        if (screen->is_format_supported( screen, PIPE_FORMAT_Z32_UNORM, target, tex_usage, geom_flags ))
     case GL_STENCIL_INDEX4_EXT:
     case GL_STENCIL_INDEX8_EXT:
     case GL_STENCIL_INDEX16_EXT:
 -      if (screen->is_format_supported( screen, PIPE_FORMAT_S8_UNORM, target, tex_usage, geom_flags ))
 -         return PIPE_FORMAT_S8_UNORM;
 -      if (screen->is_format_supported( screen, PIPE_FORMAT_Z24S8_UNORM, target, tex_usage, geom_flags ))
 -         return PIPE_FORMAT_Z24S8_UNORM;
 -      if (screen->is_format_supported( screen, PIPE_FORMAT_S8Z24_UNORM, target, tex_usage, geom_flags ))
 -         return PIPE_FORMAT_S8Z24_UNORM;
 +      if (screen->is_format_supported( screen, PIPE_FORMAT_S8_USCALED, target, tex_usage, geom_flags ))
 +         return PIPE_FORMAT_S8_USCALED;
 +      if (screen->is_format_supported( screen, PIPE_FORMAT_Z24_UNORM_S8_USCALED, target, tex_usage, geom_flags ))
 +         return PIPE_FORMAT_Z24_UNORM_S8_USCALED;
 +      if (screen->is_format_supported( screen, PIPE_FORMAT_S8_USCALED_Z24_UNORM, target, tex_usage, geom_flags ))
 +         return PIPE_FORMAT_S8_USCALED_Z24_UNORM;
        return PIPE_FORMAT_NONE;
  
     case GL_DEPTH_STENCIL_EXT:
     case GL_DEPTH24_STENCIL8_EXT:
 -      if (screen->is_format_supported( screen, PIPE_FORMAT_Z24S8_UNORM, target, tex_usage, geom_flags ))
 -         return PIPE_FORMAT_Z24S8_UNORM;
 -      if (screen->is_format_supported( screen, PIPE_FORMAT_S8Z24_UNORM, target, tex_usage, geom_flags ))
 -         return PIPE_FORMAT_S8Z24_UNORM;
 +      if (screen->is_format_supported( screen, PIPE_FORMAT_Z24_UNORM_S8_USCALED, target, tex_usage, geom_flags ))
 +         return PIPE_FORMAT_Z24_UNORM_S8_USCALED;
 +      if (screen->is_format_supported( screen, PIPE_FORMAT_S8_USCALED_Z24_UNORM, target, tex_usage, geom_flags ))
 +         return PIPE_FORMAT_S8_USCALED_Z24_UNORM;
        return PIPE_FORMAT_NONE;
  
     case GL_SRGB_EXT:
@@@ -655,9 -649,9 +659,9 @@@ st_choose_renderbuffer_format(struct pi
  {
     uint usage;
     if (is_depth_or_stencil_format(internalFormat))
 -      usage = PIPE_TEXTURE_USAGE_DEPTH_STENCIL;
 +      usage = PIPE_BIND_DEPTH_STENCIL;
     else
 -      usage = PIPE_TEXTURE_USAGE_RENDER_TARGET;
 +      usage = PIPE_BIND_RENDER_TARGET;
     return st_choose_format(screen, internalFormat, PIPE_TEXTURE_2D, usage);
  }
  
@@@ -675,7 -669,7 +679,7 @@@ st_ChooseTextureFormat(GLcontext *ctx, 
     (void) type;
  
     pFormat = st_choose_format(ctx->st->pipe->screen, internalFormat,
 -                              PIPE_TEXTURE_2D, PIPE_TEXTURE_USAGE_SAMPLER);
 +                              PIPE_TEXTURE_2D, PIPE_BIND_SAMPLER_VIEW);
     if (pFormat == PIPE_FORMAT_NONE)
        return MESA_FORMAT_NONE;