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: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>
This commit is contained in:
George Ouzounoudis 2022-11-26 18:39:20 +02:00 committed by Marge Bot
parent 921c06a6d4
commit 8eac1b0c4d

View file

@ -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;