mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 06:40:08 +01:00
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:
parent
1f92c30170
commit
fe66cff411
15 changed files with 134 additions and 59 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue