tu: Implement extendedDynamicState3LineRasterizationMode

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18912>
This commit is contained in:
Connor Abbott
2022-09-30 14:18:05 +02:00
committed by Marge Bot
parent 92dd505f7c
commit 1af2471bd7
4 changed files with 33 additions and 3 deletions
+22 -1
View File
@@ -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,
+1 -1
View File
@@ -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;
+9 -1
View File
@@ -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 &
+1
View File
@@ -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,
};