Lines Matching refs:zstex

647 static bool si_can_fast_clear_depth(struct si_texture *zstex, unsigned level, float depth,
652 si_htile_enabled(zstex, level, PIPE_MASK_Z) &&
653 (!zstex->tc_compatible_htile || depth == 0 || depth == 1);
656 static bool si_can_fast_clear_stencil(struct si_texture *zstex, unsigned level, uint8_t stencil,
661 si_htile_enabled(zstex, level, PIPE_MASK_S) &&
662 (!zstex->tc_compatible_htile || stencil == 0);
903 struct si_texture *zstex = zsbuf ? (struct si_texture *)zsbuf->texture : NULL;
904 unsigned zs_num_layers = zstex ? util_num_layers(&zstex->buffer.b.b, zsbuf->u.tex.level) : 0;
906 if (zstex && zsbuf->u.tex.first_layer == 0 &&
908 si_htile_enabled(zstex, zsbuf->u.tex.level, PIPE_MASK_ZS)) {
915 if (zstex->enable_tc_compatible_htile_next_clear) {
918 (*buffers & PIPE_CLEAR_DEPTH && (!zstex->surface.has_stencil ||
919 zstex->htile_stencil_disabled))) {
921 assert(zstex->buffer.b.b.last_level == 0);
922 assert(!zstex->tc_compatible_htile);
925 zstex->enable_tc_compatible_htile_next_clear = false;
926 zstex->tc_compatible_htile = true;
939 if (zstex->htile_stencil_disabled || !zstex->surface.has_stencil) {
940 if (si_can_fast_clear_depth(zstex, level, depth, *buffers)) {
942 clear_value = si_get_htile_clear_value(zstex, depth);
944 zstex->depth_cleared_level_mask_once |= BITFIELD_BIT(level);
945 zstex->depth_cleared_level_mask |= BITFIELD_BIT(level);
949 if (si_can_fast_clear_depth(zstex, level, depth, *buffers) &&
950 si_can_fast_clear_stencil(zstex, level, stencil, *buffers)) {
952 clear_value = si_get_htile_clear_value(zstex, depth);
954 zstex->depth_cleared_level_mask_once |= BITFIELD_BIT(level);
955 zstex->depth_cleared_level_mask |= BITFIELD_BIT(level);
956 zstex->stencil_cleared_level_mask_once |= BITFIELD_BIT(level);
969 clear_value = !zstex->htile_stencil_disabled ? 0xfffff30f : 0xfffc000f;
972 zstex->need_flush_after_depth_decompression = sctx->gfx_level == GFX10_3;
975 si_init_buffer_clear(&info[num_clears++], &zstex->buffer.b.b,
976 zstex->surface.meta_offset, zstex->surface.meta_size, clear_value);
987 uint64_t htile_offset = zstex->surface.meta_offset;
997 htile_offset += zstex->surface.u.gfx9.meta_levels[level].offset;
998 htile_size = zstex->surface.u.gfx9.meta_levels[level].size;
999 } else if (zstex->buffer.b.b.last_level == 0) {
1001 htile_size = zstex->surface.meta_size;
1007 if (zstex->buffer.b.b.last_level == 0)
1008 htile_size = zstex->surface.meta_size;
1012 if (zstex->htile_stencil_disabled || !zstex->surface.has_stencil) {
1014 si_can_fast_clear_depth(zstex, level, depth, *buffers)) {
1017 si_init_buffer_clear(&info[num_clears++], &zstex->buffer.b.b, htile_offset,
1018 htile_size, si_get_htile_clear_value(zstex, depth));
1021 zstex->depth_cleared_level_mask_once |= BITFIELD_BIT(level);
1022 zstex->depth_cleared_level_mask |= BITFIELD_BIT(level);
1027 si_can_fast_clear_depth(zstex, level, depth, *buffers) &&
1028 si_can_fast_clear_stencil(zstex, level, stencil, *buffers)) {
1031 si_init_buffer_clear(&info[num_clears++], &zstex->buffer.b.b, htile_offset,
1032 htile_size, si_get_htile_clear_value(zstex, depth));
1035 zstex->depth_cleared_level_mask_once |= BITFIELD_BIT(level);
1036 zstex->depth_cleared_level_mask |= BITFIELD_BIT(level);
1037 zstex->stencil_cleared_level_mask_once |= BITFIELD_BIT(level);
1053 si_can_fast_clear_depth(zstex, level, depth, *buffers)) {
1056 si_init_buffer_clear_rmw(&info[num_clears++], &zstex->buffer.b.b, htile_offset,
1057 htile_size, si_get_htile_clear_value(zstex, depth),
1061 zstex->depth_cleared_level_mask_once |= BITFIELD_BIT(level);
1062 zstex->depth_cleared_level_mask |= BITFIELD_BIT(level);
1066 si_can_fast_clear_stencil(zstex, level, stencil, *buffers)) {
1069 si_init_buffer_clear_rmw(&info[num_clears++], &zstex->buffer.b.b, htile_offset,
1070 htile_size, si_get_htile_clear_value(zstex, depth),
1074 zstex->stencil_cleared_level_mask_once |= BITFIELD_BIT(level);
1079 zstex->need_flush_after_depth_decompression = update_db_depth_clear && sctx->gfx_level == GFX10_3;
1083 zstex->depth_clear_value[level] != (float)depth) {
1084 zstex->depth_clear_value[level] = depth;
1091 zstex->stencil_clear_value[level] != stencil) {
1092 zstex->stencil_clear_value[level] = stencil;
1109 struct si_texture *zstex = zsbuf ? (struct si_texture *)zsbuf->texture : NULL;
1137 if (zstex && zsbuf->u.tex.first_layer == 0 &&
1138 zsbuf->u.tex.last_layer == util_max_layer(&zstex->buffer.b.b, 0)) {
1141 if (si_can_fast_clear_depth(zstex, level, depth, buffers)) {
1144 if (!(zstex->depth_cleared_level_mask_once & BITFIELD_BIT(level)) ||
1145 zstex->depth_clear_value[level] != depth) {
1149 if (zstex->depth_clear_value[level] != (float)depth) {
1150 if ((zstex->depth_clear_value[level] != 0) != (depth != 0)) {
1156 zstex->depth_clear_value[level] = depth;
1164 if (si_can_fast_clear_stencil(zstex, level, stencil, buffers)) {
1169 if (!(zstex->stencil_cleared_level_mask_once & BITFIELD_BIT(level)) ||
1170 zstex->stencil_clear_value[level] != stencil) {
1174 if (zstex->stencil_clear_value[level] != (uint8_t)stencil) {
1176 zstex->stencil_clear_value[level] = stencil;
1203 zstex->depth_cleared_level_mask_once |= BITFIELD_BIT(zsbuf->u.tex.level);
1204 zstex->depth_cleared_level_mask |= BITFIELD_BIT(zsbuf->u.tex.level);
1211 zstex->stencil_cleared_level_mask_once |= BITFIELD_BIT(zsbuf->u.tex.level);