Fix DLSS artifacts and improve synchronization diagnostics
- Fix Cyberpunk 2077 preset-K black artifacts by preserving FP16/FP64 denormal requirements while limiting denormal suppression to FP32. - Fix stale direct-output redirects after array destruction, preventing reused handles from inheriting an earlier feature's output buffer. - Log rejected resource formats and dimensions, including failures after startup, with rate limiting for repeated errors. - Add opt-in blocking output synchronization with a dedicated bridge export and fallback to context synchronization. - Report output-wait CPU and wall time, and defer GPU timing queries until asynchronous evaluation has completed. The CPU-overhead mitigation for #7 still needs reporter confirmation. - Reject release libraries requiring GLIBC newer than the configured baseline, defaulting to 2.41, and document compatible builds. Validation: shim and bridge builds pass; targeted redirect-lifetime and format-logging checks pass. Fixes #5 Fixes #8 Refs #7
This commit is contained in:
1 parent
4334a0c3c4
commit
b2b3781aca
12 files changed
+199
-24
No files matched your search
@@ -2263,7 +2263,18 @@ CUresult WINAPI cuArrayDestroy(CUarray array)
|
||||
CUARRAYDESTROY_FN function = (CUARRAYDESTROY_FN)find_zluda_symbol("cuArrayDestroy");
|
||||
CUresult result = function != NULL ? function(array) : missing("cuArrayDestroy");
|
||||
if (result == CUDA_SUCCESS)
|
||||
{
|
||||
/* A recycled array handle must not inherit a released feature's output target. */
|
||||
pthread_mutex_lock(&instrumentation_lock);
|
||||
if (redirect_array == array)
|
||||
{
|
||||
redirect_array = NULL;
|
||||
redirect_pointer = 0;
|
||||
redirect_pitch = 0;
|
||||
}
|
||||
pthread_mutex_unlock(&instrumentation_lock);
|
||||
forget_array_descriptor(array);
|
||||
}
|
||||
TRACE_CALL(result, "cuArrayDestroy array=%p result=%d", array, result);
|
||||
return result;
|
||||
}
|
||||
@@ -2537,6 +2548,18 @@ CUresult WINAPI cuEventSynchronize(D4rArg a0)
|
||||
TRACE_CALL(result, "cuEventSynchronize->cuEventSynchronize result=%d", result);
|
||||
return result;
|
||||
}
|
||||
/* The shim's output wait must not inherit D4R_ELIDE_NGX_SYNC: it releases the
|
||||
game's split command list only after this event has actually completed. */
|
||||
CUresult WINAPI d4rEventSynchronize(D4rArg a0)
|
||||
{
|
||||
typedef CUresult(__attribute__((sysv_abi)) * function_type)(D4rArg);
|
||||
function_type function = (function_type)find_zluda_symbol("cuEventSynchronize");
|
||||
CUresult result = function != NULL ? function(a0) : missing("cuEventSynchronize");
|
||||
if (result == CUDA_SUCCESS)
|
||||
flush_kernel_profiles();
|
||||
TRACE_CALL(result, "d4rEventSynchronize result=%d", result);
|
||||
return result;
|
||||
}
|
||||
D4R_FORWARD(cuEventQuery, cuEventQuery, 1, (D4rArg a0), (a0))
|
||||
/* With elided event waits an event may still be pending: report 0 ms instead of CUDA_ERROR_NOT_READY. */
|
||||
CUresult WINAPI cuEventElapsedTime(D4rArg a0, D4rArg a1, D4rArg a2)
|
||||
|
||||
Reference in new issue
Block a user