if (producer->xfb_info)
return;
- /* Do not remove PSIZ for vertex shaders when the topology is unknown. */
- if (producer->info.stage == MESA_SHADER_VERTEX &&
- pipeline_key->vs.topology == V_008958_DI_PT_NONE)
- return;
-
/* Do not remove PSIZ if the rasterization primitive uses points. */
if (consumer->info.stage == MESA_SHADER_FRAGMENT &&
- ((producer->info.stage == MESA_SHADER_VERTEX &&
- pipeline_key->vs.topology == V_008958_DI_PT_POINTLIST) ||
- (producer->info.stage == MESA_SHADER_TESS_EVAL && producer->info.tess.point_mode) ||
+ ((producer->info.stage == MESA_SHADER_TESS_EVAL && producer->info.tess.point_mode) ||
(producer->info.stage == MESA_SHADER_GEOMETRY &&
producer->info.gs.output_primitive == SHADER_PRIM_POINTS) ||
(producer->info.stage == MESA_SHADER_MESH &&
/* Remove PSIZ from shaders when it's not needed.
* This is typically produced by translation layers like Zink or D9VK.
*/
- radv_remove_point_size(pipeline_key, producer, consumer);
+ if (pipeline_key->enable_remove_point_size)
+ radv_remove_point_size(pipeline_key, producer, consumer);
if (nir_link_opt_varyings(producer, consumer)) {
nir_validate_shader(producer, "after nir_link_opt_varyings");
key.dynamic_rasterization_samples =
!!(pipeline->active_stages & VK_SHADER_STAGE_FRAGMENT_BIT) && !state->ms;
+ if (!(pipeline->dynamic_states & RADV_DYNAMIC_PRIMITIVE_TOPOLOGY) &&
+ state->ia && state->ia->primitive_topology != VK_PRIMITIVE_TOPOLOGY_POINT_LIST &&
+ !(pipeline->dynamic_states & RADV_DYNAMIC_POLYGON_MODE) &&
+ state->rs && state->rs->polygon_mode != VK_POLYGON_MODE_POINT) {
+ key.enable_remove_point_size = true;
+ }
+
return key;
}
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on right edge,Fail
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on top edge,Fail
spec@!opengl 1.1@polygon-mode-offset,Fail
-spec@!opengl 1.1@polygon-offset,Fail
spec@!opengl 1.5@depth-tex-compare,Fail
spec@!opengl 2.0@depth-tex-modes-glsl,Fail
spec@!opengl 2.0@gl-2.0-edgeflag,Fail