Disable stdout during vulkan operations

This commit is contained in:
Linus Dierheimer
2021-12-15 15:42:33 +01:00
parent b89e41c1d7
commit 7638d0b8b6
3 changed files with 42 additions and 0 deletions
+31
View File
@@ -462,3 +462,34 @@ bool ffGetFileContent(const char* fileName, FFstrbuf* buffer)
ffStrbufClear(buffer);
return ffAppendFileContent(fileName, buffer);
}
static volatile bool originalPipesSet = false;
static volatile int originalStdout = -1;
static volatile int originalStderr = -1;
void ffDisableOutput()
{
fflush(stdout);
fflush(stderr);
if(!originalPipesSet)
{
originalStdout = dup(STDOUT_FILENO);
originalStderr = dup(STDERR_FILENO);
originalPipesSet = true;
}
int nullFile = open("/dev/null", O_WRONLY);
dup2(nullFile, STDOUT_FILENO);
dup2(nullFile, STDERR_FILENO);
close(nullFile);
}
void ffEnableOutput()
{
fflush(stdout);
fflush(stderr);
dup2(originalStdout, STDOUT_FILENO);
dup2(originalStderr, STDERR_FILENO);
}
+3
View File
@@ -328,6 +328,9 @@ bool ffGetFileContent(const char* fileName, FFstrbuf* buffer);
bool ffWriteFDContent(int fd, const FFstrbuf* content);
void ffWriteFileContent(const char* fileName, const FFstrbuf* buffer);
void ffDisableOutput();
void ffEnableOutput();
// They return true if the file was found, independently if start was found
// Buffers which already contain content are not overwritten
// The last occurence of start in the first file will be the one used
+8
View File
@@ -22,6 +22,10 @@ static void vulkanFillGPUs(FFinstance* instance, FFlist* results)
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkEnumeratePhysicalDevices,)
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkGetPhysicalDeviceProperties,)
//Some drivers (nvdc) print messages to stdout
//and thats the best way i found to disable that
ffDisableOutput();
const VkApplicationInfo applicationInfo = {
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.pNext = NULL,
@@ -47,6 +51,7 @@ static void vulkanFillGPUs(FFinstance* instance, FFlist* results)
if(ffvkCreateInstance(&instanceCreateInfo, NULL, &vkInstance) != VK_SUCCESS)
{
dlclose(vulkan);
ffEnableOutput();
return;
}
@@ -55,6 +60,7 @@ static void vulkanFillGPUs(FFinstance* instance, FFlist* results)
{
ffvkDestroyInstance(vkInstance, NULL);
dlclose(vulkan);
ffEnableOutput();
return;
}
@@ -64,6 +70,7 @@ static void vulkanFillGPUs(FFinstance* instance, FFlist* results)
free(physicalDevices);
ffvkDestroyInstance(vkInstance, NULL);
dlclose(vulkan);
ffEnableOutput();
return;
}
@@ -86,6 +93,7 @@ static void vulkanFillGPUs(FFinstance* instance, FFlist* results)
free(physicalDevices);
ffvkDestroyInstance(vkInstance, NULL);
dlclose(vulkan);
ffEnableOutput();
return;
}