adding command list Vulkan support

This commit is contained in:
2024-11-17 10:52:29 +01:00
parent 0b417483f3
commit d8b14d1a7e
29 changed files with 716 additions and 186 deletions

42
Tests/Vulkan/Backend.c git.filemode.normal_file
View File

@@ -0,0 +1,42 @@
#include "Common.h"
#include <unity/unity.h>
#include <Pulse.h>
void DumbDebugCallBack(PulseDebugMessageSeverity severity, const char* message)
{
(void)severity;
(void)message;
}
void TestBackendSetup()
{
PulseBackend backend = PulseLoadBackend(PULSE_BACKEND_VULKAN, PULSE_SHADER_FORMAT_SPIRV_BIT, PULSE_HIGH_DEBUG);
TEST_ASSERT_NOT_EQUAL_MESSAGE(backend, PULSE_NULL_HANDLE, PulseVerbaliseErrorType(PulseGetLastErrorType()));
PulseSetDebugCallback(backend, DumbDebugCallBack);
PulseUnloadBackend(backend);
}
void TestBackendAnySetup()
{
PulseBackend backend = PulseLoadBackend(PULSE_BACKEND_ANY, PULSE_SHADER_FORMAT_SPIRV_BIT, PULSE_HIGH_DEBUG);
TEST_ASSERT_NOT_EQUAL_MESSAGE(backend, PULSE_NULL_HANDLE, PulseVerbaliseErrorType(PulseGetLastErrorType()));
TEST_ASSERT_EQUAL(PulseGetBackendType(backend), PULSE_BACKEND_VULKAN);
PulseSetDebugCallback(backend, DumbDebugCallBack);
PulseUnloadBackend(backend);
}
void TestWrongBackendSetup()
{
PulseBackend backend = PulseLoadBackend(PULSE_BACKEND_VULKAN, PULSE_SHADER_FORMAT_DXBC_BIT, PULSE_HIGH_DEBUG);
TEST_ASSERT_EQUAL(backend, PULSE_NULL_HANDLE);
PulseSetDebugCallback(backend, DumbDebugCallBack);
PulseUnloadBackend(backend);
}
void TestBackend()
{
RUN_TEST(TestBackendSetup);
RUN_TEST(TestBackendAnySetup);
RUN_TEST(TestWrongBackendSetup);
}

28
Tests/Vulkan/Common.c git.filemode.normal_file
View File

@@ -0,0 +1,28 @@
#include "Common.h"
#include <unity/unity.h>
void DebugCallBack(PulseDebugMessageSeverity severity, const char* message)
{
if(severity == PULSE_DEBUG_MESSAGE_SEVERITY_ERROR)
TEST_FAIL_MESSAGE(message);
}
#define LOG_MESSAGE_MAX_LENGTH 4096
void SetupPulse(PulseBackend* backend)
{
*backend = PulseLoadBackend(PULSE_BACKEND_VULKAN, PULSE_SHADER_FORMAT_SPIRV_BIT, PULSE_PARANOID_DEBUG);
if(*backend == PULSE_NULL_HANDLE)
{
char complete_message[LOG_MESSAGE_MAX_LENGTH] = { 0 };
snprintf(complete_message, LOG_MESSAGE_MAX_LENGTH, "Fatal Error: could not load Pulse using Vulkan due to %s", PulseVerbaliseErrorType(PulseGetLastErrorType()));
TEST_FAIL_MESSAGE(complete_message);
TEST_ABORT();
}
PulseSetDebugCallback(*backend, DebugCallBack);
}
void CleanupPulse(PulseBackend backend)
{
PulseUnloadBackend(backend);
}

26
Tests/Vulkan/Common.h git.filemode.normal_file
View File

@@ -0,0 +1,26 @@
#ifndef TEST_COMMON_H_
#define TEST_COMMON_H_
#define RUN_TEST_AT_LINE(fn, line) \
{ \
Unity.TestFile = __FILE__; \
Unity.CurrentTestName = #fn; \
Unity.CurrentTestLineNumber = line; \
Unity.NumberOfTests++; \
UNITY_CLR_DETAILS(); \
UNITY_EXEC_TIME_START(); \
if(TEST_PROTECT()) \
fn(); \
UNITY_EXEC_TIME_STOP(); \
UnityConcludeTest(); \
}
#define RUN_TEST(fn) RUN_TEST_AT_LINE(fn, __LINE__);
#include <Pulse.h>
void DebugCallBack(PulseDebugMessageSeverity severity, const char* message);
void SetupPulse(PulseBackend* backend);
void CleanupPulse(PulseBackend backend);
#endif

