Vulkan App Flags

This commit is contained in:
Pavel 2024-10-11 11:56:34 +03:00
parent 7e2051400b
commit 689ec25769
7 changed files with 280 additions and 66 deletions

View File

@ -1,16 +1,16 @@
object frmCfgEditor: TfrmCfgEditor
Left = 494
Height = 323
Top = 90
Left = 430
Height = 319
Top = 204
Width = 400
Caption = 'Config Editor'
ClientHeight = 323
ClientHeight = 319
ClientWidth = 400
Position = poMainFormCenter
LCLVersion = '3.6.0.0'
object EditPages: TPageControl
Left = 0
Height = 274
Height = 270
Top = 0
Width = 397
ActivePage = Tab_Vulkan
@ -21,7 +21,7 @@ object frmCfgEditor: TfrmCfgEditor
TabOrder = 0
object Tab_MainInfo: TTabSheet
Caption = 'Main'
ClientHeight = 246
ClientHeight = 242
ClientWidth = 389
object Label1: TLabel
AnchorSideLeft.Control = Tab_MainInfo
@ -195,7 +195,7 @@ object frmCfgEditor: TfrmCfgEditor
end
object Tab_BootparamInfo: TTabSheet
Caption = 'Bootparam'
ClientHeight = 246
ClientHeight = 242
ClientWidth = 389
object Edt_BootparamInfo_neo: TCheckBox
AnchorSideLeft.Control = Tab_BootparamInfo
@ -318,7 +318,7 @@ object frmCfgEditor: TfrmCfgEditor
end
object Tab_JIT: TTabSheet
Caption = 'JIT'
ClientHeight = 246
ClientHeight = 242
ClientWidth = 389
object Edt_JITInfo_print_asm: TCheckBox
AnchorSideLeft.Control = Tab_JIT
@ -390,7 +390,7 @@ object frmCfgEditor: TfrmCfgEditor
end
object Tab_Misc: TTabSheet
Caption = 'Misc'
ClientHeight = 246
ClientHeight = 242
ClientWidth = 389
object Edt_MiscInfo_strict_ps4_freq: TCheckBox
AnchorSideLeft.Control = Tab_Misc
@ -428,7 +428,7 @@ object frmCfgEditor: TfrmCfgEditor
end
object Tab_Vulkan: TTabSheet
Caption = 'Vulkan'
ClientHeight = 246
ClientHeight = 242
ClientWidth = 389
object Edt_VulkanInfo_device_cmb: TComboBox
AnchorSideLeft.Control = Tab_Vulkan
@ -463,6 +463,56 @@ object frmCfgEditor: TfrmCfgEditor
BorderSpacing.Right = 10
Caption = 'GPU:'
end
object GrAppFlags: TCheckGroup
AnchorSideLeft.Control = Tab_Vulkan
AnchorSideTop.Control = Edt_VulkanInfo_device_cmb
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Tab_Vulkan
AnchorSideRight.Side = asrBottom
Left = 10
Height = 165
Top = 68
Width = 369
Anchors = [akTop, akLeft, akRight]
AutoFill = True
AutoSize = True
BorderSpacing.Left = 10
BorderSpacing.Top = 10
BorderSpacing.Right = 10
Caption = 'Vulkan app flags'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclTopToBottomThenLeftToRight
ChildSizing.ControlsPerLine = 7
ClientHeight = 145
ClientWidth = 365
ColumnLayout = clVerticalThenHorizontal
Columns = 2
Items.Strings = (
'debug utils'
'validation layer'
'enable gpu assisted'
'enable gpu assisted reserve'
'enable best practices'
'enable debug printf'
'enable sync validation'
'disable shaders'
'disable thread safety'
'disable api params'
'disable obj lifetimes'
'disable core checks'
'disable unique handles'
'disable shader validation'
)
TabOrder = 1
Data = {
0E0000000202020202020202020202020202
}
end
end
end
object BtnCancel: TButton
@ -473,7 +523,7 @@ object frmCfgEditor: TfrmCfgEditor
AnchorSideBottom.Side = asrBottom
Left = 315
Height = 25
Top = 288
Top = 284
Width = 75
Anchors = [akRight, akBottom]
BorderSpacing.Right = 10
@ -488,7 +538,7 @@ object frmCfgEditor: TfrmCfgEditor
AnchorSideBottom.Side = asrBottom
Left = 10
Height = 25
Top = 288
Top = 284
Width = 75
Anchors = [akLeft, akBottom]
BorderSpacing.Left = 10

