mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
e2574eba4f
commit
004a32bed1
|
@ -1421,7 +1421,9 @@ begin
|
|||
GP_KEY.SetVertexInput(FAttrBuilder);
|
||||
end;
|
||||
|
||||
GP_KEY.rasterizer :=ctx.rt_info^.RASTERIZATION;
|
||||
GP_KEY.rasterizer :=ctx.rt_info^.RASTERIZATION.State;
|
||||
GP_KEY.ClipSpace :=ctx.rt_info^.RASTERIZATION.ClipSpace;
|
||||
GP_KEY.DepthClip :=ctx.rt_info^.RASTERIZATION.DepthClip;
|
||||
GP_KEY.multisampling:=ctx.rt_info^.MULTISAMPLE;
|
||||
|
||||
GP_KEY.SetProvoking(TVkProvokingVertexModeEXT(ctx.rt_info^.PROVOKING));
|
||||
|
|
|
@ -79,7 +79,7 @@ type
|
|||
VPORT :array[0..15] of TVkViewport;
|
||||
SCISSOR:array[0..15] of TVkRect2D;
|
||||
|
||||
RASTERIZATION:TVkPipelineRasterizationStateCreateInfo;
|
||||
RASTERIZATION:TRASTERIZATION_INFO;
|
||||
MULTISAMPLE :TVkPipelineMultisampleStateCreateInfo;
|
||||
|
||||
SCREEN_RECT:TVkRect2D;
|
||||
|
|
|
@ -105,7 +105,7 @@ type
|
|||
TvDeviceCreateInfo=class
|
||||
data:array of TSortQueueRec;
|
||||
exts:array of Pchar;
|
||||
pFeature:PVkVoid;
|
||||
pFeature:PAbstractFeature;
|
||||
procedure add_queue(Index:TVkUInt32;Queue:PVkQueue);
|
||||
procedure add_ext(P:Pchar);
|
||||
procedure add_feature(P:PVkVoid);
|
||||
|
@ -294,6 +294,8 @@ var
|
|||
VK_EXT_scalar_block_layout :Boolean;
|
||||
VK_EXT_robustness2 :Boolean;
|
||||
VK_EXT_image_view_min_lod :Boolean;
|
||||
VK_EXT_depth_clip_control :Boolean;
|
||||
VK_EXT_depth_clip_enable :Boolean;
|
||||
|
||||
VK_AMD_device_coherent_memory :Boolean;
|
||||
|
||||
|
@ -494,6 +496,8 @@ begin
|
|||
VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME :limits.VK_EXT_scalar_block_layout :=True;
|
||||
VK_EXT_ROBUSTNESS_2_EXTENSION_NAME :limits.VK_EXT_robustness2 :=True;
|
||||
VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME :limits.VK_EXT_image_view_min_lod :=True;
|
||||
VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME :limits.VK_EXT_depth_clip_control :=True;
|
||||
VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME :limits.VK_EXT_depth_clip_enable :=True;
|
||||
|
||||
VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME :limits.VK_AMD_device_coherent_memory :=True;
|
||||
end;
|
||||
|
@ -509,7 +513,6 @@ end;
|
|||
//VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME
|
||||
//VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME
|
||||
//VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME
|
||||
//VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME
|
||||
//VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME
|
||||
//VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME
|
||||
//VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME
|
||||
|
@ -1923,6 +1926,8 @@ var
|
|||
FRF :TVkPhysicalDeviceRobustness2FeaturesEXT;
|
||||
FDI :TVkPhysicalDeviceDescriptorIndexingFeatures;
|
||||
FIVML:TVkPhysicalDeviceImageViewMinLodFeaturesEXT;
|
||||
FDCC :TVkPhysicalDeviceDepthClipControlFeaturesEXT;
|
||||
FDCE :TVkPhysicalDeviceDepthClipEnableFeaturesEXT;
|
||||
|
||||
FScalar:TVkPhysicalDeviceScalarBlockLayoutFeatures;
|
||||
|
||||
|
@ -2132,6 +2137,28 @@ begin
|
|||
DeviceInfo.add_feature(@FIVML);
|
||||
end;
|
||||
|
||||
if limits.VK_EXT_depth_clip_control then
|
||||
begin
|
||||
DeviceInfo.add_ext(VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME);
|
||||
|
||||
FDCC:=Default(TVkPhysicalDeviceDepthClipControlFeaturesEXT);
|
||||
FDCC.sType:=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT;
|
||||
FDCC.depthClipControl:=VK_TRUE;
|
||||
|
||||
DeviceInfo.add_feature(@FDCC);
|
||||
end;
|
||||
|
||||
if limits.VK_EXT_depth_clip_enable then
|
||||
begin
|
||||
DeviceInfo.add_ext(VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME);
|
||||
|
||||
FDCE:=Default(TVkPhysicalDeviceDepthClipEnableFeaturesEXT);
|
||||
FDCE.sType:=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT;
|
||||
FDCE.depthClipEnable:=VK_TRUE;
|
||||
|
||||
DeviceInfo.add_feature(@FDCE);
|
||||
end;
|
||||
|
||||
Device:=TvDevice.Create(DeviceInfo);
|
||||
DeviceInfo.Free;
|
||||
|
||||
|
|
|
@ -41,6 +41,8 @@ type
|
|||
|
||||
inputAssembly :TVkPipelineInputAssemblyStateCreateInfo;
|
||||
rasterizer :TVkPipelineRasterizationStateCreateInfo;
|
||||
ClipSpace :TVkBool32;
|
||||
DepthClip :TVkBool32;
|
||||
multisampling :TVkPipelineMultisampleStateCreateInfo;
|
||||
DepthStencil :TVkPipelineDepthStencilStateCreateInfo;
|
||||
|
||||
|
@ -266,8 +268,19 @@ var
|
|||
dynamicState :TVkPipelineDynamicStateCreateInfo;
|
||||
rasterizer :TVkPipelineRasterizationStateCreateInfo;
|
||||
ProvokingVertex:TVkPipelineRasterizationProvokingVertexStateCreateInfoEXT;
|
||||
ClipSpace :TVkPipelineViewportDepthClipControlCreateInfoEXT;
|
||||
DepthClip :TVkPipelineRasterizationDepthClipStateCreateInfoEXT;
|
||||
|
||||
pFeature:PAbstractFeature;
|
||||
|
||||
dynamicStates :array[0..0] of TVkDynamicState; //dynamicState.dynamicStateCount
|
||||
|
||||
procedure add_feature(P:PVkVoid);
|
||||
begin
|
||||
PAbstractFeature(P)^.pNext:=pFeature;
|
||||
pFeature:=P;
|
||||
end;
|
||||
|
||||
begin
|
||||
Result:=False;
|
||||
|
||||
|
@ -326,17 +339,36 @@ begin
|
|||
end;
|
||||
|
||||
rasterizer:=Key.rasterizer;
|
||||
pFeature:=nil;
|
||||
|
||||
if limits.VK_EXT_provoking_vertex then
|
||||
begin
|
||||
rasterizer.pNext:=@ProvokingVertex;
|
||||
//
|
||||
ProvokingVertex:=Default(TVkPipelineRasterizationProvokingVertexStateCreateInfoEXT);
|
||||
ProvokingVertex.sType :=VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT;
|
||||
ProvokingVertex.provokingVertexMode:=TVkProvokingVertexModeEXT(Key.provokingVertex);
|
||||
//
|
||||
add_feature(@ProvokingVertex);
|
||||
end;
|
||||
|
||||
//
|
||||
if limits.VK_EXT_depth_clip_control then
|
||||
begin
|
||||
ClipSpace:=Default(TVkPipelineViewportDepthClipControlCreateInfoEXT);
|
||||
ClipSpace.sType :=VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT;
|
||||
ClipSpace.negativeOneToOne:=Key.ClipSpace;
|
||||
//
|
||||
add_feature(@ClipSpace);
|
||||
end;
|
||||
|
||||
if limits.VK_EXT_depth_clip_enable then
|
||||
begin
|
||||
DepthClip:=Default(TVkPipelineRasterizationDepthClipStateCreateInfoEXT);
|
||||
DepthClip.sType :=VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT;
|
||||
DepthClip.depthClipEnable:=Key.DepthClip;
|
||||
//
|
||||
add_feature(@DepthClip);
|
||||
end;
|
||||
|
||||
rasterizer.pNext:=pFeature;
|
||||
|
||||
info.sType :=VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
|
||||
info.pStages :=@Stages;
|
||||
|
|
|
@ -72,6 +72,12 @@ type
|
|||
blendConstants:array[0..3] of TVkFloat;
|
||||
end;
|
||||
|
||||
TRASTERIZATION_INFO=packed record
|
||||
State :TVkPipelineRasterizationStateCreateInfo;
|
||||
ClipSpace:TVkBool32;
|
||||
DepthClip:TVkBool32;
|
||||
end;
|
||||
|
||||
PSH_REG_GFX_GROUP =^TSH_REG_GFX_GROUP; // 0x2C00
|
||||
PSH_REG_COMPUTE_GROUP=^TSH_REG_COMPUTE_GROUP; // 0x2E00
|
||||
PCONTEXT_REG_GROUP =^TCONTEXT_REG_GROUP; // 0xA000
|
||||
|
@ -103,7 +109,7 @@ type
|
|||
Function DB_ENABLE:Boolean;
|
||||
Function GET_DB_INFO:TDB_INFO;
|
||||
|
||||
Function GET_RASTERIZATION:TVkPipelineRasterizationStateCreateInfo;
|
||||
Function GET_RASTERIZATION:TRASTERIZATION_INFO;
|
||||
Function GET_PROVOKING:TVkProvokingVertexModeEXT;
|
||||
Function GET_MULTISAMPLE:TVkPipelineMultisampleStateCreateInfo;
|
||||
|
||||
|
@ -1391,47 +1397,55 @@ begin
|
|||
Result:=TVkCullModeFlags(SU_SC_MODE_CNTL.CULL_FRONT or (SU_SC_MODE_CNTL.CULL_BACK shl 1));
|
||||
end;
|
||||
|
||||
Function TGPU_REGS.GET_RASTERIZATION:TVkPipelineRasterizationStateCreateInfo;
|
||||
Function TGPU_REGS.GET_RASTERIZATION:TRASTERIZATION_INFO;
|
||||
var
|
||||
SU_SC_MODE_CNTL:TPA_SU_SC_MODE_CNTL;
|
||||
PA_CL_CLIP_CNTL:TPA_CL_CLIP_CNTL;
|
||||
depthClampDisable:Byte;
|
||||
begin
|
||||
SU_SC_MODE_CNTL:=CX_REG^.PA_SU_SC_MODE_CNTL;
|
||||
PA_CL_CLIP_CNTL:=CX_REG^.PA_CL_CLIP_CNTL;
|
||||
|
||||
Result:=Default(TVkPipelineRasterizationStateCreateInfo);
|
||||
Result.sType:=VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
|
||||
Result:=Default(TRASTERIZATION_INFO);
|
||||
Result.State.sType:=VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
|
||||
|
||||
if (SG_REG^.SPI_SHADER_PGM_LO_PS<>0) or
|
||||
(SG_REG^.SPI_SHADER_PGM_HI_PS.MEM_BASE<>0) then
|
||||
if (CX_REG^.DB_RENDER_CONTROL.DEPTH_CLEAR_ENABLE=0) and
|
||||
(CX_REG^.DB_RENDER_CONTROL.STENCIL_CLEAR_ENABLE=0) then
|
||||
begin
|
||||
Result.rasterizerDiscardEnable:=PA_CL_CLIP_CNTL.DX_RASTERIZATION_KILL;
|
||||
Result.State.rasterizerDiscardEnable:=PA_CL_CLIP_CNTL.DX_RASTERIZATION_KILL;
|
||||
end;
|
||||
|
||||
//VkPhysicalDeviceDepthClampZeroOneFeaturesEXT::depthClampZeroOne
|
||||
Result.depthClampEnable :=PA_CL_CLIP_CNTL.ZCLIP_NEAR_DISABLE or PA_CL_CLIP_CNTL.ZCLIP_FAR_DISABLE;
|
||||
Result.polygonMode :=get_polygon_mode(SU_SC_MODE_CNTL);
|
||||
Result.cullMode :=get_cull_mode (SU_SC_MODE_CNTL);
|
||||
Result.frontFace :=TVkFrontFace (SU_SC_MODE_CNTL.FACE); //1:1
|
||||
Result.lineWidth :=(CX_REG^.PA_SU_LINE_CNTL.WIDTH/8);
|
||||
//VK_EXT_depth_clip_control:TVkPipelineViewportDepthClipControlCreateInfoEXT
|
||||
Result.ClipSpace:=ord(PA_CL_CLIP_CNTL.DX_CLIP_SPACE_DEF=0);
|
||||
|
||||
//VK_EXT_depth_clip_enable:TVkPipelineRasterizationDepthClipStateCreateInfoEXT
|
||||
Result.DepthClip:=ord(PA_CL_CLIP_CNTL.CLIP_DISABLE=0);
|
||||
|
||||
depthClampDisable:=PA_CL_CLIP_CNTL.ZCLIP_NEAR_DISABLE or PA_CL_CLIP_CNTL.ZCLIP_FAR_DISABLE;
|
||||
|
||||
Result.State.depthClampEnable :=ord(not Boolean(depthClampDisable));
|
||||
Result.State.polygonMode :=get_polygon_mode(SU_SC_MODE_CNTL);
|
||||
Result.State.cullMode :=get_cull_mode (SU_SC_MODE_CNTL);
|
||||
Result.State.frontFace :=TVkFrontFace (SU_SC_MODE_CNTL.FACE); //1:1
|
||||
Result.State.lineWidth :=(CX_REG^.PA_SU_LINE_CNTL.WIDTH/8);
|
||||
|
||||
if (DWORD(CX_REG^.PA_SU_POLY_OFFSET_DB_FMT_CNTL)<>0) then
|
||||
begin
|
||||
Result.depthBiasClamp:=PSingle(@CX_REG^.PA_SU_POLY_OFFSET_CLAMP)^;
|
||||
Result.State.depthBiasClamp:=PSingle(@CX_REG^.PA_SU_POLY_OFFSET_CLAMP)^;
|
||||
|
||||
if (SU_SC_MODE_CNTL.CULL_FRONT=0) then
|
||||
begin
|
||||
Result.depthBiasEnable :=SU_SC_MODE_CNTL.POLY_OFFSET_FRONT_ENABLE;
|
||||
Result.depthBiasConstantFactor:=PSingle(@CX_REG^.PA_SU_POLY_OFFSET_FRONT_OFFSET)^;
|
||||
Result.depthBiasSlopeFactor :=(PSingle(@CX_REG^.PA_SU_POLY_OFFSET_FRONT_SCALE)^/16);
|
||||
Result.State.depthBiasEnable :=SU_SC_MODE_CNTL.POLY_OFFSET_FRONT_ENABLE;
|
||||
Result.State.depthBiasConstantFactor:=PSingle(@CX_REG^.PA_SU_POLY_OFFSET_FRONT_OFFSET)^;
|
||||
Result.State.depthBiasSlopeFactor :=(PSingle(@CX_REG^.PA_SU_POLY_OFFSET_FRONT_SCALE)^/16);
|
||||
end else
|
||||
if (SU_SC_MODE_CNTL.CULL_BACK=0) then
|
||||
begin
|
||||
Result.depthBiasEnable :=SU_SC_MODE_CNTL.POLY_OFFSET_BACK_ENABLE;
|
||||
Result.depthBiasConstantFactor:=PSingle(@CX_REG^.PA_SU_POLY_OFFSET_BACK_OFFSET)^;
|
||||
Result.depthBiasSlopeFactor :=(PSingle(@CX_REG^.PA_SU_POLY_OFFSET_BACK_SCALE)^/16);
|
||||
Result.State.depthBiasEnable :=SU_SC_MODE_CNTL.POLY_OFFSET_BACK_ENABLE;
|
||||
Result.State.depthBiasConstantFactor:=PSingle(@CX_REG^.PA_SU_POLY_OFFSET_BACK_OFFSET)^;
|
||||
Result.State.depthBiasSlopeFactor :=(PSingle(@CX_REG^.PA_SU_POLY_OFFSET_BACK_SCALE)^/16);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
|
Loading…
Reference in New Issue