From fe66cff41199bc2d99e769aa2b777237816a6768 Mon Sep 17 00:00:00 2001 From: Tales Lelo da Aparecida Date: Sat, 26 Mar 2022 22:08:30 -0300 Subject: [PATCH] zink: validate and log errors on vulkan calls This commit also replaces debug_printf with mesa_loge Signed-off-by: Tales Lelo da Aparecida Reviewed-By: Mike Blumenkrantz Part-of: --- src/gallium/drivers/zink/zink_batch.c | 20 +++++---- src/gallium/drivers/zink/zink_bo.c | 1 + src/gallium/drivers/zink/zink_context.c | 7 +++- src/gallium/drivers/zink/zink_descriptors.c | 10 ++--- src/gallium/drivers/zink/zink_descriptors_lazy.c | 2 +- src/gallium/drivers/zink/zink_device_info.py | 8 +++- src/gallium/drivers/zink/zink_fence.c | 1 + src/gallium/drivers/zink/zink_instance.py | 20 ++++++--- src/gallium/drivers/zink/zink_pipeline.c | 4 +- src/gallium/drivers/zink/zink_program.c | 2 +- src/gallium/drivers/zink/zink_query.c | 18 ++++++-- src/gallium/drivers/zink/zink_render_pass.c | 4 +- src/gallium/drivers/zink/zink_resource.c | 41 +++++++++++++------ src/gallium/drivers/zink/zink_screen.c | 52 +++++++++++++++++------- src/gallium/drivers/zink/zink_surface.c | 3 +- 15 files changed, 134 insertions(+), 59 deletions(-) diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index 9ac9404..248050b 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -31,7 +31,7 @@ zink_reset_batch_state(struct zink_context *ctx, struct zink_batch_state *bs) struct zink_screen *screen = zink_screen(ctx->base.screen); if (VKSCR(ResetCommandPool)(screen->dev, bs->cmdpool, 0) != VK_SUCCESS) - debug_printf("vkResetCommandPool failed\n"); + mesa_loge("ZINK: vkResetCommandPool failed"); /* unref all used resources */ set_foreach_remove(bs->resources, entry) { @@ -315,9 +315,9 @@ zink_start_batch(struct zink_context *ctx, struct zink_batch *batch) cbbi.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; cbbi.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; if (VKCTX(BeginCommandBuffer)(batch->state->cmdbuf, &cbbi) != VK_SUCCESS) - debug_printf("vkBeginCommandBuffer failed\n"); + mesa_loge("ZINK: vkBeginCommandBuffer failed"); if (VKCTX(BeginCommandBuffer)(batch->state->barrier_cmdbuf, &cbbi) != VK_SUCCESS) - debug_printf("vkBeginCommandBuffer failed\n"); + mesa_loge("ZINK: vkBeginCommandBuffer failed"); batch->state->fence.completed = false; if (ctx->last_fence) { @@ -364,7 +364,9 @@ submit_queue(void *data, void *gdata, int thread_index) } } - VKSCR(ResetFences)(screen->dev, 1, &bs->fence.fence); + if (VKSCR(ResetFences)(screen->dev, 1, &bs->fence.fence) != VK_SUCCESS) { + mesa_loge("ZINK: vkResetFences failed"); + } uint64_t batch_id = bs->fence.batch_id; si.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; @@ -405,12 +407,12 @@ submit_queue(void *data, void *gdata, int thread_index) } if (VKSCR(EndCommandBuffer)(bs->cmdbuf) != VK_SUCCESS) { - debug_printf("vkEndCommandBuffer failed\n"); + mesa_loge("ZINK: vkEndCommandBuffer failed"); bs->is_device_lost = true; goto end; } if (VKSCR(EndCommandBuffer)(bs->barrier_cmdbuf) != VK_SUCCESS) { - debug_printf("vkEndCommandBuffer failed\n"); + mesa_loge("ZINK: vkEndCommandBuffer failed"); bs->is_device_lost = true; goto end; } @@ -418,12 +420,14 @@ submit_queue(void *data, void *gdata, int thread_index) while (util_dynarray_contains(&bs->persistent_resources, struct zink_resource_object*)) { struct zink_resource_object *obj = util_dynarray_pop(&bs->persistent_resources, struct zink_resource_object*); VkMappedMemoryRange range = zink_resource_init_mem_range(screen, obj, 0, obj->size); - VKSCR(FlushMappedMemoryRanges)(screen->dev, 1, &range); + if (VKSCR(FlushMappedMemoryRanges)(screen->dev, 1, &range) != VK_SUCCESS) { + mesa_loge("ZINK: vkFlushMappedMemoryRanges failed"); + } } simple_mtx_lock(&screen->queue_lock); if (VKSCR(QueueSubmit)(bs->queue, 1, &si, bs->fence.fence) != VK_SUCCESS) { - debug_printf("ZINK: vkQueueSubmit() failed\n"); + mesa_loge("ZINK: vkQueueSubmit failed"); bs->is_device_lost = true; } simple_mtx_unlock(&screen->queue_lock); diff --git a/src/gallium/drivers/zink/zink_bo.c b/src/gallium/drivers/zink/zink_bo.c index 72c570c..7c7a16f 100644 --- a/src/gallium/drivers/zink/zink_bo.c +++ b/src/gallium/drivers/zink/zink_bo.c @@ -668,6 +668,7 @@ zink_bo_map(struct zink_screen *screen, struct zink_bo *bo) if (!cpu) { VkResult result = VKSCR(MapMemory)(screen->dev, real->mem, 0, real->base.size, 0, &cpu); if (result != VK_SUCCESS) { + mesa_loge("ZINK: vkMapMemory failed"); simple_mtx_unlock(&real->lock); return NULL; } diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index bc9c0c3..c157939 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -96,7 +96,7 @@ zink_context_destroy(struct pipe_context *pctx) if (util_queue_is_initialized(&screen->flush_queue)) util_queue_finish(&screen->flush_queue); if (ctx->batch.state && !screen->device_lost && VKSCR(QueueWaitIdle)(ctx->batch.state->queue) != VK_SUCCESS) - debug_printf("vkQueueWaitIdle failed\n"); + mesa_loge("ZINK: vkQueueWaitIdle failed"); util_blitter_destroy(ctx->blitter); for (unsigned i = 0; i < ctx->fb_state.nr_cbufs; i++) @@ -401,6 +401,7 @@ zink_create_sampler_state(struct pipe_context *pctx, return NULL; if (VKSCR(CreateSampler)(screen->dev, &sci, NULL, &sampler->sampler) != VK_SUCCESS) { + mesa_loge("ZINK: vkCreateSampler failed"); FREE(sampler); return NULL; } @@ -687,8 +688,10 @@ get_buffer_view(struct zink_context *ctx, struct zink_resource *res, VkBufferVie p_atomic_inc(&buffer_view->reference.count); } else { VkBufferView view; - if (VKSCR(CreateBufferView)(screen->dev, bvci, NULL, &view) != VK_SUCCESS) + if (VKSCR(CreateBufferView)(screen->dev, bvci, NULL, &view) != VK_SUCCESS) { + mesa_loge("ZINK: vkCreateBufferView failed"); goto out; + } buffer_view = CALLOC_STRUCT(zink_buffer_view); if (!buffer_view) { VKSCR(DestroyBufferView)(screen->dev, view, NULL); diff --git a/src/gallium/drivers/zink/zink_descriptors.c b/src/gallium/drivers/zink/zink_descriptors.c index 232b206..08191c9 100644 --- a/src/gallium/drivers/zink/zink_descriptors.c +++ b/src/gallium/drivers/zink/zink_descriptors.c @@ -330,7 +330,7 @@ descriptor_pool_create(struct zink_screen *screen, enum zink_descriptor_type typ dpci.flags = 0; dpci.maxSets = ZINK_DEFAULT_MAX_DESCS; if (VKSCR(CreateDescriptorPool)(screen->dev, &dpci, 0, &pool->descpool) != VK_SUCCESS) { - debug_printf("vkCreateDescriptorPool failed\n"); + mesa_loge("ZINK: vkCreateDescriptorPool failed"); goto fail; } @@ -374,7 +374,7 @@ descriptor_layout_create(struct zink_screen *screen, enum zink_descriptor_type t } } if (VKSCR(CreateDescriptorSetLayout)(screen->dev, &dcslci, 0, &dsl) != VK_SUCCESS) - debug_printf("vkCreateDescriptorSetLayout failed\n"); + mesa_loge("ZINK: vkCreateDescriptorSetLayout failed"); return dsl; } @@ -621,7 +621,7 @@ zink_descriptor_util_alloc_sets(struct zink_screen *screen, VkDescriptorSetLayou dsai.pSetLayouts = layouts; if (VKSCR(AllocateDescriptorSets)(screen->dev, &dsai, sets) != VK_SUCCESS) { - debug_printf("ZINK: %" PRIu64 " failed to allocate descriptor set :/\n", (uint64_t)dsl); + mesa_loge("ZINK: %" PRIu64 " failed to allocate descriptor set :/", (uint64_t)dsl); return false; } return true; @@ -1825,7 +1825,7 @@ zink_descriptors_init_bindless(struct zink_context *ctx) dcslci.bindingCount = num_bindings; dcslci.pBindings = bindings; if (VKSCR(CreateDescriptorSetLayout)(screen->dev, &dcslci, 0, &ctx->dd->bindless_layout) != VK_SUCCESS) { - debug_printf("vkCreateDescriptorSetLayout failed\n"); + mesa_loge("ZINK: vkCreateDescriptorSetLayout failed"); return; } @@ -1841,7 +1841,7 @@ zink_descriptors_init_bindless(struct zink_context *ctx) dpci.flags = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT; dpci.maxSets = 1; if (VKSCR(CreateDescriptorPool)(screen->dev, &dpci, 0, &ctx->dd->bindless_pool) != VK_SUCCESS) { - debug_printf("vkCreateDescriptorPool failed\n"); + mesa_loge("ZINK: vkCreateDescriptorPool failed"); return; } diff --git a/src/gallium/drivers/zink/zink_descriptors_lazy.c b/src/gallium/drivers/zink/zink_descriptors_lazy.c index c72adac..83bac2d 100644 --- a/src/gallium/drivers/zink/zink_descriptors_lazy.c +++ b/src/gallium/drivers/zink/zink_descriptors_lazy.c @@ -356,7 +356,7 @@ create_pool(struct zink_screen *screen, unsigned num_type_sizes, const VkDescrip dpci.flags = flags; dpci.maxSets = MAX_LAZY_DESCRIPTORS; if (VKSCR(CreateDescriptorPool)(screen->dev, &dpci, 0, &pool) != VK_SUCCESS) { - debug_printf("vkCreateDescriptorPool failed\n"); + mesa_loge("ZINK: vkCreateDescriptorPool failed"); return VK_NULL_HANDLE; } return pool; diff --git a/src/gallium/drivers/zink/zink_device_info.py b/src/gallium/drivers/zink/zink_device_info.py index e249fa9..ef21092 100644 --- a/src/gallium/drivers/zink/zink_device_info.py +++ b/src/gallium/drivers/zink/zink_device_info.py @@ -350,11 +350,15 @@ zink_get_physical_device_info(struct zink_screen *screen) vkGetPhysicalDeviceMemoryProperties(screen->pdev, &info->mem_props); // enumerate device supported extensions - if (vkEnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, NULL) == VK_SUCCESS) { + if (vkEnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, NULL) != VK_SUCCESS) { + mesa_loge("ZINK: vkEnumerateDeviceExtensionProperties failed"); + } else { if (num_extensions > 0) { VkExtensionProperties *extensions = MALLOC(sizeof(VkExtensionProperties) * num_extensions); if (!extensions) goto fail; - vkEnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, extensions); + if (vkEnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, extensions) != VK_SUCCESS) { + mesa_loge("ZINK: vkEnumerateDeviceExtensionProperties failed"); + } for (uint32_t i = 0; i < num_extensions; ++i) { %for ext in extensions: diff --git a/src/gallium/drivers/zink/zink_fence.c b/src/gallium/drivers/zink/zink_fence.c index a918f97..a47398a 100644 --- a/src/gallium/drivers/zink/zink_fence.c +++ b/src/gallium/drivers/zink/zink_fence.c @@ -247,6 +247,7 @@ zink_create_fence_fd(struct pipe_context *pctx, struct pipe_fence_handle **pfenc *pfence = NULL; if (VKSCR(CreateSemaphore)(screen->dev, &sci, NULL, &mfence->sem) != VK_SUCCESS) { + mesa_loge("ZINK: vkCreateSemaphore failed"); FREE(mfence); return; } diff --git a/src/gallium/drivers/zink/zink_instance.py b/src/gallium/drivers/zink/zink_instance.py index a6f6998..f871b5f 100644 --- a/src/gallium/drivers/zink/zink_instance.py +++ b/src/gallium/drivers/zink/zink_instance.py @@ -138,10 +138,14 @@ zink_create_instance(struct zink_instance_info *instance_info) // Build up the extensions from the reported ones but only for the unnamed layer uint32_t extension_count = 0; - if (vkEnumerateInstanceExtensionProperties(NULL, &extension_count, NULL) == VK_SUCCESS) { + if (vkEnumerateInstanceExtensionProperties(NULL, &extension_count, NULL) != VK_SUCCESS) { + mesa_loge("ZINK: vkEnumerateInstanceExtensionProperties failed"); + } else { VkExtensionProperties *extension_props = malloc(extension_count * sizeof(VkExtensionProperties)); if (extension_props) { - if (vkEnumerateInstanceExtensionProperties(NULL, &extension_count, extension_props) == VK_SUCCESS) { + if (vkEnumerateInstanceExtensionProperties(NULL, &extension_count, extension_props) != VK_SUCCESS) { + mesa_loge("ZINK: vkEnumerateInstanceExtensionProperties failed"); + } else { for (uint32_t i = 0; i < extension_count; i++) { %for ext in extensions: if (!strcmp(extension_props[i].extensionName, ${ext.extension_name_literal()})) { @@ -157,10 +161,14 @@ zink_create_instance(struct zink_instance_info *instance_info) // Build up the layers from the reported ones uint32_t layer_count = 0; - if (vkEnumerateInstanceLayerProperties(&layer_count, NULL) == VK_SUCCESS) { + if (vkEnumerateInstanceLayerProperties(&layer_count, NULL) != VK_SUCCESS) { + mesa_loge("ZINK: vkEnumerateInstanceLayerProperties failed"); + } else { VkLayerProperties *layer_props = malloc(layer_count * sizeof(VkLayerProperties)); if (layer_props) { - if (vkEnumerateInstanceLayerProperties(&layer_count, layer_props) == VK_SUCCESS) { + if (vkEnumerateInstanceLayerProperties(&layer_count, layer_props) != VK_SUCCESS) { + mesa_loge("ZINK: vkEnumerateInstanceLayerProperties failed"); + } else { for (uint32_t i = 0; i < layer_count; i++) { %for layer in layers: if (!strcmp(layer_props[i].layerName, ${layer.extension_name_literal()})) { @@ -229,8 +237,10 @@ zink_create_instance(struct zink_instance_info *instance_info) VkInstance instance = VK_NULL_HANDLE; VkResult err = vkCreateInstance(&ici, NULL, &instance); - if (err != VK_SUCCESS) + if (err != VK_SUCCESS) { + mesa_loge("ZINK: vkCreateInstance failed"); return VK_NULL_HANDLE; + } return instance; } diff --git a/src/gallium/drivers/zink/zink_pipeline.c b/src/gallium/drivers/zink/zink_pipeline.c index a0a3ce5..b36aa00 100644 --- a/src/gallium/drivers/zink/zink_pipeline.c +++ b/src/gallium/drivers/zink/zink_pipeline.c @@ -301,7 +301,7 @@ zink_create_gfx_pipeline(struct zink_screen *screen, VkPipeline pipeline; if (vkCreateGraphicsPipelines(screen->dev, prog->base.pipeline_cache, 1, &pci, NULL, &pipeline) != VK_SUCCESS) { - debug_printf("vkCreateGraphicsPipelines failed\n"); + mesa_loge("ZINK: vkCreateGraphicsPipelines failed"); return VK_NULL_HANDLE; } @@ -342,7 +342,7 @@ zink_create_compute_pipeline(struct zink_screen *screen, struct zink_compute_pro VkPipeline pipeline; if (vkCreateComputePipelines(screen->dev, comp->base.pipeline_cache, 1, &pci, NULL, &pipeline) != VK_SUCCESS) { - debug_printf("vkCreateComputePipelines failed\n"); + mesa_loge("ZINK: vkCreateComputePipelines failed"); return VK_NULL_HANDLE; } zink_screen_update_pipeline_cache(screen, &comp->base); diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 78c810a..bb9d495 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -369,7 +369,7 @@ zink_pipeline_layout_create(struct zink_screen *screen, struct zink_program *pg, VkPipelineLayout layout; if (VKSCR(CreatePipelineLayout)(screen->dev, &plci, NULL, &layout) != VK_SUCCESS) { - debug_printf("vkCreatePipelineLayout failed!\n"); + mesa_loge("vkCreatePipelineLayout failed"); return VK_NULL_HANDLE; } diff --git a/src/gallium/drivers/zink/zink_query.c b/src/gallium/drivers/zink/zink_query.c index 09b421d..3c0b3da 100644 --- a/src/gallium/drivers/zink/zink_query.c +++ b/src/gallium/drivers/zink/zink_query.c @@ -293,8 +293,10 @@ zink_create_query(struct pipe_context *pctx, pool_create.pipelineStatistics = pipeline_statistic_convert(index); VkResult status = VKSCR(CreateQueryPool)(screen->dev, &pool_create, NULL, &query->query_pool); - if (status != VK_SUCCESS) + if (status != VK_SUCCESS) { + mesa_loge("ZINK: vkCreateQueryPool failed"); goto fail; + } if (query_type == PIPE_QUERY_PRIMITIVES_GENERATED) { /* if xfb is active, we need to use an xfb query, otherwise we need pipeline statistics */ pool_create.sType = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO; @@ -302,14 +304,18 @@ zink_create_query(struct pipe_context *pctx, pool_create.queryCount = NUM_QUERIES; status = VKSCR(CreateQueryPool)(screen->dev, &pool_create, NULL, &query->xfb_query_pool[0]); - if (status != VK_SUCCESS) + if (status != VK_SUCCESS) { + mesa_loge("ZINK: vkCreateQueryPool failed"); goto fail; + } } else if (query_type == PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE) { /* need to monitor all xfb streams */ for (unsigned i = 0; i < ARRAY_SIZE(query->xfb_query_pool); i++) { status = VKSCR(CreateQueryPool)(screen->dev, &pool_create, NULL, &query->xfb_query_pool[i]); - if (status != VK_SUCCESS) + if (status != VK_SUCCESS) { + mesa_loge("ZINK: vkCreateQueryPool failed"); goto fail; + } } } if (!qbo_append(pctx->screen, query)) @@ -1070,6 +1076,8 @@ zink_get_query_result_resource(struct pipe_context *pctx, 0, size_flags | VK_QUERY_RESULT_WITH_AVAILABILITY_BIT | flag) == VK_SUCCESS) { tc_buffer_write(pctx, pres, offset, result_size, (unsigned char*)u64 + src_offset); return; + } else { + mesa_loge("ZINK: vkGetQueryPoolResults failed"); } } struct pipe_resource *staging = pipe_buffer_create(pctx->screen, 0, PIPE_USAGE_STAGING, src_offset + result_size); @@ -1114,7 +1122,9 @@ zink_get_timestamp(struct pipe_context *pctx) VkCalibratedTimestampInfoEXT cti = {0}; cti.sType = VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT; cti.timeDomain = VK_TIME_DOMAIN_DEVICE_EXT; - VKSCR(GetCalibratedTimestampsEXT)(screen->dev, 1, &cti, ×tamp, &deviation); + if (VKSCR(GetCalibratedTimestampsEXT)(screen->dev, 1, &cti, ×tamp, &deviation) != VK_SUCCESS) { + mesa_loge("ZINK: vkGetCalibratedTimestampsEXT failed"); + } timestamp_to_nanoseconds(screen, ×tamp); return timestamp; } diff --git a/src/gallium/drivers/zink/zink_render_pass.c b/src/gallium/drivers/zink/zink_render_pass.c index 2251191..0506f35 100644 --- a/src/gallium/drivers/zink/zink_render_pass.c +++ b/src/gallium/drivers/zink/zink_render_pass.c @@ -118,7 +118,7 @@ create_render_pass(struct zink_screen *screen, struct zink_render_pass_state *st VkRenderPass render_pass; if (VKSCR(CreateRenderPass)(screen->dev, &rpci, NULL, &render_pass) != VK_SUCCESS) { - debug_printf("vkCreateRenderPass failed\n"); + mesa_loge("ZINK: vkCreateRenderPass failed"); return VK_NULL_HANDLE; } @@ -273,7 +273,7 @@ create_render_pass2(struct zink_screen *screen, struct zink_render_pass_state *s VkRenderPass render_pass; if (VKSCR(CreateRenderPass2)(screen->dev, &rpci, NULL, &render_pass) != VK_SUCCESS) { - debug_printf("vkCreateRenderPass2 failed\n"); + mesa_loge("ZINK: vkCreateRenderPass2 failed"); return VK_NULL_HANDLE; } diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 25b8b54..4edec5c 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -516,14 +516,14 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t VkBufferCreateInfo bci = create_bci(screen, templ, templ->bind); if (VKSCR(CreateBuffer)(screen->dev, &bci, NULL, &obj->buffer) != VK_SUCCESS) { - debug_printf("vkCreateBuffer failed\n"); + mesa_loge("ZINK: vkCreateBuffer failed"); goto fail1; } if (!(templ->bind & PIPE_BIND_SHADER_IMAGE)) { bci.usage |= VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT; if (VKSCR(CreateBuffer)(screen->dev, &bci, NULL, &obj->storage_buffer) != VK_SUCCESS) { - debug_printf("vkCreateBuffer failed\n"); + mesa_loge("ZINK: vkCreateBuffer failed"); goto fail2; } } @@ -661,13 +661,15 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t sycci.chromaFilter = VK_FILTER_LINEAR; sycci.forceExplicitReconstruction = VK_FALSE; VkResult res = VKSCR(CreateSamplerYcbcrConversion)(screen->dev, &sycci, NULL, &obj->sampler_conversion); - if (res != VK_SUCCESS) + if (res != VK_SUCCESS) { + mesa_loge("ZINK: vkCreateSamplerYcbcrConversion failed"); goto fail1; + } } VkResult result = VKSCR(CreateImage)(screen->dev, &ici, NULL, &obj->image); if (result != VK_SUCCESS) { - debug_printf("vkCreateImage failed\n"); + mesa_loge("ZINK: vkCreateImage failed"); goto fail1; } @@ -676,7 +678,7 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t modprops.sType = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT; result = VKSCR(GetImageDrmFormatModifierPropertiesEXT)(screen->dev, obj->image, &modprops); if (result != VK_SUCCESS) { - debug_printf("GetImageDrmFormatModifierPropertiesEXT failed\n"); + mesa_loge("ZINK: vkGetImageDrmFormatModifierPropertiesEXT failed"); goto fail1; } obj->modifier = modprops.drmFormatModifier; @@ -837,10 +839,14 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t if (templ->target == PIPE_BUFFER) { if (!(templ->flags & PIPE_RESOURCE_FLAG_SPARSE)) { - if (VKSCR(BindBufferMemory)(screen->dev, obj->buffer, zink_bo_get_mem(obj->bo), obj->offset) != VK_SUCCESS) + if (VKSCR(BindBufferMemory)(screen->dev, obj->buffer, zink_bo_get_mem(obj->bo), obj->offset) != VK_SUCCESS) { + mesa_loge("ZINK: vkBindBufferMemory failed"); goto fail3; - if (obj->storage_buffer && VKSCR(BindBufferMemory)(screen->dev, obj->storage_buffer, zink_bo_get_mem(obj->bo), obj->offset) != VK_SUCCESS) + } + if (obj->storage_buffer && VKSCR(BindBufferMemory)(screen->dev, obj->storage_buffer, zink_bo_get_mem(obj->bo), obj->offset) != VK_SUCCESS) { + mesa_loge("ZINK: vkBindBufferMemory failed"); goto fail3; + } } } else { if (num_planes > 1) { @@ -858,12 +864,16 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t planes[i].planeAspect = plane_aspects[i]; offset += obj->plane_sizes[i]; } - if (VKSCR(BindImageMemory2)(screen->dev, num_planes, infos) != VK_SUCCESS) + if (VKSCR(BindImageMemory2)(screen->dev, num_planes, infos) != VK_SUCCESS) { + mesa_loge("ZINK: vkBindImageMemory2 failed"); goto fail3; + } } else { if (!(templ->flags & PIPE_RESOURCE_FLAG_SPARSE)) - if (VKSCR(BindImageMemory)(screen->dev, obj->image, zink_bo_get_mem(obj->bo), obj->offset) != VK_SUCCESS) + if (VKSCR(BindImageMemory)(screen->dev, obj->image, zink_bo_get_mem(obj->bo), obj->offset) != VK_SUCCESS) { + mesa_loge("ZINK: vkBindImageMemory failed"); goto fail3; + } } } return obj; @@ -1141,8 +1151,10 @@ zink_resource_get_handle(struct pipe_screen *pscreen, else fd_info.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT; VkResult result = VKSCR(GetMemoryFdKHR)(screen->dev, &fd_info, &fd); - if (result != VK_SUCCESS) + if (result != VK_SUCCESS) { + mesa_loge("ZINK: vkGetMemoryFdKHR failed"); return false; + } if (whandle->type == WINSYS_HANDLE_TYPE_KMS) { uint32_t h; bool success = drmPrimeFDToHandle(screen->drm_fd, fd, &h) == 0; @@ -1530,6 +1542,7 @@ zink_buffer_map(struct pipe_context *pctx, VkDeviceSize offset = res->obj->offset + trans->offset; VkMappedMemoryRange range = zink_resource_init_mem_range(screen, res->obj, offset, size); if (VKSCR(InvalidateMappedMemoryRanges)(screen->dev, 1, &range) != VK_SUCCESS) { + mesa_loge("ZINK: vkInvalidateMappedMemoryRanges failed"); zink_bo_unmap(screen, res->obj->bo); goto fail; } @@ -1644,7 +1657,9 @@ zink_image_map(struct pipe_context *pctx, if (!res->obj->coherent) { VkDeviceSize size = (VkDeviceSize)box->width * box->height * desc->block.bits / 8; VkMappedMemoryRange range = zink_resource_init_mem_range(screen, res->obj, res->obj->offset + offset, size); - VKSCR(FlushMappedMemoryRanges)(screen->dev, 1, &range); + if (VKSCR(FlushMappedMemoryRanges)(screen->dev, 1, &range) != VK_SUCCESS) { + mesa_loge("ZINK: vkFlushMappedMemoryRanges failed"); + } } ptr = ((uint8_t *)ptr) + offset; } @@ -1691,7 +1706,9 @@ zink_transfer_flush_region(struct pipe_context *pctx, } if (!m->obj->coherent) { VkMappedMemoryRange range = zink_resource_init_mem_range(screen, m->obj, m->obj->offset, m->obj->size); - VKSCR(FlushMappedMemoryRanges)(screen->dev, 1, &range); + if (VKSCR(FlushMappedMemoryRanges)(screen->dev, 1, &range) != VK_SUCCESS) { + mesa_loge("ZINK: vkFlushMappedMemoryRanges failed"); + } } if (trans->staging_res) { struct zink_resource *staging_res = zink_resource(trans->staging_res); diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 854e86e..d25c36e 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -183,8 +183,10 @@ cache_put_job(void *data, void *gdata, int thread_index) struct zink_program *pg = data; struct zink_screen *screen = gdata; size_t size = 0; - if (VKSCR(GetPipelineCacheData)(screen->dev, pg->pipeline_cache, &size, NULL) != VK_SUCCESS) + if (VKSCR(GetPipelineCacheData)(screen->dev, pg->pipeline_cache, &size, NULL) != VK_SUCCESS) { + mesa_loge("ZINK: vkGetPipelineCacheData failed"); return; + } if (pg->pipeline_cache_size == size) return; void *pipeline_data = malloc(size); @@ -196,6 +198,8 @@ cache_put_job(void *data, void *gdata, int thread_index) cache_key key; disk_cache_compute_key(screen->disk_cache, pg->sha1, sizeof(pg->sha1), key); disk_cache_put_nocopy(screen->disk_cache, key, pipeline_data, size, NULL); + } else { + mesa_loge("ZINK: vkGetPipelineCacheData failed"); } } @@ -226,7 +230,9 @@ cache_get_job(void *data, void *gdata, int thread_index) disk_cache_compute_key(screen->disk_cache, pg->sha1, sizeof(pg->sha1), key); pcci.pInitialData = disk_cache_get(screen->disk_cache, key, &pg->pipeline_cache_size); pcci.initialDataSize = pg->pipeline_cache_size; - VKSCR(CreatePipelineCache)(screen->dev, &pcci, NULL, &pg->pipeline_cache); + if (VKSCR(CreatePipelineCache)(screen->dev, &pcci, NULL, &pg->pipeline_cache) != VK_SUCCESS) { + mesa_loge("ZINK: vkCreatePipelineCache failed"); + } free((void*)pcci.pInitialData); } @@ -1252,8 +1258,10 @@ choose_pdev(struct zink_screen *screen) VkPhysicalDevice *pdevs; bool is_cpu = false; VkResult result = vkEnumeratePhysicalDevices(screen->instance, &pdev_count, NULL); - if (result != VK_SUCCESS) + if (result != VK_SUCCESS) { + mesa_loge("ZINK: vkEnumeratePhysicalDevices failed"); return is_cpu; + } assert(pdev_count > 0); @@ -1480,11 +1488,15 @@ check_have_device_time(struct zink_screen *screen) { uint32_t num_domains = 0; VkTimeDomainEXT domains[8]; //current max is 4 - VKSCR(GetPhysicalDeviceCalibrateableTimeDomainsEXT)(screen->pdev, &num_domains, NULL); + if (VKSCR(GetPhysicalDeviceCalibrateableTimeDomainsEXT)(screen->pdev, &num_domains, NULL) != VK_SUCCESS) { + mesa_loge("ZINK: vkGetPhysicalDeviceCalibrateableTimeDomainsEXT failed"); + } assert(num_domains > 0); assert(num_domains < ARRAY_SIZE(domains)); - VKSCR(GetPhysicalDeviceCalibrateableTimeDomainsEXT)(screen->pdev, &num_domains, domains); + if (VKSCR(GetPhysicalDeviceCalibrateableTimeDomainsEXT)(screen->pdev, &num_domains, domains) != VK_SUCCESS) { + mesa_loge("ZINK: vkGetPhysicalDeviceCalibrateableTimeDomainsEXT failed"); + } /* VK_TIME_DOMAIN_DEVICE_EXT is used for the ctx->get_timestamp hook and is the only one we really need */ for (unsigned i = 0; i < num_domains; i++) { @@ -1557,12 +1569,13 @@ create_debug(struct zink_screen *screen) VkDebugUtilsMessengerEXT vkDebugUtilsCallbackEXT = VK_NULL_HANDLE; - VKSCR(CreateDebugUtilsMessengerEXT)( - screen->instance, - &vkDebugUtilsMessengerCreateInfoEXT, - NULL, - &vkDebugUtilsCallbackEXT - ); + if (VKSCR(CreateDebugUtilsMessengerEXT)( + screen->instance, + &vkDebugUtilsMessengerCreateInfoEXT, + NULL, + &vkDebugUtilsCallbackEXT) != VK_SUCCESS) { + mesa_loge("ZINK: vkCreateDebugUtilsMessengerEXT failed"); + } screen->debugUtilsCallbackHandle = vkDebugUtilsCallbackEXT; @@ -1662,6 +1675,9 @@ populate_format_props(struct zink_screen *screen) VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, 0, &image_props); + if (ret != VK_SUCCESS) { + mesa_loge("ZINK: vkGetPhysicalDeviceImageFormatProperties failed"); + } screen->need_2D_zs = ret != VK_SUCCESS; } @@ -1685,6 +1701,8 @@ zink_screen_init_semaphore(struct zink_screen *screen) screen->prev_sem = screen->sem; screen->sem = sem; return true; + } else { + mesa_loge("ZINK: vkCreateSemaphore failed"); } screen->info.have_KHR_timeline_semaphore = false; return false; @@ -1730,7 +1748,7 @@ noop_submit(void *data, void *gdata, int thread_index) simple_mtx_lock(&n->screen->queue_lock); if (n->VKSCR(QueueSubmit)(n->screen->threaded ? n->screen->thread_queue : n->screen->queue, 1, &si, n->fence) != VK_SUCCESS) { - debug_printf("ZINK: vkQueueSubmit() failed\n"); + mesa_loge("ZINK: vkQueueSubmit failed"); n->screen->device_lost = true; } simple_mtx_unlock(&n->screen->queue_lock); @@ -1760,8 +1778,10 @@ zink_screen_batch_id_wait(struct zink_screen *screen, uint32_t batch_id, uint64_ util_queue_fence_init(&fence); fci.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; - if (VKSCR(CreateFence)(screen->dev, &fci, NULL, &n.fence) != VK_SUCCESS) + if (VKSCR(CreateFence)(screen->dev, &fci, NULL, &n.fence) != VK_SUCCESS) { + mesa_loge("ZINK: vkCreateFence failed"); return false; + } n.screen = screen; if (screen->threaded) { @@ -1801,6 +1821,8 @@ zink_get_loader_version(void) uint32_t loader_version_temp = VK_API_VERSION_1_0; if (VK_SUCCESS == (*vk_EnumerateInstanceVersion)(&loader_version_temp)) { loader_version = loader_version_temp; + } else { + mesa_loge("ZINK: vkEnumerateInstanceVersion failed"); } } @@ -1999,7 +2021,9 @@ zink_create_logical_device(struct zink_screen *screen) dci.ppEnabledExtensionNames = screen->info.extensions; dci.enabledExtensionCount = screen->info.num_extensions; - vkCreateDevice(screen->pdev, &dci, NULL, &dev); + if (vkCreateDevice(screen->pdev, &dci, NULL, &dev) != VK_SUCCESS) { + mesa_loge("ZINK: vkCreateDevice failed"); + } return dev; } diff --git a/src/gallium/drivers/zink/zink_surface.c b/src/gallium/drivers/zink/zink_surface.c index 9c6106f..e1386f4 100644 --- a/src/gallium/drivers/zink/zink_surface.c +++ b/src/gallium/drivers/zink/zink_surface.c @@ -165,6 +165,7 @@ create_surface(struct pipe_context *pctx, if (VKSCR(CreateImageView)(screen->dev, ivci, NULL, &surface->image_view) != VK_SUCCESS) { + mesa_loge("ZINK: vkCreateImageView failed"); FREE(surface); return NULL; } @@ -360,7 +361,7 @@ zink_rebind_surface(struct zink_context *ctx, struct pipe_surface **psurface) _mesa_hash_table_remove(&res->surface_cache, entry); VkImageView image_view; if (VKSCR(CreateImageView)(screen->dev, &ivci, NULL, &image_view) != VK_SUCCESS) { - debug_printf("zink: failed to create new imageview"); + mesa_loge("ZINK: failed to create new imageview"); simple_mtx_unlock(&res->surface_mtx); return false; } -- 2.7.4