tu: Implement extendedDynamicState3LineRasterizationMode
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18912>
This commit is contained in:
@@ -2615,7 +2615,10 @@ tu_CmdBindPipeline(VkCommandBuffer commandBuffer,
|
||||
}
|
||||
}
|
||||
|
||||
cmd->state.line_mode = pipeline->rast.line_mode;
|
||||
if (!(pipeline->dynamic_state_mask &
|
||||
BIT(TU_DYNAMIC_STATE_LINE_MODE)))
|
||||
cmd->state.line_mode = pipeline->rast.line_mode;
|
||||
|
||||
if (!(pipeline->dynamic_state_mask &
|
||||
BIT(TU_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY)))
|
||||
cmd->state.primtype = pipeline->ia.primtype;
|
||||
@@ -3268,6 +3271,24 @@ tu_CmdSetRasterizationStreamEXT(VkCommandBuffer commandBuffer,
|
||||
cmd->state.dirty |= TU_CMD_DIRTY_PC_RASTER_CNTL;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdSetLineRasterizationModeEXT(VkCommandBuffer commandBuffer,
|
||||
VkLineRasterizationModeEXT lineRasterizationMode)
|
||||
{
|
||||
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
|
||||
cmd->state.line_mode = lineRasterizationMode ==
|
||||
VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT ? BRESENHAM : RECTANGULAR;
|
||||
|
||||
tu6_update_msaa_disable(cmd);
|
||||
|
||||
cmd->state.gras_su_cntl =
|
||||
(cmd->state.gras_su_cntl & ~A6XX_GRAS_SU_CNTL_LINE_MODE__MASK) |
|
||||
A6XX_GRAS_SU_CNTL_LINE_MODE(cmd->state.line_mode);
|
||||
|
||||
cmd->state.dirty |= TU_CMD_DIRTY_RAST;
|
||||
}
|
||||
|
||||
static void
|
||||
tu_flush_for_access(struct tu_cache_state *cache,
|
||||
enum tu_cmd_access_mask src_mask,
|
||||
|
||||
@@ -774,7 +774,7 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
|
||||
features->extendedDynamicState3RasterizationStream = true;
|
||||
features->extendedDynamicState3ConservativeRasterizationMode = false;
|
||||
features->extendedDynamicState3ExtraPrimitiveOverestimationSize = false;
|
||||
features->extendedDynamicState3LineRasterizationMode = false;
|
||||
features->extendedDynamicState3LineRasterizationMode = true;
|
||||
features->extendedDynamicState3LineStippleEnable = false;
|
||||
features->extendedDynamicState3ProvokingVertexMode = false;
|
||||
features->extendedDynamicState3SampleLocationsEnable = false;
|
||||
|
||||
@@ -3777,6 +3777,13 @@ tu_pipeline_builder_parse_dynamic(struct tu_pipeline_builder *builder,
|
||||
pipeline->rast.pc_raster_cntl_mask &=
|
||||
~A6XX_PC_RASTER_CNTL_STREAM__MASK;
|
||||
break;
|
||||
case VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT:
|
||||
pipeline->dynamic_state_mask |=
|
||||
BIT(TU_DYNAMIC_STATE_RAST) |
|
||||
BIT(TU_DYNAMIC_STATE_LINE_MODE);
|
||||
pipeline->rast.gras_su_cntl_mask &=
|
||||
~A6XX_GRAS_SU_CNTL_LINE_MODE__MASK;
|
||||
break;
|
||||
default:
|
||||
assert(!"unsupported dynamic state");
|
||||
break;
|
||||
@@ -3847,7 +3854,8 @@ tu_pipeline_builder_parse_libraries(struct tu_pipeline_builder *builder,
|
||||
BIT(TU_DYNAMIC_STATE_PATCH_CONTROL_POINTS) |
|
||||
BIT(TU_DYNAMIC_STATE_POLYGON_MODE) |
|
||||
BIT(TU_DYNAMIC_STATE_TESS_DOMAIN_ORIGIN) |
|
||||
BIT(TU_DYNAMIC_STATE_VIEWPORT_RANGE);
|
||||
BIT(TU_DYNAMIC_STATE_VIEWPORT_RANGE) |
|
||||
BIT(TU_DYNAMIC_STATE_LINE_MODE);
|
||||
}
|
||||
|
||||
if (library->state &
|
||||
|
||||
@@ -41,6 +41,7 @@ enum tu_dynamic_state
|
||||
TU_DYNAMIC_STATE_ALPHA_TO_COVERAGE,
|
||||
TU_DYNAMIC_STATE_DEPTH_CLIP_RANGE,
|
||||
TU_DYNAMIC_STATE_VIEWPORT_RANGE,
|
||||
TU_DYNAMIC_STATE_LINE_MODE,
|
||||
/* re-use the line width enum as it uses GRAS_SU_CNTL: */
|
||||
TU_DYNAMIC_STATE_RAST = VK_DYNAMIC_STATE_LINE_WIDTH,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user