mesa/src/amd/vulkan/tests/helpers.h
Samuel Pitoiset 19e62c7abc radv: add a small framework for RADV specific tests
There are a lot of things that can't be tested outside of the driver,
like drirc workarounds, RADV_DEBUG options and debugging stuff.

Writing RADV specific tests would help to avoid introducing regressions.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33875>
2025-03-12 09:07:16 +00:00

80 lines
3.3 KiB
C++

/*
* Copyright © 2025 Valve Corporation
*
* SPDX-License-Identifier: MIT
*/
#ifndef RADV_TEST_HELPERS_H
#define RADV_TEST_HELPERS_H
#include <gtest/gtest.h>
#include <vulkan/vulkan.h>
#include <string>
#include <unordered_map>
#define FUNCTION_LIST \
ITEM(CreateInstance) \
ITEM(DestroyInstance) \
ITEM(EnumeratePhysicalDevices) \
ITEM(GetPhysicalDeviceProperties2) \
ITEM(GetPhysicalDeviceQueueFamilyProperties2) \
ITEM(GetPhysicalDeviceFormatProperties2) \
ITEM(CreateDevice) \
ITEM(DestroyDevice) \
ITEM(CreateShaderModule) \
ITEM(DestroyShaderModule) \
ITEM(CreateComputePipelines) \
ITEM(DestroyPipeline) \
ITEM(CreatePipelineLayout) \
ITEM(DestroyPipelineLayout) \
ITEM(GetPipelineExecutableStatisticsKHR) \
ITEM(GetPipelineExecutablePropertiesKHR)
class radv_test : public testing::Test {
public:
radv_test();
~radv_test();
void create_device();
void destroy_device();
void get_physical_device_properties2(VkPhysicalDeviceProperties2 *pdev_props);
void get_physical_device_format_properties2(VkFormat format, VkFormatProperties2 *format_props);
bool is_dedicated_sparse_queue_enabled();
void create_compute_pipeline(uint32_t code_size, const uint32_t *code, VkPipelineCreateFlags flags = 0);
void destroy_pipeline();
uint64_t get_pipeline_hash(VkShaderStageFlags stage);
void add_envvar(std::string name, std::string value)
{
setenv(name.c_str(), value.c_str(), 1);
envvars.insert(std::make_pair<std::string, std::string>(std::move(name), std::move(value)));
}
void unset_envvars()
{
for (auto &envvar : envvars)
unsetenv(envvar.first.c_str());
envvars.clear();
}
#define ITEM(n) PFN_vk##n n;
FUNCTION_LIST
#undef ITEM
VkInstance instance;
VkPhysicalDevice physical_device;
VkDevice device;
VkPipelineLayout pipeline_layout;
VkPipeline pipeline;
std::unordered_map<std::string, std::string> envvars;
};
#endif /* RADV_TEST_HELPERS_H */