OSDN Git Service

vc4: Add debugging on texture relocation validation failures.
authorEric Anholt <eric@anholt.net>
Fri, 17 Jul 2015 18:22:40 +0000 (11:22 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 17 Jul 2015 19:25:55 +0000 (12:25 -0700)
src/gallium/drivers/vc4/kernel/vc4_validate.c

index a0b67a7..1d457b8 100644 (file)
@@ -619,11 +619,11 @@ reloc_tex(struct vc4_exec_info *exec,
                uint32_t remaining_size = tex->base.size - p0;
                if (p0 > tex->base.size - 4) {
                        DRM_ERROR("UBO offset greater than UBO size\n");
-                       return false;
+                       goto fail;
                }
                if (p1 > remaining_size - 4) {
                        DRM_ERROR("UBO clamp would allow reads outside of UBO\n");
-                       return false;
+                       goto fail;
                }
                *validated_p0 = tex->paddr + p0;
                return true;
@@ -642,14 +642,14 @@ reloc_tex(struct vc4_exec_info *exec,
                    VC4_TEX_P2_PTYPE_CUBE_MAP_STRIDE) {
                        if (cube_map_stride) {
                                DRM_ERROR("Cube map stride set twice\n");
-                               return false;
+                               goto fail;
                        }
 
                        cube_map_stride = p3 & VC4_TEX_P2_CMST_MASK;
                }
                if (!cube_map_stride) {
                        DRM_ERROR("Cube map stride not set\n");
-                       return false;
+                       goto fail;
                }
        }
 
@@ -683,7 +683,7 @@ reloc_tex(struct vc4_exec_info *exec,
        case VC4_TEXTURE_TYPE_YUV422R:
        default:
                DRM_ERROR("Texture format %d unsupported\n", type);
-               return false;
+               goto fail;
        }
        utile_w = utile_width(cpp);
        utile_h = utile_height(cpp);
@@ -699,7 +699,7 @@ reloc_tex(struct vc4_exec_info *exec,
 
        if (!vc4_check_tex_size(exec, tex, offset + cube_map_stride * 5,
                                tiling_format, width, height, cpp)) {
-               return false;
+               goto fail;
        }
 
        /* The mipmap levels are stored before the base of the texture.  Make
@@ -740,7 +740,7 @@ reloc_tex(struct vc4_exec_info *exec,
                                  i, level_width, level_height,
                                  aligned_width, aligned_height,
                                  level_size, offset);
-                       return false;
+                       goto fail;
                }
 
                offset -= level_size;
@@ -749,6 +749,12 @@ reloc_tex(struct vc4_exec_info *exec,
        *validated_p0 = tex->paddr + p0;
 
        return true;
+ fail:
+       DRM_INFO("Texture p0 at %d: 0x%08x\n", sample->p_offset[0], p0);
+       DRM_INFO("Texture p1 at %d: 0x%08x\n", sample->p_offset[1], p1);
+       DRM_INFO("Texture p2 at %d: 0x%08x\n", sample->p_offset[2], p2);
+       DRM_INFO("Texture p3 at %d: 0x%08x\n", sample->p_offset[3], p3);
+       return false;
 }
 
 static int