mirror of https://github.com/red-prig/fpPS4.git
Vulkan App Flags
This commit is contained in:
parent
7e2051400b
commit
689ec25769
|
@ -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
|
||||
|
|
126
gui/cfg_edit.pas
126
gui/cfg_edit.pas
|
@ -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;
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -23,7 +23,6 @@ uses
|
|||
errno,
|
||||
kern_mtx,
|
||||
sys_event,
|
||||
sys_eventvar,
|
||||
kern_event,
|
||||
sched_ule,
|
||||
kern_authinfo,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue