mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
dcfd378fe3
commit
7ef60bd00b
|
@ -7,6 +7,7 @@ interface
|
|||
uses
|
||||
Classes,
|
||||
SysUtils,
|
||||
half16,
|
||||
vulkan,
|
||||
vImage,
|
||||
bittype,
|
||||
|
@ -836,10 +837,76 @@ const
|
|||
// Hugely inefficient linear display mode -- do not use!
|
||||
kTileModeDisplay_LinearGeneral = $0000001F; ///< Unsupported; do not use!
|
||||
|
||||
function _conv_clr_to_float(num:Byte;value,mask:qword):DWORD;
|
||||
var
|
||||
s:Single;
|
||||
i:Integer;
|
||||
begin
|
||||
Result:=0;
|
||||
Case num of
|
||||
NUMBER_UNORM,
|
||||
NUMBER_SRGB:
|
||||
begin
|
||||
s:=(value and mask)/mask;
|
||||
Result:=PDWORD(@s)^;
|
||||
end;
|
||||
NUMBER_SNORM:
|
||||
begin
|
||||
i:=0;
|
||||
|
||||
Case mask of
|
||||
$FF:i:=PShortInt(@value)^;
|
||||
$FFFF:i:=PSmallInt(@value)^;
|
||||
$FFFFFF:i:=PInteger (@value)^;
|
||||
end;
|
||||
|
||||
s:=i/(mask div 2);
|
||||
Result:=PDWORD(@s)^;
|
||||
end;
|
||||
NUMBER_UINT,
|
||||
NUMBER_USCALED:
|
||||
begin
|
||||
Result:=(value and mask);
|
||||
end;
|
||||
NUMBER_SINT,
|
||||
NUMBER_SSCALED:
|
||||
begin
|
||||
i:=0;
|
||||
|
||||
Case mask of
|
||||
$FF:i:=PShortInt(@value)^;
|
||||
$FFFF:i:=PSmallInt(@value)^;
|
||||
$FFFFFF:i:=PInteger (@value)^;
|
||||
else;
|
||||
end;
|
||||
|
||||
Result:=PDWORD(@i)^;
|
||||
end;
|
||||
NUMBER_FLOAT:
|
||||
begin
|
||||
|
||||
Case mask of
|
||||
$FFFF:
|
||||
begin
|
||||
s:=PHalf16(@value)^;
|
||||
Result:=PDWORD(@s)^;
|
||||
end;
|
||||
$FFFFFF:Result:=value;
|
||||
else;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
else;
|
||||
end;
|
||||
end;
|
||||
|
||||
Function TGPU_REGS.GET_RT_INFO(i:Byte):TRT_INFO; //0..7
|
||||
var
|
||||
COMP_MAP:TCOMP_MAP;
|
||||
W:QWORD;
|
||||
FORMAT:Byte;
|
||||
NUMBER_TYPE:Byte;
|
||||
begin
|
||||
Result:=Default(TRT_INFO);
|
||||
|
||||
|
@ -859,21 +926,35 @@ begin
|
|||
Assert(RENDER_TARGET[i].INFO.ENDIAN=ENDIAN_NONE);
|
||||
//Assert(RENDER_TARGET[i].INFO.COMPRESSION=0); //FMASK and MSAA
|
||||
|
||||
Case RENDER_TARGET[i].INFO.FORMAT of
|
||||
FORMAT :=RENDER_TARGET[i].INFO.FORMAT;
|
||||
NUMBER_TYPE:=RENDER_TARGET[i].INFO.NUMBER_TYPE;
|
||||
|
||||
Case FORMAT of
|
||||
COLOR_8:
|
||||
Case RENDER_TARGET[i].INFO.NUMBER_TYPE of
|
||||
Case NUMBER_TYPE of
|
||||
NUMBER_UNORM:Result.FImageInfo.cformat:=VK_FORMAT_R8_UNORM;
|
||||
NUMBER_SRGB :Result.FImageInfo.cformat:=VK_FORMAT_R8_SRGB;
|
||||
else
|
||||
Assert(false,'TODO');
|
||||
end;
|
||||
COLOR_8_8_8_8:
|
||||
Case RENDER_TARGET[i].INFO.NUMBER_TYPE of
|
||||
Case NUMBER_TYPE of
|
||||
NUMBER_UNORM:Result.FImageInfo.cformat:=VK_FORMAT_R8G8B8A8_UNORM;
|
||||
NUMBER_SRGB :Result.FImageInfo.cformat:=VK_FORMAT_R8G8B8A8_SRGB;
|
||||
else
|
||||
Assert(false,'TODO');
|
||||
end;
|
||||
COLOR_16_16:
|
||||
Case NUMBER_TYPE of
|
||||
NUMBER_UNORM :Result.FImageInfo.cformat:=VK_FORMAT_R16G16_UNORM;
|
||||
NUMBER_SRGB :Result.FImageInfo.cformat:=VK_FORMAT_R16G16_UNORM;
|
||||
NUMBER_SNORM :Result.FImageInfo.cformat:=VK_FORMAT_R16G16_SNORM;
|
||||
NUMBER_USCALED:Result.FImageInfo.cformat:=VK_FORMAT_R16G16_USCALED;
|
||||
NUMBER_SSCALED:Result.FImageInfo.cformat:=VK_FORMAT_R16G16_SSCALED;
|
||||
NUMBER_UINT :Result.FImageInfo.cformat:=VK_FORMAT_R16G16_UINT;
|
||||
NUMBER_SINT :Result.FImageInfo.cformat:=VK_FORMAT_R16G16_SINT;
|
||||
NUMBER_FLOAT :Result.FImageInfo.cformat:=VK_FORMAT_R16G16_SFLOAT;
|
||||
end;
|
||||
else
|
||||
Assert(false,'TODO');
|
||||
end;
|
||||
|
@ -920,12 +1001,10 @@ begin
|
|||
// Result.IMAGE_USAGE:=Result.IMAGE_USAGE or TM_READ;
|
||||
//end;
|
||||
|
||||
Case RENDER_TARGET[i].INFO.FORMAT of
|
||||
Case FORMAT of
|
||||
COLOR_8,
|
||||
COLOR_8_8,
|
||||
COLOR_8_8_8_8:
|
||||
Case RENDER_TARGET[i].INFO.NUMBER_TYPE of
|
||||
NUMBER_UNORM,
|
||||
NUMBER_SRGB :
|
||||
begin
|
||||
COMP_MAP:=GetCompMap(RENDER_TARGET[i].INFO.COMP_SWAP,4);
|
||||
|
||||
|
@ -941,14 +1020,25 @@ begin
|
|||
//Writeln((W shr (BsrDWord(COMP_MAP[2]) shl 3)) and 255);
|
||||
//Writeln((W shr (BsrDWord(COMP_MAP[3]) shl 3)) and 255);
|
||||
|
||||
Result.CLEAR_COLOR.float32[0]:=((W shr (BsrDWord(COMP_MAP[0]) shl 3)) and 255)/255;
|
||||
Result.CLEAR_COLOR.float32[1]:=((W shr (BsrDWord(COMP_MAP[1]) shl 3)) and 255)/255;
|
||||
Result.CLEAR_COLOR.float32[2]:=((W shr (BsrDWord(COMP_MAP[2]) shl 3)) and 255)/255;
|
||||
Result.CLEAR_COLOR.float32[3]:=((W shr (BsrDWord(COMP_MAP[3]) shl 3)) and 255)/255;
|
||||
Result.CLEAR_COLOR.uint32[0]:=_conv_clr_to_float(NUMBER_TYPE,W shr (BsrDWord(COMP_MAP[0]) shl 3),$FF);
|
||||
Result.CLEAR_COLOR.uint32[1]:=_conv_clr_to_float(NUMBER_TYPE,W shr (BsrDWord(COMP_MAP[1]) shl 3),$FF);
|
||||
Result.CLEAR_COLOR.uint32[2]:=_conv_clr_to_float(NUMBER_TYPE,W shr (BsrDWord(COMP_MAP[2]) shl 3),$FF);
|
||||
Result.CLEAR_COLOR.uint32[3]:=_conv_clr_to_float(NUMBER_TYPE,W shr (BsrDWord(COMP_MAP[3]) shl 3),$FF);
|
||||
end;
|
||||
else
|
||||
Assert(false);
|
||||
end;
|
||||
|
||||
COLOR_16_16,
|
||||
COLOR_16_16_16_16:
|
||||
begin
|
||||
COMP_MAP:=GetCompMap(RENDER_TARGET[i].INFO.COMP_SWAP,4);
|
||||
|
||||
W:=RENDER_TARGET[i].CLEAR_WORD;
|
||||
|
||||
Result.CLEAR_COLOR.uint32[0]:=_conv_clr_to_float(NUMBER_TYPE,W shr (BsrDWord(COMP_MAP[0]) shl 4),$FFFF);
|
||||
Result.CLEAR_COLOR.uint32[1]:=_conv_clr_to_float(NUMBER_TYPE,W shr (BsrDWord(COMP_MAP[1]) shl 4),$FFFF);
|
||||
Result.CLEAR_COLOR.uint32[2]:=_conv_clr_to_float(NUMBER_TYPE,W shr (BsrDWord(COMP_MAP[2]) shl 4),$FFFF);
|
||||
Result.CLEAR_COLOR.uint32[3]:=_conv_clr_to_float(NUMBER_TYPE,W shr (BsrDWord(COMP_MAP[3]) shl 4),$FFFF);
|
||||
end;
|
||||
|
||||
else
|
||||
Assert(false);
|
||||
end;
|
||||
|
@ -1342,7 +1432,7 @@ begin
|
|||
BUF_DATA_FORMAT_8 :Result:=VK_FORMAT_R8_UNORM;
|
||||
BUF_DATA_FORMAT_8_8 :Result:=VK_FORMAT_R8G8_UNORM;
|
||||
BUF_DATA_FORMAT_8_8_8_8 :Result:=VK_FORMAT_R8G8B8A8_UNORM;
|
||||
BUF_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16_UNORM;
|
||||
BUF_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16G16_UNORM;
|
||||
BUF_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_UNORM;
|
||||
else
|
||||
Assert(false,_get_buf_dfmt_str(PV^.dfmt));
|
||||
|
@ -1353,7 +1443,7 @@ begin
|
|||
BUF_DATA_FORMAT_8 :Result:=VK_FORMAT_R8_SNORM;
|
||||
BUF_DATA_FORMAT_8_8 :Result:=VK_FORMAT_R8G8_SNORM;
|
||||
BUF_DATA_FORMAT_8_8_8_8 :Result:=VK_FORMAT_R8G8B8A8_SNORM;
|
||||
BUF_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16_SNORM;
|
||||
BUF_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16G16_UNORM;
|
||||
BUF_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_SNORM;
|
||||
else
|
||||
Assert(false,_get_buf_dfmt_str(PV^.dfmt));
|
||||
|
@ -1364,7 +1454,7 @@ begin
|
|||
BUF_DATA_FORMAT_8 :Result:=VK_FORMAT_R8_USCALED;
|
||||
BUF_DATA_FORMAT_8_8 :Result:=VK_FORMAT_R8G8_USCALED;
|
||||
BUF_DATA_FORMAT_8_8_8_8 :Result:=VK_FORMAT_R8G8B8A8_USCALED;
|
||||
BUF_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16_USCALED;
|
||||
BUF_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16G16_USCALED;
|
||||
BUF_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_USCALED;
|
||||
else
|
||||
Assert(false,_get_buf_dfmt_str(PV^.dfmt));
|
||||
|
@ -1375,7 +1465,7 @@ begin
|
|||
BUF_DATA_FORMAT_8 :Result:=VK_FORMAT_R8_SSCALED;
|
||||
BUF_DATA_FORMAT_8_8 :Result:=VK_FORMAT_R8G8_SSCALED;
|
||||
BUF_DATA_FORMAT_8_8_8_8 :Result:=VK_FORMAT_R8G8B8A8_SSCALED;
|
||||
BUF_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16_SSCALED;
|
||||
BUF_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16G16_SSCALED;
|
||||
BUF_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_SSCALED;
|
||||
else
|
||||
Assert(false,_get_buf_dfmt_str(PV^.dfmt));
|
||||
|
@ -1386,7 +1476,7 @@ begin
|
|||
BUF_DATA_FORMAT_8 :Result:=VK_FORMAT_R8_UINT;
|
||||
BUF_DATA_FORMAT_8_8 :Result:=VK_FORMAT_R8G8_UINT;
|
||||
BUF_DATA_FORMAT_8_8_8_8 :Result:=VK_FORMAT_R8G8B8A8_UINT;
|
||||
BUF_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16_UINT;
|
||||
BUF_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16G16_UINT;
|
||||
BUF_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_UINT;
|
||||
BUF_DATA_FORMAT_32 :Result:=VK_FORMAT_R32_UINT;
|
||||
BUF_DATA_FORMAT_32_32 :Result:=VK_FORMAT_R32G32_UINT;
|
||||
|
@ -1401,7 +1491,7 @@ begin
|
|||
BUF_DATA_FORMAT_8 :Result:=VK_FORMAT_R8_SINT;
|
||||
BUF_DATA_FORMAT_8_8 :Result:=VK_FORMAT_R8G8_SINT;
|
||||
BUF_DATA_FORMAT_8_8_8_8 :Result:=VK_FORMAT_R8G8B8A8_SINT;
|
||||
BUF_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16_SINT;
|
||||
BUF_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16G16_SINT;
|
||||
BUF_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_SINT;
|
||||
BUF_DATA_FORMAT_32 :Result:=VK_FORMAT_R32_SINT;
|
||||
BUF_DATA_FORMAT_32_32 :Result:=VK_FORMAT_R32G32_SINT;
|
||||
|
@ -1447,7 +1537,7 @@ begin
|
|||
IMG_DATA_FORMAT_8 :Result:=VK_FORMAT_R8_UNORM;
|
||||
IMG_DATA_FORMAT_8_8 :Result:=VK_FORMAT_R8G8_UNORM;
|
||||
IMG_DATA_FORMAT_8_8_8_8 :Result:=VK_FORMAT_R8G8B8A8_UNORM;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16_UNORM;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16G16_UNORM;
|
||||
IMG_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_UNORM;
|
||||
IMG_DATA_FORMAT_5_6_5 :Result:=VK_FORMAT_R5G6B5_UNORM_PACK16;
|
||||
IMG_DATA_FORMAT_4_4_4_4 :Result:=VK_FORMAT_R4G4B4A4_UNORM_PACK16;
|
||||
|
@ -1473,7 +1563,7 @@ begin
|
|||
IMG_DATA_FORMAT_8 :Result:=VK_FORMAT_R8_SNORM;
|
||||
IMG_DATA_FORMAT_8_8 :Result:=VK_FORMAT_R8G8_SNORM;
|
||||
IMG_DATA_FORMAT_8_8_8_8 :Result:=VK_FORMAT_R8G8B8A8_SNORM;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16_SNORM;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16G16_SNORM;
|
||||
IMG_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_SNORM;
|
||||
else
|
||||
Assert(false,_get_tex_dfmt_str(PT^.dfmt));
|
||||
|
@ -1484,7 +1574,7 @@ begin
|
|||
IMG_DATA_FORMAT_8 :Result:=VK_FORMAT_R8_USCALED;
|
||||
IMG_DATA_FORMAT_8_8 :Result:=VK_FORMAT_R8G8_USCALED;
|
||||
IMG_DATA_FORMAT_8_8_8_8 :Result:=VK_FORMAT_R8G8B8A8_USCALED;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16_USCALED;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16G16_USCALED;
|
||||
IMG_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_USCALED;
|
||||
else
|
||||
Assert(false,_get_tex_dfmt_str(PT^.dfmt));
|
||||
|
@ -1496,7 +1586,7 @@ begin
|
|||
IMG_DATA_FORMAT_8 :Result:=VK_FORMAT_R8_SSCALED;
|
||||
IMG_DATA_FORMAT_8_8 :Result:=VK_FORMAT_R8G8_SSCALED;
|
||||
IMG_DATA_FORMAT_8_8_8_8 :Result:=VK_FORMAT_R8G8B8A8_SSCALED;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16_SSCALED;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16G16_SSCALED;
|
||||
IMG_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_SSCALED;
|
||||
else
|
||||
Assert(false,_get_tex_dfmt_str(PT^.dfmt));
|
||||
|
@ -1507,7 +1597,7 @@ begin
|
|||
IMG_DATA_FORMAT_8 :Result:=VK_FORMAT_R8_UINT;
|
||||
IMG_DATA_FORMAT_8_8 :Result:=VK_FORMAT_R8G8_UINT;
|
||||
IMG_DATA_FORMAT_8_8_8_8 :Result:=VK_FORMAT_R8G8B8A8_UINT;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16_UINT;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16G16_UINT;
|
||||
IMG_DATA_FORMAT_16_16_16_16 :Result:=VK_FORMAT_R16G16B16A16_UINT;
|
||||
IMG_DATA_FORMAT_32 :Result:=VK_FORMAT_R32_UINT;
|
||||
IMG_DATA_FORMAT_32_32 :Result:=VK_FORMAT_R32G32_UINT;
|
||||
|
@ -1528,7 +1618,7 @@ begin
|
|||
IMG_DATA_FORMAT_8 :Result:=VK_FORMAT_R8_SINT;
|
||||
IMG_DATA_FORMAT_8_8 :Result:=VK_FORMAT_R8G8_SINT;
|
||||
IMG_DATA_FORMAT_8_8_8_8 :Result:=VK_FORMAT_R8G8B8A8_SINT;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16_SINT;
|
||||
IMG_DATA_FORMAT_16_16 :Result:=VK_FORMAT_R16G16_SINT;
|
||||
IMG_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_SINT;
|
||||
IMG_DATA_FORMAT_32 :Result:=VK_FORMAT_R32_SINT;
|
||||
IMG_DATA_FORMAT_32_32 :Result:=VK_FORMAT_R32G32_SINT;
|
||||
|
|
|
@ -333,6 +333,7 @@
|
|||
<Unit73>
|
||||
<Filename Value="src\ps4_libsceplaygo.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="ps4_libScePlayGo"/>
|
||||
</Unit73>
|
||||
<Unit74>
|
||||
<Filename Value="src\ps4_libsceremoteplay.pas"/>
|
||||
|
|
36
fpPS4.lpr
36
fpPS4.lpr
|
@ -396,16 +396,9 @@ begin
|
|||
//Writeln('Warn^:',Info^.lib^.strName,':',ps4libdoc.GetFunctName(Info^.Nid),':',HexStr(Info^.Nid,16));
|
||||
end else
|
||||
begin
|
||||
//PNAME = 'module_stop',
|
||||
//_MD = $11af200,
|
||||
//LIB = $114e110,
|
||||
//NID = 0,
|
||||
//OFFSET = 311584,
|
||||
//RTYPE = 7, //R_X86_64_JUMP_SLOT
|
||||
//SBIND = 2, //STB_WEAK
|
||||
//STYPE = 0} //STT_NOTYPE
|
||||
Writeln(StdErr,'Warn^:',Info^.lib^.strName,':',ps4libdoc.GetFunctName(Info^.Nid),':',HexStr(Info^.Nid,16));
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
if (Result<>nil) then //cache
|
||||
|
@ -608,9 +601,15 @@ begin
|
|||
//ps4_app.app_path:='G:\Games\Super Exploding Zoo\CUSA00446\';
|
||||
//ps4_app.app_file:='G:\Games\Super Exploding Zoo\CUSA00446\eboot.bin';
|
||||
|
||||
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Super.Exploding.Zoo\';
|
||||
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Super.Exploding.Zoo\eboot.bin';
|
||||
|
||||
//ps4_app.app_path:='G:\Games\Untitled Goose Game\CUSA23079\';
|
||||
//ps4_app.app_file:='G:\Games\Untitled Goose Game\CUSA23079\eboot.bin';
|
||||
|
||||
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Untitled Goose Game\CUSA23079\';
|
||||
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Untitled Goose Game\CUSA23079\eboot.bin';
|
||||
|
||||
//ps4_app.app_path:='C:\Users\User\Desktop\Games\JETPACKJOYRIDE\CUSA03633\';
|
||||
//ps4_app.app_file:='C:\Users\User\Desktop\Games\JETPACKJOYRIDE\CUSA03633\eboot.bin';
|
||||
|
||||
|
@ -647,6 +646,9 @@ begin
|
|||
//ps4_app.app_path:='G:\Games\Blackhole\CUSA06921\';
|
||||
//ps4_app.app_file:='G:\Games\Blackhole\CUSA06921\eboot.bin';
|
||||
|
||||
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Blackhole\CUSA06921\';
|
||||
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Blackhole\CUSA06921\eboot.bin';
|
||||
|
||||
//ps4_app.app_path:='G:\Games\Spelunky\CUSA00491\';
|
||||
//ps4_app.app_file:='G:\Games\Spelunky\CUSA00491\eboot.bin';
|
||||
|
||||
|
@ -665,6 +667,24 @@ begin
|
|||
//ps4_app.app_path:='G:\Games\Roombo First Blood\CUSA19205\';
|
||||
//ps4_app.app_file:='G:\Games\Roombo First Blood\CUSA19205\eboot.bin';
|
||||
|
||||
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\PS4_Player_9.00\';
|
||||
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\PS4_Player_9.00\eboot.bin';
|
||||
|
||||
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\Eboot_Give\';
|
||||
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\Eboot_Give\RayTracing3_eboot.bin';
|
||||
|
||||
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Metal_Max_Xeno\CUSA12350\';
|
||||
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Metal_Max_Xeno\CUSA12350\eboot.bin';
|
||||
|
||||
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Roombo First Blood\CUSA19205\';
|
||||
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Roombo First Blood\CUSA19205\eboot.bin';
|
||||
|
||||
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\pad\';
|
||||
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\pad\eboot.bin';
|
||||
|
||||
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Gem.Smashers\CUSA07572\';
|
||||
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Gem.Smashers\CUSA07572\eboot.bin';
|
||||
|
||||
ps4_app.resolve_cb:=@ResolveImport;
|
||||
ps4_app.reload_cb :=@ReloadImport;
|
||||
|
||||
|
|
|
@ -27,14 +27,14 @@ type
|
|||
private
|
||||
//free: [Size] |[Offset]
|
||||
//alloc: [Offset]
|
||||
Function GetOffset:QWORD; inline;
|
||||
Procedure SetOffset(q:qword); inline;
|
||||
Function GetSize:QWORD; inline;
|
||||
Procedure SetSize(q:qword); inline;
|
||||
Function GetAddr:Pointer; inline;
|
||||
Procedure SetAddr(p:Pointer); inline;
|
||||
Function GetIsFree:Boolean; inline;
|
||||
Procedure SetIsFree(b:Boolean); inline;
|
||||
Function GetOffset:QWORD;
|
||||
Procedure SetOffset(q:qword);
|
||||
Function GetSize:QWORD;
|
||||
Procedure SetSize(q:qword);
|
||||
Function GetAddr:Pointer;
|
||||
Procedure SetAddr(p:Pointer);
|
||||
Function GetIsFree:Boolean;
|
||||
Procedure SetIsFree(b:Boolean);
|
||||
public
|
||||
F:bitpacked record
|
||||
Offset:bit28;
|
||||
|
@ -68,6 +68,7 @@ type
|
|||
const
|
||||
Flo=0;
|
||||
Fhi=$17FFFFFFF;
|
||||
FMaxSize=(Fhi-Flo+1);
|
||||
|
||||
var
|
||||
FFreeSet:TFreePoolNodeSet;
|
||||
|
@ -150,45 +151,45 @@ end;
|
|||
|
||||
//
|
||||
|
||||
Function TDirectAdrNode.GetOffset:QWORD; inline;
|
||||
Function TDirectAdrNode.GetOffset:QWORD;
|
||||
begin
|
||||
Result:=QWORD(F.Offset) shl 12;
|
||||
end;
|
||||
|
||||
Procedure TDirectAdrNode.SetOffset(q:qword); inline;
|
||||
Procedure TDirectAdrNode.SetOffset(q:qword);
|
||||
begin
|
||||
F.Offset:=DWORD(q shr 12);
|
||||
Assert(GetOffset=q);
|
||||
end;
|
||||
|
||||
Function TDirectAdrNode.GetSize:QWORD; inline;
|
||||
Function TDirectAdrNode.GetSize:QWORD;
|
||||
begin
|
||||
Result:=QWORD(F.Size) shl 12;
|
||||
end;
|
||||
|
||||
Procedure TDirectAdrNode.SetSize(q:qword); inline;
|
||||
Procedure TDirectAdrNode.SetSize(q:qword);
|
||||
begin
|
||||
F.Size:=DWORD(q shr 12);
|
||||
Assert(GetSize=q);
|
||||
end;
|
||||
|
||||
Function TDirectAdrNode.GetAddr:Pointer; inline;
|
||||
Function TDirectAdrNode.GetAddr:Pointer;
|
||||
begin
|
||||
Result:=Pointer(QWORD(F.addr) shl 12);
|
||||
end;
|
||||
|
||||
Procedure TDirectAdrNode.SetAddr(p:Pointer); inline;
|
||||
Procedure TDirectAdrNode.SetAddr(p:Pointer);
|
||||
begin
|
||||
F.addr:=DWORD(QWORD(p) shr 12);
|
||||
Assert(GetAddr=p);
|
||||
end;
|
||||
|
||||
Function TDirectAdrNode.GetIsFree:Boolean; inline;
|
||||
Function TDirectAdrNode.GetIsFree:Boolean;
|
||||
begin
|
||||
Result:=Boolean(F.Free);
|
||||
end;
|
||||
|
||||
Procedure TDirectAdrNode.SetIsFree(b:Boolean); inline;
|
||||
Procedure TDirectAdrNode.SetIsFree(b:Boolean);
|
||||
begin
|
||||
F.Free:=Byte(b);
|
||||
end;
|
||||
|
@ -204,7 +205,7 @@ begin
|
|||
key:=Default(TDirectAdrNode);
|
||||
key.IsFree:=True;
|
||||
key.Offset:=Flo;
|
||||
key.Size :=(Fhi-Flo+1);
|
||||
key.Size :=FMaxSize;
|
||||
|
||||
_Insert(key);
|
||||
end;
|
||||
|
@ -417,9 +418,9 @@ var
|
|||
Offset:QWORD;
|
||||
begin
|
||||
Result:=0;
|
||||
if (Size=0) or (Align=0) then Exit(EINVAL);
|
||||
if (ss<Flo) or (ss>Fhi) then Exit(EINVAL);
|
||||
if (se<Flo) or (se<ss) then Exit(EINVAL);
|
||||
if (Size=0) or (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (ss<Flo) or (ss>Fhi) then Exit(EINVAL);
|
||||
if (se<Flo) or (se<ss) then Exit(EINVAL);
|
||||
|
||||
key:=Default(TDirectAdrNode);
|
||||
|
||||
|
@ -454,6 +455,9 @@ var
|
|||
key:TDirectAdrNode;
|
||||
begin
|
||||
Result:=0;
|
||||
|
||||
if (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
key:=Default(TDirectAdrNode);
|
||||
key.Offset:=Offset;
|
||||
|
||||
|
@ -498,6 +502,9 @@ var
|
|||
key:TDirectAdrNode;
|
||||
begin
|
||||
Result:=0;
|
||||
|
||||
if (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
key:=Default(TDirectAdrNode);
|
||||
key.Offset:=Offset;
|
||||
|
||||
|
@ -521,7 +528,6 @@ var
|
|||
Size:QWORD;
|
||||
begin
|
||||
Result:=ENOMEM;
|
||||
if (Align=0) then Exit(EINVAL);
|
||||
if (ss<Flo) or (ss>Fhi) then Exit(EINVAL);
|
||||
if (se<Flo) or (se<ss) then Exit(EINVAL);
|
||||
|
||||
|
@ -532,14 +538,20 @@ begin
|
|||
While (It.Item<>nil) do
|
||||
begin
|
||||
key:=It.Item^;
|
||||
Offset:=System.Align(Max(key.Offset,ss),Align);
|
||||
if (se>=Offset) then
|
||||
|
||||
if key.IsFree then
|
||||
begin
|
||||
Size:=key.Size-(Offset-key.Offset);
|
||||
AdrOut :=Offset;
|
||||
SizeOut:=Size;
|
||||
Exit(0);
|
||||
Offset:=System.Align(Max(key.Offset,ss),Align);
|
||||
|
||||
if (se>=Offset) then
|
||||
begin
|
||||
Size:=key.Size-(Offset-key.Offset);
|
||||
AdrOut :=Offset;
|
||||
SizeOut:=Size;
|
||||
Exit(0);
|
||||
end;
|
||||
end;
|
||||
|
||||
It.Next
|
||||
end;
|
||||
end;
|
||||
|
@ -551,7 +563,7 @@ var
|
|||
FEndO:QWORD;
|
||||
begin
|
||||
Result:=0;
|
||||
if (Size=0) then Exit(EINVAL);
|
||||
if (Size=0) or (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (Offset<Flo) or (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
FEndO:=Offset+Size;
|
||||
|
@ -585,7 +597,7 @@ var
|
|||
FEndO:QWORD;
|
||||
begin
|
||||
Result:=0;
|
||||
if (Size=0) then Exit(EINVAL);
|
||||
if (Size=0) or (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (Offset<Flo) or (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
FEndO:=Offset+Size;
|
||||
|
@ -623,7 +635,7 @@ var
|
|||
FEndO:QWORD;
|
||||
begin
|
||||
Result:=ENOENT;
|
||||
if (Size=0) then Exit(EINVAL);
|
||||
if (Size=0) or (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (Offset<Flo) or (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
FEndO:=Offset+Size;
|
||||
|
@ -713,7 +725,7 @@ var
|
|||
|
||||
begin
|
||||
Result:=0;
|
||||
if (Size=0) then Exit(EINVAL);
|
||||
if (Size=0) or (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (Offset<Flo) or (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
repeat
|
||||
|
@ -822,7 +834,7 @@ var
|
|||
|
||||
begin
|
||||
Result:=0;
|
||||
if (Size=0) then Exit(EINVAL);
|
||||
if (Size=0) or (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (Offset<Flo) or (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
repeat
|
||||
|
@ -914,7 +926,7 @@ var
|
|||
|
||||
begin
|
||||
Result:=0;
|
||||
if (Size=0) then Exit(EINVAL);
|
||||
if (Size=0) or (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (Offset<Flo) or (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
repeat
|
||||
|
|
|
@ -27,10 +27,10 @@ type
|
|||
|
||||
TNameAdrNode=packed object
|
||||
private
|
||||
Function GetOffset:Pointer; inline;
|
||||
Procedure SetOffset(q:Pointer); inline;
|
||||
Function GetSize:QWORD; inline;
|
||||
Procedure SetSize(q:QWORD); inline;
|
||||
Function GetOffset:Pointer;
|
||||
Procedure SetOffset(q:Pointer);
|
||||
Function GetSize:QWORD;
|
||||
Procedure SetSize(q:QWORD);
|
||||
public
|
||||
F:bitpacked record
|
||||
Offset:DWORD;
|
||||
|
@ -54,6 +54,7 @@ type
|
|||
|
||||
var
|
||||
Flo,Fhi:Pointer;
|
||||
FMaxSize:QWORD;
|
||||
|
||||
FAllcSet:TAllcPoolNodeSet;
|
||||
public
|
||||
|
@ -94,23 +95,23 @@ end;
|
|||
|
||||
//
|
||||
|
||||
Function TNameAdrNode.GetOffset:Pointer; inline;
|
||||
Function TNameAdrNode.GetOffset:Pointer;
|
||||
begin
|
||||
Result:=Pointer(QWORD(F.Offset) shl 12);
|
||||
end;
|
||||
|
||||
Procedure TNameAdrNode.SetOffset(q:Pointer); inline;
|
||||
Procedure TNameAdrNode.SetOffset(q:Pointer);
|
||||
begin
|
||||
F.Offset:=DWORD(QWORD(q) shr 12);
|
||||
Assert(GetOffset=q);
|
||||
end;
|
||||
|
||||
Function TNameAdrNode.GetSize:QWORD; inline;
|
||||
Function TNameAdrNode.GetSize:QWORD;
|
||||
begin
|
||||
Result:=QWORD(F.Size) shl 12;
|
||||
end;
|
||||
|
||||
Procedure TNameAdrNode.SetSize(q:QWORD); inline;
|
||||
Procedure TNameAdrNode.SetSize(q:QWORD);
|
||||
begin
|
||||
F.Size:=DWORD(q shr 12);
|
||||
Assert(GetSize=q);
|
||||
|
@ -134,9 +135,11 @@ begin
|
|||
Flo:=Pointer(_lo);
|
||||
Fhi:=Pointer(_hi);
|
||||
|
||||
FMaxSize:=(_hi-_lo+1);
|
||||
|
||||
key:=Default(TNameAdrNode);
|
||||
key.Offset:=Pointer(_lo);
|
||||
key.Size :=(_hi-_lo+1);
|
||||
key.Size :=FMaxSize;
|
||||
|
||||
_Insert(key);
|
||||
end;
|
||||
|
@ -317,7 +320,7 @@ var
|
|||
|
||||
begin
|
||||
Result:=0;
|
||||
if (Size=0) then Exit(EINVAL);
|
||||
if (Size=0) or (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (Offset<Flo) or (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
FEndO:=AlignDw(Offset,PHYSICAL_PAGE_SIZE);
|
||||
|
|
|
@ -52,14 +52,14 @@ type
|
|||
PVirtualAdrBlock=^TVirtualAdrBlock;
|
||||
TVirtualAdrBlock=packed object
|
||||
private
|
||||
Function GetOffset:Pointer; inline;
|
||||
Procedure SetOffset(q:Pointer); inline;
|
||||
Function GetSize:QWORD; inline;
|
||||
Procedure SetSize(q:QWORD); inline;
|
||||
Function GetUsed:QWORD; inline;
|
||||
Procedure SetUsed(q:QWORD); inline;
|
||||
Function GetRsrv:QWORD; inline;
|
||||
Procedure SetRsrv(q:QWORD); inline;
|
||||
Function GetOffset:Pointer;
|
||||
Procedure SetOffset(q:Pointer);
|
||||
Function GetSize:QWORD;
|
||||
Procedure SetSize(q:QWORD);
|
||||
Function GetUsed:QWORD;
|
||||
Procedure SetUsed(q:QWORD);
|
||||
Function GetRsrv:QWORD;
|
||||
Procedure SetRsrv(q:QWORD);
|
||||
public
|
||||
F:bitpacked record
|
||||
Offset:bit28;
|
||||
|
@ -83,14 +83,14 @@ type
|
|||
private
|
||||
//free: [Size] |[Offset]
|
||||
//alloc: [Offset]
|
||||
Function GetOffset:Pointer; inline;
|
||||
Procedure SetOffset(q:Pointer); inline;
|
||||
Function GetSize:QWORD; inline;
|
||||
Procedure SetSize(q:QWORD); inline;
|
||||
Function GetAddr:QWORD; inline;
|
||||
Procedure SetAddr(p:QWORD); inline;
|
||||
Function GetIsFree:Boolean; inline;
|
||||
Procedure SetIsFree(b:Boolean); inline;
|
||||
Function GetOffset:Pointer;
|
||||
Procedure SetOffset(q:Pointer);
|
||||
Function GetSize:QWORD;
|
||||
Procedure SetSize(q:QWORD);
|
||||
Function GetAddr:QWORD;
|
||||
Procedure SetAddr(p:QWORD);
|
||||
Function GetIsFree:Boolean;
|
||||
Procedure SetIsFree(b:Boolean);
|
||||
public
|
||||
F:bitpacked record
|
||||
Offset:bit28;
|
||||
|
@ -133,6 +133,7 @@ type
|
|||
|
||||
var
|
||||
Flo,Fhi:Pointer;
|
||||
FMaxSize:QWORD;
|
||||
|
||||
FFreeSet:TFreePoolNodeSet;
|
||||
FAllcSet:TAllcPoolNodeSet;
|
||||
|
@ -312,45 +313,45 @@ end;
|
|||
|
||||
//
|
||||
|
||||
Function TVirtualAdrBlock.GetOffset:Pointer; inline;
|
||||
Function TVirtualAdrBlock.GetOffset:Pointer;
|
||||
begin
|
||||
Result:=Pointer(QWORD(F.Offset) shl 12);
|
||||
end;
|
||||
|
||||
Procedure TVirtualAdrBlock.SetOffset(q:Pointer); inline;
|
||||
Procedure TVirtualAdrBlock.SetOffset(q:Pointer);
|
||||
begin
|
||||
F.Offset:=DWORD(QWORD(q) shr 12);
|
||||
Assert(GetOffset=q);
|
||||
end;
|
||||
|
||||
Function TVirtualAdrBlock.GetSize:QWORD; inline;
|
||||
Function TVirtualAdrBlock.GetSize:QWORD;
|
||||
begin
|
||||
Result:=QWORD(F.Size) shl 12;
|
||||
end;
|
||||
|
||||
Procedure TVirtualAdrBlock.SetSize(q:QWORD); inline;
|
||||
Procedure TVirtualAdrBlock.SetSize(q:QWORD);
|
||||
begin
|
||||
F.Size:=DWORD(q shr 12);
|
||||
Assert(GetSize=q);
|
||||
end;
|
||||
|
||||
Function TVirtualAdrBlock.GetUsed:QWORD; inline;
|
||||
Function TVirtualAdrBlock.GetUsed:QWORD;
|
||||
begin
|
||||
Result:=QWORD(F.used) shl 12;
|
||||
end;
|
||||
|
||||
Procedure TVirtualAdrBlock.SetUsed(q:QWORD); inline;
|
||||
Procedure TVirtualAdrBlock.SetUsed(q:QWORD);
|
||||
begin
|
||||
F.used:=DWORD(q shr 12);
|
||||
Assert(GetUsed=q);
|
||||
end;
|
||||
|
||||
Function TVirtualAdrBlock.GetRsrv:QWORD; inline;
|
||||
Function TVirtualAdrBlock.GetRsrv:QWORD;
|
||||
begin
|
||||
Result:=QWORD(F.rsrv) shl 12;
|
||||
end;
|
||||
|
||||
Procedure TVirtualAdrBlock.SetRsrv(q:QWORD); inline;
|
||||
Procedure TVirtualAdrBlock.SetRsrv(q:QWORD);
|
||||
begin
|
||||
F.rsrv:=DWORD(q shr 12);
|
||||
Assert(GetRsrv=q);
|
||||
|
@ -468,45 +469,45 @@ end;
|
|||
|
||||
//
|
||||
|
||||
Function TVirtualAdrNode.GetOffset:Pointer; inline;
|
||||
Function TVirtualAdrNode.GetOffset:Pointer;
|
||||
begin
|
||||
Result:=Pointer(QWORD(F.Offset) shl 12);
|
||||
end;
|
||||
|
||||
Procedure TVirtualAdrNode.SetOffset(q:Pointer); inline;
|
||||
Procedure TVirtualAdrNode.SetOffset(q:Pointer);
|
||||
begin
|
||||
F.Offset:=DWORD(QWORD(q) shr 12);
|
||||
Assert(GetOffset=q);
|
||||
end;
|
||||
|
||||
Function TVirtualAdrNode.GetSize:QWORD; inline;
|
||||
Function TVirtualAdrNode.GetSize:QWORD;
|
||||
begin
|
||||
Result:=QWORD(F.Size) shl 12;
|
||||
end;
|
||||
|
||||
Procedure TVirtualAdrNode.SetSize(q:QWORD); inline;
|
||||
Procedure TVirtualAdrNode.SetSize(q:QWORD);
|
||||
begin
|
||||
F.Size:=DWORD(q shr 12);
|
||||
Assert(GetSize=q);
|
||||
end;
|
||||
|
||||
Function TVirtualAdrNode.GetAddr:QWORD; inline;
|
||||
Function TVirtualAdrNode.GetAddr:QWORD;
|
||||
begin
|
||||
Result:=QWORD(F.addr) shl 12;
|
||||
end;
|
||||
|
||||
Procedure TVirtualAdrNode.SetAddr(p:QWORD); inline;
|
||||
Procedure TVirtualAdrNode.SetAddr(p:QWORD);
|
||||
begin
|
||||
F.addr:=DWORD(QWORD(p) shr 12);
|
||||
Assert(GetAddr=p);
|
||||
end;
|
||||
|
||||
Function TVirtualAdrNode.GetIsFree:Boolean; inline;
|
||||
Function TVirtualAdrNode.GetIsFree:Boolean;
|
||||
begin
|
||||
Result:=Boolean(F.Free);
|
||||
end;
|
||||
|
||||
Procedure TVirtualAdrNode.SetIsFree(b:Boolean); inline;
|
||||
Procedure TVirtualAdrNode.SetIsFree(b:Boolean);
|
||||
begin
|
||||
F.Free:=Byte(b);
|
||||
end;
|
||||
|
@ -535,10 +536,12 @@ begin
|
|||
Flo:=Pointer(_lo);
|
||||
Fhi:=Pointer(_hi);
|
||||
|
||||
FMaxSize:=(_hi-_lo+1);
|
||||
|
||||
key:=Default(TVirtualAdrNode);
|
||||
key.IsFree:=True;
|
||||
key.Offset:=Pointer(_lo);
|
||||
key.Size :=(_hi-_lo+1);
|
||||
key.Size :=FMaxSize;
|
||||
|
||||
_Insert(key);
|
||||
end;
|
||||
|
@ -546,6 +549,12 @@ end;
|
|||
procedure TVirtualManager._Insert(const key:TVirtualAdrNode);
|
||||
begin
|
||||
Assert(key.Size<>0);
|
||||
|
||||
if (key.F.direct<>0) then
|
||||
begin
|
||||
Assert(key.addr<$17FFFFFFF);
|
||||
end;
|
||||
|
||||
if key.IsFree then
|
||||
begin
|
||||
if (key.F.mapped=0) then
|
||||
|
@ -649,7 +658,6 @@ procedure TVirtualManager._Merge(key:TVirtualAdrNode);
|
|||
var
|
||||
rkey:TVirtualAdrNode;
|
||||
begin
|
||||
|
||||
//prev union
|
||||
repeat
|
||||
rkey:=key;
|
||||
|
@ -864,7 +872,7 @@ var
|
|||
begin
|
||||
key.IsFree :=True;
|
||||
key.F.prot :=0;
|
||||
key.F.addr :=0;
|
||||
key.F.addr :=0; //hack
|
||||
key.F.reserv:=0;
|
||||
key.F.direct:=0;
|
||||
key.F.stack :=0;
|
||||
|
@ -1015,7 +1023,7 @@ var
|
|||
|
||||
//new save
|
||||
key.IsFree :=False;
|
||||
key.F.addr :=0;
|
||||
key.F.addr :=0; //hack
|
||||
key.F.reserv:=0;
|
||||
key.F.direct:=0;
|
||||
key.F.stack :=0;
|
||||
|
@ -1094,7 +1102,7 @@ var
|
|||
|
||||
begin
|
||||
Result:=0;
|
||||
if (Size=0) then Exit(EINVAL);
|
||||
if (Size=0) or (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (Offset<Flo) or (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
FEndO:=Offset+Size;
|
||||
|
@ -1199,9 +1207,14 @@ var
|
|||
Result:=False;
|
||||
Assert(key.Size<>0);
|
||||
|
||||
if (_direct<>0) then
|
||||
begin
|
||||
Assert(addr<$17FFFFFFF);
|
||||
end;
|
||||
|
||||
//new save
|
||||
key.IsFree :=False;
|
||||
key.F.addr :=addr;
|
||||
key.addr :=addr;
|
||||
key.F.reserv:=_reserv;
|
||||
key.F.direct:=_direct;
|
||||
key.F.stack :=0;
|
||||
|
@ -1235,7 +1248,7 @@ var
|
|||
|
||||
//new save
|
||||
key.IsFree :=False;
|
||||
key.F.addr :=addr;
|
||||
key.addr :=addr;
|
||||
key.F.reserv:=_reserv;
|
||||
key.F.direct:=_direct;
|
||||
key.F.stack :=0;
|
||||
|
@ -1257,7 +1270,7 @@ var
|
|||
|
||||
begin
|
||||
Result:=0;
|
||||
if (Size=0) then Exit(EINVAL);
|
||||
if (Size=0) or (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
Align:=Max(Align,PHYSICAL_PAGE_SIZE);
|
||||
|
@ -1494,6 +1507,9 @@ begin
|
|||
Result:=0;
|
||||
if ((prot and $ffffffc8)<>0) then Exit(EINVAL);
|
||||
|
||||
if (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
FEndO:=AlignDw(Offset,PHYSICAL_PAGE_SIZE);
|
||||
Size:=Size+(Offset-FEndO);
|
||||
|
||||
|
@ -1606,6 +1622,9 @@ begin
|
|||
Result:=0;
|
||||
if ((prot and $ffffffc8)<>0) then Exit(EINVAL);
|
||||
|
||||
if (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
FEndO:=AlignDw(Offset,PHYSICAL_PAGE_SIZE);
|
||||
Size:=Size+(Offset-FEndO);
|
||||
|
||||
|
@ -1718,7 +1737,7 @@ var
|
|||
//new save
|
||||
key.IsFree :=True;
|
||||
key.F.prot :=0;
|
||||
key.F.addr :=0;
|
||||
key.F.addr :=0; //hack
|
||||
key.F.reserv:=0;
|
||||
key.F.direct:=0;
|
||||
key.F.stack :=0;
|
||||
|
@ -1750,7 +1769,7 @@ var
|
|||
|
||||
begin
|
||||
Result:=0;
|
||||
if (Size=0) then Exit(EINVAL);
|
||||
if (Size=0) or (Size>FMaxSize) then Exit(EINVAL);
|
||||
if (Offset<Flo) or (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
FEndO:=AlignDw(Offset,PHYSICAL_PAGE_SIZE);
|
||||
|
@ -1804,6 +1823,11 @@ var
|
|||
key:TVirtualAdrNode;
|
||||
begin
|
||||
Result:=0;
|
||||
|
||||
if (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
Offset:=AlignDw(Offset,PHYSICAL_PAGE_SIZE);
|
||||
|
||||
key:=Default(TVirtualAdrNode);
|
||||
key.Offset:=Offset;
|
||||
|
||||
|
@ -1848,6 +1872,11 @@ var
|
|||
key:TVirtualAdrNode;
|
||||
begin
|
||||
Result:=0;
|
||||
|
||||
if (Offset>Fhi) then Exit(EINVAL);
|
||||
|
||||
Offset:=AlignDw(Offset,PHYSICAL_PAGE_SIZE);
|
||||
|
||||
key:=Default(TVirtualAdrNode);
|
||||
key.Offset:=Offset;
|
||||
|
||||
|
@ -1870,6 +1899,11 @@ var
|
|||
key:TVirtualAdrNode;
|
||||
begin
|
||||
Result:=False;
|
||||
|
||||
if (Offset>Fhi) then Exit;
|
||||
|
||||
Offset:=AlignDw(Offset,PHYSICAL_PAGE_SIZE);
|
||||
|
||||
key:=Default(TVirtualAdrNode);
|
||||
key.Offset:=Offset;
|
||||
|
||||
|
|
|
@ -280,7 +280,6 @@ begin
|
|||
Result:=False;
|
||||
|
||||
pb:=nil;
|
||||
addr:=AlignDw(addr,PHYSICAL_PAGE_SIZE);
|
||||
|
||||
rwlock_rdlock(MMLock);
|
||||
|
||||
|
@ -893,8 +892,6 @@ var
|
|||
begin
|
||||
Result:=0;
|
||||
|
||||
addr:=AlignDw(addr,PHYSICAL_PAGE_SIZE);
|
||||
|
||||
ROut:=Default(TVirtualAdrNode);
|
||||
|
||||
_sig_lock;
|
||||
|
@ -939,8 +936,6 @@ begin
|
|||
if (info=nil) then Exit;
|
||||
if (infoSize<>SizeOf(SceKernelVirtualQueryInfo)) then Exit;
|
||||
|
||||
addr:=AlignDw(addr,PHYSICAL_PAGE_SIZE);
|
||||
|
||||
VOut:=Default(TVirtualAdrNode);
|
||||
DOut:=Default(TDirectAdrNode);
|
||||
Name:=Default(TName);
|
||||
|
|
|
@ -183,6 +183,7 @@ begin
|
|||
VK_FORMAT_R8_SRGB :Result:=1;
|
||||
VK_FORMAT_R5G6B5_UNORM_PACK16 :Result:=2;
|
||||
VK_FORMAT_R4G4B4A4_UNORM_PACK16:Result:=2;
|
||||
VK_FORMAT_R16G16_SFLOAT :Result:=4;
|
||||
VK_FORMAT_R32_SFLOAT :Result:=4;
|
||||
|
||||
//stencil
|
||||
|
|
Loading…
Reference in New Issue