i965/fs: Report the right value in fs_inst::regs_read() for PIXEL_X/Y
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 19 Jun 2015 00:48:27 +0000 (17:48 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 30 Jun 2015 22:58:16 +0000 (15:58 -0700)
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Acked-by: Francisco Jerez <currojerez@riseup.net>
src/mesa/drivers/dri/i965/brw_fs.cpp

index e83a0923e80a04081fe71704ef02fdd959dd7f53..d91ad0a06506dc641c54decc2efee6003d87ae1c 100644 (file)
@@ -701,6 +701,7 @@ fs_inst::is_partial_write() const
 int
 fs_inst::regs_read(int arg) const
 {
+   unsigned components = 1;
    switch (opcode) {
    case FS_OPCODE_FB_WRITE:
    case SHADER_OPCODE_URB_WRITE_SIMD8:
@@ -726,6 +727,12 @@ fs_inst::regs_read(int arg) const
          return exec_size / 4;
       break;
 
+   case FS_OPCODE_PIXEL_X:
+   case FS_OPCODE_PIXEL_Y:
+      if (arg == 0)
+         components = 1;
+      break;
+
    default:
       if (is_tex() && arg == 0 && src[0].file == GRF)
          return mlen;
@@ -742,8 +749,8 @@ fs_inst::regs_read(int arg) const
       if (src[arg].stride == 0) {
          return 1;
       } else {
-         int size = src[arg].width * src[arg].stride * type_sz(src[arg].type);
-         return (size + 31) / 32;
+         int size = components * src[arg].width * type_sz(src[arg].type);
+         return DIV_ROUND_UP(size * src[arg].stride, 32);
       }
    case MRF:
       unreachable("MRF registers are not allowed as sources");