From: Marek Olšák <marek.ol...@amd.com> --- src/gallium/drivers/radeonsi/si_blit.c | 8 ++-- src/gallium/drivers/radeonsi/si_clear.c | 14 +++--- src/gallium/drivers/radeonsi/si_descriptors.c | 2 +- src/gallium/drivers/radeonsi/si_pipe.h | 10 ++-- src/gallium/drivers/radeonsi/si_state.c | 2 +- src/gallium/drivers/radeonsi/si_texture.c | 48 ++++++++++--------- 6 files changed, 41 insertions(+), 43 deletions(-)
diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c index 82125910f4b..431cc6332f9 100644 --- a/src/gallium/drivers/radeonsi/si_blit.c +++ b/src/gallium/drivers/radeonsi/si_blit.c @@ -531,21 +531,21 @@ static void si_blit_decompress_color(struct si_context *sctx, sctx->decompression_enabled = false; si_make_CB_shader_coherent(sctx, tex->buffer.b.b.nr_samples, vi_dcc_enabled(tex, first_level)); } static void si_decompress_color_texture(struct si_context *sctx, struct si_texture *tex, unsigned first_level, unsigned last_level) { /* CMASK or DCC can be discarded and we can still end up here. */ - if (!tex->cmask.size && !tex->surface.fmask_size && !tex->dcc_offset) + if (!tex->cmask_size && !tex->surface.fmask_size && !tex->dcc_offset) return; si_blit_decompress_color(sctx, tex, first_level, last_level, 0, util_max_layer(&tex->buffer.b.b, first_level), false); } static void si_decompress_sampler_color_textures(struct si_context *sctx, struct si_samplers *textures) @@ -852,21 +852,21 @@ static void si_decompress_subresource(struct pipe_context *ctx, * by dirtying the framebuffer. */ if (sctx->framebuffer.state.zsbuf && sctx->framebuffer.state.zsbuf->u.tex.level == level && sctx->framebuffer.state.zsbuf->texture == tex) si_update_fb_dirtiness_after_rendering(sctx); si_decompress_depth(sctx, stex, planes, level, level, first_layer, last_layer); - } else if (stex->surface.fmask_size || stex->cmask.size || stex->dcc_offset) { + } else if (stex->surface.fmask_size || stex->cmask_size || stex->dcc_offset) { /* If we've rendered into the framebuffer and it's a blitting * source, make sure the decompression pass is invoked * by dirtying the framebuffer. */ for (unsigned i = 0; i < sctx->framebuffer.state.nr_cbufs; i++) { if (sctx->framebuffer.state.cbufs[i] && sctx->framebuffer.state.cbufs[i]->u.tex.level == level && sctx->framebuffer.state.cbufs[i]->texture == tex) { si_update_fb_dirtiness_after_rendering(sctx); break; @@ -1132,21 +1132,21 @@ static bool do_hardware_msaa_resolve(struct pipe_context *ctx, info->dst.box.y == 0 && info->dst.box.width == dst_width && info->dst.box.height == dst_height && info->dst.box.depth == 1 && info->src.box.x == 0 && info->src.box.y == 0 && info->src.box.width == dst_width && info->src.box.height == dst_height && info->src.box.depth == 1 && !dst->surface.is_linear && - (!dst->cmask.size || !dst->dirty_level_mask)) { /* dst cannot be fast-cleared */ + (!dst->cmask_size || !dst->dirty_level_mask)) { /* dst cannot be fast-cleared */ /* Check the last constraint. */ if (src->surface.micro_tile_mode != dst->surface.micro_tile_mode) { /* The next fast clear will switch to this mode to * get direct hw resolve next time if the mode is * different now. */ src->last_msaa_resolve_target_micro_mode = dst->surface.micro_tile_mode; goto resolve_to_temp; } @@ -1318,21 +1318,21 @@ static void si_flush_resource(struct pipe_context *ctx, struct si_texture *tex = (struct si_texture*)res; assert(res->target != PIPE_BUFFER); assert(!tex->dcc_separate_buffer || tex->dcc_gather_statistics); /* st/dri calls flush twice per frame (not a bug), this prevents double * decompression. */ if (tex->dcc_separate_buffer && !tex->separate_dcc_dirty) return; - if (!tex->is_depth && (tex->cmask.size || tex->dcc_offset)) { + if (!tex->is_depth && (tex->cmask_size || tex->dcc_offset)) { si_blit_decompress_color(sctx, tex, 0, res->last_level, 0, util_max_layer(res, 0), tex->dcc_separate_buffer != NULL); } /* Always do the analysis even if DCC is disabled at the moment. */ if (tex->dcc_gather_statistics) { bool separate_dcc_dirty = tex->separate_dcc_dirty; /* If the color buffer hasn't been unbound and fast clear hasn't diff --git a/src/gallium/drivers/radeonsi/si_clear.c b/src/gallium/drivers/radeonsi/si_clear.c index 7ea4459d512..817b31806e0 100644 --- a/src/gallium/drivers/radeonsi/si_clear.c +++ b/src/gallium/drivers/radeonsi/si_clear.c @@ -33,36 +33,36 @@ enum { SI_CLEAR = SI_SAVE_FRAGMENT_STATE, SI_CLEAR_SURFACE = SI_SAVE_FRAMEBUFFER | SI_SAVE_FRAGMENT_STATE, }; static void si_alloc_separate_cmask(struct si_screen *sscreen, struct si_texture *tex) { if (tex->cmask_buffer) return; - assert(tex->cmask.size == 0); + assert(tex->cmask_size == 0); if (!tex->surface.cmask_size) return; tex->cmask_buffer = si_aligned_buffer_create(&sscreen->b, SI_RESOURCE_FLAG_UNMAPPABLE, PIPE_USAGE_DEFAULT, tex->surface.cmask_size, tex->surface.cmask_alignment); if (tex->cmask_buffer == NULL) return; - tex->cmask.size = tex->surface.cmask_size; - tex->cmask.base_address_reg = tex->cmask_buffer->gpu_address >> 8; + tex->cmask_size = tex->surface.cmask_size; + tex->cmask_base_address_reg = tex->cmask_buffer->gpu_address >> 8; tex->cb_color_info |= S_028C70_FAST_CLEAR(1); p_atomic_inc(&sscreen->compressed_colortex_counter); } static bool si_set_clear_color(struct si_texture *tex, enum pipe_format surface_format, const union pipe_color_union *color) { union util_color uc; @@ -481,27 +481,27 @@ static void si_do_fast_color_clear(struct si_context *sctx, if (!vi_get_fast_clear_parameters(tex->buffer.b.b.format, fb->cbufs[i]->format, color, &reset_value, &eliminate_needed)) continue; if (eliminate_needed && too_small) continue; /* DCC fast clear with MSAA should clear CMASK to 0xC. */ - if (tex->buffer.b.b.nr_samples >= 2 && tex->cmask.size) { + if (tex->buffer.b.b.nr_samples >= 2 && tex->cmask_size) { /* TODO: This doesn't work with MSAA. */ if (eliminate_needed) continue; si_clear_buffer(sctx, &tex->cmask_buffer->b.b, - tex->cmask.offset, tex->cmask.size, + tex->cmask_offset, tex->cmask_size, 0xCCCCCCCC, SI_COHERENCY_CB_META); need_decompress_pass = true; } vi_dcc_clear_level(sctx, tex, 0, reset_value); if (eliminate_needed) need_decompress_pass = true; tex->separate_dcc_dirty = true; @@ -513,27 +513,27 @@ static void si_do_fast_color_clear(struct si_context *sctx, if (tex->surface.bpe > 8) { continue; } /* RB+ doesn't work with CMASK fast clear on Stoney. */ if (sctx->family == CHIP_STONEY) continue; /* ensure CMASK is enabled */ si_alloc_separate_cmask(sctx->screen, tex); - if (tex->cmask.size == 0) { + if (tex->cmask_size == 0) { continue; } /* Do the fast clear. */ si_clear_buffer(sctx, &tex->cmask_buffer->b.b, - tex->cmask.offset, tex->cmask.size, 0, + tex->cmask_offset, tex->cmask_size, 0, SI_COHERENCY_CB_META); need_decompress_pass = true; } if (need_decompress_pass && !(tex->dirty_level_mask & (1 << level))) { tex->dirty_level_mask |= 1 << level; p_atomic_inc(&sctx->screen->compressed_colortex_counter); } diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c index 9de0112878e..68b58fde06f 100644 --- a/src/gallium/drivers/radeonsi/si_descriptors.c +++ b/src/gallium/drivers/radeonsi/si_descriptors.c @@ -471,21 +471,21 @@ static void si_set_sampler_view_desc(struct si_context *sctx, si_set_sampler_state_desc(sstate, sview, is_buffer ? NULL : tex, desc + 12); } } static bool color_needs_decompression(struct si_texture *tex) { return tex->surface.fmask_size || (tex->dirty_level_mask && - (tex->cmask.size || tex->dcc_offset)); + (tex->cmask_size || tex->dcc_offset)); } static bool depth_needs_decompression(struct si_texture *tex) { /* If the depth/stencil texture is TC-compatible, no decompression * will be done. The decompression function will only flush DB caches * to make it coherent with shaders. That's necessary because the driver * doesn't flush DB caches in any other case. */ return tex->db_compatible; diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index b6ef60cbe3e..7ec547d91a3 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -223,36 +223,32 @@ struct r600_resource { /* Whether the resource has been exported via resource_get_handle. */ unsigned external_usage; /* PIPE_HANDLE_USAGE_* */ }; struct r600_transfer { struct threaded_transfer b; struct r600_resource *staging; unsigned offset; }; -struct r600_cmask_info { - uint64_t offset; - uint64_t base_address_reg; - uint32_t size; -}; - struct si_texture { struct r600_resource buffer; struct radeon_surf surface; uint64_t size; struct si_texture *flushed_depth_texture; /* Colorbuffer compression and fast clear. */ uint64_t fmask_offset; - struct r600_cmask_info cmask; + uint64_t cmask_offset; + uint64_t cmask_base_address_reg; + uint32_t cmask_size; struct r600_resource *cmask_buffer; uint64_t dcc_offset; /* 0 = disabled */ unsigned cb_color_info; /* fast clear enable bit */ unsigned color_clear_value[2]; unsigned last_msaa_resolve_target_micro_mode; unsigned num_level0_transfers; unsigned num_color_samples; /* Depth buffer compression and fast clear. */ uint64_t htile_offset; diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index cb05de2ca9d..a27b244c834 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -3005,21 +3005,21 @@ static void si_emit_framebuffer_state(struct si_context *sctx) if (tex->dcc_separate_buffer) radeon_add_to_buffer_list(sctx, sctx->gfx_cs, tex->dcc_separate_buffer, RADEON_USAGE_READWRITE, RADEON_PRIO_DCC); /* Compute mutable surface parameters. */ cb_color_base = tex->buffer.gpu_address >> 8; cb_color_fmask = 0; - cb_color_cmask = tex->cmask.base_address_reg; + cb_color_cmask = tex->cmask_base_address_reg; cb_dcc_base = 0; cb_color_info = cb->cb_color_info | tex->cb_color_info; cb_color_attrib = cb->cb_color_attrib; if (cb->base.u.tex.level > 0) cb_color_info &= C_028C70_FAST_CLEAR; if (tex->surface.fmask_size) { cb_color_fmask = (tex->buffer.gpu_address + tex->fmask_offset) >> 8; cb_color_fmask |= tex->surface.fmask_tile_swizzle; diff --git a/src/gallium/drivers/radeonsi/si_texture.c b/src/gallium/drivers/radeonsi/si_texture.c index b0ad144c6d5..7090e2491ce 100644 --- a/src/gallium/drivers/radeonsi/si_texture.c +++ b/src/gallium/drivers/radeonsi/si_texture.c @@ -75,33 +75,33 @@ bool si_prepare_for_dma_blit(struct si_context *sctx, */ if (vi_dcc_enabled(src, src_level) || vi_dcc_enabled(dst, dst_level)) return false; /* CMASK as: * src: Both texture and SDMA paths need decompression. Use SDMA. * dst: If overwriting the whole texture, discard CMASK and use * SDMA. Otherwise, use the 3D path. */ - if (dst->cmask.size && dst->dirty_level_mask & (1 << dst_level)) { + if (dst->cmask_size && dst->dirty_level_mask & (1 << dst_level)) { /* The CMASK clear is only enabled for the first level. */ assert(dst_level == 0); if (!util_texrange_covers_whole_level(&dst->buffer.b.b, dst_level, dstx, dsty, dstz, src_box->width, src_box->height, src_box->depth)) return false; si_texture_discard_cmask(sctx->screen, dst); } /* All requirements are met. Prepare textures for SDMA. */ - if (src->cmask.size && src->dirty_level_mask & (1 << src_level)) + if (src->cmask_size && src->dirty_level_mask & (1 << src_level)) sctx->b.flush_resource(&sctx->b, &src->buffer.b.b); assert(!(src->dirty_level_mask & (1 << src_level))); assert(!(dst->dirty_level_mask & (1 << dst_level))); return true; } /* Same as resource_copy_region, except that both upsampling and downsampling are allowed. */ static void si_copy_region_with_blit(struct pipe_context *pipe, @@ -413,28 +413,28 @@ void si_eliminate_fast_color_clear(struct si_context *sctx, if (n != sctx->num_decompress_calls) ctx->flush(ctx, NULL, 0); if (ctx == sscreen->aux_context) mtx_unlock(&sscreen->aux_context_lock); } void si_texture_discard_cmask(struct si_screen *sscreen, struct si_texture *tex) { - if (!tex->cmask.size) + if (!tex->cmask_size) return; assert(tex->buffer.b.b.nr_samples <= 1); /* Disable CMASK. */ - memset(&tex->cmask, 0, sizeof(tex->cmask)); - tex->cmask.base_address_reg = tex->buffer.gpu_address >> 8; + tex->cmask_size = 0; + tex->cmask_base_address_reg = tex->buffer.gpu_address >> 8; tex->dirty_level_mask = 0; tex->cb_color_info &= ~S_028C70_FAST_CLEAR(1); if (tex->cmask_buffer != &tex->buffer) r600_resource_reference(&tex->cmask_buffer, NULL); /* Notify all contexts about the change. */ p_atomic_inc(&sscreen->dirty_tex_counter); p_atomic_inc(&sscreen->compressed_colortex_counter); @@ -564,21 +564,23 @@ static void si_reallocate_texture_inplace(struct si_context *sctx, tex->buffer.bo_alignment = new_tex->buffer.bo_alignment; tex->buffer.domains = new_tex->buffer.domains; tex->buffer.flags = new_tex->buffer.flags; tex->surface = new_tex->surface; tex->size = new_tex->size; si_texture_reference(&tex->flushed_depth_texture, new_tex->flushed_depth_texture); tex->fmask_offset = new_tex->fmask_offset; - tex->cmask = new_tex->cmask; + tex->cmask_offset = new_tex->cmask_offset; + tex->cmask_size = new_tex->cmask_size; + tex->cmask_base_address_reg = new_tex->cmask_base_address_reg; r600_resource_reference(&tex->cmask_buffer, new_tex->cmask_buffer); tex->dcc_offset = new_tex->dcc_offset; tex->cb_color_info = new_tex->cb_color_info; memcpy(tex->color_clear_value, new_tex->color_clear_value, sizeof(tex->color_clear_value)); tex->last_msaa_resolve_target_micro_mode = new_tex->last_msaa_resolve_target_micro_mode; tex->htile_offset = new_tex->htile_offset; tex->depth_clear_value = new_tex->depth_clear_value; tex->dirty_level_mask = new_tex->dirty_level_mask; @@ -595,21 +597,21 @@ static void si_reallocate_texture_inplace(struct si_context *sctx, tex->separate_dcc_dirty = new_tex->separate_dcc_dirty; tex->dcc_gather_statistics = new_tex->dcc_gather_statistics; r600_resource_reference(&tex->dcc_separate_buffer, new_tex->dcc_separate_buffer); r600_resource_reference(&tex->last_dcc_separate_buffer, new_tex->last_dcc_separate_buffer); if (new_bind_flag == PIPE_BIND_LINEAR) { assert(!tex->htile_offset); - assert(!tex->cmask.size); + assert(!tex->cmask_size); assert(!tex->surface.fmask_size); assert(!tex->dcc_offset); assert(!tex->is_depth); } si_texture_reference(&new_tex, NULL); p_atomic_inc(&sctx->screen->dirty_tex_counter); } @@ -754,30 +756,30 @@ static boolean si_texture_get_handle(struct pipe_screen* screen, */ if (usage & PIPE_HANDLE_USAGE_WRITE && tex->dcc_offset) { if (si_texture_disable_dcc(sctx, tex)) { update_metadata = true; /* si_texture_disable_dcc flushes the context */ flush = false; } } if (!(usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH) && - (tex->cmask.size || tex->dcc_offset)) { + (tex->cmask_size || tex->dcc_offset)) { /* Eliminate fast clear (both CMASK and DCC) */ si_eliminate_fast_color_clear(sctx, tex); /* eliminate_fast_color_clear flushes the context */ flush = false; /* Disable CMASK if flush_resource isn't going * to be called. */ - if (tex->cmask.size) + if (tex->cmask_size) si_texture_discard_cmask(sscreen, tex); } /* Set metadata. */ if (!res->b.is_shared || update_metadata) { si_texture_init_metadata(sscreen, tex, &metadata); si_query_opaque_metadata(sscreen, tex, &metadata); sscreen->ws->buffer_set_metadata(res->buf, &metadata); } @@ -977,24 +979,24 @@ void si_print_texture_info(struct si_screen *sscreen, if (tex->surface.fmask_size) { u_log_printf(log, " FMASK: offset=%"PRIu64", size=%"PRIu64", " "alignment=%u, swmode=%u, epitch=%u\n", tex->fmask_offset, tex->surface.fmask_size, tex->surface.fmask_alignment, tex->surface.u.gfx9.fmask.swizzle_mode, tex->surface.u.gfx9.fmask.epitch); } - if (tex->cmask.size) { + if (tex->cmask_size) { u_log_printf(log, " CMask: offset=%"PRIu64", size=%u, " "alignment=%u, rb_aligned=%u, pipe_aligned=%u\n", - tex->cmask.offset, + tex->cmask_offset, tex->surface.cmask_size, tex->surface.cmask_alignment, tex->surface.u.gfx9.cmask.rb_aligned, tex->surface.u.gfx9.cmask.pipe_aligned); } if (tex->htile_offset) { u_log_printf(log, " HTile: offset=%"PRIu64", size=%u, alignment=%u, " "rb_aligned=%u, pipe_aligned=%u\n", tex->htile_offset, @@ -1031,24 +1033,24 @@ void si_print_texture_info(struct si_screen *sscreen, if (tex->surface.fmask_size) u_log_printf(log, " FMask: offset=%"PRIu64", size=%"PRIu64", alignment=%u, pitch_in_pixels=%u, " "bankh=%u, slice_tile_max=%u, tile_mode_index=%u\n", tex->fmask_offset, tex->surface.fmask_size, tex->surface.fmask_alignment, tex->surface.u.legacy.fmask.pitch_in_pixels, tex->surface.u.legacy.fmask.bankh, tex->surface.u.legacy.fmask.slice_tile_max, tex->surface.u.legacy.fmask.tiling_index); - if (tex->cmask.size) + if (tex->cmask_size) u_log_printf(log, " CMask: offset=%"PRIu64", size=%u, alignment=%u, " "slice_tile_max=%u\n", - tex->cmask.offset, tex->cmask.size, tex->surface.cmask_alignment, + tex->cmask_offset, tex->cmask_size, tex->surface.cmask_alignment, tex->surface.u.legacy.cmask_slice_tile_max); if (tex->htile_offset) u_log_printf(log, " HTile: offset=%"PRIu64", size=%u, " "alignment=%u, TC_compatible = %u\n", tex->htile_offset, tex->surface.htile_size, tex->surface.htile_alignment, tex->tc_compatible_htile); if (tex->dcc_offset) { @@ -1176,27 +1178,27 @@ si_texture_create_object(struct pipe_screen *screen, } else { if (base->nr_samples > 1 && !buf && !(sscreen->debug_flags & DBG(NO_FMASK))) { /* Allocate FMASK. */ tex->fmask_offset = align64(tex->size, tex->surface.fmask_alignment); tex->size = tex->fmask_offset + tex->surface.fmask_size; /* Allocate CMASK. */ - tex->cmask.size = tex->surface.cmask_size; - tex->cmask.offset = align64(tex->size, tex->surface.cmask_alignment); - tex->size = tex->cmask.offset + tex->cmask.size; + tex->cmask_size = tex->surface.cmask_size; + tex->cmask_offset = align64(tex->size, tex->surface.cmask_alignment); + tex->size = tex->cmask_offset + tex->cmask_size; tex->cb_color_info |= S_028C70_FAST_CLEAR(1); tex->cmask_buffer = &tex->buffer; - if (!tex->surface.fmask_size || !tex->cmask.size) { + if (!tex->surface.fmask_size || !tex->cmask_size) { FREE(tex); return NULL; } } /* Shared textures must always set up DCC here. * If it's not present, it will be disabled by * apply_opaque_metadata later. */ if (tex->surface.dcc_size && @@ -1222,24 +1224,24 @@ si_texture_create_object(struct pipe_screen *screen, resource->gpu_address = sscreen->ws->buffer_get_virtual_address(resource->buf); resource->bo_size = buf->size; resource->bo_alignment = buf->alignment; resource->domains = sscreen->ws->buffer_get_initial_domain(resource->buf); if (resource->domains & RADEON_DOMAIN_VRAM) resource->vram_usage = buf->size; else if (resource->domains & RADEON_DOMAIN_GTT) resource->gart_usage = buf->size; } - if (tex->cmask.size) { + if (tex->cmask_size) { /* Initialize the cmask to 0xCC (= compressed state). */ si_screen_clear_buffer(sscreen, &tex->cmask_buffer->b.b, - tex->cmask.offset, tex->cmask.size, + tex->cmask_offset, tex->cmask_size, 0xCCCCCCCC); } if (tex->htile_offset) { uint32_t clear_value = 0; if (sscreen->info.chip_class >= GFX9 || tex->tc_compatible_htile) clear_value = 0x0000030F; si_screen_clear_buffer(sscreen, &tex->buffer.b.b, tex->htile_offset, @@ -1249,22 +1251,22 @@ si_texture_create_object(struct pipe_screen *screen, /* Initialize DCC only if the texture is not being imported. */ if (!buf && tex->dcc_offset) { si_screen_clear_buffer(sscreen, &tex->buffer.b.b, tex->dcc_offset, tex->surface.dcc_size, 0xFFFFFFFF); } /* Initialize the CMASK base register value. */ - tex->cmask.base_address_reg = - (tex->buffer.gpu_address + tex->cmask.offset) >> 8; + tex->cmask_base_address_reg = + (tex->buffer.gpu_address + tex->cmask_offset) >> 8; if (sscreen->debug_flags & DBG(VM)) { fprintf(stderr, "VM start=0x%"PRIX64" end=0x%"PRIX64" | Texture %ix%ix%i, %i levels, %i samples, %s\n", tex->buffer.gpu_address, tex->buffer.gpu_address + tex->buffer.buf->size, base->width0, base->height0, util_num_layers(base, 0), base->last_level+1, base->nr_samples ? base->nr_samples : 1, util_format_short_name(base->format)); } if (sscreen->debug_flags & DBG(TEX)) { @@ -1615,22 +1617,22 @@ static void si_texture_invalidate_storage(struct si_context *sctx, struct si_screen *sscreen = sctx->screen; /* There is no point in discarding depth and tiled buffers. */ assert(!tex->is_depth); assert(tex->surface.is_linear); /* Reallocate the buffer in the same pipe_resource. */ si_alloc_resource(sscreen, &tex->buffer); /* Initialize the CMASK base address (needed even without CMASK). */ - tex->cmask.base_address_reg = - (tex->buffer.gpu_address + tex->cmask.offset) >> 8; + tex->cmask_base_address_reg = + (tex->buffer.gpu_address + tex->cmask_offset) >> 8; p_atomic_inc(&sscreen->dirty_tex_counter); sctx->num_alloc_tex_transfer_bytes += tex->size; } static void *si_texture_transfer_map(struct pipe_context *ctx, struct pipe_resource *texture, unsigned level, unsigned usage, -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev