1bf215546Sopenharmony_ci/* 2bf215546Sopenharmony_ci * Copyright (c) 2011-2013 Luc Verhaegen <libv@skynet.be> 3bf215546Sopenharmony_ci * Copyright (c) 2018-2019 Lima Project 4bf215546Sopenharmony_ci * 5bf215546Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a 6bf215546Sopenharmony_ci * copy of this software and associated documentation files (the "Software"), 7bf215546Sopenharmony_ci * to deal in the Software without restriction, including without limitation 8bf215546Sopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sub license, 9bf215546Sopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the 10bf215546Sopenharmony_ci * Software is furnished to do so, subject to the following conditions: 11bf215546Sopenharmony_ci * 12bf215546Sopenharmony_ci * The above copyright notice and this permission notice (including the 13bf215546Sopenharmony_ci * next paragraph) shall be included in all copies or substantial portions 14bf215546Sopenharmony_ci * of the Software. 15bf215546Sopenharmony_ci * 16bf215546Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17bf215546Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18bf215546Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 19bf215546Sopenharmony_ci * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20bf215546Sopenharmony_ci * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21bf215546Sopenharmony_ci * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22bf215546Sopenharmony_ci * DEALINGS IN THE SOFTWARE. 23bf215546Sopenharmony_ci * 24bf215546Sopenharmony_ci */ 25bf215546Sopenharmony_ci 26bf215546Sopenharmony_ci#include "util/compiler.h" 27bf215546Sopenharmony_ci#include "util/u_memory.h" 28bf215546Sopenharmony_ci#include "util/u_upload_mgr.h" 29bf215546Sopenharmony_ci#include "util/u_math.h" 30bf215546Sopenharmony_ci#include "util/u_debug.h" 31bf215546Sopenharmony_ci#include "util/u_transfer.h" 32bf215546Sopenharmony_ci 33bf215546Sopenharmony_ci#include "lima_bo.h" 34bf215546Sopenharmony_ci#include "lima_context.h" 35bf215546Sopenharmony_ci#include "lima_screen.h" 36bf215546Sopenharmony_ci#include "lima_texture.h" 37bf215546Sopenharmony_ci#include "lima_resource.h" 38bf215546Sopenharmony_ci#include "lima_job.h" 39bf215546Sopenharmony_ci#include "lima_util.h" 40bf215546Sopenharmony_ci#include "lima_format.h" 41bf215546Sopenharmony_ci 42bf215546Sopenharmony_ci#include <drm-uapi/lima_drm.h> 43bf215546Sopenharmony_ci 44bf215546Sopenharmony_ci 45bf215546Sopenharmony_ci#define lima_tex_list_size 64 46bf215546Sopenharmony_ci 47bf215546Sopenharmony_cistatic_assert(offsetof(lima_tex_desc, va) == 24, "lima_tex_desc->va offset isn't 24"); 48bf215546Sopenharmony_ci 49bf215546Sopenharmony_ci 50bf215546Sopenharmony_cistatic void 51bf215546Sopenharmony_cilima_texture_desc_set_va(lima_tex_desc *desc, 52bf215546Sopenharmony_ci int idx, 53bf215546Sopenharmony_ci uint32_t va) 54bf215546Sopenharmony_ci{ 55bf215546Sopenharmony_ci unsigned va_bit_idx = VA_BIT_OFFSET + (VA_BIT_SIZE * idx); 56bf215546Sopenharmony_ci unsigned va_idx = va_bit_idx / 32; 57bf215546Sopenharmony_ci va_bit_idx %= 32; 58bf215546Sopenharmony_ci 59bf215546Sopenharmony_ci va >>= 6; 60bf215546Sopenharmony_ci 61bf215546Sopenharmony_ci desc->va[va_idx] |= va << va_bit_idx; 62bf215546Sopenharmony_ci if (va_bit_idx <= 6) 63bf215546Sopenharmony_ci return; 64bf215546Sopenharmony_ci desc->va[va_idx + 1] |= va >> (32 - va_bit_idx); 65bf215546Sopenharmony_ci} 66bf215546Sopenharmony_ci 67bf215546Sopenharmony_ci/* 68bf215546Sopenharmony_ci * Note: this function is used by both draw and flush code path, 69bf215546Sopenharmony_ci * make sure no lima_job_get() is called inside this. 70bf215546Sopenharmony_ci */ 71bf215546Sopenharmony_civoid 72bf215546Sopenharmony_cilima_texture_desc_set_res(struct lima_context *ctx, lima_tex_desc *desc, 73bf215546Sopenharmony_ci struct pipe_resource *prsc, 74bf215546Sopenharmony_ci unsigned first_level, unsigned last_level, 75bf215546Sopenharmony_ci unsigned first_layer, unsigned mrt_idx) 76bf215546Sopenharmony_ci{ 77bf215546Sopenharmony_ci unsigned width, height, depth, layout, i; 78bf215546Sopenharmony_ci struct lima_resource *lima_res = lima_resource(prsc); 79bf215546Sopenharmony_ci 80bf215546Sopenharmony_ci width = prsc->width0; 81bf215546Sopenharmony_ci height = prsc->height0; 82bf215546Sopenharmony_ci depth = prsc->depth0; 83bf215546Sopenharmony_ci if (first_level != 0) { 84bf215546Sopenharmony_ci width = u_minify(width, first_level); 85bf215546Sopenharmony_ci height = u_minify(height, first_level); 86bf215546Sopenharmony_ci depth = u_minify(depth, first_level); 87bf215546Sopenharmony_ci } 88bf215546Sopenharmony_ci 89bf215546Sopenharmony_ci desc->format = lima_format_get_texel(prsc->format); 90bf215546Sopenharmony_ci desc->swap_r_b = lima_format_get_texel_swap_rb(prsc->format); 91bf215546Sopenharmony_ci desc->width = width; 92bf215546Sopenharmony_ci desc->height = height; 93bf215546Sopenharmony_ci desc->depth = depth; 94bf215546Sopenharmony_ci 95bf215546Sopenharmony_ci if (lima_res->tiled) 96bf215546Sopenharmony_ci layout = 3; 97bf215546Sopenharmony_ci else { 98bf215546Sopenharmony_ci desc->stride = lima_res->levels[first_level].stride; 99bf215546Sopenharmony_ci desc->has_stride = 1; 100bf215546Sopenharmony_ci layout = 0; 101bf215546Sopenharmony_ci } 102bf215546Sopenharmony_ci 103bf215546Sopenharmony_ci uint32_t base_va = lima_res->bo->va; 104bf215546Sopenharmony_ci 105bf215546Sopenharmony_ci /* attach first level */ 106bf215546Sopenharmony_ci uint32_t first_va = base_va + lima_res->levels[first_level].offset + 107bf215546Sopenharmony_ci first_layer * lima_res->levels[first_level].layer_stride + 108bf215546Sopenharmony_ci mrt_idx * lima_res->mrt_pitch; 109bf215546Sopenharmony_ci desc->va_s.va_0 = first_va >> 6; 110bf215546Sopenharmony_ci desc->va_s.layout = layout; 111bf215546Sopenharmony_ci 112bf215546Sopenharmony_ci /* Attach remaining levels. 113bf215546Sopenharmony_ci * Each subsequent mipmap address is specified using the 26 msbs. 114bf215546Sopenharmony_ci * These addresses are then packed continuously in memory */ 115bf215546Sopenharmony_ci for (i = 1; i <= (last_level - first_level); i++) { 116bf215546Sopenharmony_ci uint32_t address = base_va + lima_res->levels[first_level + i].offset; 117bf215546Sopenharmony_ci lima_texture_desc_set_va(desc, i, address); 118bf215546Sopenharmony_ci } 119bf215546Sopenharmony_ci} 120bf215546Sopenharmony_ci 121bf215546Sopenharmony_cistatic unsigned 122bf215546Sopenharmony_cipipe_wrap_to_lima(unsigned pipe_wrap, bool using_nearest) 123bf215546Sopenharmony_ci{ 124bf215546Sopenharmony_ci switch (pipe_wrap) { 125bf215546Sopenharmony_ci case PIPE_TEX_WRAP_REPEAT: 126bf215546Sopenharmony_ci return LIMA_TEX_WRAP_REPEAT; 127bf215546Sopenharmony_ci case PIPE_TEX_WRAP_CLAMP_TO_EDGE: 128bf215546Sopenharmony_ci return LIMA_TEX_WRAP_CLAMP_TO_EDGE; 129bf215546Sopenharmony_ci case PIPE_TEX_WRAP_CLAMP: 130bf215546Sopenharmony_ci if (using_nearest) 131bf215546Sopenharmony_ci return LIMA_TEX_WRAP_CLAMP_TO_EDGE; 132bf215546Sopenharmony_ci else 133bf215546Sopenharmony_ci return LIMA_TEX_WRAP_CLAMP; 134bf215546Sopenharmony_ci case PIPE_TEX_WRAP_CLAMP_TO_BORDER: 135bf215546Sopenharmony_ci return LIMA_TEX_WRAP_CLAMP_TO_BORDER; 136bf215546Sopenharmony_ci case PIPE_TEX_WRAP_MIRROR_REPEAT: 137bf215546Sopenharmony_ci return LIMA_TEX_WRAP_MIRROR_REPEAT; 138bf215546Sopenharmony_ci case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE: 139bf215546Sopenharmony_ci return LIMA_TEX_WRAP_MIRROR_CLAMP_TO_EDGE; 140bf215546Sopenharmony_ci case PIPE_TEX_WRAP_MIRROR_CLAMP: 141bf215546Sopenharmony_ci if (using_nearest) 142bf215546Sopenharmony_ci return LIMA_TEX_WRAP_MIRROR_CLAMP_TO_EDGE; 143bf215546Sopenharmony_ci else 144bf215546Sopenharmony_ci return LIMA_TEX_WRAP_MIRROR_CLAMP; 145bf215546Sopenharmony_ci case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER: 146bf215546Sopenharmony_ci return LIMA_TEX_WRAP_MIRROR_CLAMP_TO_BORDER; 147bf215546Sopenharmony_ci default: 148bf215546Sopenharmony_ci return LIMA_TEX_WRAP_REPEAT; 149bf215546Sopenharmony_ci } 150bf215546Sopenharmony_ci} 151bf215546Sopenharmony_ci 152bf215546Sopenharmony_cistatic void 153bf215546Sopenharmony_cilima_update_tex_desc(struct lima_context *ctx, struct lima_sampler_state *sampler, 154bf215546Sopenharmony_ci struct lima_sampler_view *texture, void *pdesc, 155bf215546Sopenharmony_ci unsigned desc_size) 156bf215546Sopenharmony_ci{ 157bf215546Sopenharmony_ci /* unit is 1/16 since lod_bias is in fixed format */ 158bf215546Sopenharmony_ci int lod_bias_delta = 0; 159bf215546Sopenharmony_ci lima_tex_desc *desc = pdesc; 160bf215546Sopenharmony_ci unsigned first_level; 161bf215546Sopenharmony_ci unsigned last_level; 162bf215546Sopenharmony_ci unsigned first_layer; 163bf215546Sopenharmony_ci float max_lod; 164bf215546Sopenharmony_ci 165bf215546Sopenharmony_ci memset(desc, 0, desc_size); 166bf215546Sopenharmony_ci 167bf215546Sopenharmony_ci if (!texture) 168bf215546Sopenharmony_ci return; 169bf215546Sopenharmony_ci 170bf215546Sopenharmony_ci switch (texture->base.target) { 171bf215546Sopenharmony_ci case PIPE_TEXTURE_1D: 172bf215546Sopenharmony_ci desc->sampler_dim = LIMA_SAMPLER_DIM_1D; 173bf215546Sopenharmony_ci break; 174bf215546Sopenharmony_ci case PIPE_TEXTURE_2D: 175bf215546Sopenharmony_ci case PIPE_TEXTURE_RECT: 176bf215546Sopenharmony_ci desc->sampler_dim = LIMA_SAMPLER_DIM_2D; 177bf215546Sopenharmony_ci break; 178bf215546Sopenharmony_ci case PIPE_TEXTURE_CUBE: 179bf215546Sopenharmony_ci desc->cube_map = 1; 180bf215546Sopenharmony_ci FALLTHROUGH; 181bf215546Sopenharmony_ci case PIPE_TEXTURE_3D: 182bf215546Sopenharmony_ci desc->sampler_dim = LIMA_SAMPLER_DIM_3D; 183bf215546Sopenharmony_ci break; 184bf215546Sopenharmony_ci default: 185bf215546Sopenharmony_ci break; 186bf215546Sopenharmony_ci } 187bf215546Sopenharmony_ci 188bf215546Sopenharmony_ci if (!sampler->base.normalized_coords) 189bf215546Sopenharmony_ci desc->unnorm_coords = 1; 190bf215546Sopenharmony_ci 191bf215546Sopenharmony_ci first_level = texture->base.u.tex.first_level; 192bf215546Sopenharmony_ci last_level = texture->base.u.tex.last_level; 193bf215546Sopenharmony_ci first_layer = texture->base.u.tex.first_layer; 194bf215546Sopenharmony_ci if (last_level - first_level >= LIMA_MAX_MIP_LEVELS) 195bf215546Sopenharmony_ci last_level = first_level + LIMA_MAX_MIP_LEVELS - 1; 196bf215546Sopenharmony_ci 197bf215546Sopenharmony_ci desc->min_lod = lima_float_to_fixed8(sampler->base.min_lod); 198bf215546Sopenharmony_ci max_lod = MIN2(sampler->base.max_lod, sampler->base.min_lod + 199bf215546Sopenharmony_ci (last_level - first_level)); 200bf215546Sopenharmony_ci desc->max_lod = lima_float_to_fixed8(max_lod); 201bf215546Sopenharmony_ci desc->lod_bias = lima_float_to_fixed8(sampler->base.lod_bias); 202bf215546Sopenharmony_ci 203bf215546Sopenharmony_ci switch (sampler->base.min_mip_filter) { 204bf215546Sopenharmony_ci case PIPE_TEX_MIPFILTER_LINEAR: 205bf215546Sopenharmony_ci desc->min_mipfilter_2 = 3; 206bf215546Sopenharmony_ci break; 207bf215546Sopenharmony_ci case PIPE_TEX_MIPFILTER_NEAREST: 208bf215546Sopenharmony_ci desc->min_mipfilter_2 = 0; 209bf215546Sopenharmony_ci break; 210bf215546Sopenharmony_ci case PIPE_TEX_MIPFILTER_NONE: 211bf215546Sopenharmony_ci desc->max_lod = desc->min_lod; 212bf215546Sopenharmony_ci break; 213bf215546Sopenharmony_ci default: 214bf215546Sopenharmony_ci break; 215bf215546Sopenharmony_ci } 216bf215546Sopenharmony_ci 217bf215546Sopenharmony_ci switch (sampler->base.mag_img_filter) { 218bf215546Sopenharmony_ci case PIPE_TEX_FILTER_LINEAR: 219bf215546Sopenharmony_ci desc->mag_img_filter_nearest = 0; 220bf215546Sopenharmony_ci break; 221bf215546Sopenharmony_ci case PIPE_TEX_FILTER_NEAREST: 222bf215546Sopenharmony_ci default: 223bf215546Sopenharmony_ci desc->mag_img_filter_nearest = 1; 224bf215546Sopenharmony_ci break; 225bf215546Sopenharmony_ci } 226bf215546Sopenharmony_ci 227bf215546Sopenharmony_ci switch (sampler->base.min_img_filter) { 228bf215546Sopenharmony_ci break; 229bf215546Sopenharmony_ci case PIPE_TEX_FILTER_LINEAR: 230bf215546Sopenharmony_ci desc->min_img_filter_nearest = 0; 231bf215546Sopenharmony_ci break; 232bf215546Sopenharmony_ci case PIPE_TEX_FILTER_NEAREST: 233bf215546Sopenharmony_ci default: 234bf215546Sopenharmony_ci lod_bias_delta = 8; 235bf215546Sopenharmony_ci desc->min_img_filter_nearest = 1; 236bf215546Sopenharmony_ci break; 237bf215546Sopenharmony_ci } 238bf215546Sopenharmony_ci 239bf215546Sopenharmony_ci /* Panfrost mentions that GL_CLAMP is broken for NEAREST filter on Midgard, 240bf215546Sopenharmony_ci * looks like it also broken on Utgard, since it fails in piglit 241bf215546Sopenharmony_ci */ 242bf215546Sopenharmony_ci bool using_nearest = sampler->base.min_img_filter == PIPE_TEX_FILTER_NEAREST; 243bf215546Sopenharmony_ci 244bf215546Sopenharmony_ci desc->wrap_s = pipe_wrap_to_lima(sampler->base.wrap_s, using_nearest); 245bf215546Sopenharmony_ci desc->wrap_t = pipe_wrap_to_lima(sampler->base.wrap_t, using_nearest); 246bf215546Sopenharmony_ci desc->wrap_r = pipe_wrap_to_lima(sampler->base.wrap_r, using_nearest); 247bf215546Sopenharmony_ci 248bf215546Sopenharmony_ci desc->border_red = float_to_ushort(sampler->base.border_color.f[0]); 249bf215546Sopenharmony_ci desc->border_green = float_to_ushort(sampler->base.border_color.f[1]); 250bf215546Sopenharmony_ci desc->border_blue = float_to_ushort(sampler->base.border_color.f[2]); 251bf215546Sopenharmony_ci desc->border_alpha = float_to_ushort(sampler->base.border_color.f[3]); 252bf215546Sopenharmony_ci 253bf215546Sopenharmony_ci if (desc->min_img_filter_nearest && desc->mag_img_filter_nearest && 254bf215546Sopenharmony_ci desc->min_mipfilter_2 == 0 && 255bf215546Sopenharmony_ci (desc->min_lod != desc->max_lod)) 256bf215546Sopenharmony_ci lod_bias_delta = -1; 257bf215546Sopenharmony_ci 258bf215546Sopenharmony_ci desc->lod_bias += lod_bias_delta; 259bf215546Sopenharmony_ci 260bf215546Sopenharmony_ci lima_texture_desc_set_res(ctx, desc, texture->base.texture, 261bf215546Sopenharmony_ci first_level, last_level, first_layer, 0); 262bf215546Sopenharmony_ci} 263bf215546Sopenharmony_ci 264bf215546Sopenharmony_cistatic unsigned 265bf215546Sopenharmony_cilima_calc_tex_desc_size(struct lima_sampler_view *texture) 266bf215546Sopenharmony_ci{ 267bf215546Sopenharmony_ci unsigned size = offsetof(lima_tex_desc, va); 268bf215546Sopenharmony_ci unsigned va_bit_size; 269bf215546Sopenharmony_ci 270bf215546Sopenharmony_ci if (!texture) 271bf215546Sopenharmony_ci return lima_min_tex_desc_size; 272bf215546Sopenharmony_ci 273bf215546Sopenharmony_ci unsigned first_level = texture->base.u.tex.first_level; 274bf215546Sopenharmony_ci unsigned last_level = texture->base.u.tex.last_level; 275bf215546Sopenharmony_ci 276bf215546Sopenharmony_ci if (last_level - first_level >= LIMA_MAX_MIP_LEVELS) 277bf215546Sopenharmony_ci last_level = first_level + LIMA_MAX_MIP_LEVELS - 1; 278bf215546Sopenharmony_ci 279bf215546Sopenharmony_ci va_bit_size = VA_BIT_OFFSET + VA_BIT_SIZE * (last_level - first_level + 1); 280bf215546Sopenharmony_ci size += (va_bit_size + 7) >> 3; 281bf215546Sopenharmony_ci size = align(size, lima_min_tex_desc_size); 282bf215546Sopenharmony_ci 283bf215546Sopenharmony_ci return size; 284bf215546Sopenharmony_ci} 285bf215546Sopenharmony_ci 286bf215546Sopenharmony_civoid 287bf215546Sopenharmony_cilima_update_textures(struct lima_context *ctx) 288bf215546Sopenharmony_ci{ 289bf215546Sopenharmony_ci struct lima_job *job = lima_job_get(ctx); 290bf215546Sopenharmony_ci struct lima_texture_stateobj *lima_tex = &ctx->tex_stateobj; 291bf215546Sopenharmony_ci 292bf215546Sopenharmony_ci assert (lima_tex->num_samplers <= 16); 293bf215546Sopenharmony_ci 294bf215546Sopenharmony_ci /* Nothing to do - we have no samplers or textures */ 295bf215546Sopenharmony_ci if (!lima_tex->num_samplers || !lima_tex->num_textures) 296bf215546Sopenharmony_ci return; 297bf215546Sopenharmony_ci 298bf215546Sopenharmony_ci /* we always need to add texture bo to job */ 299bf215546Sopenharmony_ci for (int i = 0; i < lima_tex->num_samplers; i++) { 300bf215546Sopenharmony_ci struct lima_sampler_view *texture = lima_sampler_view(lima_tex->textures[i]); 301bf215546Sopenharmony_ci if (!texture) 302bf215546Sopenharmony_ci continue; 303bf215546Sopenharmony_ci struct lima_resource *rsc = lima_resource(texture->base.texture); 304bf215546Sopenharmony_ci lima_flush_previous_job_writing_resource(ctx, texture->base.texture); 305bf215546Sopenharmony_ci lima_job_add_bo(job, LIMA_PIPE_PP, rsc->bo, LIMA_SUBMIT_BO_READ); 306bf215546Sopenharmony_ci } 307bf215546Sopenharmony_ci 308bf215546Sopenharmony_ci /* do not regenerate texture desc if no change */ 309bf215546Sopenharmony_ci if (!(ctx->dirty & LIMA_CONTEXT_DIRTY_TEXTURES)) 310bf215546Sopenharmony_ci return; 311bf215546Sopenharmony_ci 312bf215546Sopenharmony_ci unsigned size = lima_tex_list_size; 313bf215546Sopenharmony_ci for (int i = 0; i < lima_tex->num_samplers; i++) { 314bf215546Sopenharmony_ci struct lima_sampler_view *texture = lima_sampler_view(lima_tex->textures[i]); 315bf215546Sopenharmony_ci size += lima_calc_tex_desc_size(texture); 316bf215546Sopenharmony_ci } 317bf215546Sopenharmony_ci 318bf215546Sopenharmony_ci uint32_t *descs = 319bf215546Sopenharmony_ci lima_ctx_buff_alloc(ctx, lima_ctx_buff_pp_tex_desc, size); 320bf215546Sopenharmony_ci 321bf215546Sopenharmony_ci off_t offset = lima_tex_list_size; 322bf215546Sopenharmony_ci for (int i = 0; i < lima_tex->num_samplers; i++) { 323bf215546Sopenharmony_ci struct lima_sampler_state *sampler = lima_sampler_state(lima_tex->samplers[i]); 324bf215546Sopenharmony_ci struct lima_sampler_view *texture = lima_sampler_view(lima_tex->textures[i]); 325bf215546Sopenharmony_ci unsigned desc_size = lima_calc_tex_desc_size(texture); 326bf215546Sopenharmony_ci 327bf215546Sopenharmony_ci descs[i] = lima_ctx_buff_va(ctx, lima_ctx_buff_pp_tex_desc) + offset; 328bf215546Sopenharmony_ci lima_update_tex_desc(ctx, sampler, texture, (void *)descs + offset, desc_size); 329bf215546Sopenharmony_ci offset += desc_size; 330bf215546Sopenharmony_ci } 331bf215546Sopenharmony_ci 332bf215546Sopenharmony_ci lima_dump_command_stream_print( 333bf215546Sopenharmony_ci job->dump, descs, size, false, "add textures_desc at va %x\n", 334bf215546Sopenharmony_ci lima_ctx_buff_va(ctx, lima_ctx_buff_pp_tex_desc)); 335bf215546Sopenharmony_ci 336bf215546Sopenharmony_ci lima_dump_texture_descriptor( 337bf215546Sopenharmony_ci job->dump, descs, size, 338bf215546Sopenharmony_ci lima_ctx_buff_va(ctx, lima_ctx_buff_pp_tex_desc) + lima_tex_list_size, 339bf215546Sopenharmony_ci lima_tex_list_size); 340bf215546Sopenharmony_ci} 341