- unsigned tile_h = NV50_TILE_HEIGHT(tile_mode);
- unsigned tile_d_shift = NV50_TILE_DIM_SHIFT(tile_mode, 1);
- unsigned tile_d = 1 << tile_d_shift;
+ return nv50_tex_choose_tile_dims_helper(nx, ny * 2, nz);
+}
+
+static uint32_t
+nv50_mt_choose_storage_type(struct nv50_miptree *mt, boolean compressed)
+{
+ const unsigned ms = mt->ms_x + mt->ms_y;
+
+ uint32_t tile_flags;
+
+ if (unlikely(mt->base.base.flags & NOUVEAU_RESOURCE_FLAG_LINEAR))
+ return 0;
+ if (unlikely(mt->base.base.bind & PIPE_BIND_CURSOR))
+ return 0;
+
+ switch (mt->base.base.format) {
+ case PIPE_FORMAT_Z16_UNORM:
+ tile_flags = 0x6c + ms;
+ break;
+ case PIPE_FORMAT_S8_UINT_Z24_UNORM:
+ tile_flags = 0x18 + ms;
+ break;
+ case PIPE_FORMAT_Z24X8_UNORM:
+ case PIPE_FORMAT_Z24_UNORM_S8_UINT:
+ tile_flags = 0x128 + ms;
+ break;
+ case PIPE_FORMAT_Z32_FLOAT:
+ tile_flags = 0x40 + ms;
+ break;
+ case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
+ tile_flags = 0x60 + ms;
+ break;
+ default:
+ switch (util_format_get_blocksizebits(mt->base.base.format)) {
+ case 128:
+ assert(ms < 3);
+ tile_flags = 0x74;
+ break;
+ case 64:
+ switch (ms) {
+ case 2: tile_flags = 0xfc; break;
+ case 3: tile_flags = 0xfd; break;
+ default:
+ tile_flags = 0x70;
+ break;
+ }
+ break;
+ case 32:
+ if (mt->base.base.bind & PIPE_BIND_SCANOUT) {
+ assert(ms == 0);
+ tile_flags = 0x7a;
+ } else {
+ switch (ms) {
+ case 2: tile_flags = 0xf8; break;
+ case 3: tile_flags = 0xf9; break;
+ default:
+ tile_flags = 0x70;
+ break;
+ }
+ }
+ break;
+ case 16:
+ case 8:
+ tile_flags = 0x70;
+ break;
+ default:
+ return 0;
+ }
+ if (mt->base.base.bind & PIPE_BIND_CURSOR)
+ tile_flags = 0;
+ }