From 8eac1b0c4d70dd900d150ed316f7d29e1d455f3f Mon Sep 17 00:00:00 2001 From: George Ouzounoudis Date: Sat, 26 Nov 2022 18:39:20 +0200 Subject: [PATCH] nvk: Fix geometry shader active stream mask This sets StreamOutMask in the shader header correctly based on: https://download.nvidia.com/open-gpu-doc/Shader-Program-Header/1/Shader-Program-Header.html After this fix transform feedback CTS tests with geometry shader streams are passing. Part-of: --- src/nouveau/vulkan/nvk_shader.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/nouveau/vulkan/nvk_shader.c b/src/nouveau/vulkan/nvk_shader.c index 3798952..23ac705 100644 --- a/src/nouveau/vulkan/nvk_shader.c +++ b/src/nouveau/vulkan/nvk_shader.c @@ -640,7 +640,9 @@ nvk_vs_gen_header(struct nvk_shader *vs, struct nv50_ir_prog_info_out *info) } static int -nvk_gs_gen_header(struct nvk_shader *gs, struct nv50_ir_prog_info_out *info) +nvk_gs_gen_header(struct nvk_shader *gs, + const struct nir_shader *nir, + struct nv50_ir_prog_info_out *info) { gs->hdr[0] = 0x20061 | (4 << 10); @@ -649,15 +651,12 @@ nvk_gs_gen_header(struct nvk_shader *gs, struct nv50_ir_prog_info_out *info) switch (info->prop.gp.outputPrim) { case MESA_PRIM_POINTS: gs->hdr[3] = 0x01000000; - gs->hdr[0] |= 0xf0000000; break; case MESA_PRIM_LINE_STRIP: gs->hdr[3] = 0x06000000; - gs->hdr[0] |= 0x10000000; break; case MESA_PRIM_TRIANGLE_STRIP: gs->hdr[3] = 0x07000000; - gs->hdr[0] |= 0x10000000; break; default: assert(0); @@ -666,6 +665,8 @@ nvk_gs_gen_header(struct nvk_shader *gs, struct nv50_ir_prog_info_out *info) gs->hdr[4] = CLAMP(info->prop.gp.maxVertices, 1, 1024); + gs->hdr[0] |= nir->info.gs.active_stream_mask << 28; + return nvk_vtgp_gen_header(gs, info); } @@ -884,7 +885,7 @@ nvk_compile_nir(struct nvk_physical_device *device, nir_shader *nir, shader->fs.uses_sample_shading = nir->info.fs.uses_sample_shading; break; case PIPE_SHADER_GEOMETRY: - ret = nvk_gs_gen_header(shader, &info_out); + ret = nvk_gs_gen_header(shader, nir, &info_out); break; case PIPE_SHADER_COMPUTE: break; -- 2.7.4