VKCTX(CmdSetCullModeEXT)(batch->state->cmdbuf, ctx->gfx_pipeline_state.dyn_state1.cull_mode);
}
if ((BATCH_CHANGED || rast_state_changed) &&
- (DYNAMIC_STATE >= ZINK_DYNAMIC_STATE3 || (screen->info.have_EXT_line_rasterization && rast_state->base.line_stipple_enable)))
+ (DYNAMIC_STATE >= ZINK_DYNAMIC_STATE3 || (!screen->driver_workarounds.no_linestipple && rast_state->base.line_stipple_enable)))
VKCTX(CmdSetLineStippleEXT)(batch->state->cmdbuf, rast_state->base.line_stipple_factor, rast_state->base.line_stipple_pattern);
if ((BATCH_CHANGED || rast_state_changed) && DYNAMIC_STATE >= ZINK_DYNAMIC_STATE3) {
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT;
if (screen->info.dynamic_state3_feats.extendedDynamicState3LineStippleEnable)
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT;
- if (screen->info.have_EXT_line_rasterization)
+ if (!screen->driver_workarounds.no_linestipple)
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_LINE_STIPPLE_EXT;
assert(state_count < ARRAY_SIZE(dynamicStateEnables));
/* performance */
screen->info.border_color_feats.customBorderColorWithoutFormat = VK_FALSE;
}
+
+ if ((!screen->info.have_EXT_line_rasterization ||
+ !screen->info.line_rast_feats.stippledBresenhamLines) &&
+ screen->info.feats.features.geometryShader &&
+ screen->info.feats.features.sampleRateShading) {
+ /* we're using stippledBresenhamLines as a proxy for all of these, to
+ * avoid accidentally changing behavior on VK-drivers where we don't
+ * want to add emulation.
+ */
+ screen->driver_workarounds.no_linestipple = true;
+ }
+
if (screen->info.driver_props.driverID == VK_DRIVER_ID_AMD_OPEN_SOURCE ||
screen->info.driver_props.driverID == VK_DRIVER_ID_AMD_PROPRIETARY ||
screen->info.driver_props.driverID == VK_DRIVER_ID_NVIDIA_PROPRIETARY ||
goto fail;
}
- screen->optimal_keys = !screen->need_decompose_attrs && screen->info.have_EXT_non_seamless_cube_map && !screen->driconf.inline_uniforms;
+ screen->optimal_keys = !screen->need_decompose_attrs &&
+ screen->info.have_EXT_non_seamless_cube_map &&
+ !screen->driconf.inline_uniforms &&
+ !screen->driver_workarounds.no_linestipple;
if (!screen->optimal_keys)
screen->info.have_EXT_graphics_pipeline_library = false;