nv50/ir: fix threads calculation for non-compute shaders
authorIlia Mirkin <imirkin@alum.mit.edu>
Tue, 11 Jul 2017 00:58:31 +0000 (20:58 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Thu, 13 Jul 2017 02:09:59 +0000 (22:09 -0400)
We were using the "cp" union fields, which are only valid for compute
shaders. The threads calculation affects the available GPRs, so just
pick a small number for other shader types to avoid limiting available
registers.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: mesa-stable@lists.freedesktop.org
src/gallium/drivers/nouveau/codegen/nv50_ir_target.h

index e9d10574835f7c65355335e79e450aee17603fb7..afeca14d7d11d0a401aebb15da223449bb481ffd 100644 (file)
@@ -174,11 +174,15 @@ public:
    virtual void getBuiltinCode(const uint32_t **code, uint32_t *size) const = 0;
 
    virtual void parseDriverInfo(const struct nv50_ir_prog_info *info) {
-      threads = info->prop.cp.numThreads[0] *
-         info->prop.cp.numThreads[1] *
-         info->prop.cp.numThreads[2];
-      if (threads == 0)
-         threads = info->target >= NVISA_GK104_CHIPSET ? 1024 : 512;
+      if (info->type == PIPE_SHADER_COMPUTE) {
+         threads = info->prop.cp.numThreads[0] *
+            info->prop.cp.numThreads[1] *
+            info->prop.cp.numThreads[2];
+         if (threads == 0)
+            threads = info->target >= NVISA_GK104_CHIPSET ? 1024 : 512;
+      } else {
+         threads = 32; // doesn't matter, just not too big.
+      }
    }
 
    virtual bool runLegalizePass(Program *, CGStage stage) const = 0;