75
Tests/Vulkan/Device.c git.filemode.normal_file
View File

@@ -0,0 +1,75 @@
#include "Common.h"
#include <unity/unity.h>
#include <Pulse.h>
void TestDeviceSetup()
{
PulseBackend backend;
SetupPulse(&backend);
PulseDevice device = PulseCreateDevice(backend, NULL, 0);
TEST_ASSERT_NOT_EQUAL_MESSAGE(device, PULSE_NULL_HANDLE, PulseVerbaliseErrorType(PulseGetLastErrorType()));
PulseDestroyDevice(device);
CleanupPulse(backend);
}
void TestForbiddenDeviceSetup()
{
PulseBackend backend;
SetupPulse(&backend);
PulseDevice device1 = PulseCreateDevice(backend, NULL, 0);
TEST_ASSERT_NOT_EQUAL_MESSAGE(device1, PULSE_NULL_HANDLE, PulseVerbaliseErrorType(PulseGetLastErrorType()));
PulseDevice device2 = PulseCreateDevice(backend, &device1, 1);
TEST_ASSERT_NOT_EQUAL(device2, device1);
PulseDestroyDevice(device2);
PulseDestroyDevice(device1);
CleanupPulse(backend);
}
void TestInvalidBackendDeviceSetup()
{
PulseDevice device= PulseCreateDevice(PULSE_NULL_HANDLE, NULL, 0);
TEST_ASSERT_EQUAL(device, PULSE_NULL_HANDLE);
PulseDestroyDevice(device);
}
void TestBackendInUse()
{
PulseBackend backend;
SetupPulse(&backend);
PulseDevice device = PulseCreateDevice(backend, NULL, 0);
TEST_ASSERT_NOT_EQUAL_MESSAGE(device, PULSE_NULL_HANDLE, PulseVerbaliseErrorType(PulseGetLastErrorType()));
TEST_ASSERT_EQUAL(PulseGetBackendInUseByDevice(device), PULSE_BACKEND_VULKAN);
PulseDestroyDevice(device);
CleanupPulse(backend);
}
void TestShaderFormatSupport()
{
PulseBackend backend;
SetupPulse(&backend);
PulseDevice device = PulseCreateDevice(backend, NULL, 0);
TEST_ASSERT_NOT_EQUAL_MESSAGE(device, PULSE_NULL_HANDLE, PulseVerbaliseErrorType(PulseGetLastErrorType()));
TEST_ASSERT_TRUE(PulseDeviceSupportsShaderFormats(device, PULSE_SHADER_FORMAT_SPIRV_BIT));
PulseDestroyDevice(device);
CleanupPulse(backend);
}
void TestDevice()
{
RUN_TEST(TestDeviceSetup);
RUN_TEST(TestForbiddenDeviceSetup);
RUN_TEST(TestInvalidBackendDeviceSetup);
RUN_TEST(TestBackendInUse);
RUN_TEST(TestShaderFormatSupport);
}

View File

@@ -1,11 +0,0 @@
#include <unity/unity.h>
#include <Pulse.h>
extern PulseBackend backend;
void TestDeviceSetup()
{
PulseDevice device = PulseCreateDevice(backend, NULL, 0);
TEST_ASSERT_NOT_EQUAL_MESSAGE(device, PULSE_NULL_HANDLE, PulseVerbaliseErrorType(PulseGetLastErrorType()));
PulseDestroyDevice(device);
}

View File

@@ -3,39 +3,13 @@
#include <stdbool.h>
PulseBackend backend;
extern void TestDeviceSetup();
bool SetupPulse()
{
backend = PulseLoadBackend(PULSE_BACKEND_VULKAN, PULSE_SHADER_FORMAT_SPIRV_BIT, PULSE_NO_DEBUG);
if(backend == PULSE_NULL_HANDLE)
{
fprintf(stderr, "Fatal Error: could not load Pulse using Vulkan due to %s", PulseVerbaliseErrorType(PulseGetLastErrorType()));
return false;
}
puts("Pulse loaded using Vulkan");
return true;
}
int RunUnitTests()
{
UNITY_BEGIN();
RUN_TEST(TestDeviceSetup);
return UNITY_END();
}
void UnloadPulse()
{
PulseUnloadBackend(backend);
puts("Pulse unloaded");
}
extern void TestBackend();
extern void TestDevice();
int main(void)
{
SetupPulse();
int result = RunUnitTests();
UnloadPulse();
return result;
UNITY_BEGIN();
TestBackend();
TestDevice();
return UNITY_END();
}