zink: support NV_representative_fragment_test

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37081>
This commit is contained in:
Mike Blumenkrantz
2025-08-29 07:32:54 -04:00
committed by Marge Bot
parent 34641b44c6
commit efd8e46891
6 changed files with 16 additions and 0 deletions
+1
View File
@@ -21,3 +21,4 @@ VK_KHR_maintenance9 on panvk
VK_AMD_buffer_marker on NVK
VK_EXT_ycbcr_2plane_444_formats on radv
Removed VDPAU frontend
GL_NV_representative_fragment_test on zink
+5
View File
@@ -593,6 +593,11 @@ zink_start_batch(struct zink_context *ctx)
VKCTX(CmdSetAttachmentFeedbackLoopEnableEXT)(ctx->bs->reordered_cmdbuf, 0);
VKCTX(CmdSetAttachmentFeedbackLoopEnableEXT)(ctx->bs->unsynchronized_cmdbuf, 0);
}
if (screen->info.dynamic_state3_feats.extendedDynamicState3RepresentativeFragmentTestEnable) {
VKCTX(CmdSetRepresentativeFragmentTestEnableNV)(ctx->bs->cmdbuf, 0);
VKCTX(CmdSetRepresentativeFragmentTestEnableNV)(ctx->bs->reordered_cmdbuf, 0);
VKCTX(CmdSetRepresentativeFragmentTestEnableNV)(ctx->bs->unsynchronized_cmdbuf, 0);
}
}
/* common operations to run post submit; split out for clarity */
@@ -196,6 +196,7 @@ EXTENSIONS = [
features=True,
conditions=["$feats.vertexAttributeInstanceRateDivisor"]),
Extension("VK_EXT_calibrated_timestamps"),
Extension("VK_NV_representative_fragment_test"),
Extension("VK_NV_linear_color_attachment",
alias="linear_color",
features=True),
+4
View File
@@ -264,6 +264,8 @@ zink_create_gfx_pipeline(struct zink_screen *screen,
}
}
}
if (screen->info.dynamic_state3_feats.extendedDynamicState3RepresentativeFragmentTestEnable)
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV;
}
if (screen->info.have_EXT_color_write_enable)
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT;
@@ -754,6 +756,8 @@ create_gfx_pipeline_library(struct zink_screen *screen, struct zink_shader_objec
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT;
if (!screen->driver_workarounds.no_linestipple)
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_LINE_STIPPLE_EXT;
if (screen->info.dynamic_state3_feats.extendedDynamicState3RepresentativeFragmentTestEnable)
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV;
assert(state_count < ARRAY_SIZE(dynamicStateEnables));
VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo = {0};
+1
View File
@@ -778,6 +778,7 @@ zink_init_screen_caps(struct zink_screen *screen)
caps->allow_glthread_buffer_subdata_opt = true;
caps->nir_samplers_as_deref = true;
caps->call_finalize_nir_in_linker = true;
caps->representative_fragment_test = screen->info.dynamic_state3_feats.extendedDynamicState3RepresentativeFragmentTestEnable;
caps->draw_vertex_state = screen->info.have_EXT_vertex_input_dynamic_state;
+4
View File
@@ -683,6 +683,7 @@ zink_bind_rasterizer_state(struct pipe_context *pctx, void *cso)
bool clip_halfz = ctx->rast_state ? ctx->rast_state->hw_state.clip_halfz : false;
bool rasterizer_discard = ctx->rast_state ? ctx->rast_state->base.rasterizer_discard : false;
bool half_pixel_center = ctx->rast_state ? ctx->rast_state->base.half_pixel_center : true;
bool representative_fragment_test = ctx->rast_state ? ctx->rast_state->base.representative_fragment_test : false;
float line_width = ctx->rast_state ? ctx->rast_state->base.line_width : 1.0;
ctx->rast_state = cso;
@@ -731,6 +732,9 @@ zink_bind_rasterizer_state(struct pipe_context *pctx, void *cso)
#undef STATE_CHECK
}
if (representative_fragment_test != ctx->rast_state->base.representative_fragment_test)
VKCTX(CmdSetRepresentativeFragmentTestEnableNV)(ctx->bs->cmdbuf, ctx->rast_state->base.representative_fragment_test);
if (fabs(ctx->rast_state->base.line_width - line_width) > FLT_EPSILON)
ctx->line_width_changed = true;