turnip: make debug_flags a global variable
Add tu_env as a global variable and add tu_env_init to initialize it. Add TU_DEBUG macro to check debug flags. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20946>
This commit is contained in:
@@ -3073,8 +3073,7 @@ tu_begin_load_store_cond_exec(struct tu_cmd_buffer *cmd,
|
||||
{
|
||||
tu_cond_exec_start(cs, CP_COND_REG_EXEC_0_MODE(PRED_TEST));
|
||||
|
||||
if (!unlikely(cmd->device->physical_device->instance->debug_flags &
|
||||
TU_DEBUG_LOG_SKIP_GMEM_OPS))
|
||||
if (!TU_DEBUG(LOG_SKIP_GMEM_OPS))
|
||||
return;
|
||||
|
||||
uint64_t result_iova;
|
||||
@@ -3096,8 +3095,7 @@ tu_end_load_store_cond_exec(struct tu_cmd_buffer *cmd,
|
||||
{
|
||||
tu_cond_exec_end(cs);
|
||||
|
||||
if (!unlikely(cmd->device->physical_device->instance->debug_flags &
|
||||
TU_DEBUG_LOG_SKIP_GMEM_OPS))
|
||||
if (!TU_DEBUG(LOG_SKIP_GMEM_OPS))
|
||||
return;
|
||||
|
||||
uint64_t result_iova;
|
||||
@@ -3294,7 +3292,7 @@ tu_attachment_store_unaligned(struct tu_cmd_buffer *cmd, uint32_t a)
|
||||
const VkRect2D *render_area = &cmd->state.render_area;
|
||||
|
||||
/* Unaligned store is incredibly rare in CTS, we have to force it to test. */
|
||||
if (unlikely(cmd->device->physical_device->instance->debug_flags & TU_DEBUG_UNALIGNED_STORE))
|
||||
if (TU_DEBUG(UNALIGNED_STORE))
|
||||
return true;
|
||||
|
||||
uint32_t x1 = render_area->offset.x;
|
||||
|
@@ -138,10 +138,10 @@ tu6_emit_flushes(struct tu_cmd_buffer *cmd_buffer,
|
||||
enum tu_cmd_flush_bits flushes = cache->flush_bits;
|
||||
cache->flush_bits = 0;
|
||||
|
||||
if (unlikely(cmd_buffer->device->physical_device->instance->debug_flags & TU_DEBUG_FLUSHALL))
|
||||
if (TU_DEBUG(FLUSHALL))
|
||||
flushes |= TU_CMD_FLAG_ALL_FLUSH | TU_CMD_FLAG_ALL_INVALIDATE;
|
||||
|
||||
if (unlikely(cmd_buffer->device->physical_device->instance->debug_flags & TU_DEBUG_SYNCDRAW))
|
||||
if (TU_DEBUG(SYNCDRAW))
|
||||
flushes |= TU_CMD_FLAG_WAIT_MEM_WRITES |
|
||||
TU_CMD_FLAG_WAIT_FOR_IDLE |
|
||||
TU_CMD_FLAG_WAIT_FOR_ME;
|
||||
@@ -193,7 +193,7 @@ void
|
||||
tu_emit_cache_flush_renderpass(struct tu_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
if (!cmd_buffer->state.renderpass_cache.flush_bits &&
|
||||
likely(!cmd_buffer->device->physical_device->instance->debug_flags))
|
||||
likely(!tu_env.debug))
|
||||
return;
|
||||
tu6_emit_flushes(cmd_buffer, &cmd_buffer->draw_cs,
|
||||
&cmd_buffer->state.renderpass_cache);
|
||||
@@ -682,7 +682,7 @@ static bool
|
||||
use_sysmem_rendering(struct tu_cmd_buffer *cmd,
|
||||
struct tu_renderpass_result **autotune_result)
|
||||
{
|
||||
if (unlikely(cmd->device->physical_device->instance->debug_flags & TU_DEBUG_SYSMEM))
|
||||
if (TU_DEBUG(SYSMEM))
|
||||
return true;
|
||||
|
||||
/* can't fit attachments into gmem */
|
||||
@@ -716,7 +716,7 @@ use_sysmem_rendering(struct tu_cmd_buffer *cmd,
|
||||
!cmd->state.tiling->binning_possible)
|
||||
return true;
|
||||
|
||||
if (unlikely(cmd->device->physical_device->instance->debug_flags & TU_DEBUG_GMEM))
|
||||
if (TU_DEBUG(GMEM))
|
||||
return false;
|
||||
|
||||
bool use_sysmem = tu_autotune_use_bypass(&cmd->device->autotune,
|
||||
@@ -1847,7 +1847,7 @@ tu_BeginCommandBuffer(VkCommandBuffer commandBuffer,
|
||||
vk_find_struct_const(pBeginInfo->pInheritanceInfo->pNext,
|
||||
COMMAND_BUFFER_INHERITANCE_RENDERING_INFO);
|
||||
|
||||
if (unlikely(cmd_buffer->device->instance->debug_flags & TU_DEBUG_DYNAMIC)) {
|
||||
if (TU_DEBUG(DYNAMIC)) {
|
||||
rendering_info =
|
||||
vk_get_command_buffer_inheritance_rendering_info(cmd_buffer->vk.level,
|
||||
pBeginInfo);
|
||||
@@ -4282,7 +4282,7 @@ tu_CmdBeginRenderPass2(VkCommandBuffer commandBuffer,
|
||||
{
|
||||
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
|
||||
if (unlikely(cmd->device->instance->debug_flags & TU_DEBUG_DYNAMIC)) {
|
||||
if (TU_DEBUG(DYNAMIC)) {
|
||||
vk_common_CmdBeginRenderPass2(commandBuffer, pRenderPassBegin,
|
||||
pSubpassBeginInfo);
|
||||
return;
|
||||
@@ -4405,7 +4405,7 @@ tu_CmdBeginRendering(VkCommandBuffer commandBuffer,
|
||||
}
|
||||
}
|
||||
|
||||
if (unlikely(cmd->device->instance->debug_flags & TU_DEBUG_DYNAMIC)) {
|
||||
if (TU_DEBUG(DYNAMIC)) {
|
||||
const VkRenderingSelfDependencyInfoMESA *self_dependency =
|
||||
vk_find_struct_const(pRenderingInfo->pNext, RENDERING_SELF_DEPENDENCY_INFO_MESA);
|
||||
if (self_dependency &&
|
||||
@@ -4496,7 +4496,7 @@ tu_CmdNextSubpass2(VkCommandBuffer commandBuffer,
|
||||
{
|
||||
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
|
||||
if (unlikely(cmd->device->instance->debug_flags & TU_DEBUG_DYNAMIC)) {
|
||||
if (TU_DEBUG(DYNAMIC)) {
|
||||
vk_common_CmdNextSubpass2(commandBuffer, pSubpassBeginInfo,
|
||||
pSubpassEndInfo);
|
||||
return;
|
||||
@@ -5860,7 +5860,7 @@ tu_CmdEndRenderPass2(VkCommandBuffer commandBuffer,
|
||||
{
|
||||
TU_FROM_HANDLE(tu_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
if (unlikely(cmd_buffer->device->instance->debug_flags & TU_DEBUG_DYNAMIC)) {
|
||||
if (TU_DEBUG(DYNAMIC)) {
|
||||
vk_common_CmdEndRenderPass2(commandBuffer, pSubpassEndInfo);
|
||||
return;
|
||||
}
|
||||
|
@@ -42,7 +42,7 @@ descriptor_size(struct tu_device *dev,
|
||||
{
|
||||
switch (type) {
|
||||
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
||||
if (unlikely(dev->instance->debug_flags & TU_DEBUG_DYNAMIC))
|
||||
if (TU_DEBUG(DYNAMIC))
|
||||
return A6XX_TEX_CONST_DWORDS * 4;
|
||||
|
||||
/* Input attachment doesn't use descriptor sets at all */
|
||||
@@ -1186,7 +1186,7 @@ tu_GetDescriptorEXT(
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
||||
/* nothing in descriptor set - framebuffer state is used instead */
|
||||
if (unlikely(device->instance->debug_flags & TU_DEBUG_DYNAMIC)) {
|
||||
if (TU_DEBUG(DYNAMIC)) {
|
||||
write_image_descriptor(pDescriptor, VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
|
||||
pDescriptorInfo->data.pInputAttachmentImage);
|
||||
}
|
||||
@@ -1347,7 +1347,7 @@ tu_update_descriptor_sets(const struct tu_device *device,
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
||||
/* nothing in descriptor set - framebuffer state is used instead */
|
||||
if (unlikely(device->instance->debug_flags & TU_DEBUG_DYNAMIC))
|
||||
if (TU_DEBUG(DYNAMIC))
|
||||
write_image_descriptor(ptr, writeset->descriptorType, writeset->pImageInfo + j);
|
||||
break;
|
||||
default:
|
||||
@@ -1676,7 +1676,7 @@ tu_update_descriptor_set_with_template(
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
||||
/* nothing in descriptor set - framebuffer state is used instead */
|
||||
if (unlikely(device->instance->debug_flags & TU_DEBUG_DYNAMIC))
|
||||
if (TU_DEBUG(DYNAMIC))
|
||||
write_image_descriptor(ptr, templ->entry[i].descriptor_type, src);
|
||||
break;
|
||||
default:
|
||||
|
@@ -56,7 +56,7 @@ tu_device_get_cache_uuid(struct tu_physical_device *device, void *uuid)
|
||||
* shader hash instead, since the compiler is only created with the logical
|
||||
* device.
|
||||
*/
|
||||
uint64_t driver_flags = device->instance->debug_flags & TU_DEBUG_NOMULTIPOS;
|
||||
uint64_t driver_flags = tu_env.debug & TU_DEBUG_NOMULTIPOS;
|
||||
uint16_t family = fd_dev_gpu_id(&device->dev_id);
|
||||
|
||||
memset(uuid, 0, VK_UUID_SIZE);
|
||||
@@ -145,7 +145,7 @@ get_device_extensions(const struct tu_physical_device *device,
|
||||
.KHR_maintenance3 = true,
|
||||
.KHR_maintenance4 = true,
|
||||
.KHR_multiview = true,
|
||||
.KHR_performance_query = device->instance->debug_flags & TU_DEBUG_PERFC,
|
||||
.KHR_performance_query = TU_DEBUG(PERFC),
|
||||
.KHR_pipeline_executable_properties = true,
|
||||
.KHR_push_descriptor = true,
|
||||
.KHR_relaxed_block_layout = true,
|
||||
@@ -391,37 +391,6 @@ tu_destroy_physical_device(struct vk_physical_device *device)
|
||||
vk_free(&device->instance->alloc, device);
|
||||
}
|
||||
|
||||
static const struct debug_control tu_debug_options[] = {
|
||||
{ "startup", TU_DEBUG_STARTUP },
|
||||
{ "nir", TU_DEBUG_NIR },
|
||||
{ "nobin", TU_DEBUG_NOBIN },
|
||||
{ "sysmem", TU_DEBUG_SYSMEM },
|
||||
{ "gmem", TU_DEBUG_GMEM },
|
||||
{ "forcebin", TU_DEBUG_FORCEBIN },
|
||||
{ "layout", TU_DEBUG_LAYOUT },
|
||||
{ "noubwc", TU_DEBUG_NOUBWC },
|
||||
{ "nomultipos", TU_DEBUG_NOMULTIPOS },
|
||||
{ "nolrz", TU_DEBUG_NOLRZ },
|
||||
{ "nolrzfc", TU_DEBUG_NOLRZFC },
|
||||
{ "perf", TU_DEBUG_PERF },
|
||||
{ "perfc", TU_DEBUG_PERFC },
|
||||
{ "flushall", TU_DEBUG_FLUSHALL },
|
||||
{ "syncdraw", TU_DEBUG_SYNCDRAW },
|
||||
{ "rast_order", TU_DEBUG_RAST_ORDER },
|
||||
{ "unaligned_store", TU_DEBUG_UNALIGNED_STORE },
|
||||
{ "log_skip_gmem_ops", TU_DEBUG_LOG_SKIP_GMEM_OPS },
|
||||
{ "dynamic", TU_DEBUG_DYNAMIC },
|
||||
{ "bos", TU_DEBUG_BOS },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
const char *
|
||||
tu_get_debug_option_name(int id)
|
||||
{
|
||||
assert(id < ARRAY_SIZE(tu_debug_options) - 1);
|
||||
return tu_debug_options[id].string;
|
||||
}
|
||||
|
||||
static const driOptionDescription tu_dri_options[] = {
|
||||
DRI_CONF_SECTION_PERFORMANCE
|
||||
DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
@@ -464,6 +433,8 @@ tu_CreateInstance(const VkInstanceCreateInfo *pCreateInfo,
|
||||
struct tu_instance *instance;
|
||||
VkResult result;
|
||||
|
||||
tu_env_init();
|
||||
|
||||
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO);
|
||||
|
||||
if (pAllocator == NULL)
|
||||
@@ -498,18 +469,7 @@ tu_CreateInstance(const VkInstanceCreateInfo *pCreateInfo,
|
||||
#endif
|
||||
instance->vk.physical_devices.destroy = tu_destroy_physical_device;
|
||||
|
||||
instance->debug_flags =
|
||||
parse_debug_string(os_get_option("TU_DEBUG"), tu_debug_options);
|
||||
|
||||
#ifdef DEBUG
|
||||
/* Enable startup debugging by default on debug drivers. You almost always
|
||||
* want to see your startup failures in that case, and it's hard to set
|
||||
* this env var on android.
|
||||
*/
|
||||
instance->debug_flags |= TU_DEBUG_STARTUP;
|
||||
#endif
|
||||
|
||||
if (instance->debug_flags & TU_DEBUG_STARTUP)
|
||||
if (TU_DEBUG(STARTUP))
|
||||
mesa_logi("Created an instance");
|
||||
|
||||
VG(VALGRIND_CREATE_MEMPOOL(instance, 0, false));
|
||||
@@ -1501,8 +1461,7 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
|
||||
A6XX_TEX_CONST_DWORDS * 4;
|
||||
properties->robustStorageBufferDescriptorSize =
|
||||
properties->storageBufferDescriptorSize;
|
||||
properties->inputAttachmentDescriptorSize =
|
||||
(pdevice->instance->debug_flags & TU_DEBUG_DYNAMIC) ?
|
||||
properties->inputAttachmentDescriptorSize = TU_DEBUG(DYNAMIC) ?
|
||||
A6XX_TEX_CONST_DWORDS * 4 : 0;
|
||||
|
||||
properties->maxSamplerDescriptorBufferRange = ~0ull;
|
||||
@@ -2082,7 +2041,7 @@ tu_CreateDevice(VkPhysicalDevice physicalDevice,
|
||||
u_rwlock_init(&device->dma_bo_lock);
|
||||
pthread_mutex_init(&device->submit_mutex, NULL);
|
||||
|
||||
if (device->instance->debug_flags & TU_DEBUG_BOS)
|
||||
if (TU_DEBUG(BOS))
|
||||
device->bo_sizes = _mesa_hash_table_create(NULL, _mesa_hash_string, _mesa_key_string_equal);
|
||||
|
||||
#ifndef TU_USE_KGSL
|
||||
@@ -2922,7 +2881,7 @@ tu_CreateFramebuffer(VkDevice _device,
|
||||
{
|
||||
TU_FROM_HANDLE(tu_device, device, _device);
|
||||
|
||||
if (unlikely(device->instance->debug_flags & TU_DEBUG_DYNAMIC))
|
||||
if (TU_DEBUG(DYNAMIC))
|
||||
return vk_common_CreateFramebuffer(_device, pCreateInfo, pAllocator,
|
||||
pFramebuffer);
|
||||
|
||||
@@ -2984,7 +2943,7 @@ tu_DestroyFramebuffer(VkDevice _device,
|
||||
{
|
||||
TU_FROM_HANDLE(tu_device, device, _device);
|
||||
|
||||
if (unlikely(device->instance->debug_flags & TU_DEBUG_DYNAMIC)) {
|
||||
if (TU_DEBUG(DYNAMIC)) {
|
||||
vk_common_DestroyFramebuffer(_device, _fb, pAllocator);
|
||||
return;
|
||||
}
|
||||
|
@@ -35,31 +35,6 @@
|
||||
/* extra space in vsc draw/prim streams */
|
||||
#define VSC_PAD 0x40
|
||||
|
||||
enum tu_debug_flags
|
||||
{
|
||||
TU_DEBUG_STARTUP = 1 << 0,
|
||||
TU_DEBUG_NIR = 1 << 1,
|
||||
TU_DEBUG_NOBIN = 1 << 3,
|
||||
TU_DEBUG_SYSMEM = 1 << 4,
|
||||
TU_DEBUG_FORCEBIN = 1 << 5,
|
||||
TU_DEBUG_NOUBWC = 1 << 6,
|
||||
TU_DEBUG_NOMULTIPOS = 1 << 7,
|
||||
TU_DEBUG_NOLRZ = 1 << 8,
|
||||
TU_DEBUG_PERFC = 1 << 9,
|
||||
TU_DEBUG_FLUSHALL = 1 << 10,
|
||||
TU_DEBUG_SYNCDRAW = 1 << 11,
|
||||
/* bit 12 is available */
|
||||
TU_DEBUG_GMEM = 1 << 13,
|
||||
TU_DEBUG_RAST_ORDER = 1 << 14,
|
||||
TU_DEBUG_UNALIGNED_STORE = 1 << 15,
|
||||
TU_DEBUG_LAYOUT = 1 << 16,
|
||||
TU_DEBUG_LOG_SKIP_GMEM_OPS = 1 << 17,
|
||||
TU_DEBUG_PERF = 1 << 18,
|
||||
TU_DEBUG_NOLRZFC = 1 << 19,
|
||||
TU_DEBUG_DYNAMIC = 1 << 20,
|
||||
TU_DEBUG_BOS = 1 << 21,
|
||||
};
|
||||
|
||||
enum global_shader {
|
||||
GLOBAL_SH_VS_BLIT,
|
||||
GLOBAL_SH_VS_CLEAR,
|
||||
@@ -148,8 +123,6 @@ struct tu_instance
|
||||
struct driOptionCache dri_options;
|
||||
struct driOptionCache available_dri_options;
|
||||
|
||||
enum tu_debug_flags debug_flags;
|
||||
|
||||
bool dont_care_as_load;
|
||||
|
||||
/* Conservative LRZ (default true) invalidates LRZ on draws with
|
||||
@@ -439,9 +412,6 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(tu_sampler, base, VkSampler,
|
||||
uint64_t
|
||||
tu_get_system_heap_size(void);
|
||||
|
||||
const char *
|
||||
tu_get_debug_option_name(int id);
|
||||
|
||||
VkResult
|
||||
tu_physical_device_init(struct tu_physical_device *device,
|
||||
struct tu_instance *instance);
|
||||
|
@@ -859,7 +859,7 @@ tu_physical_device_try_create(struct vk_instance *vk_instance,
|
||||
|
||||
drmFreeVersion(version);
|
||||
|
||||
if (instance->debug_flags & TU_DEBUG_STARTUP)
|
||||
if (TU_DEBUG(STARTUP))
|
||||
mesa_logi("Found compatible device '%s'.", path);
|
||||
|
||||
device->instance = instance;
|
||||
@@ -1303,8 +1303,7 @@ tu_queue_submit(struct vk_queue *vk_queue, struct vk_queue_submit *submit)
|
||||
submit->perf_pass_index : ~0;
|
||||
struct tu_queue_submit submit_req;
|
||||
|
||||
if (unlikely(queue->device->physical_device->instance->debug_flags &
|
||||
TU_DEBUG_LOG_SKIP_GMEM_OPS)) {
|
||||
if (TU_DEBUG(LOG_SKIP_GMEM_OPS)) {
|
||||
tu_dbg_log_gmem_load_store_skips(queue->device);
|
||||
}
|
||||
|
||||
|
@@ -510,7 +510,7 @@ tu_image_init(struct tu_device *device, struct tu_image *image,
|
||||
/* expect UBWC enabled if we asked for it */
|
||||
if (modifier == DRM_FORMAT_MOD_QCOM_COMPRESSED)
|
||||
assert(ubwc_enabled);
|
||||
else if (device->physical_device->instance->debug_flags & TU_DEBUG_NOUBWC)
|
||||
else if (TU_DEBUG(NOUBWC))
|
||||
ubwc_enabled = false;
|
||||
|
||||
/* Non-UBWC tiled R8G8 is probably buggy since media formats are always
|
||||
@@ -574,7 +574,7 @@ tu_image_init(struct tu_device *device, struct tu_image *image,
|
||||
return vk_error(device, VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT);
|
||||
}
|
||||
|
||||
if (device->instance->debug_flags & TU_DEBUG_LAYOUT)
|
||||
if (TU_DEBUG(LAYOUT))
|
||||
fdl_dump_layout(layout);
|
||||
|
||||
/* fdl6_layout can't take explicit offset without explicit pitch
|
||||
@@ -593,7 +593,7 @@ tu_image_init(struct tu_device *device, struct tu_image *image,
|
||||
}
|
||||
|
||||
const struct util_format_description *desc = util_format_description(image->layout[0].format);
|
||||
if (util_format_has_depth(desc) && !(device->instance->debug_flags & TU_DEBUG_NOLRZ))
|
||||
if (util_format_has_depth(desc) && !TU_DEBUG(NOLRZ))
|
||||
{
|
||||
/* Depth plane is the first one */
|
||||
struct fdl_layout *layout = &image->layout[0];
|
||||
@@ -630,7 +630,7 @@ tu_image_init(struct tu_device *device, struct tu_image *image,
|
||||
/* Fast-clear buffer cannot be larger than 512 bytes (HW limitation) */
|
||||
bool has_lrz_fc = image->lrz_fc_size <= 512 &&
|
||||
device->physical_device->info->a6xx.enable_lrz_fast_clear &&
|
||||
!unlikely(device->physical_device->instance->debug_flags & TU_DEBUG_NOLRZFC);
|
||||
!TU_DEBUG(NOLRZFC);
|
||||
|
||||
if (has_lrz_fc || device->physical_device->info->a6xx.has_lrz_dir_tracking) {
|
||||
image->lrz_fc_offset = image->total_size;
|
||||
|
@@ -263,7 +263,7 @@ tu_enumerate_devices(struct vk_instance *vk_instance)
|
||||
|
||||
/* kgsl version check? */
|
||||
|
||||
if (instance->debug_flags & TU_DEBUG_STARTUP)
|
||||
if (TU_DEBUG(STARTUP))
|
||||
mesa_logi("Found compatible device '%s'.", path);
|
||||
|
||||
device->instance = instance;
|
||||
@@ -377,8 +377,7 @@ tu_QueueSubmit2(VkQueue _queue,
|
||||
TU_FROM_HANDLE(tu_syncobj, fence, _fence);
|
||||
VkResult result = VK_SUCCESS;
|
||||
|
||||
if (unlikely(queue->device->physical_device->instance->debug_flags &
|
||||
TU_DEBUG_LOG_SKIP_GMEM_OPS)) {
|
||||
if (TU_DEBUG(LOG_SKIP_GMEM_OPS)) {
|
||||
tu_dbg_log_gmem_load_store_skips(queue->device);
|
||||
}
|
||||
|
||||
|
@@ -111,8 +111,7 @@ tu_lrz_init_state(struct tu_cmd_buffer *cmd,
|
||||
const struct tu_image_view *view)
|
||||
{
|
||||
if (!view->image->lrz_height) {
|
||||
assert((cmd->device->instance->debug_flags & TU_DEBUG_NOLRZ) ||
|
||||
!vk_format_has_depth(att->format));
|
||||
assert(TU_DEBUG(NOLRZ) || !vk_format_has_depth(att->format));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -161,7 +160,7 @@ tu_lrz_init_secondary(struct tu_cmd_buffer *cmd,
|
||||
if (!has_gpu_tracking)
|
||||
return;
|
||||
|
||||
if (cmd->device->instance->debug_flags & TU_DEBUG_NOLRZ)
|
||||
if (TU_DEBUG(NOLRZ))
|
||||
return;
|
||||
|
||||
if (!vk_format_has_depth(att->format))
|
||||
@@ -575,8 +574,7 @@ tu6_calculate_lrz_state(struct tu_cmd_buffer *cmd,
|
||||
/* If depth test is disabled we shouldn't touch LRZ.
|
||||
* Same if there is no depth attachment.
|
||||
*/
|
||||
if (a == VK_ATTACHMENT_UNUSED || !z_test_enable ||
|
||||
(cmd->device->instance->debug_flags & TU_DEBUG_NOLRZ))
|
||||
if (a == VK_ATTACHMENT_UNUSED || !z_test_enable || TU_DEBUG(NOLRZ))
|
||||
return gras_lrz_cntl;
|
||||
|
||||
if (!cmd->state.lrz.gpu_dir_tracking && !cmd->state.attachments) {
|
||||
|
@@ -99,7 +99,7 @@ tu_nir_lower_multiview(nir_shader *nir, uint32_t mask, struct tu_device *dev)
|
||||
/* In addition to the generic checks done by NIR, check that we don't
|
||||
* overflow VPC with the extra copies of gl_Position.
|
||||
*/
|
||||
if (likely(!(dev->physical_device->instance->debug_flags & TU_DEBUG_NOMULTIPOS)) &&
|
||||
if (!TU_DEBUG(NOMULTIPOS) &&
|
||||
num_views <= max_views_for_multipos && num_outputs + (num_views - 1) <= 32 &&
|
||||
nir_can_lower_multiview(nir)) {
|
||||
/* It appears that the multiview mask is ignored when multi-position
|
||||
|
@@ -761,7 +761,7 @@ tu_CreateRenderPass2(VkDevice _device,
|
||||
{
|
||||
TU_FROM_HANDLE(tu_device, device, _device);
|
||||
|
||||
if (unlikely(device->instance->debug_flags & TU_DEBUG_DYNAMIC))
|
||||
if (TU_DEBUG(DYNAMIC))
|
||||
return vk_common_CreateRenderPass2(_device, pCreateInfo, pAllocator,
|
||||
pRenderPass);
|
||||
|
||||
@@ -957,7 +957,7 @@ tu_DestroyRenderPass(VkDevice _device,
|
||||
{
|
||||
TU_FROM_HANDLE(tu_device, device, _device);
|
||||
|
||||
if (unlikely(device->instance->debug_flags & TU_DEBUG_DYNAMIC)) {
|
||||
if (TU_DEBUG(DYNAMIC)) {
|
||||
vk_common_DestroyRenderPass(_device, _pass, pAllocator);
|
||||
return;
|
||||
}
|
||||
|
@@ -4662,7 +4662,7 @@ tu_pipeline_builder_parse_rasterization_order(
|
||||
bool raster_order_attachment_access =
|
||||
pipeline->blend.raster_order_attachment_access ||
|
||||
pipeline->ds.raster_order_attachment_access ||
|
||||
unlikely(builder->device->physical_device->instance->debug_flags & TU_DEBUG_RAST_ORDER);
|
||||
TU_DEBUG(RAST_ORDER);
|
||||
|
||||
/* VK_EXT_blend_operation_advanced would also require ordered access
|
||||
* when implemented in the future.
|
||||
@@ -4957,7 +4957,7 @@ tu_pipeline_builder_init_graphics(
|
||||
const VkPipelineRenderingCreateInfo *rendering_info =
|
||||
vk_find_struct_const(create_info->pNext, PIPELINE_RENDERING_CREATE_INFO);
|
||||
|
||||
if (unlikely(dev->instance->debug_flags & TU_DEBUG_DYNAMIC) && !rendering_info)
|
||||
if (TU_DEBUG(DYNAMIC) && !rendering_info)
|
||||
rendering_info = vk_get_pipeline_rendering_create_info(create_info);
|
||||
|
||||
/* Get multiview_mask, which is only used for shaders */
|
||||
|
@@ -90,7 +90,7 @@ tu_spirv_to_nir(struct tu_device *dev,
|
||||
if (result != VK_SUCCESS)
|
||||
return NULL;
|
||||
|
||||
if (unlikely(dev->physical_device->instance->debug_flags & TU_DEBUG_NIR)) {
|
||||
if (TU_DEBUG(NIR)) {
|
||||
fprintf(stderr, "translated nir:\n");
|
||||
nir_print_shader(nir, stderr);
|
||||
}
|
||||
@@ -361,7 +361,7 @@ build_bindless(struct tu_device *dev, nir_builder *b,
|
||||
|
||||
/* input attachments use non bindless workaround */
|
||||
if (bind_layout->type == VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT &&
|
||||
likely(!(dev->instance->debug_flags & TU_DEBUG_DYNAMIC))) {
|
||||
!TU_DEBUG(DYNAMIC)) {
|
||||
const struct glsl_type *glsl_type = glsl_without_array(var->type);
|
||||
uint32_t idx = var->data.index * 2;
|
||||
|
||||
|
@@ -15,6 +15,57 @@
|
||||
#include "tu_device.h"
|
||||
#include "tu_pass.h"
|
||||
|
||||
static const struct debug_control tu_debug_options[] = {
|
||||
{ "startup", TU_DEBUG_STARTUP },
|
||||
{ "nir", TU_DEBUG_NIR },
|
||||
{ "nobin", TU_DEBUG_NOBIN },
|
||||
{ "sysmem", TU_DEBUG_SYSMEM },
|
||||
{ "gmem", TU_DEBUG_GMEM },
|
||||
{ "forcebin", TU_DEBUG_FORCEBIN },
|
||||
{ "layout", TU_DEBUG_LAYOUT },
|
||||
{ "noubwc", TU_DEBUG_NOUBWC },
|
||||
{ "nomultipos", TU_DEBUG_NOMULTIPOS },
|
||||
{ "nolrz", TU_DEBUG_NOLRZ },
|
||||
{ "nolrzfc", TU_DEBUG_NOLRZFC },
|
||||
{ "perf", TU_DEBUG_PERF },
|
||||
{ "perfc", TU_DEBUG_PERFC },
|
||||
{ "flushall", TU_DEBUG_FLUSHALL },
|
||||
{ "syncdraw", TU_DEBUG_SYNCDRAW },
|
||||
{ "rast_order", TU_DEBUG_RAST_ORDER },
|
||||
{ "unaligned_store", TU_DEBUG_UNALIGNED_STORE },
|
||||
{ "log_skip_gmem_ops", TU_DEBUG_LOG_SKIP_GMEM_OPS },
|
||||
{ "dynamic", TU_DEBUG_DYNAMIC },
|
||||
{ "bos", TU_DEBUG_BOS },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
struct tu_env tu_env;
|
||||
|
||||
static void
|
||||
tu_env_init_once(void)
|
||||
{
|
||||
tu_env.debug = parse_debug_string(os_get_option("TU_DEBUG"),
|
||||
tu_debug_options);
|
||||
|
||||
#ifdef DEBUG
|
||||
/* Enable startup debugging by default on debug drivers. You almost always
|
||||
* want to see your startup failures in that case, and it's hard to set
|
||||
* this env var on android.
|
||||
*/
|
||||
tu_env.debug |= TU_DEBUG_STARTUP;
|
||||
#endif
|
||||
|
||||
if (TU_DEBUG(STARTUP))
|
||||
mesa_logi("TU_DEBUG=0x%x", tu_env.debug);
|
||||
}
|
||||
|
||||
void
|
||||
tu_env_init(void)
|
||||
{
|
||||
static once_flag once = ONCE_FLAG_INIT;
|
||||
call_once(&once, tu_env_init_once);
|
||||
}
|
||||
|
||||
void PRINTFLIKE(3, 4)
|
||||
__tu_finishme(const char *file, int line, const char *format, ...)
|
||||
{
|
||||
@@ -126,7 +177,7 @@ tu_tiling_config_update_tile_layout(struct tu_framebuffer *fb,
|
||||
if (!pass->gmem_pixels[gmem_layout])
|
||||
return;
|
||||
|
||||
if (unlikely(dev->physical_device->instance->debug_flags & TU_DEBUG_FORCEBIN)) {
|
||||
if (TU_DEBUG(FORCEBIN)) {
|
||||
/* start with 2x2 tiles */
|
||||
tiling->tile_count.width = 2;
|
||||
tiling->tile_count.height = 2;
|
||||
@@ -255,10 +306,9 @@ tu_tiling_config_update_binning(struct tu_tiling_config *tiling, const struct tu
|
||||
if (tiling->binning_possible) {
|
||||
tiling->binning = (tiling->tile_count.width * tiling->tile_count.height) > 2;
|
||||
|
||||
if (unlikely(device->physical_device->instance->debug_flags & TU_DEBUG_FORCEBIN))
|
||||
if (TU_DEBUG(FORCEBIN))
|
||||
tiling->binning = true;
|
||||
if (unlikely(device->physical_device->instance->debug_flags &
|
||||
TU_DEBUG_NOBIN))
|
||||
if (TU_DEBUG(NOBIN))
|
||||
tiling->binning = false;
|
||||
} else {
|
||||
tiling->binning = false;
|
||||
|
@@ -18,6 +18,42 @@
|
||||
|
||||
#include "vk_util.h"
|
||||
|
||||
#define TU_DEBUG(name) unlikely(tu_env.debug & TU_DEBUG_##name)
|
||||
|
||||
enum tu_debug_flags
|
||||
{
|
||||
TU_DEBUG_STARTUP = 1 << 0,
|
||||
TU_DEBUG_NIR = 1 << 1,
|
||||
TU_DEBUG_NOBIN = 1 << 3,
|
||||
TU_DEBUG_SYSMEM = 1 << 4,
|
||||
TU_DEBUG_FORCEBIN = 1 << 5,
|
||||
TU_DEBUG_NOUBWC = 1 << 6,
|
||||
TU_DEBUG_NOMULTIPOS = 1 << 7,
|
||||
TU_DEBUG_NOLRZ = 1 << 8,
|
||||
TU_DEBUG_PERFC = 1 << 9,
|
||||
TU_DEBUG_FLUSHALL = 1 << 10,
|
||||
TU_DEBUG_SYNCDRAW = 1 << 11,
|
||||
/* bit 12 is available */
|
||||
TU_DEBUG_GMEM = 1 << 13,
|
||||
TU_DEBUG_RAST_ORDER = 1 << 14,
|
||||
TU_DEBUG_UNALIGNED_STORE = 1 << 15,
|
||||
TU_DEBUG_LAYOUT = 1 << 16,
|
||||
TU_DEBUG_LOG_SKIP_GMEM_OPS = 1 << 17,
|
||||
TU_DEBUG_PERF = 1 << 18,
|
||||
TU_DEBUG_NOLRZFC = 1 << 19,
|
||||
TU_DEBUG_DYNAMIC = 1 << 20,
|
||||
TU_DEBUG_BOS = 1 << 21,
|
||||
};
|
||||
|
||||
struct tu_env {
|
||||
uint32_t debug;
|
||||
};
|
||||
|
||||
extern struct tu_env tu_env;
|
||||
|
||||
void
|
||||
tu_env_init(void);
|
||||
|
||||
/* Whenever we generate an error, pass it through this function. Useful for
|
||||
* debugging, where we can break on it. Only call at error site, not when
|
||||
* propagating errors. Might be useful to plug in a stack trace here.
|
||||
@@ -37,7 +73,7 @@ __vk_startup_errorf(struct tu_instance *instance,
|
||||
*/
|
||||
#define vk_startup_errorf(instance, error, format, ...) \
|
||||
__vk_startup_errorf(instance, error, \
|
||||
instance->debug_flags & TU_DEBUG_STARTUP, \
|
||||
TU_DEBUG(STARTUP), \
|
||||
__FILE__, __LINE__, format, ##__VA_ARGS__)
|
||||
|
||||
void
|
||||
@@ -391,7 +427,7 @@ void
|
||||
tu_dbg_log_gmem_load_store_skips(struct tu_device *device);
|
||||
|
||||
#define perf_debug(device, fmt, ...) do { \
|
||||
if (unlikely((device)->instance->debug_flags & TU_DEBUG_PERF)) \
|
||||
if (TU_DEBUG(PERF)) \
|
||||
mesa_log(MESA_LOG_WARN, (MESA_LOG_TAG), (fmt), ##__VA_ARGS__); \
|
||||
} while(0)
|
||||
|
||||
|
Reference in New Issue
Block a user