r600g: implement seamless_cube_map for evergreen
authorMarek Olšák <maraeo@gmail.com>
Mon, 2 May 2011 00:38:20 +0000 (02:38 +0200)
committerMarek Olšák <maraeo@gmail.com>
Fri, 6 May 2011 18:13:05 +0000 (20:13 +0200)
The r600/r700 support will follow soon.

src/gallium/drivers/r600/evergreen_state.c
src/gallium/drivers/r600/evergreend.h
src/gallium/drivers/r600/r600_pipe.c

index 3384a76803c839abd3ff2a14dd1756f55d4662c0..502f2663e8bbfc66fdbf7dfc27d5135fd64f1960 100644 (file)
@@ -332,6 +332,7 @@ static void *evergreen_create_sampler_state(struct pipe_context *ctx,
                        0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_03C008_SQ_TEX_SAMPLER_WORD2_0,
                                S_03C008_LOD_BIAS(S_FIXED(CLAMP(state->lod_bias, -16, 16), 8)) |
+                               (state->seamless_cube_map ? 0 : S_03C008_DISABLE_CUBE_WRAP(1)) |
                                S_03C008_TYPE(1),
                                0xFFFFFFFF, NULL);
 
index de445b879a10116493bd10b6329bafb809aad181..670606d9b07a009a8eac25c2314d06262c971f58 100644 (file)
 #define   S_03C008_FORCE_DEGAMMA(x)                    (((x) & 0x1) << 21)
 #define   G_03C008_FORCE_DEGAMMA(x)                    (((x) >> 21) & 0x1)
 #define   C_03C008_FORCE_DEGAMMA                       0xFFDFFFFF
+#define   S_03C008_ANISO_BIAS(x)                       (((x) & 0x3f) << 22)
+#define   G_03C008_ANISO_BIAS(x)                       (((x) >> 22) & 0x3f)
+#define   C_03C008_ANISO_BIAS                          (~(0x3f << 22))
+#define   S_03C008_TRUNCATE_COORD(x)                   (((x) & 0x1) << 28)
+#define   G_03C008_TRUNCATE_COORD(x)                   (((x) >> 28) & 0x1)
+#define   C_03C008_TRUNCATE_COORD                      (~(1 << 28))
+#define   S_03C008_DISABLE_CUBE_WRAP(x)                (((x) & 0x1) << 29)
+#define   G_03C008_DISABLE_CUBE_WRAP(x)                (((x) >> 29) & 0x1)
+#define   C_03C008_DISABLE_CUBE_WRAP                   (~(1 << 29))
 #define   S_03C008_TYPE(x)                             (((x) & 0x1) << 31)
 #define   G_03C008_TYPE(x)                             (((x) >> 31) & 0x1)
 #define   C_03C008_TYPE                                0x7FFFFFFF
index 779507cdc03fab18da1a8ea37a52d0585a6114b0..080180ffea35efead0ba20f72e2c6c183876761b 100644 (file)
@@ -383,6 +383,11 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
                /* R600 doesn't support per-MRT blends */
                return family == CHIP_R600 ? 0 : 1;
 
+       /* Supported on Evergreen. */
+       case PIPE_CAP_SEAMLESS_CUBE_MAP:
+       case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
+               return family >= CHIP_CEDAR ? 1 : 0;
+
        /* Unsupported features. */
        case PIPE_CAP_STREAM_OUTPUT:
        case PIPE_CAP_PRIMITIVE_RESTART: