mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 04:20:08 +01:00
radv: add support for rectangularLines
dEQP-VK.*rectangular_line* pass on NAVI21. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21287>
This commit is contained in:
parent
3368c0e6f2
commit
685f08f91d
3 changed files with 25 additions and 9 deletions
|
|
@ -2118,8 +2118,12 @@ radv_get_pa_su_sc_mode_cntl(const struct radv_cmd_buffer *cmd_buffer)
|
|||
VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT);
|
||||
|
||||
if (gfx_level >= GFX10) {
|
||||
pa_su_sc_mode_cntl |=
|
||||
S_028814_KEEP_TOGETHER_ENABLE(d->vk.rs.polygon_mode != V_028814_X_DRAW_TRIANGLES);
|
||||
/* Ensure that SC processes the primitive group in the same order as PA produced them. Needed
|
||||
* when either POLY_MODE or PERPENDICULAR_ENDCAP_ENA is set.
|
||||
*/
|
||||
pa_su_sc_mode_cntl |= S_028814_KEEP_TOGETHER_ENABLE(
|
||||
d->vk.rs.polygon_mode != V_028814_X_DRAW_TRIANGLES ||
|
||||
d->vk.rs.line.mode == VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT);
|
||||
}
|
||||
|
||||
return pa_su_sc_mode_cntl;
|
||||
|
|
@ -4242,6 +4246,19 @@ radv_emit_msaa_state(struct radv_cmd_buffer *cmd_buffer)
|
|||
S_028A48_MSAA_ENABLE(rasterization_samples > 1));
|
||||
}
|
||||
|
||||
static void
|
||||
radv_emit_line_rasterization_mode(struct radv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
const struct radv_dynamic_state *d = &cmd_buffer->state.dynamic;
|
||||
|
||||
/* The DX10 diamond test is unnecessary with Vulkan and it decreases line rasterization
|
||||
* performance.
|
||||
*/
|
||||
radeon_set_context_reg(cmd_buffer->cs, R_028BDC_PA_SC_LINE_CNTL,
|
||||
S_028BDC_PERPENDICULAR_ENDCAP_ENA(
|
||||
d->vk.rs.line.mode == VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT));
|
||||
}
|
||||
|
||||
static void
|
||||
radv_cmd_buffer_flush_dynamic_state(struct radv_cmd_buffer *cmd_buffer, bool pipeline_is_dirty)
|
||||
{
|
||||
|
|
@ -4292,7 +4309,8 @@ radv_cmd_buffer_flush_dynamic_state(struct radv_cmd_buffer *cmd_buffer, bool pip
|
|||
|
||||
if (states & (RADV_CMD_DIRTY_DYNAMIC_CULL_MODE | RADV_CMD_DIRTY_DYNAMIC_FRONT_FACE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS_ENABLE | RADV_CMD_DIRTY_DYNAMIC_POLYGON_MODE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_PROVOKING_VERTEX_MODE))
|
||||
RADV_CMD_DIRTY_DYNAMIC_PROVOKING_VERTEX_MODE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_LINE_RASTERIZATION_MODE))
|
||||
radv_emit_culling(cmd_buffer);
|
||||
|
||||
if (states & (RADV_CMD_DIRTY_DYNAMIC_PROVOKING_VERTEX_MODE |
|
||||
|
|
@ -4356,6 +4374,9 @@ radv_cmd_buffer_flush_dynamic_state(struct radv_cmd_buffer *cmd_buffer, bool pip
|
|||
RADV_CMD_DIRTY_DYNAMIC_COLOR_BLEND_EQUATION))
|
||||
radv_emit_color_blend(cmd_buffer);
|
||||
|
||||
if (states & RADV_CMD_DIRTY_DYNAMIC_LINE_RASTERIZATION_MODE)
|
||||
radv_emit_line_rasterization_mode(cmd_buffer);
|
||||
|
||||
if (states & (RADV_CMD_DIRTY_DYNAMIC_RASTERIZATION_SAMPLES |
|
||||
RADV_CMD_DIRTY_DYNAMIC_LINE_RASTERIZATION_MODE))
|
||||
radv_emit_rasterization_samples(cmd_buffer);
|
||||
|
|
|
|||
|
|
@ -1623,7 +1623,7 @@ radv_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
|
|||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: {
|
||||
VkPhysicalDeviceLineRasterizationFeaturesEXT *features =
|
||||
(VkPhysicalDeviceLineRasterizationFeaturesEXT *)ext;
|
||||
features->rectangularLines = false;
|
||||
features->rectangularLines = true;
|
||||
features->bresenhamLines = true;
|
||||
features->smoothLines = false;
|
||||
features->stippledRectangularLines = false;
|
||||
|
|
|
|||
|
|
@ -620,11 +620,6 @@ si_emit_graphics(struct radv_device *device, struct radeon_cmdbuf *cs)
|
|||
}
|
||||
}
|
||||
|
||||
/* The DX10 diamond test is unnecessary with Vulkan and it decreases line rasterization
|
||||
* performance.
|
||||
*/
|
||||
radeon_set_context_reg(cs, R_028BDC_PA_SC_LINE_CNTL, 0);
|
||||
|
||||
if (physical_device->rad_info.gfx_level >= GFX11) {
|
||||
radeon_set_context_reg(cs, R_028C54_PA_SC_BINNER_CNTL_2, 0);
|
||||
radeon_set_context_reg(cs, R_028620_PA_RATE_CNTL,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue