r600g/sb: fix handling of preloaded inputs for compute shaders
authorVadim Girlin <vadimgirlin@gmail.com>
Sat, 25 May 2013 18:56:53 +0000 (22:56 +0400)
committerVadim Girlin <vadimgirlin@gmail.com>
Sat, 25 May 2013 18:56:53 +0000 (22:56 +0400)
For compute shaders we need to let the backend know that
GPRs 0 and 1 are preloaded with some compute-specific input
values, otherwise any use of these regs without previous
definition is considered as undefined value and usually
is simply replaced with 0.

Signed-off-by: Vadim Girlin <vadimgirlin@gmail.com>
src/gallium/drivers/r600/sb/sb_bc_parser.cpp

index 3ea09cb73b438e495209e66cfd8be84fcfc5dadc..c2443b8ef6c0a3d191aaa906b8acf44d3ae8da2b 100644 (file)
@@ -111,6 +111,10 @@ int bc_parser::parse_decls() {
        if (!pshader) {
                if (gpr_reladdr)
                        sh->add_gpr_array(0, bc->ngpr, 0x0F);
+
+               // compute shaders have some values preloaded in R0, R1
+               sh->add_input(0 /* GPR */, true /* preloaded */, 0x0F /* mask */);
+               sh->add_input(1 /* GPR */, true /* preloaded */, 0x0F /* mask */);
                return 0;
        }