Path: blob/21.2-virgl/src/intel/vulkan/anv_util.c
4547 views
/*1* Copyright © 2015 Intel Corporation2*3* Permission is hereby granted, free of charge, to any person obtaining a4* copy of this software and associated documentation files (the "Software"),5* to deal in the Software without restriction, including without limitation6* the rights to use, copy, modify, merge, publish, distribute, sublicense,7* and/or sell copies of the Software, and to permit persons to whom the8* Software is furnished to do so, subject to the following conditions:9*10* The above copyright notice and this permission notice (including the next11* paragraph) shall be included in all copies or substantial portions of the12* Software.13*14* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL17* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER18* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING19* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS20* IN THE SOFTWARE.21*/2223#include <stdarg.h>24#include <stdio.h>25#include <stdlib.h>26#include <string.h>27#include <errno.h>28#include <assert.h>2930#include "anv_private.h"31#include "vk_enum_to_str.h"3233/** Log an error message. */34void anv_printflike(1, 2)35anv_loge(const char *format, ...)36{37va_list va;3839va_start(va, format);40anv_loge_v(format, va);41va_end(va);42}4344/** \see anv_loge() */45void46anv_loge_v(const char *format, va_list va)47{48mesa_loge_v(format, va);49}5051void52__anv_perf_warn(struct anv_device *device,53const struct vk_object_base *object,54const char *file, int line, const char *format, ...)55{56va_list ap;57char buffer[256];58char report[512];5960va_start(ap, format);61vsnprintf(buffer, sizeof(buffer), format, ap);62va_end(ap);6364snprintf(report, sizeof(report), "%s: %s", file, buffer);6566vk_debug_report(&device->physical->instance->vk,67VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,68object, line, 0, "anv", report);6970mesa_logw("%s:%d: PERF: %s", file, line, buffer);71}7273VkResult74__vk_errorv(struct anv_instance *instance,75const struct vk_object_base *object, VkResult error,76const char *file, int line, const char *format, va_list ap)77{78char buffer[256];79char report[512];8081const char *error_str = vk_Result_to_str(error);8283if (format) {84vsnprintf(buffer, sizeof(buffer), format, ap);8586snprintf(report, sizeof(report), "%s:%d: %s (%s)", file, line, buffer,87error_str);88} else {89snprintf(report, sizeof(report), "%s:%d: %s", file, line, error_str);90}9192if (instance) {93vk_debug_report(&instance->vk, VK_DEBUG_REPORT_ERROR_BIT_EXT,94object, line, 0, "anv", report);95}9697mesa_loge("%s", report);9899return error;100}101102VkResult103__vk_errorf(struct anv_instance *instance,104const struct vk_object_base *object, VkResult error,105const char *file, int line, const char *format, ...)106{107va_list ap;108109va_start(ap, format);110__vk_errorv(instance, object, error, file, line, format, ap);111va_end(ap);112113return error;114}115116void117anv_dump_pipe_bits(enum anv_pipe_bits bits)118{119if (bits & ANV_PIPE_DEPTH_CACHE_FLUSH_BIT)120fputs("+depth_flush ", stderr);121if (bits & ANV_PIPE_DATA_CACHE_FLUSH_BIT)122fputs("+dc_flush ", stderr);123if (bits & ANV_PIPE_HDC_PIPELINE_FLUSH_BIT)124fputs("+hdc_flush ", stderr);125if (bits & ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT)126fputs("+rt_flush ", stderr);127if (bits & ANV_PIPE_TILE_CACHE_FLUSH_BIT)128fputs("+tile_flush ", stderr);129if (bits & ANV_PIPE_STATE_CACHE_INVALIDATE_BIT)130fputs("+state_inval ", stderr);131if (bits & ANV_PIPE_CONSTANT_CACHE_INVALIDATE_BIT)132fputs("+const_inval ", stderr);133if (bits & ANV_PIPE_VF_CACHE_INVALIDATE_BIT)134fputs("+vf_inval ", stderr);135if (bits & ANV_PIPE_TEXTURE_CACHE_INVALIDATE_BIT)136fputs("+tex_inval ", stderr);137if (bits & ANV_PIPE_INSTRUCTION_CACHE_INVALIDATE_BIT)138fputs("+ic_inval ", stderr);139if (bits & ANV_PIPE_STALL_AT_SCOREBOARD_BIT)140fputs("+pb_stall ", stderr);141if (bits & ANV_PIPE_DEPTH_STALL_BIT)142fputs("+depth_stall ", stderr);143if (bits & ANV_PIPE_CS_STALL_BIT)144fputs("+cs_stall ", stderr);145}146147148