mirror of
https://github.com/red-prig/fpPS4.git
synced 2024-10-07 03:33:20 +00:00
+
This commit is contained in:
parent
dcd6019af6
commit
9671a78e1b
@ -329,6 +329,7 @@
|
||||
<Unit72>
|
||||
<Filename Value="src\ps4_libscepad.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="ps4_libScePad"/>
|
||||
</Unit72>
|
||||
<Unit73>
|
||||
<Filename Value="src\ps4_libsceplaygo.pas"/>
|
||||
|
@ -13,6 +13,9 @@ uses
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
ps4_libSceVideoOut;
|
||||
|
||||
const
|
||||
SCE_PAD_ERROR_INVALID_ARG =-2137915391; // 0x80920001
|
||||
SCE_PAD_ERROR_INVALID_PORT =-2137915390; // 0x80920002
|
||||
@ -156,8 +159,28 @@ begin
|
||||
|
||||
_sig_lock;
|
||||
|
||||
//FillChar(data^,SizeOf(ScePadData),1);
|
||||
//FillChar(data^.touchData,SizeOf(ScePadData.touchData),1);
|
||||
//connect data
|
||||
|
||||
data^.timestamp:=Sysutils.GetTickCount64;
|
||||
|
||||
data^.connected:=True;
|
||||
data^.connectedCount:=1;
|
||||
|
||||
data^.leftStick.x :=$80;
|
||||
data^.leftStick.y :=$80;
|
||||
data^.rightStick.x:=$80;
|
||||
data^.rightStick.y:=$80;
|
||||
|
||||
//only in active windows
|
||||
|
||||
if (MainWindows<>GetForegroundWindow) then
|
||||
begin
|
||||
_sig_unlock;
|
||||
Result:=0;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
//mouse as touch pad
|
||||
|
||||
data^.touchData.touchNum:=1;
|
||||
data^.touchData.touch[0].id:=0;
|
||||
@ -166,16 +189,7 @@ begin
|
||||
data^.touchData.touch[0].x:=mPoint.X;
|
||||
data^.touchData.touch[0].y:=mPoint.Y;
|
||||
|
||||
data^.connected:=True;
|
||||
data^.timestamp:=Sysutils.GetTickCount64;
|
||||
data^.connectedCount:=1;
|
||||
|
||||
data^.leftStick.x:=$80;
|
||||
data^.leftStick.y:=$80;
|
||||
data^.rightStick.x:=$80;
|
||||
data^.rightStick.y:=$80;
|
||||
|
||||
//
|
||||
//keymapping
|
||||
|
||||
if GetAsyncKeyState(VK_W) then
|
||||
data^.leftStick.y:=0;
|
||||
@ -254,7 +268,6 @@ begin
|
||||
if GetAsyncKeyState(VK_C) then
|
||||
data^.buttons:=data^.buttons or SCE_PAD_BUTTON_R3;
|
||||
|
||||
|
||||
_sig_unlock;
|
||||
Result:=0;
|
||||
end;
|
||||
|
@ -243,6 +243,9 @@ type
|
||||
|
||||
function _qc_sceVideoOutSubmitFlip(Flip:PqcFlipInfo):Integer;
|
||||
|
||||
var
|
||||
MainWindows:THandle;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -266,7 +269,10 @@ type
|
||||
wait:SizeUint;
|
||||
u:record
|
||||
Case Byte of
|
||||
0:(bufferIndex:Integer;
|
||||
0:(userID,
|
||||
busType,
|
||||
index:Integer);
|
||||
1:(bufferIndex,
|
||||
flipMode:Integer;
|
||||
flipArg:Int64;
|
||||
_type:Integer);
|
||||
@ -528,6 +534,14 @@ begin
|
||||
TVBlank.OnTimer:=@OnVblank;
|
||||
TVBlank.Enabled:=true;
|
||||
|
||||
Case node^.u.busType of
|
||||
SCE_VIDEO_OUT_BUS_TYPE_MAIN:
|
||||
begin
|
||||
MainWindows:=FForm.Handle;
|
||||
end;
|
||||
else
|
||||
end;
|
||||
|
||||
//data? nop
|
||||
free_node(node);
|
||||
end;
|
||||
@ -556,15 +570,21 @@ begin
|
||||
node:=H.alloc_node;
|
||||
|
||||
Result:=-1;
|
||||
FVideoOutMap.New(H,Result);
|
||||
if not FVideoOutMap.New(H,Result) then Exit(SCE_VIDEO_OUT_ERROR_INVALID_VALUE);
|
||||
|
||||
//Writeln('>sceVideoOutOpen:',HexStr(Pointer(H)));
|
||||
|
||||
Writeln('>sceVideoOutOpen:',HexStr(Pointer(H)));
|
||||
node^.Parent:=@H.sceVideoOutOpen;
|
||||
|
||||
node^.u.userID :=userID;
|
||||
node^.u.busType:=busType;
|
||||
node^.u.index :=index;
|
||||
|
||||
Push2VideoOut(node);
|
||||
|
||||
H.Release;
|
||||
|
||||
Writeln('<sceVideoOutOpen:',userID,' ',busType);
|
||||
//Writeln('<sceVideoOutOpen:',userID,' ',busType);
|
||||
|
||||
_sig_unlock;
|
||||
end;
|
||||
|
@ -22,10 +22,56 @@ type
|
||||
function BindMem(P:TvPointer):TVkResult;
|
||||
end;
|
||||
|
||||
function VkBindSparseBufferMemory(queue:TVkQueue;buffer:TVkBuffer;bindCount:TVkUInt32;pBinds:PVkSparseMemoryBind):TVkResult;
|
||||
function GetRequirements(size:TVkDeviceSize;usage:TVkFlags;ext:Pointer=nil):TVkMemoryRequirements;
|
||||
|
||||
implementation
|
||||
|
||||
function VkBindSparseBufferMemory(queue:TVkQueue;buffer:TVkBuffer;bindCount:TVkUInt32;pBinds:PVkSparseMemoryBind):TVkResult;
|
||||
var
|
||||
finfo:TVkFenceCreateInfo;
|
||||
fence:TVkFence;
|
||||
|
||||
bind:TVkSparseBufferMemoryBindInfo;
|
||||
info:TVkBindSparseInfo;
|
||||
begin
|
||||
finfo:=Default(TVkFenceCreateInfo);
|
||||
finfo.sType:=VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
|
||||
Result:=vkCreateFence(Device.FHandle,@finfo,nil,@fence);
|
||||
if (Result<>VK_SUCCESS) then
|
||||
begin
|
||||
Writeln(StdErr,'vkCreateFence:',Result);
|
||||
Exit;
|
||||
end;
|
||||
|
||||
bind:=Default(TVkSparseBufferMemoryBindInfo);
|
||||
bind.buffer :=buffer;
|
||||
bind.bindCount:=bindCount;
|
||||
bind.pBinds :=pBinds;
|
||||
|
||||
info:=Default(TVkBindSparseInfo);
|
||||
info.sType :=VK_STRUCTURE_TYPE_BIND_SPARSE_INFO;
|
||||
info.bufferBindCount:=1;
|
||||
info.pBufferBinds :=@bind;
|
||||
|
||||
Result:=vkQueueBindSparse(queue,1,@info,fence);
|
||||
|
||||
if (Result<>VK_SUCCESS) then
|
||||
begin
|
||||
Writeln(StdErr,'vkQueueBindSparse:',Result);
|
||||
vkDestroyFence(Device.FHandle,fence,nil);
|
||||
Exit;
|
||||
end;
|
||||
|
||||
Result:=vkWaitForFences(Device.FHandle,1,@fence,VK_TRUE,TVkUInt64(-1));
|
||||
if (Result<>VK_SUCCESS) then
|
||||
begin
|
||||
Writeln(StdErr,'vkWaitForFences:',Result);
|
||||
end;
|
||||
|
||||
vkDestroyFence(Device.FHandle,fence,nil);
|
||||
end;
|
||||
|
||||
function GetRequirements(size:TVkDeviceSize;usage:TVkFlags;ext:Pointer=nil):TVkMemoryRequirements;
|
||||
var
|
||||
Buffer:TvBuffer;
|
||||
|
@ -108,65 +108,19 @@ end;
|
||||
function _New_simple(host:TvPointer;Size:TVkDeviceSize;usage:TVkFlags):TvHostBuffer;
|
||||
var
|
||||
t:TvHostBuffer;
|
||||
Offset,Foffset:TVkDeviceSize;
|
||||
delta:TVkDeviceSize;
|
||||
begin
|
||||
Offset :=host.FOffset;
|
||||
Foffset:=_fix_buf_size(Offset,Size,usage);
|
||||
delta:=_fix_buf_size(host.FOffset,Size,usage);
|
||||
|
||||
t:=TvHostBuffer.Create(Size,usage,@buf_ext);
|
||||
|
||||
t.Fhost :=host;
|
||||
t.Foffset:=Foffset;
|
||||
t.Foffset:=delta;
|
||||
t.BindMem(host);
|
||||
|
||||
Result:=t;
|
||||
end;
|
||||
|
||||
function VkBindSparseBufferMemory(queue:TVkQueue;buffer:TVkBuffer;bindCount:TVkUInt32;pBinds:PVkSparseMemoryBind):TVkResult;
|
||||
var
|
||||
finfo:TVkFenceCreateInfo;
|
||||
fence:TVkFence;
|
||||
|
||||
bind:TVkSparseBufferMemoryBindInfo;
|
||||
info:TVkBindSparseInfo;
|
||||
begin
|
||||
finfo:=Default(TVkFenceCreateInfo);
|
||||
finfo.sType:=VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
|
||||
Result:=vkCreateFence(Device.FHandle,@finfo,nil,@fence);
|
||||
if (Result<>VK_SUCCESS) then
|
||||
begin
|
||||
Writeln(StdErr,'vkCreateFence:',Result);
|
||||
Exit;
|
||||
end;
|
||||
|
||||
bind:=Default(TVkSparseBufferMemoryBindInfo);
|
||||
bind.buffer :=buffer;
|
||||
bind.bindCount:=bindCount;
|
||||
bind.pBinds :=pBinds;
|
||||
|
||||
info:=Default(TVkBindSparseInfo);
|
||||
info.sType :=VK_STRUCTURE_TYPE_BIND_SPARSE_INFO;
|
||||
info.bufferBindCount:=1;
|
||||
info.pBufferBinds :=@bind;
|
||||
|
||||
Result:=vkQueueBindSparse(queue,1,@info,fence);
|
||||
|
||||
if (Result<>VK_SUCCESS) then
|
||||
begin
|
||||
Writeln(StdErr,'vkQueueBindSparse:',Result);
|
||||
vkDestroyFence(Device.FHandle,fence,nil);
|
||||
Exit;
|
||||
end;
|
||||
|
||||
Result:=vkWaitForFences(Device.FHandle,1,@fence,VK_TRUE,TVkUInt64(-1));
|
||||
if (Result<>VK_SUCCESS) then
|
||||
begin
|
||||
Writeln(StdErr,'vkWaitForFences:',Result);
|
||||
end;
|
||||
|
||||
vkDestroyFence(Device.FHandle,fence,nil);
|
||||
end;
|
||||
|
||||
function Min(a,b:QWORD):QWORD; inline;
|
||||
begin
|
||||
if (a<b) then Result:=a else Result:=b;
|
||||
@ -180,7 +134,7 @@ var
|
||||
hsize:qword;
|
||||
msize:qword;
|
||||
|
||||
Offset,Foffset:TVkDeviceSize;
|
||||
Offset,delta:TVkDeviceSize;
|
||||
|
||||
bind:TVkSparseMemoryBind;
|
||||
Binds:AVkSparseMemoryBind;
|
||||
@ -190,8 +144,8 @@ var
|
||||
begin
|
||||
Result:=nil;
|
||||
|
||||
Offset :=TVkDeviceSize(Addr); //hack align at same in virtual mem
|
||||
Foffset:=_fix_buf_size(Offset,Size,usage);
|
||||
//hack; alignment is the same in virtual memory
|
||||
delta:=_fix_buf_size(TVkDeviceSize(Addr),Size,usage);
|
||||
|
||||
Binds:=Default(AVkSparseMemoryBind);
|
||||
host :=Default(TvPointer);
|
||||
@ -223,7 +177,7 @@ begin
|
||||
|
||||
t:=TvHostBuffer.CreateSparce(Size,usage,@buf_ext);
|
||||
|
||||
t.Foffset:=Foffset;
|
||||
t.Foffset:=delta;
|
||||
t.FSparse:=Binds;
|
||||
|
||||
VkBindSparseBufferMemory(queue,t.FHandle,Length(Binds),@Binds[0]);
|
||||
|
Loading…
Reference in New Issue
Block a user