nv50,nvc0: fix the max_vertices=0 case
authorIlia Mirkin <imirkin@alum.mit.edu>
Sun, 29 May 2016 13:26:11 +0000 (09:26 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Sun, 29 May 2016 13:34:03 +0000 (09:34 -0400)
This is apparently legal. Drop any emit/restarts, and pass a 1 to the
hardware.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp
src/gallium/drivers/nouveau/nv50/nv50_program.c
src/gallium/drivers/nouveau/nvc0/nvc0_program.c

index 345008e23a00282fcc4db83806610b98850c036e..1ebcd25e96a1f879cf6f87db7cf8c785a7bfc525 100644 (file)
@@ -3290,6 +3290,8 @@ Converter::handleInstruction(const struct tgsi_full_instruction *insn)
       unsigned int stream = tgsi.getSrc(0).getValueU32(0, info);
       if (stream && op == OP_RESTART)
          break;
+      if (info->prop.gp.maxVertices == 0)
+         break;
       src0 = mkImm(stream);
       mkOp1(op, TYPE_U32, NULL, src0)->fixed = 1;
       break;
index 648cb7314bf772626def61346509e2738f3b48b4..c764f5c57284614bfb48f0d0c5ca9e6536523079 100644 (file)
@@ -407,7 +407,7 @@ nv50_program_translate(struct nv50_program *prog, uint16_t chipset,
          prog->gp.prim_type = NV50_3D_GP_OUTPUT_PRIMITIVE_TYPE_POINTS;
          break;
       }
-      prog->gp.vert_count = info->prop.gp.maxVertices;
+      prog->gp.vert_count = CLAMP(info->prop.gp.maxVertices, 1, 1024);
    }
 
    if (prog->type == PIPE_SHADER_COMPUTE) {
index d73e0c47eb7a5e2db2386330086cc7c098e9b872..aba95114eb733e63f0c2d3b02f8abf164ec932c2 100644 (file)
@@ -393,7 +393,7 @@ nvc0_gp_gen_header(struct nvc0_program *gp, struct nv50_ir_prog_info *info)
       break;
    }
 
-   gp->hdr[4] = MIN2(info->prop.gp.maxVertices, 1024);
+   gp->hdr[4] = CLAMP(info->prop.gp.maxVertices, 1, 1024);
 
    return nvc0_vtgp_gen_header(gp, info);
 }