- Build L texture variants and complete older release kernel bundles. - Add selective Swin encoder fallback to reduce L/M motion trails. - Add opt-in GPU motion-vector dilation for thin geometry and sky gaps. - Replace GPU input waits with cancellable readiness polling and use sleeping event queries for completion. - Retain recorded resources through command allocator completion, defer shutdown until cleanup, and preserve unfinished output synchronization. - Extend lifecycle harness checks and add event, model and motion tests. - Update configuration defaults, build scripts and release documentation.
104 lines
3.4 KiB
C
104 lines
3.4 KiB
C
/* Native directory selection shared with the CPU-only configuration tests. */
|
|
#pragma once
|
|
#include <dirent.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
static int d4r_native_swin_encoders_enabled(void)
|
|
{
|
|
const char* value = getenv("D4R_NATIVE_SWIN_ENCODERS");
|
|
return value == NULL || strcmp(value, "0") != 0;
|
|
}
|
|
|
|
static int d4r_native_kernel_allowed(const char* name)
|
|
{
|
|
return d4r_native_swin_encoders_enabled() ||
|
|
(strcmp(name, "rrlite_enc1_4x4") != 0 && strcmp(name, "rrlite_enc2_4x4") != 0);
|
|
}
|
|
|
|
static int d4r_apply_accuracy_policy(void)
|
|
{
|
|
const char* prefer = getenv("D4R_PREFER_ACCURACY");
|
|
if (prefer == NULL || strcmp(prefer, "1") != 0)
|
|
return 0;
|
|
setenv("D4R_ZLUDA_IGNORE_DENORMAL", "0", 1);
|
|
setenv("D4R_ZLUDA_WMMA_F32ACC", "0", 1);
|
|
setenv("D4R_ZLUDA_FAST_MATH", "0", 1);
|
|
setenv("D4R_ZLUDA_WAVE64", "0", 1);
|
|
setenv("D4R_ELIDE_NGX_SYNC", "0", 1);
|
|
return 1;
|
|
}
|
|
|
|
static int d4r_accuracy_directory(const char* directory)
|
|
{
|
|
char path[1200], version[16];
|
|
if (snprintf(path, sizeof(path), "%s/d4r-accuracy.txt", directory) >= (int)sizeof(path))
|
|
return 0;
|
|
FILE* file = fopen(path, "r");
|
|
if (file == NULL)
|
|
return 0;
|
|
const int valid = fgets(version, sizeof(version), file) != NULL && strcmp(version, "1\n") == 0;
|
|
fclose(file);
|
|
return valid;
|
|
}
|
|
|
|
/* 1 = hash-checked set, 2 = unmanifested developer set, 0 = no usable set.
|
|
Accuracy mode never selects an unmarked directory, including flat legacy developer builds. */
|
|
static int d4r_native_candidate(const char* directory, int accuracy)
|
|
{
|
|
if (accuracy && !d4r_accuracy_directory(directory))
|
|
return 0;
|
|
char path[1200];
|
|
if (snprintf(path, sizeof(path), "%s/d4r-kernels.txt", directory) >= (int)sizeof(path))
|
|
return 0;
|
|
FILE* file = fopen(path, "r");
|
|
if (file != NULL)
|
|
{
|
|
fclose(file);
|
|
return 1;
|
|
}
|
|
return accuracy ? 2 : 0;
|
|
}
|
|
|
|
static int d4r_select_native_source(const char* configured, const char* architecture, int accuracy,
|
|
int fp8, char* source, size_t size)
|
|
{
|
|
char base[1024];
|
|
const int length = accuracy && !d4r_accuracy_directory(configured)
|
|
? snprintf(base, sizeof(base), "%s/accuracy", configured)
|
|
: snprintf(base, sizeof(base), "%s", configured);
|
|
if (length < 0 || length >= (int)sizeof(base))
|
|
return 0;
|
|
int kind;
|
|
if (fp8 && strncmp(architecture, "gfx12", 5) == 0)
|
|
{
|
|
if (snprintf(source, size, "%s/%s-fp8", base, architecture) >= (int)size)
|
|
return 0;
|
|
if ((kind = d4r_native_candidate(source, accuracy)) != 0)
|
|
return kind;
|
|
}
|
|
if (architecture[0] != '\0')
|
|
{
|
|
if (snprintf(source, size, "%s/%s", base, architecture) >= (int)size)
|
|
return 0;
|
|
if ((kind = d4r_native_candidate(source, accuracy)) != 0)
|
|
return kind;
|
|
}
|
|
if (snprintf(source, size, "%s", base) >= (int)size)
|
|
return 0;
|
|
if ((kind = d4r_native_candidate(source, accuracy)) != 0)
|
|
return kind;
|
|
if (accuracy)
|
|
return 0;
|
|
/* Keep legacy flat developer directories working, but do not hand a release root to ZLUDA. */
|
|
DIR* directory = opendir(base);
|
|
if (directory == NULL)
|
|
return 0;
|
|
int targets = 0;
|
|
for (struct dirent* entry; (entry = readdir(directory)) != NULL;)
|
|
targets += strncmp(entry->d_name, "gfx", 3) == 0;
|
|
closedir(directory);
|
|
return targets ? 0 : 2;
|
|
}
|