zink: validate and log errors on vulkan calls

This commit also replaces debug_printf with mesa_loge

Signed-off-by: Tales Lelo da Aparecida <tales.aparecida@gmail.com>
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15601>
This commit is contained in:
Tales Lelo da Aparecida 2022-03-26 22:08:30 -03:00
parent 1f92c30170
commit fe66cff411
15 changed files with 134 additions and 59 deletions

View file

@ -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);

View file

@ -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;
}

View file

@ -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);

View file

@ -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;
}

View file

@ -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;

View file

@ -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:

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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);

View file

@ -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;
}

View file

@ -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, &timestamp, &deviation);
if (VKSCR(GetCalibratedTimestampsEXT)(screen->dev, 1, &cti, &timestamp, &deviation) != VK_SUCCESS) {
mesa_loge("ZINK: vkGetCalibratedTimestampsEXT failed");
}
timestamp_to_nanoseconds(screen, &timestamp);
return timestamp;
}

View file

@ -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;
}

View file

@ -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);

View file

@ -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;
}

View file

@ -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;
}