View File

@ -16,10 +16,18 @@ uses
type
TVulkanDevGuid=class(TComponent)
src: TComboBox;
//
Function GetText:RawByteString;
procedure SetText(const s:RawByteString);
end;
TVulkanAppFlags=class(TComponent)
src: TCheckGroup;
//
Function GetInteger:Integer;
procedure SetInteger(v:Integer);
end;
{ TfrmCfgEditor }
TfrmCfgEditor = class(TForm)
@ -28,6 +36,7 @@ type
BtnOk: TButton;
BtnLogOpen: TButton;
BtnDataOpen: TButton;
GrAppFlags: TCheckGroup;
Edt_VulkanInfo_device_cmb: TComboBox;
Edt_BootparamInfo_halt_on_exit: TCheckBox;
Edt_BootparamInfo_print_gpu_ops: TCheckBox;
@ -69,7 +78,9 @@ type
private
public
Edt_VulkanInfo_device:TVulkanDevGuid;
VulkanInfo_device :TVulkanDevGuid;
VulkanInfo_app_flags:TVulkanAppFlags;
//
OnSave :TNotifyEvent;
FConfigInfo:TConfigInfo;
end;
@ -223,6 +234,36 @@ begin
end;
//
Function TVulkanAppFlags.GetInteger:Integer;
var
i:Integer;
begin
Result:=0;
if (src=nil) then Exit;
For i:=0 to src.Items.Count-1 do
if src.Checked[i] then
begin
Result:=Result or (1 shl i);
end;
end;
procedure TVulkanAppFlags.SetInteger(v:Integer);
var
i:Integer;
begin
if (src=nil) then Exit;
For i:=0 to src.Items.Count-1 do
begin
src.Checked[i]:=(v and (1 shl i))<>0;
end;
end;
//
procedure SetText(control:TComponent;const Text:RawByteString);
begin
if control.InheritsFrom(TControl) then
@ -248,6 +289,27 @@ begin
end;
end;
//
procedure SetInteger(control:TComponent;i:Integer);
begin
if (control is TVulkanAppFlags) then
begin
TVulkanAppFlags(control).SetInteger(i);
end;
end;
function GetInteger(control:TComponent):Integer;
begin
Result:=0;
if (control is TVulkanAppFlags) then
begin
Result:=TVulkanAppFlags(control).GetInteger;
end;
end;
//
procedure SetBool(control:TComponent;B:Boolean);
begin
if control.InheritsFrom(TButtonControl) then
@ -265,11 +327,15 @@ begin
end;
end;
//
procedure TfrmCfgEditor.PageInit(const TabName:RawByteString;obj:TAbstractObject);
var
i:TRttiPropertyIterator;
p:TRttiProperty;
TypeKind:TTypeKind;
cname:RawByteString;
control:TComponent;
begin
@ -280,10 +346,13 @@ begin
p:=i.GetProperty;
control:=FindComponent('Edt_'+TabName+'_'+p.Name);
Assert(control<>nil,'Edt_'+TabName+'_'+p.Name);
cname:='Edt_'+TabName+'_'+p.Name;
control:=FindComponent(cname);
Assert(control<>nil,cname);
if (control=nil) then Exit;
case p.PropertyType.TypeKind of
TypeKind:=p.PropertyType.TypeKind;
case TypeKind of
tkSString,
tkLString,
@ -292,6 +361,11 @@ begin
SetText(control,p.GetValue(obj).AsString);
end;
tkInteger:
begin
SetInteger(control,p.GetValue(obj).AsInteger);
end;
tkBool:
begin
SetBool(control,p.GetValue(obj).AsBoolean);
@ -312,7 +386,9 @@ procedure TfrmCfgEditor.PageSave(const TabName:RawByteString;obj:TAbstractObject
var
i:TRttiPropertyIterator;
p:TRttiProperty;
TypeKind:TTypeKind;
cname:RawByteString;
control:TComponent;
begin
@ -323,10 +399,13 @@ begin
p:=i.GetProperty;
control:=FindComponent('Edt_'+TabName+'_'+p.Name);
Assert(control<>nil,'Edt_'+TabName+'_'+p.Name);
cname:='Edt_'+TabName+'_'+p.Name;
control:=FindComponent(cname);
Assert(control<>nil,cname);
if (control=nil) then Exit;
case p.PropertyType.TypeKind of
TypeKind:=p.PropertyType.TypeKind;
case TypeKind of
tkSString,
tkLString,
@ -335,6 +414,11 @@ begin
p.SetValue(obj,GetText(control));
end;
tkInteger:
begin
p.SetValue(obj,GetInteger(control));
end;
tkBool:
begin
p.SetValue(obj,GetBool(control));
@ -358,9 +442,7 @@ begin
IntToStr(VK_API_VERSION_PATCH(apiVersion));
end;
Function GetDriverVerson(driverVersion,vendorID:TVkUInt32):RawByteString;
const
osname='windows';
Function GetDrvVersionStr(driverVersion,vendorID:TVkUInt32):RawByteString;
begin
case vendorid of
// NVIDIA
@ -373,13 +455,15 @@ begin
Exit;
end;
// Intel
{$IFDEF WINDOWS}
$8086:
if (osname='windows') then
begin
Result:=IntToStr((driverVersion shr 14) )+'.'+
IntToStr((driverVersion ) and $3fff);
Exit;
end;
{$ENDIF}
else;
end;
// Use Vulkan version conventions if vendor mapping is not available
@ -395,11 +479,19 @@ var
begin
InitVulkanDeviceList;
if (Edt_VulkanInfo_device=nil) then
if (VulkanInfo_device=nil) then
begin
Edt_VulkanInfo_device:=TVulkanDevGuid.Create(Self);
Edt_VulkanInfo_device.Name:='Edt_VulkanInfo_device'; //FindComponent
Edt_VulkanInfo_device.src :=Edt_VulkanInfo_device_cmb;
VulkanInfo_device:=TVulkanDevGuid.Create(Self);
VulkanInfo_device.Name:='Edt_VulkanInfo_device'; //FindComponent
VulkanInfo_device.src :=Edt_VulkanInfo_device_cmb;
end;
if (VulkanInfo_app_flags=nil) then
begin
VulkanInfo_app_flags:=TVulkanAppFlags.Create(Self);
VulkanInfo_app_flags.Name:='Edt_VulkanInfo_app_flags'; //FindComponent
VulkanInfo_app_flags.src :=GrAppFlags;
//////
end;
Edt_VulkanInfo_device_cmb.Clear;
@ -417,8 +509,8 @@ begin
deviceName:=deviceName+' ('+GetApiVersionStr(FVulkanDeviceList[i].apiVersion)+')';
deviceName:=deviceName+' ('+GetDriverVerson(FVulkanDeviceList[i].driverVersion,
FVulkanDeviceList[i].vendorID)+')';
deviceName:=deviceName+' ('+GetDrvVersionStr(FVulkanDeviceList[i].driverVersion,
FVulkanDeviceList[i].vendorID)+')';
Edt_VulkanInfo_device_cmb.AddItem(deviceName,TObject(@FVulkanDeviceList[i]));
end;

View File

@ -160,8 +160,10 @@ type
TVulkanInfo=class(TAbstractObject)
private
Fdevice:RawByteString;
Fapp_flags:DWORD;
published
property device:RawByteString read Fdevice write Fdevice;
property app_flags:DWORD read Fapp_flags write Fapp_flags;
end;
TConfigInfo=class(TAbstractObject)
@ -380,6 +382,8 @@ begin
tkLString,
tkAString:S:=S+'"'+StringToJSONString(value.AsString,False)+'"';
tkInteger:S:=S+IntToStr(value.AsInteger);
tkBool:S:=S+BoolToStr(value.AsBoolean,'true','false');
else
@ -612,6 +616,7 @@ var
i:TRttiPropertyIterator;
p:TRttiProperty;
obj:TObject;
TypeKind:TTypeKind;
begin
i:=GetPropertyIterator;
try
@ -620,12 +625,15 @@ begin
p:=i.GetProperty;
case p.PropertyType.TypeKind of
TypeKind:=p.PropertyType.TypeKind;
case TypeKind of
tkSString,
tkLString,
tkAString:Stream.WriteAnsiString(p.GetValue(Self).AsString);
tkInteger:Stream.WriteDWord(p.GetValue(Self).AsInteger);
tkBool:Stream.WriteByte(Byte(p.GetValue(Self).AsBoolean));
tkClass:
@ -655,6 +663,7 @@ var
i:TRttiPropertyIterator;
p:TRttiProperty;
obj:TObject;
TypeKind:TTypeKind;
begin
i:=GetPropertyIterator;
try
@ -662,11 +671,14 @@ begin
begin
p:=i.GetProperty;
case p.PropertyType.TypeKind of
TypeKind:=p.PropertyType.TypeKind;
case TypeKind of
tkSString,
tkLString,
tkAString:p.SetValue(Self,Stream.ReadAnsiString);
tkInteger:p.SetValue(Self,Integer(Stream.ReadDWord));
tkBool:p.SetValue(Self,Boolean(Stream.ReadByte));
tkClass:
@ -697,6 +709,7 @@ var
p:TRttiProperty;
obj_src:TObject;
obj_dst:TObject;
TypeKind:TTypeKind;
begin
if (dst=nil) then Exit;
if (not dst.InheritsFrom(Self.ClassType)) then Exit;
@ -708,10 +721,12 @@ begin
p:=i.GetProperty;
case p.PropertyType.TypeKind of
TypeKind:=p.PropertyType.TypeKind;
case TypeKind of
tkSString,
tkLString,
tkAString,
tkInteger,
tkBool :p.SetValue(dst,p.GetValue(Self));
tkClass:
@ -822,6 +837,7 @@ var
i:TRttiPropertyIterator;
p:TRttiProperty;
obj:TObject;
TypeKind:TTypeKind;
begin
Stream.WriteStartObject(Name);
//
@ -832,11 +848,13 @@ begin
p:=i.GetProperty;
case p.PropertyType.TypeKind of
TypeKind:=p.PropertyType.TypeKind;
case TypeKind of
tkSString,
tkLString,
tkAString,
tkInteger,
tkBool :Stream.WriteValue(p.Name,p.GetValue(Self));
tkClass:
@ -897,6 +915,7 @@ begin
tkSString,
tkLString,
tkAString,
tkInteger,
tkBool :Stream.WriteValue('',V);
tkClass:

View File

@ -148,6 +148,8 @@ begin
vDevice.VulkanDeviceGuid:=Default(TGUID);
TryStringToGUID(ConfInfo.VulkanInfo.device,vDevice.VulkanDeviceGuid);
vDevice.VulkanAppFlags:=t_vulkan_app_flags(ConfInfo.VulkanInfo.app_flags);
end;
procedure prepare(GameStartupInfo:TGameStartupInfo); SysV_ABI_CDecl;

View File

@ -23,7 +23,6 @@ uses
errno,
kern_mtx,
sys_event,
sys_eventvar,
kern_event,
sched_ule,
kern_authinfo,

View File

@ -1205,7 +1205,7 @@ var
error:Integer;
begin
error:=0;
if (filt > 0) or (filt + EVFILT_SYSCOUNT < 0) then
if (filt >= 0) or (filt + EVFILT_SYSCOUNT < 0) then
begin
Writeln('trying to add a filterop that is out of range: ',(not filt),' is beyond ',EVFILT_SYSCOUNT);
Exit(EINVAL);
@ -1230,7 +1230,7 @@ var
error:Integer;
begin
error:=0;
if (filt > 0) or (filt + EVFILT_SYSCOUNT < 0) then
if (filt >= 0) or (filt + EVFILT_SYSCOUNT < 0) then
begin
Exit(EINVAL);
end;
@ -1256,7 +1256,7 @@ end;
function kqueue_fo_find(filt:Integer):p_filterops;
begin
if (filt > 0) or (filt + EVFILT_SYSCOUNT < 0) then
if (filt >= 0) or (filt + EVFILT_SYSCOUNT < 0) then
begin
Exit(nil);
end;
@ -1281,7 +1281,7 @@ end;
procedure kqueue_fo_release(filt:Integer);
begin
if (filt > 0) or (filt + EVFILT_SYSCOUNT < 0) then
if (filt >= 0) or (filt + EVFILT_SYSCOUNT < 0) then
begin
Exit;
end;

View File

@ -13,6 +13,25 @@ type
TExtensionNames=array of PChar;
APhysicalDeviceProperties=array of TVkPhysicalDeviceProperties;
t_vulkan_app_flags=Set of
(va_debug_utils, //VK_EXT_debug_utils
va_validation_layer, //VK_LAYER_KHRONOS_validation
//
va_enable_gpu_assisted, //VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT
va_enable_gpu_assisted_reserve, //VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT
va_enable_best_practices, //VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT
va_enable_debug_printf, //VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT
va_enable_sync_validation, //VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT
//
va_disable_shaders, //VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT
va_disable_thread_safety, //VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT
va_disable_api_params, //VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT
va_disable_obj_lifetimes, //VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT
va_disable_core_checks, //VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT
va_disable_unique_handles, //VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT
va_disable_shader_validation //VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT
);
TVulkanApp=class
FInstance:TVkInstance;
FPhysicalDevice:TVkPhysicalDevice;
@ -25,7 +44,7 @@ type
FCFamilyCount:TVkUInt32;
FTFamilyCount:TVkUInt32;
//
Constructor Create(debug,printf,validate:Boolean);
Constructor Create(flags:t_vulkan_app_flags);
Destructor Destroy; override;
Procedure LoadFamily; virtual;
function InstanceLayersIsExist(P:PChar):Boolean;
@ -222,6 +241,7 @@ procedure vkCmdWaitEvent(commandBuffer:TVkCommandBuffer;
var
VulkanDeviceGuid:TGUID;
VulkanAppFlags :t_vulkan_app_flags=[];
VulkanApp:TVulkanApp;
DebugReport:TVDebugReport;
@ -927,24 +947,52 @@ begin
begin
vkDestroyInstance(FInstance,nil);
end;
end;
Constructor TVulkanApp.Create(debug,printf,validate:Boolean);
type
AVkValidationFeatureEnable =array of TVkValidationFeatureEnableEXT;
AVkValidationFeatureDisable=array of TVkValidationFeatureDisableEXT;
function GetEnabledFeatures(flags:t_vulkan_app_flags):AVkValidationFeatureEnable;
begin
Result:=nil;
if (va_enable_gpu_assisted in flags) then Insert(VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT ,Result,Length(Result));
if (va_enable_gpu_assisted_reserve in flags) then Insert(VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT,Result,Length(Result));
if (va_enable_best_practices in flags) then Insert(VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT ,Result,Length(Result));
if (va_enable_debug_printf in flags) then Insert(VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT ,Result,Length(Result));
if (va_enable_sync_validation in flags) then Insert(VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT ,Result,Length(Result));
end;
function GetDisabledFeatures(flags:t_vulkan_app_flags):AVkValidationFeatureDisable;
begin
Result:=nil;
if (va_disable_shaders in flags) then Insert(VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT ,Result,Length(Result));
if (va_disable_thread_safety in flags) then Insert(VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT ,Result,Length(Result));
if (va_disable_api_params in flags) then Insert(VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT ,Result,Length(Result));
if (va_disable_obj_lifetimes in flags) then Insert(VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT ,Result,Length(Result));
if (va_disable_core_checks in flags) then Insert(VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT ,Result,Length(Result));
if (va_disable_unique_handles in flags) then Insert(VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT ,Result,Length(Result));
if (va_disable_shader_validation in flags) then Insert(VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT,Result,Length(Result));
end;
Constructor TVulkanApp.Create(flags:t_vulkan_app_flags);
const
dlayer='VK_LAYER_KHRONOS_validation';
var
vkApp :TVkApplicationInfo;
vkExtList:TExtensionNames;
vkLayer :array[0..0] of PChar;
vkCInfo :TVkInstanceCreateInfo;
vkPrintf :TVkValidationFeaturesEXT;
vkFeature:array[0..4] of TVkValidationFeatureEnableEXT;
Features2:TVkPhysicalDeviceFeatures2;
F16_8 :TVkPhysicalDeviceShaderFloat16Int8Features;
FSF_8 :TVkPhysicalDevice8BitStorageFeatures;
FSF16 :TVkPhysicalDevice16BitStorageFeatures;
FRF :TVkPhysicalDeviceRobustness2FeaturesEXT;
FDI :TVkPhysicalDeviceDescriptorIndexingFeatures;
vkApp :TVkApplicationInfo;
vkExtList :TExtensionNames;
vkLayer :array[0..0] of PChar;
vkCInfo :TVkInstanceCreateInfo;
vkEnabled :AVkValidationFeatureEnable;
vkDisabled:AVkValidationFeatureDisable;
vkFeatures:TVkValidationFeaturesEXT;
Features2 :TVkPhysicalDeviceFeatures2;
F16_8 :TVkPhysicalDeviceShaderFloat16Int8Features;
FSF_8 :TVkPhysicalDevice8BitStorageFeatures;
FSF16 :TVkPhysicalDevice16BitStorageFeatures;
FRF :TVkPhysicalDeviceRobustness2FeaturesEXT;
FDI :TVkPhysicalDeviceDescriptorIndexingFeatures;
r:TVkResult;
begin
vkApp:=GetVkApplicationInfo;
@ -955,12 +1003,12 @@ begin
vkCInfo.sType:=VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
vkCInfo.pApplicationInfo:=@vkApp;
if debug then
if (va_debug_utils in flags) then
begin
//VK_EXT_debug_utils
Insert(VK_EXT_DEBUG_UTILS_EXTENSION_NAME,vkExtList,Length(vkExtList));
if validate and InstanceLayersIsExist(dlayer) then
if (va_validation_layer in flags) and InstanceLayersIsExist(dlayer) then
begin
vkLayer[0]:=dlayer;
vkCInfo.enabledLayerCount :=1;
@ -971,20 +1019,24 @@ begin
vkCInfo.enabledExtensionCount :=Length(vkExtList);
vkCInfo.ppEnabledExtensionNames:=@vkExtList[0];
if debug and printf then
if (va_debug_utils in flags) then
begin
vkFeature[0]:=VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT;
vkFeature[1]:=VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT;
//vkFeature[]:=VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT;
//vkFeature[1]:=VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT;
vkFeature[2]:=VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT;
vkEnabled :=GetEnabledFeatures (flags);
vkDisabled:=GetDisabledFeatures(flags);
vkPrintf:=Default(TVkValidationFeaturesEXT);
vkPrintf.sType:=VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT;
vkPrintf.enabledValidationFeatureCount:=3;
vkPrintf.pEnabledValidationFeatures :=@vkFeature[0];
if (Length(vkEnabled)<>0) or
(Length(vkDisabled)<>0) then
begin
vkFeatures:=Default(TVkValidationFeaturesEXT);
vkFeatures.sType:=VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT;
vkCInfo.pNext:=@vkPrintf;
vkFeatures.enabledValidationFeatureCount :=Length(vkEnabled);
vkFeatures.pEnabledValidationFeatures :=@vkEnabled[0];
vkFeatures.disabledValidationFeatureCount:=Length(vkDisabled);
vkFeatures.pDisabledValidationFeatures :=@vkDisabled[0];
vkCInfo.pNext:=@vkFeatures;
end;
end;
Writeln('vkCreateInstance->');
@ -1882,7 +1934,7 @@ begin
Exit;
end;
VulkanApp:=TVulkanApp.Create(true,true,true);
VulkanApp:=TVulkanApp.Create(VulkanAppFlags);
DebugReport:=TVDebugReport.Create;