This commit is contained in:
red-prig 2022-11-15 20:34:51 +03:00
parent fb88b51c26
commit 7197131e7d
2 changed files with 25 additions and 13 deletions

View File

@ -2385,6 +2385,7 @@ begin
if UpdateGpuRegsInfo then
begin
Addr:=getIndexAddress(GPU_REGS.VGT_DMA.BASE_LO,GPU_REGS.VGT_DMA.BASE_HI);
GFXRing.CmdBuffer.instanceCount:=GPU_REGS.VGT_DMA.NUM_INSTANCES;
GFXRing.CmdBuffer.DrawIndex2(Addr,GPU_REGS.VGT_DMA.INDICES,GPU_REGS.GET_INDEX_TYPE);
end;
@ -2408,6 +2409,7 @@ begin
if UpdateGpuRegsInfo then
begin
GFXRing.CmdBuffer.instanceCount:=GPU_REGS.VGT_DMA.NUM_INSTANCES;
GFXRing.CmdBuffer.DrawIndexAuto(GPU_REGS.VGT_DMA.INDICES);
end;
@ -2441,6 +2443,7 @@ begin
if UpdateGpuRegsInfo then
begin
Addr:=getIndexAddress(GPU_REGS.VGT_DMA.BASE_LO,GPU_REGS.VGT_DMA.BASE_HI);
GFXRing.CmdBuffer.instanceCount:=GPU_REGS.VGT_DMA.NUM_INSTANCES;
GFXRing.CmdBuffer.DrawIndexOffset2(Addr,Body^.indexOffset,GPU_REGS.VGT_DMA.INDICES,GPU_REGS.GET_INDEX_TYPE);
end;
@ -2475,7 +2478,6 @@ type
procedure onNumInstances(pm4Hdr:PM4_TYPE_3_HEADER;Body:PVGT_DMA_NUM_INSTANCES);
begin
GPU_REGS.VGT_DMA.NUM_INSTANCES:=Body^;
Assert(GPU_REGS.VGT_DMA.NUM_INSTANCES<=1,'instancing TODO:'+IntToStr(GPU_REGS.VGT_DMA.NUM_INSTANCES));
{$ifdef ww}Writeln('onNumInstances:',Body^);{$endif}
end;

View File

@ -137,6 +137,7 @@ type
TvCmdBuffer=class(TvCustomCmdBuffer)
emulate_primtype:Integer;
instanceCount:DWORD;
function BeginRenderPass(RT:TvRenderTargets):Boolean;
@ -868,6 +869,8 @@ begin
if (FRenderPass=VK_NULL_HANDLE) then Exit;
if (FCurrPipeline[0]=VK_NULL_HANDLE) then Exit;
if (instanceCount=0) then instanceCount:=1;
Size:=INDICES*GET_INDEX_TYPE_SIZE(INDEX_TYPE);
rb:=FetchHostBuffer(Self,Addr,Size,ord(VK_BUFFER_USAGE_INDEX_BUFFER_BIT));
@ -888,15 +891,16 @@ begin
begin
vkCmdDrawIndexed(
cmdbuf,
INDICES, //indexCount
1, //instanceCount
OFFSET, //firstIndex
0, //vertexOffset
0); //firstInstance
INDICES, //indexCount
instanceCount, //instanceCount
OFFSET, //firstIndex
0, //vertexOffset
0); //firstInstance
end;
DI_PT_QUADLIST:
begin
Assert(OFFSET=0);
Assert(instanceCount<=1,'instance DI_PT_QUADLIST');
Assert(OFFSET=0,'OFFSET DI_PT_QUADLIST');
h:=INDICES div 4;
if (h>0) then h:=h-1;
For i:=0 to h do
@ -930,17 +934,22 @@ begin
if (FRenderPass=VK_NULL_HANDLE) then Exit;
if (FCurrPipeline[0]=VK_NULL_HANDLE) then Exit;
if (instanceCount=0) then instanceCount:=1;
Case emulate_primtype of
0:
begin
vkCmdDraw(
cmdbuf,
INDICES,
1,0,0);
INDICES, //vertexCount
instanceCount, //instanceCount
0, //firstVertex
0); //firstInstance
end;
DI_PT_RECTLIST :
begin
Assert(instanceCount<=1,'instance DI_PT_RECTLIST');
{
0 3
1 2
@ -965,6 +974,7 @@ begin
//DI_PT_LINELOOP :;
DI_PT_QUADLIST :
begin
Assert(instanceCount<=1,'instance DI_PT_QUADLIST');
h:=INDICES div 4;
if (h>0) then h:=h-1;
For i:=0 to h do
@ -972,10 +982,10 @@ begin
Inc(cmd_count);
vkCmdDraw(
cmdbuf,
4,
1,
i*4,
0);
4, //vertexCount
1, //instanceCount
i*4, //firstVertex
0); //firstInstance
end;
end;
//DI_PT_QUADSTRIP:;