Lines Matching defs:res

127    struct zink_resource *res = zink_resource(pres);
129 util_range_destroy(&res->valid_buffer_range);
130 util_idalloc_mt_free(&screen->buffer_ids, res->base.buffer_id_unique);
131 assert(!_mesa_hash_table_num_entries(&res->bufferview_cache));
132 simple_mtx_destroy(&res->bufferview_mtx);
133 ralloc_free(res->bufferview_cache.table);
135 assert(!_mesa_hash_table_num_entries(&res->surface_cache));
136 simple_mtx_destroy(&res->surface_mtx);
137 ralloc_free(res->surface_cache.table);
141 zink_resource_object_reference(screen, &res->obj, NULL);
143 FREE_CL(res);
813 VkResult res = VKSCR(CreateSamplerYcbcrConversion)(screen->dev, &sycci, NULL, &obj->sampler_conversion);
814 if (res != VK_SUCCESS) {
1096 struct zink_resource *res = CALLOC_STRUCT_CL(zink_resource);
1100 res->modifiers_count = modifiers_count;
1101 res->modifiers = mem_dup(modifiers, modifiers_count * sizeof(uint64_t));
1102 if (!res->modifiers) {
1103 FREE_CL(res);
1108 res->base.b = *templ;
1110 threaded_resource_init(&res->base.b, false);
1111 pipe_reference_init(&res->base.b.reference, 1);
1112 res->base.b.screen = pscreen;
1120 res->base.b.flags &= ~PIPE_RESOURCE_FLAG_SPARSE;
1122 res->obj = resource_object_create(screen, &templ2, whandle, &optimal_tiling, modifiers, modifiers_count, loader_private);
1123 if (!res->obj) {
1124 free(res->modifiers);
1125 FREE_CL(res);
1129 res->internal_format = templ->format;
1131 util_range_init(&res->valid_buffer_range);
1132 res->base.b.bind |= PIPE_BIND_SHADER_IMAGE;
1141 res->base.b.flags |= PIPE_RESOURCE_FLAG_DONT_MAP_DIRECTLY;
1145 res->base.b.bind |= PIPE_BIND_SHADER_IMAGE;
1148 VKSCR(GetImageSparseMemoryRequirements)(screen->dev, res->obj->image, &count, &res->sparse);
1149 res->base.b.nr_sparse_levels = res->sparse.imageMipTailFirstLod;
1151 res->format = zink_get_format(screen, templ->format);
1153 res->need_2D = (screen->need_2D_zs && util_format_is_depth_or_stencil(templ->format)) ||
1156 res->dmabuf_acquire = whandle && whandle->type == WINSYS_HANDLE_TYPE_FD;
1157 res->dmabuf = res->dmabuf_acquire = whandle && whandle->type == WINSYS_HANDLE_TYPE_FD;
1158 res->layout = res->dmabuf_acquire ? VK_IMAGE_LAYOUT_PREINITIALIZED : VK_IMAGE_LAYOUT_UNDEFINED;
1159 res->optimal_tiling = optimal_tiling;
1160 res->aspect = aspect_from_format(templ->format);
1166 res->obj->dt = zink_kopper_displaytarget_create(screen,
1167 res->base.b.bind,
1168 res->base.b.format,
1172 &res->dt_stride);
1173 assert(res->obj->dt);
1180 res->obj->dt = back->obj->dt;
1182 struct kopper_displaytarget *cdt = res->obj->dt;
1184 res->obj->vkflags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
1186 res->obj->vkflags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT | VK_IMAGE_CREATE_EXTENDED_USAGE_BIT;
1187 res->obj->vkusage = cdt->swapchain->scci.imageUsage;
1188 res->base.b.bind |= PIPE_BIND_DISPLAY_TARGET;
1189 res->optimal_tiling = true;
1190 res->swapchain = true;
1192 if (!res->obj->host_visible)
1193 res->base.b.flags |= PIPE_RESOURCE_FLAG_DONT_MAP_DIRECTLY;
1194 if (res->obj->is_buffer) {
1195 res->base.buffer_id_unique = util_idalloc_mt_alloc(&screen->buffer_ids);
1196 _mesa_hash_table_init(&res->bufferview_cache, NULL, NULL, equals_bvci);
1197 simple_mtx_init(&res->bufferview_mtx, mtx_plain);
1199 _mesa_hash_table_init(&res->surface_cache, NULL, NULL, equals_ivci);
1200 simple_mtx_init(&res->surface_mtx, mtx_plain);
1202 if (res->obj->exportable)
1203 res->base.b.bind |= ZINK_BIND_DMABUF;
1204 return &res->base.b;
1230 add_resource_bind(struct zink_context *ctx, struct zink_resource *res, unsigned bind)
1233 assert((res->base.b.bind & bind) == 0);
1234 zink_resource_image_barrier(ctx, res, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, 0, 0);
1235 res->base.b.bind |= bind;
1236 struct zink_resource_object *old_obj = res->obj;
1237 if (bind & ZINK_BIND_DMABUF && !res->modifiers_count && screen->info.have_EXT_image_drm_format_modifier) {
1238 res->modifiers_count = screen->modifier_props[res->base.b.format].drmFormatModifierCount;
1239 res->modifiers = malloc(res->modifiers_count * sizeof(uint64_t));
1240 for (unsigned i = 0; i < screen->modifier_props[res->base.b.format].drmFormatModifierCount; i++)
1241 res->modifiers[i] = screen->modifier_props[res->base.b.format].pDrmFormatModifierProperties[i].drmFormatModifier;
1243 struct zink_resource_object *new_obj = resource_object_create(screen, &res->base.b, NULL, &res->optimal_tiling, res->modifiers, res->modifiers_count, NULL);
1246 res->base.b.bind &= ~bind;
1249 struct zink_resource staging = *res;
1252 res->layout = VK_IMAGE_LAYOUT_UNDEFINED;
1253 res->obj->access = 0;
1254 res->obj->access_stage = 0;
1256 if (zink_resource_has_usage(res)) {
1257 zink_batch_reference_resource_move(&ctx->batch, res);
1260 res->obj = new_obj;
1262 for (unsigned i = 0; i <= res->base.b.last_level; i++) {
1264 u_minify(res->base.b.width0, i),
1265 u_minify(res->base.b.height0, i), res->base.b.array_size};
1266 box.depth = util_num_layers(&res->base.b, i);
1267 ctx->base.resource_copy_region(&ctx->base, &res->base.b, i, 0, 0, 0, &staging.base.b, i, &box);
1285 struct zink_resource *res = zink_resource(pres);
1286 struct zink_resource_object *obj = res->obj;
1306 } else if (res->obj->sampler_conversion) {
1309 aspect = res->aspect;
1314 *value = util_format_get_num_planes(res->drm_format);
1356 if (res->base.b.target == PIPE_TEXTURE_3D)
1403 struct zink_resource *res = zink_resource(tex);
1405 struct zink_resource_object *obj = res->obj;
1411 if (!res->obj->exportable) {
1412 assert(!res->all_binds); //TODO handle if problematic
1413 assert(!zink_resource_usage_is_unflushed(res));
1415 if (!(res->base.b.bind & PIPE_BIND_SHARED))
1417 if (!add_resource_bind(screen->copy_context, res, bind))
1421 obj = res->obj;
1497 struct zink_resource *res = zink_resource(pres);
1498 res->drm_format = whandle->format;
1500 res->valid = true;
1570 invalidate_buffer(struct zink_context *ctx, struct zink_resource *res)
1574 assert(res->base.b.target == PIPE_BUFFER);
1576 if (res->base.b.flags & PIPE_RESOURCE_FLAG_SPARSE)
1579 if (res->valid_buffer_range.start > res->valid_buffer_range.end)
1582 if (res->so_valid)
1585 res->so_valid = false;
1587 util_range_set_empty(&res->valid_buffer_range);
1588 if (!zink_resource_has_usage(res))
1591 struct zink_resource_object *old_obj = res->obj;
1592 struct zink_resource_object *new_obj = resource_object_create(screen, &res->base.b, NULL, NULL, NULL, 0, NULL);
1598 zink_batch_reference_resource_move(&ctx->batch, res);
1599 res->obj = new_obj;
1600 zink_resource_rebind(ctx, res);
1612 struct zink_resource *res = zink_resource(pres);
1613 if (res->valid && res->fb_binds)
1615 res->valid = false;
1676 map_resource(struct zink_screen *screen, struct zink_resource *res)
1678 assert(res->obj->host_visible);
1679 return zink_bo_map(screen, res->obj->bo);
1683 unmap_resource(struct zink_screen *screen, struct zink_resource *res)
1685 zink_bo_unmap(screen, res->obj->bo);
1732 struct zink_resource *res = zink_resource(pres);
1739 if (res->base.is_user_ptr)
1745 usage & PIPE_MAP_WRITE && !res->base.is_shared &&
1746 !util_ranges_intersect(&res->valid_buffer_range, box->x, box->x + box->width)) {
1751 if (usage & PIPE_MAP_DISCARD_RANGE && box->x == 0 && box->width == res->base.b.width0) {
1761 res->base.b.flags & PIPE_RESOURCE_FLAG_DONT_MAP_DIRECTLY) {
1771 if (invalidate_buffer(ctx, res)) {
1782 (!res->obj->host_visible ||
1788 if (!res->obj->host_visible || force_discard_range ||
1789 !zink_resource_usage_check_completion(screen, res, ZINK_RESOURCE_ACCESS_RW)) {
1805 res = zink_resource(trans->staging_res);
1815 if (!res->obj->host_visible)
1817 if (!zink_resource_usage_check_completion(screen, res, ZINK_RESOURCE_ACCESS_WRITE))
1821 (((usage & PIPE_MAP_READ) && !(usage & PIPE_MAP_PERSISTENT) && res->base.b.usage != PIPE_USAGE_STAGING) || !res->obj->host_visible)) {
1823 if (!res->obj->host_visible || !(usage & PIPE_MAP_ONCE)) {
1829 zink_copy_buffer(ctx, staging_res, res, trans->offset, box->x, box->width);
1830 res = staging_res;
1834 } else if ((usage & PIPE_MAP_UNSYNCHRONIZED) && !res->obj->host_visible) {
1840 res = staging_res;
1846 zink_resource_usage_wait(ctx, res, ZINK_RESOURCE_ACCESS_RW);
1848 zink_resource_usage_wait(ctx, res, ZINK_RESOURCE_ACCESS_WRITE);
1849 res->obj->access = 0;
1850 res->obj->access_stage = 0;
1855 if (usage & PIPE_MAP_WRITE && res->so_valid) {
1858 res->so_valid = false;
1860 ptr = map_resource(screen, res);
1866 if (!res->obj->coherent
1877 VkDeviceSize offset = res->obj->offset + trans->offset;
1878 VkMappedMemoryRange range = zink_resource_init_mem_range(screen, res->obj, offset, size);
1881 zink_bo_unmap(screen, res->obj->bo);
1887 util_range_add(&res->base.b, &res->valid_buffer_range, box->x, box->x + box->width);
1889 res->obj->persistent_maps++;
1910 struct zink_resource *res = zink_resource(pres);
1916 if (zink_is_swapchain(res))
1918 zink_kopper_acquire(ctx, res, 0);
1927 if (res->optimal_tiling || !res->obj->host_visible) {
1958 if (zink_resource_usage_is_unflushed_write(res))
1959 zink_resource_usage_wait(ctx, res, ZINK_RESOURCE_ACCESS_WRITE);
1960 zink_transfer_copy_bufimage(ctx, staging_res, res, trans);
1967 assert(!res->optimal_tiling);
1968 ptr = map_resource(screen, res);
1971 if (zink_resource_has_usage(res)) {
1975 zink_resource_usage_wait(ctx, res, ZINK_RESOURCE_ACCESS_WRITE);
1978 res->modifiers ? res->obj->modifier_aspect : res->aspect,
1983 VKSCR(GetImageSubresourceLayout)(screen->dev, res->obj->image, &isr, &srl);
1985 if (res->base.b.target == PIPE_TEXTURE_3D)
1991 const struct util_format_description *desc = util_format_description(res->base.b.format);
1996 if (!res->obj->coherent) {
1998 VkMappedMemoryRange range = zink_resource_init_mem_range(screen, res->obj, res->obj->offset + offset, size);
2008 if (!res->valid && res->fb_binds)
2010 res->valid = true;
2016 res->obj->persistent_maps++;
2032 struct zink_resource *res = zink_resource(ptrans->resource);
2038 res;
2050 assert(src_offset + size <= res->obj->size);
2062 zink_copy_buffer(ctx, res, staging_res, dst_offset, src_offset, size);
2064 zink_transfer_copy_bufimage(ctx, res, staging_res, trans);
2073 struct zink_resource *res = zink_resource(ptrans->resource);
2084 res->obj->persistent_maps--;
2096 struct zink_resource *res = zink_resource(trans->staging_res);
2097 if (!res)
2098 res = zink_resource(trans->base.b.resource);
2099 unmap_resource(screen, res);
2158 zink_resource_object_init_storage(struct zink_context *ctx, struct zink_resource *res)
2161 if (res->base.b.bind & PIPE_BIND_SHADER_IMAGE)
2163 if (res->obj->is_buffer) {
2167 assert(!res->obj->dt);
2168 zink_fb_clears_apply_region(ctx, &res->base.b, (struct u_rect){0, res->base.b.width0, 0, res->base.b.height0});
2169 bool ret = add_resource_bind(ctx, res, PIPE_BIND_SHADER_IMAGE);
2171 zink_resource_rebind(ctx, res);
2214 zink_get_depth_stencil_resources(struct pipe_resource *res,
2218 if (!res) {
2224 if (res->format != PIPE_FORMAT_S8_UINT) {
2225 if (out_z) *out_z = zink_resource(res);
2226 if (out_s) *out_s = zink_resource(zink_resource_get_separate_stencil(res));
2229 if (out_s) *out_s = zink_resource(res);
2244 struct zink_resource *res = zink_resource(pres);
2245 return res->internal_format;