Mesa (master): tu: Support rasterizerDiscardEnable and RasterizationStreamSelect
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Nov 3 10:35:42 UTC 2020
Module: Mesa
Branch: master
Commit: fe3e571870e00e954ba0738eaa7a276255a77e63
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fe3e571870e00e954ba0738eaa7a276255a77e63
Author: Connor Abbott <cwabbott0 at gmail.com>
Date: Wed Sep 23 13:36:58 2020 +0200
tu: Support rasterizerDiscardEnable and RasterizationStreamSelect
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6962>
---
src/freedreno/vulkan/tu_clear_blit.c | 3 +++
src/freedreno/vulkan/tu_cmd_buffer.c | 4 ----
src/freedreno/vulkan/tu_device.c | 2 +-
src/freedreno/vulkan/tu_pipeline.c | 12 +++++++++++-
4 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/src/freedreno/vulkan/tu_clear_blit.c b/src/freedreno/vulkan/tu_clear_blit.c
index a0f692444f8..f003988e0a9 100644
--- a/src/freedreno/vulkan/tu_clear_blit.c
+++ b/src/freedreno/vulkan/tu_clear_blit.c
@@ -465,6 +465,9 @@ r3d_common(struct tu_cmd_buffer *cmd, struct tu_cs *cs, bool blit, uint32_t num_
.clip_disable = 1));
tu_cs_emit_regs(cs, A6XX_GRAS_SU_CNTL()); // XXX msaa enable?
+ tu_cs_emit_regs(cs, A6XX_PC_RASTER_CNTL());
+ tu_cs_emit_regs(cs, A6XX_VPC_UNKNOWN_9107());
+
tu_cs_emit_regs(cs,
A6XX_GRAS_SC_VIEWPORT_SCISSOR_TL(0, .x = 0, .y = 0),
A6XX_GRAS_SC_VIEWPORT_SCISSOR_BR(0, .x = 0x7fff, .y = 0x7fff));
diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c
index a152965274c..2b8394f9d3f 100644
--- a/src/freedreno/vulkan/tu_cmd_buffer.c
+++ b/src/freedreno/vulkan/tu_cmd_buffer.c
@@ -771,15 +771,11 @@ tu6_init_hw(struct tu_cmd_buffer *cmd, struct tu_cs *cs)
tu_cs_emit_write_reg(cs, REG_A6XX_RB_UNKNOWN_881E, 0);
tu_cs_emit_write_reg(cs, REG_A6XX_RB_UNKNOWN_88F0, 0);
- tu_cs_emit_write_reg(cs, REG_A6XX_VPC_UNKNOWN_9107, 0);
-
tu_cs_emit_regs(cs, A6XX_VPC_POINT_COORD_INVERT(false));
tu_cs_emit_write_reg(cs, REG_A6XX_VPC_UNKNOWN_9300, 0);
tu_cs_emit_regs(cs, A6XX_VPC_SO_DISABLE(true));
- tu_cs_emit_write_reg(cs, REG_A6XX_PC_RASTER_CNTL, 0);
-
tu_cs_emit_write_reg(cs, REG_A6XX_SP_UNKNOWN_A81B, 0);
tu_cs_emit_write_reg(cs, REG_A6XX_SP_UNKNOWN_B183, 0);
diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c
index c94cc5b8002..bb7f06f070f 100644
--- a/src/freedreno/vulkan/tu_device.c
+++ b/src/freedreno/vulkan/tu_device.c
@@ -811,7 +811,7 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
properties->maxTransformFeedbackBufferDataStride = 512;
properties->transformFeedbackQueries = true;
properties->transformFeedbackStreamsLinesTriangles = true;
- properties->transformFeedbackRasterizationStreamSelect = false;
+ properties->transformFeedbackRasterizationStreamSelect = true;
properties->transformFeedbackDraw = true;
break;
}
diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c
index 052b316b07f..19f22cdf0a7 100644
--- a/src/freedreno/vulkan/tu_pipeline.c
+++ b/src/freedreno/vulkan/tu_pipeline.c
@@ -2401,7 +2401,7 @@ tu_pipeline_builder_parse_rasterization(struct tu_pipeline_builder *builder,
depth_clip_disable = !depth_clip_state->depthClipEnable;
struct tu_cs cs;
- pipeline->rast_state = tu_cs_draw_state(&pipeline->cs, &cs, 9);
+ pipeline->rast_state = tu_cs_draw_state(&pipeline->cs, &cs, 13);
tu_cs_emit_regs(&cs,
A6XX_GRAS_CL_CNTL(
@@ -2423,6 +2423,16 @@ tu_pipeline_builder_parse_rasterization(struct tu_pipeline_builder *builder,
A6XX_GRAS_SU_POINT_MINMAX(.min = 1.0f / 16.0f, .max = 4092.0f),
A6XX_GRAS_SU_POINT_SIZE(1.0f));
+ const VkPipelineRasterizationStateStreamCreateInfoEXT *stream_info =
+ vk_find_struct_const(rast_info->pNext,
+ PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT);
+ unsigned stream = stream_info ? stream_info->rasterizationStream : 0;
+ tu_cs_emit_regs(&cs,
+ A6XX_PC_RASTER_CNTL(.stream = stream,
+ .discard = rast_info->rasterizerDiscardEnable));
+ tu_cs_emit_regs(&cs,
+ A6XX_VPC_UNKNOWN_9107(.raster_discard = rast_info->rasterizerDiscardEnable));
+
pipeline->gras_su_cntl =
tu6_gras_su_cntl(rast_info, builder->samples, builder->multiview_mask != 0);
More information about the mesa-commit
mailing list