mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
anv: implement VK_EXT_depth_clip_enable
A new extension allowing the user to explictly specify the clipping behavior. Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
parent
fa4e103c32
commit
f509213675
5 changed files with 23 additions and 4 deletions
|
|
@ -943,6 +943,13 @@ void anv_GetPhysicalDeviceFeatures2(
|
|||
break;
|
||||
}
|
||||
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT: {
|
||||
VkPhysicalDeviceDepthClipEnableFeaturesEXT *features =
|
||||
(VkPhysicalDeviceDepthClipEnableFeaturesEXT *)ext;
|
||||
features->depthClipEnable = VK_TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: {
|
||||
VkPhysicalDeviceMultiviewFeatures *features =
|
||||
(VkPhysicalDeviceMultiviewFeatures *)ext;
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@ EXTENSIONS = [
|
|||
Extension('VK_EXT_calibrated_timestamps', 1, True),
|
||||
Extension('VK_EXT_conditional_rendering', 1, 'device->info.gen >= 8 || device->info.is_haswell'),
|
||||
Extension('VK_EXT_debug_report', 8, True),
|
||||
Extension('VK_EXT_depth_clip_enable', 1, True),
|
||||
Extension('VK_EXT_direct_mode_display', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'),
|
||||
Extension('VK_EXT_display_control', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'),
|
||||
Extension('VK_EXT_display_surface_counter', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'),
|
||||
|
|
|
|||
|
|
@ -1517,6 +1517,16 @@ anv_pipeline_init(struct anv_pipeline *pipeline,
|
|||
pipeline->depth_clamp_enable = pCreateInfo->pRasterizationState &&
|
||||
pCreateInfo->pRasterizationState->depthClampEnable;
|
||||
|
||||
/* Previously we enabled depth clipping when !depthClampEnable.
|
||||
* DepthClipStateCreateInfo now makes depth clipping explicit so if the
|
||||
* clipping info is available, use its enable value to determine clipping,
|
||||
* otherwise fallback to the previous !depthClampEnable logic.
|
||||
*/
|
||||
const VkPipelineRasterizationDepthClipStateCreateInfoEXT *clip_info =
|
||||
vk_find_struct_const(pCreateInfo->pRasterizationState->pNext,
|
||||
PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT);
|
||||
pipeline->depth_clip_enable = clip_info ? clip_info->depthClipEnable : !pipeline->depth_clamp_enable;
|
||||
|
||||
pipeline->sample_shading_enable = pCreateInfo->pMultisampleState &&
|
||||
pCreateInfo->pMultisampleState->sampleShadingEnable;
|
||||
|
||||
|
|
|
|||
|
|
@ -2624,6 +2624,7 @@ struct anv_pipeline {
|
|||
bool writes_stencil;
|
||||
bool stencil_test_enable;
|
||||
bool depth_clamp_enable;
|
||||
bool depth_clip_enable;
|
||||
bool sample_shading_enable;
|
||||
bool kill_pixel;
|
||||
|
||||
|
|
|
|||
|
|
@ -508,10 +508,10 @@ emit_rs_state(struct anv_pipeline *pipeline,
|
|||
|
||||
#if GEN_GEN >= 9
|
||||
/* GEN9+ splits ViewportZClipTestEnable into near and far enable bits */
|
||||
raster.ViewportZFarClipTestEnable = !pipeline->depth_clamp_enable;
|
||||
raster.ViewportZNearClipTestEnable = !pipeline->depth_clamp_enable;
|
||||
raster.ViewportZFarClipTestEnable = pipeline->depth_clip_enable;
|
||||
raster.ViewportZNearClipTestEnable = pipeline->depth_clip_enable;
|
||||
#elif GEN_GEN >= 8
|
||||
raster.ViewportZClipTestEnable = !pipeline->depth_clamp_enable;
|
||||
raster.ViewportZClipTestEnable = pipeline->depth_clip_enable;
|
||||
#endif
|
||||
|
||||
raster.GlobalDepthOffsetEnableSolid = rs_info->depthBiasEnable;
|
||||
|
|
@ -1113,7 +1113,7 @@ emit_3dstate_clip(struct anv_pipeline *pipeline,
|
|||
#if GEN_GEN == 7
|
||||
clip.FrontWinding = vk_to_gen_front_face[rs_info->frontFace];
|
||||
clip.CullMode = vk_to_gen_cullmode[rs_info->cullMode];
|
||||
clip.ViewportZClipTestEnable = !pipeline->depth_clamp_enable;
|
||||
clip.ViewportZClipTestEnable = pipeline->depth_clip_enable;
|
||||
clip.UserClipDistanceClipTestEnableBitmask = last->clip_distance_mask;
|
||||
clip.UserClipDistanceCullTestEnableBitmask = last->cull_distance_mask;
|
||||
#else
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue