turnip: Add support for polygon fill modes.

Passes the new tests in dEQP-VK.rasterization.culling.*

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5650>
This commit is contained in:
Eric Anholt 2020-06-10 13:05:53 -07:00
parent daee177ca0
commit 72c0522db2
4 changed files with 25 additions and 5 deletions

View File

@ -968,9 +968,7 @@ tu6_init_hw(struct tu_cmd_buffer *cmd, struct tu_cs *cs)
tu_cs_emit_write_reg(cs, REG_A6XX_VPC_UNKNOWN_9210, 0);
tu_cs_emit_write_reg(cs, REG_A6XX_VPC_UNKNOWN_9211, 0);
tu_cs_emit_write_reg(cs, REG_A6XX_VPC_UNKNOWN_9602, 0);
tu_cs_emit_write_reg(cs, REG_A6XX_PC_POLYGON_MODE, POLYMODE6_TRIANGLES);
tu_cs_emit_write_reg(cs, REG_A6XX_PC_UNKNOWN_9E72, 0);
tu_cs_emit_write_reg(cs, REG_A6XX_VPC_POLYGON_MODE, POLYMODE6_TRIANGLES);
tu_cs_emit_write_reg(cs, REG_A6XX_SP_TP_UNKNOWN_B309, 0x000000a2);
tu_cs_emit_write_reg(cs, REG_A6XX_HLSQ_CONTROL_5_REG, 0xfc);

View File

@ -594,7 +594,7 @@ tu_GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice,
.drawIndirectFirstInstance = true,
.depthClamp = true,
.depthBiasClamp = false,
.fillModeNonSolid = false,
.fillModeNonSolid = true,
.depthBounds = true,
.wideLines = false,
.largePoints = false,

View File

@ -2194,10 +2194,10 @@ tu_pipeline_builder_parse_rasterization(struct tu_pipeline_builder *builder,
const VkPipelineRasterizationStateCreateInfo *rast_info =
builder->create_info->pRasterizationState;
assert(rast_info->polygonMode == VK_POLYGON_MODE_FILL);
enum a6xx_polygon_mode mode = tu6_polygon_mode(rast_info->polygonMode);
struct tu_cs cs;
tu_cs_begin_sub_stream(&pipeline->cs, 7, &cs);
tu_cs_begin_sub_stream(&pipeline->cs, 11, &cs);
tu_cs_emit_regs(&cs,
A6XX_GRAS_CL_CNTL(
@ -2206,6 +2206,13 @@ tu_pipeline_builder_parse_rasterization(struct tu_pipeline_builder *builder,
.unk5 = rast_info->depthClampEnable,
.zero_gb_scale_z = 1,
.vp_clip_code_ignore = 1));
tu_cs_emit_regs(&cs,
A6XX_VPC_POLYGON_MODE(.mode = mode));
tu_cs_emit_regs(&cs,
A6XX_PC_POLYGON_MODE(.mode = mode));
/* move to hw ctx init? */
tu_cs_emit_regs(&cs, A6XX_GRAS_UNKNOWN_8001());
tu_cs_emit_regs(&cs,

View File

@ -234,4 +234,19 @@ tu6_pipe2depth(VkFormat format)
}
}
static inline enum a6xx_polygon_mode
tu6_polygon_mode(VkPolygonMode mode)
{
switch (mode) {
case VK_POLYGON_MODE_POINT:
return POLYMODE6_POINTS;
case VK_POLYGON_MODE_LINE:
return POLYMODE6_LINES;
case VK_POLYGON_MODE_FILL:
return POLYMODE6_TRIANGLES;
default:
unreachable("bad polygon mode");
}
}
#endif /* TU_UTIL_H */