diff options
Diffstat (limited to 'src/gallium')
| -rw-r--r-- | src/gallium/drivers/r300/r300_screen.c | 34 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_state_inlines.h | 4 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_texture.h | 1 | 
3 files changed, 23 insertions, 16 deletions
| diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c index a9058a25e5..1d9f91d0f7 100644 --- a/src/gallium/drivers/r300/r300_screen.c +++ b/src/gallium/drivers/r300/r300_screen.c @@ -80,13 +80,10 @@ static int r300_get_param(struct pipe_screen* pscreen, int param)      struct r300_screen* r300screen = r300_screen(pscreen);      switch (param) { -        /* XXX cases marked "IN THEORY" are possible on the hardware, -         * but haven't been implemented yet. */          case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS:              /* XXX I'm told this goes up to 16 */              return 8;          case PIPE_CAP_NPOT_TEXTURES: -            /* IN THEORY */              return 0;          case PIPE_CAP_TWO_SIDED_STENCIL:              if (r300screen->caps->is_r500) { @@ -95,16 +92,26 @@ static int r300_get_param(struct pipe_screen* pscreen, int param)                  return 0;              }          case PIPE_CAP_GLSL: -            if (r300screen->caps->is_r500) { -                return 1; -            } else { -                return 0; -            } +            /* I'll be frank. This is a lie. +             * +             * We don't truly support GLSL on any of this driver's chipsets. +             * To be fair, no chipset supports the full GLSL specification +             * to the best of our knowledge, but some of the less esoteric +             * features are still missing here. +             * +             * Rather than cripple ourselves intentionally, I'm going to set +             * this flag, and as Gallium's interface continues to change, I +             * hope that this single monolithic GLSL enable can slowly get +             * split down into many different pieces and the state tracker +             * will handle fallbacks transparently, like it should. +             * +             * ~ C. +             */ +            return 1;          case PIPE_CAP_ANISOTROPIC_FILTER:              return 1;          case PIPE_CAP_POINT_SPRITE: -            /* IN THEORY */ -            return 0; +            return 1;          case PIPE_CAP_MAX_RENDER_TARGETS:              return 4;          case PIPE_CAP_OCCLUSION_QUERY: @@ -145,10 +152,8 @@ static int r300_get_param(struct pipe_screen* pscreen, int param)          case PIPE_CAP_TEXTURE_MIRROR_REPEAT:              return 1;          case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS: -            /* XXX guessing (what a terrible guess) */ -            return 2; +            return 0;          case PIPE_CAP_TGSI_CONT_SUPPORTED: -            /* XXX */              return 0;          case PIPE_CAP_BLEND_EQUATION_SEPARATE:              return 1; @@ -229,6 +234,7 @@ static boolean check_tex_2d_format(enum pipe_format format, uint32_t usage,          /* Z buffer or texture */          case PIPE_FORMAT_Z16_UNORM: +        case PIPE_FORMAT_Z24X8_UNORM:          /* Z buffer with stencil or texture */          case PIPE_FORMAT_Z24S8_UNORM:              retval = usage & @@ -239,7 +245,6 @@ static boolean check_tex_2d_format(enum pipe_format format, uint32_t usage,          /* Definitely unsupported formats. */          /* Non-usable Z buffer/stencil formats. */          case PIPE_FORMAT_Z32_UNORM: -        case PIPE_FORMAT_Z24X8_UNORM:          case PIPE_FORMAT_S8Z24_UNORM:          case PIPE_FORMAT_X8Z24_UNORM:              debug_printf("r300: Note: Got unsupported format: %s in %s\n", @@ -249,7 +254,6 @@ static boolean check_tex_2d_format(enum pipe_format format, uint32_t usage,          /* XXX These don't even exist          case PIPE_FORMAT_A32R32G32B32:          case PIPE_FORMAT_A16R16G16B16: */ -        /* XXX Insert YUV422 packed VYUY and YVYU here */          /* XXX What the deuce is UV88? (r3xx accel page 14)              debug_printf("r300: Warning: Got unimplemented format: %s in %s\n",                  pf_name(format), __FUNCTION__); diff --git a/src/gallium/drivers/r300/r300_state_inlines.h b/src/gallium/drivers/r300/r300_state_inlines.h index 2431b75a51..ec11a41253 100644 --- a/src/gallium/drivers/r300/r300_state_inlines.h +++ b/src/gallium/drivers/r300/r300_state_inlines.h @@ -330,13 +330,15 @@ static INLINE uint32_t r300_translate_colorformat(enum pipe_format format)      return 0;  } -/* Depthbuffer and stencilbuffer. Thankfully, we only support two kinds. */ +/* Depthbuffer and stencilbuffer. Thankfully, we only support two flavors. */  static INLINE uint32_t r300_translate_zsformat(enum pipe_format format)  {      switch (format) {          /* 16-bit depth, no stencil */          case PIPE_FORMAT_Z16_UNORM:              return R300_DEPTHFORMAT_16BIT_INT_Z; +        /* 24-bit depth, ignored stencil */ +        case PIPE_FORMAT_Z24X8_UNORM:          /* 24-bit depth, 8-bit stencil */          case PIPE_FORMAT_Z24S8_UNORM:              return R300_DEPTHFORMAT_24BIT_INT_Z_8BIT_STENCIL; diff --git a/src/gallium/drivers/r300/r300_texture.h b/src/gallium/drivers/r300/r300_texture.h index 2e58bda716..55d1a0ac5c 100644 --- a/src/gallium/drivers/r300/r300_texture.h +++ b/src/gallium/drivers/r300/r300_texture.h @@ -80,6 +80,7 @@ static INLINE uint32_t r300_translate_texformat(enum pipe_format format)                  R300_TX_FORMAT_YUV_TO_RGB;          /* W24_FP */          case PIPE_FORMAT_Z24S8_UNORM: +        case PIPE_FORMAT_Z24X8_UNORM:              return R300_EASY_TX_FORMAT(X, X, X, X, W24_FP);          default:              debug_printf("r300: Implementation error: " | 
