resources: orgainize directory.

Should make it easier to ask just for images.

Change-Id: If821743dc924c4bfbc6b2b2d29b14affde7b3afd
Reviewed-on: https://skia-review.googlesource.com/82684
Commit-Queue: Hal Canary <halcanary@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
diff --git a/bench/EncoderBench.cpp b/bench/EncoderBench.cpp
index 44c459f..c60061b 100644
--- a/bench/EncoderBench.cpp
+++ b/bench/EncoderBench.cpp
@@ -82,7 +82,7 @@
 #define PNG(FLAG, ZLIBLEVEL) [](SkWStream* d, const SkPixmap& s) { \
            return encode_png(d, s, SkPngEncoder::FilterFlag::FLAG, ZLIBLEVEL); }
 
-static const char* srcs[2] = {"mandrill_512.png", "color_wheel.jpg"};
+static const char* srcs[2] = {"images/mandrill_512.png", "images/color_wheel.jpg"};
 
 // The Android Photos app uses a quality of 90 on JPEG encodes
 DEF_BENCH(return new EncodeBench(srcs[0], &encode_jpeg, "JPEG"));
diff --git a/bench/ImageFilterDAGBench.cpp b/bench/ImageFilterDAGBench.cpp
index 076e139..76b091f 100644
--- a/bench/ImageFilterDAGBench.cpp
+++ b/bench/ImageFilterDAGBench.cpp
@@ -58,7 +58,7 @@
     }
 
     void onDelayedSetup() override {
-        fImage = GetResourceAsImage("mandrill_512.png");
+        fImage = GetResourceAsImage("images/mandrill_512.png");
     }
 
     void onDraw(int loops, SkCanvas* canvas) override {
diff --git a/bench/PDFBench.cpp b/bench/PDFBench.cpp
index 9965941..8593928 100644
--- a/bench/PDFBench.cpp
+++ b/bench/PDFBench.cpp
@@ -69,7 +69,7 @@
         return backend == kNonRendering_Backend;
     }
     void onDelayedSetup() override {
-        sk_sp<SkImage> img(GetResourceAsImage("color_wheel.png"));
+        sk_sp<SkImage> img(GetResourceAsImage("images/color_wheel.png"));
         if (img) {
             // force decoding, throw away reference to encoded data.
             SkAutoPixmapStorage pixmap;
@@ -108,7 +108,7 @@
         return backend == kNonRendering_Backend;
     }
     void onDelayedSetup() override {
-        sk_sp<SkImage> img(GetResourceAsImage("mandrill_512_q075.jpg"));
+        sk_sp<SkImage> img(GetResourceAsImage("images/mandrill_512_q075.jpg"));
         if (!img) { return; }
         sk_sp<SkData> encoded = img->refEncodedData();
         SkASSERT(encoded);
diff --git a/dm/DM.cpp b/dm/DM.cpp
index 6fa81e7..d2c127c 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -1358,7 +1358,7 @@
     gCreateTypefaceDelegate = &create_from_name;
 
     {
-        SkString testResourcePath = GetResourcePath("color_wheel.png");
+        SkString testResourcePath = GetResourcePath("images/color_wheel.png");
         SkFILEStream testResource(testResourcePath.c_str());
         if (!testResource.isValid()) {
             info("Some resources are missing.  Do you need to set --resourcePath?\n");
diff --git a/docs/SkCanvas_Reference.bmh b/docs/SkCanvas_Reference.bmh
index efbf41f..b2c70f5 100644
--- a/docs/SkCanvas_Reference.bmh
+++ b/docs/SkCanvas_Reference.bmh
@@ -2034,7 +2034,7 @@
 Outside of the circle the mandrill is brightened.
 ##
     #Image 3
-    // sk_sp<SkImage> image = GetResourceAsImage("mandrill_256.png");
+    // sk_sp<SkImage> image = GetResourceAsImage("images/mandrill_256.png");
     canvas->drawImage(image, 0, 0, nullptr);
     SkCanvas::SaveLayerRec rec;
     SkPaint paint;
diff --git a/experimental/GLFWTest/glfw_main.cpp b/experimental/GLFWTest/glfw_main.cpp
index 26ed75b..e83abc5 100644
--- a/experimental/GLFWTest/glfw_main.cpp
+++ b/experimental/GLFWTest/glfw_main.cpp
@@ -83,7 +83,7 @@
     float       times[32];
     int         currentTime;
 
-    sk_sp<SkData> imageData(SkData::MakeFromFileName("ship.png"));
+    sk_sp<SkData> imageData(SkData::MakeFromFileName("images/ship.png"));
     atlas.reset(SkImage::NewFromEncoded(imageData.get()));
     if (!atlas) {
         SkDebugf("\nCould not decode file ship.png\n");
diff --git a/gm/all_bitmap_configs.cpp b/gm/all_bitmap_configs.cpp
index 699a55b..24f0735 100644
--- a/gm/all_bitmap_configs.cpp
+++ b/gm/all_bitmap_configs.cpp
@@ -122,7 +122,7 @@
     sk_tool_utils::draw_checkerboard(canvas, SK_ColorLTGRAY, SK_ColorWHITE, 8);
 
     SkBitmap bitmap;
-    if (GetResourceAsBitmap("color_wheel.png", &bitmap)) {
+    if (GetResourceAsBitmap("images/color_wheel.png", &bitmap)) {
         bitmap.setImmutable();
         draw(canvas, p, bitmap, kN32_SkColorType, "Native 32");
 
diff --git a/gm/animatedGif.cpp b/gm/animatedGif.cpp
index 5686193..8b92e94 100644
--- a/gm/animatedGif.cpp
+++ b/gm/animatedGif.cpp
@@ -18,7 +18,7 @@
 
 #include <vector>
 
-DEFINE_string(animatedGif, "test640x479.gif", "Animated gif in resources folder");
+DEFINE_string(animatedGif, "images/test640x479.gif", "Animated gif in resources folder");
 
 namespace {
     void error(SkCanvas* canvas, const SkString& errorText) {
diff --git a/gm/bitmapimage.cpp b/gm/bitmapimage.cpp
index ccd3487..225d56c 100644
--- a/gm/bitmapimage.cpp
+++ b/gm/bitmapimage.cpp
@@ -28,7 +28,7 @@
 
     void onDraw(SkCanvas* canvas) override {
         // Create image.
-        const char* path = "mandrill_512_q075.jpg";
+        const char* path = "images/mandrill_512_q075.jpg";
         sk_sp<SkImage> image = GetResourceAsImage(path);
         if (!image) {
             SkDebugf("Failure: Is the resource path set properly?");
diff --git a/gm/blurs.cpp b/gm/blurs.cpp
index adb2a1f..0e0374e 100644
--- a/gm/blurs.cpp
+++ b/gm/blurs.cpp
@@ -124,7 +124,7 @@
     SkPaint paint;
     paint.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, 10, 0));
     canvas->clear(0xFF88FF88);
-    if (auto image = GetResourceAsImage("mandrill_512_q075.jpg")) {
+    if (auto image = GetResourceAsImage("images/mandrill_512_q075.jpg")) {
         canvas->scale(0.25, 0.25);
         canvas->drawImage(image, 256, 256, &paint);
     }
diff --git a/gm/colorfilterimagefilter.cpp b/gm/colorfilterimagefilter.cpp
index 7ca2426..dba1a13 100644
--- a/gm/colorfilterimagefilter.cpp
+++ b/gm/colorfilterimagefilter.cpp
@@ -67,7 +67,7 @@
 }
 
 static sk_sp<SkShader> sh_make_image() {
-    sk_sp<SkImage> image(GetResourceAsImage("mandrill_128.png"));
+    sk_sp<SkImage> image(GetResourceAsImage("images/mandrill_128.png"));
     if (!image) {
         return nullptr;
     }
@@ -225,7 +225,7 @@
 }
 
 DEF_SIMPLE_GM(mixershader, canvas, 800, 700) {
-    auto shaderA = GetResourceAsImage("mandrill_128.png")->makeShader(SkShader::kClamp_TileMode,
+    auto shaderA = GetResourceAsImage("images/mandrill_128.png")->makeShader(SkShader::kClamp_TileMode,
                                                                       SkShader::kClamp_TileMode);
     const SkColor colors[] = { SK_ColorGREEN, 0 };
     auto shaderB = SkGradientShader::MakeRadial({60, 60}, 55, colors, nullptr, 2,
diff --git a/gm/colorwheel.cpp b/gm/colorwheel.cpp
index b8a0895..c0b7cf4 100644
--- a/gm/colorwheel.cpp
+++ b/gm/colorwheel.cpp
@@ -32,10 +32,10 @@
  */
 DEF_SIMPLE_GM(colorwheel, canvas, 256, 256) {
     sk_tool_utils::draw_checkerboard(canvas);
-    draw_image(canvas, "color_wheel.png", 0, 0);  // top left
-    draw_image(canvas, "color_wheel.gif", 128, 0);  // top right
-    draw_image(canvas, "color_wheel.webp", 0, 128);  // bottom left
-    draw_image(canvas, "color_wheel.jpg", 128, 128);  // bottom right
+    draw_image(canvas, "images/color_wheel.png", 0, 0);  // top left
+    draw_image(canvas, "images/color_wheel.gif", 128, 0);  // top right
+    draw_image(canvas, "images/color_wheel.webp", 0, 128);  // bottom left
+    draw_image(canvas, "images/color_wheel.jpg", 128, 128);  // bottom right
 }
 
 DEF_SIMPLE_GM(colorwheelnative, canvas, 128, 28) {
diff --git a/gm/copyTo4444.cpp b/gm/copyTo4444.cpp
index 97e6f0a..b860dca 100644
--- a/gm/copyTo4444.cpp
+++ b/gm/copyTo4444.cpp
@@ -32,7 +32,7 @@
 
     virtual void onDraw(SkCanvas* canvas) {
         SkBitmap bm, bm4444;
-        if (!GetResourceAsBitmap("dog.jpg", &bm)) {
+        if (!GetResourceAsBitmap("images/dog.jpg", &bm)) {
             SkDebugf("Could not decode the file. Did you forget to set the "
                      "resourcePath?\n");
             return;
diff --git a/gm/crosscontextimage.cpp b/gm/crosscontextimage.cpp
index ff56a28..03203c4 100644
--- a/gm/crosscontextimage.cpp
+++ b/gm/crosscontextimage.cpp
@@ -19,7 +19,7 @@
         return;
     }
 
-    sk_sp<SkData> encodedData = GetResourceAsData("mandrill_512.png");
+    sk_sp<SkData> encodedData = GetResourceAsData("images/mandrill_512.png");
 
     sk_sp<SkImage> encodedImage = SkImage::MakeFromEncoded(encodedData);
     canvas->drawImage(encodedImage, 10, 10);
diff --git a/gm/downsamplebitmap.cpp b/gm/downsamplebitmap.cpp
index e142bde..377ba09 100644
--- a/gm/downsamplebitmap.cpp
+++ b/gm/downsamplebitmap.cpp
@@ -183,16 +183,16 @@
 
 DEF_GM( return new DownsampleBitmapTextGM(72, kHigh_SkFilterQuality); )
 DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, kHigh_SkFilterQuality); )
-DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", kHigh_SkFilterQuality); )
+DEF_GM( return new DownsampleBitmapImageGM("images/mandrill_512.png", kHigh_SkFilterQuality); )
 
 DEF_GM( return new DownsampleBitmapTextGM(72, kMedium_SkFilterQuality); )
 DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, kMedium_SkFilterQuality); )
-DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", kMedium_SkFilterQuality); )
+DEF_GM( return new DownsampleBitmapImageGM("images/mandrill_512.png", kMedium_SkFilterQuality); )
 
 DEF_GM( return new DownsampleBitmapTextGM(72, kLow_SkFilterQuality); )
 DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, kLow_SkFilterQuality); )
-DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", kLow_SkFilterQuality); )
+DEF_GM( return new DownsampleBitmapImageGM("images/mandrill_512.png", kLow_SkFilterQuality); )
 
 DEF_GM( return new DownsampleBitmapTextGM(72, kNone_SkFilterQuality); )
 DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, kNone_SkFilterQuality); )
-DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", kNone_SkFilterQuality); )
+DEF_GM( return new DownsampleBitmapImageGM("images/mandrill_512.png", kNone_SkFilterQuality); )
diff --git a/gm/draw_bitmap_rect_skbug4374.cpp b/gm/draw_bitmap_rect_skbug4374.cpp
index 582ae3e..bf26049 100644
--- a/gm/draw_bitmap_rect_skbug4374.cpp
+++ b/gm/draw_bitmap_rect_skbug4374.cpp
@@ -9,7 +9,7 @@
 // https://bug.skia.org/4374
 DEF_SIMPLE_GM(draw_bitmap_rect_skbug4734, canvas, 64, 64) {
     SkBitmap source;
-    if (GetResourceAsBitmap("randPixels.png", &source)) {
+    if (GetResourceAsBitmap("images/randPixels.png", &source)) {
         SkRect rect = SkRect::Make(source.bounds());
         rect.inset(0.5, 1.5);
         SkRect dst;
diff --git a/gm/drawatlas.cpp b/gm/drawatlas.cpp
index de44b6d..4a23e26 100644
--- a/gm/drawatlas.cpp
+++ b/gm/drawatlas.cpp
@@ -198,7 +198,7 @@
     const SkRSXform xform = SkRSXform::Make(1, 0, 0, 0);
     const SkColor color = 0x884488CC;
 
-    auto image = GetResourceAsImage("mandrill_128.png");
+    auto image = GetResourceAsImage("images/mandrill_128.png");
     auto verts = make_vertices(image, tex, color);
     const sk_sp<SkColorFilter> filters[] = {
         nullptr,
diff --git a/gm/encode-alpha-jpeg.cpp b/gm/encode-alpha-jpeg.cpp
index 6686e78..dc07bf3 100644
--- a/gm/encode-alpha-jpeg.cpp
+++ b/gm/encode-alpha-jpeg.cpp
@@ -43,7 +43,7 @@
     }
 
     void onDraw(SkCanvas* canvas) override {
-        sk_sp<SkImage> srcImg = GetResourceAsImage("rainbow-gradient.png");
+        sk_sp<SkImage> srcImg = GetResourceAsImage("images/rainbow-gradient.png");
         fStorage.reset(srcImg->width() * srcImg->height() *
                 SkColorTypeBytesPerPixel(kRGBA_F16_SkColorType));
 
diff --git a/gm/encode-platform.cpp b/gm/encode-platform.cpp
index dd7ca6e..a9eaae6 100644
--- a/gm/encode-platform.cpp
+++ b/gm/encode-platform.cpp
@@ -20,12 +20,12 @@
 namespace skiagm {
 
 static void make_opaque_256(SkBitmap* bitmap) {
-    GetResourceAsBitmap("mandrill_256.png", bitmap);
+    GetResourceAsBitmap("images/mandrill_256.png", bitmap);
 }
 
 static void make_premul_256(SkBitmap* bitmap) {
     SkBitmap tmp;
-    GetResourceAsBitmap("yellow_rose.png", &tmp);
+    GetResourceAsBitmap("images/yellow_rose.png", &tmp);
     tmp.extractSubset(bitmap, SkIRect::MakeWH(256, 256));
 }
 
diff --git a/gm/encode-srgb.cpp b/gm/encode-srgb.cpp
index be3cd62..527ece9 100644
--- a/gm/encode-srgb.cpp
+++ b/gm/encode-srgb.cpp
@@ -42,16 +42,16 @@
     const char* resource;
     switch (colorType) {
         case kGray_8_SkColorType:
-            resource = "grayscale.jpg";
+            resource = "images/grayscale.jpg";
             alphaType = kOpaque_SkAlphaType;
             break;
         case kRGB_565_SkColorType:
-            resource = "color_wheel.jpg";
+            resource = "images/color_wheel.jpg";
             alphaType = kOpaque_SkAlphaType;
             break;
         default:
-            resource = (kOpaque_SkAlphaType == alphaType) ? "color_wheel.jpg"
-                                                          : "color_wheel.png";
+            resource = (kOpaque_SkAlphaType == alphaType) ? "images/color_wheel.jpg"
+                                                          : "images/color_wheel.png";
             break;
     }
 
diff --git a/gm/encode.cpp b/gm/encode.cpp
index 88e7724..7356470 100644
--- a/gm/encode.cpp
+++ b/gm/encode.cpp
@@ -29,7 +29,7 @@
 
     void onDraw(SkCanvas* canvas) override {
         SkBitmap orig;
-        GetResourceAsBitmap("mandrill_512_q075.jpg", &orig);
+        GetResourceAsBitmap("images/mandrill_512_q075.jpg", &orig);
         sk_sp<SkData> pngData(sk_tool_utils::EncodeImageToData(orig, SkEncodedImageFormat::kPNG, 100));
         sk_sp<SkData> jpegData(sk_tool_utils::EncodeImageToData(orig, SkEncodedImageFormat::kJPEG, 100));
 
diff --git a/gm/filterbitmap.cpp b/gm/filterbitmap.cpp
index a630662..a393893 100644
--- a/gm/filterbitmap.cpp
+++ b/gm/filterbitmap.cpp
@@ -196,7 +196,8 @@
       }
 
       void makeBitmap() override {
-        if (!GetResourceAsBitmap(fFilename.c_str(), &fBM)) {
+        SkString resource = SkStringPrintf("images/%s", fFilename.c_str());
+        if (!GetResourceAsBitmap(resource.c_str(), &fBM)) {
             fBM.allocN32Pixels(1, 1);
             fBM.eraseARGB(255, 255, 0 , 0); // red == bad
         }
diff --git a/gm/filterindiabox.cpp b/gm/filterindiabox.cpp
index 84f512d..01ecb21 100644
--- a/gm/filterindiabox.cpp
+++ b/gm/filterindiabox.cpp
@@ -111,4 +111,4 @@
 //////////////////////////////////////////////////////////////////////////////
 
 
-DEF_GM( return new FilterIndiaBoxGM("box.gif"); )
+DEF_GM( return new FilterIndiaBoxGM("images/box.gif"); )
diff --git a/gm/grayscalejpg.cpp b/gm/grayscalejpg.cpp
index bc88ee1..851c8d0 100644
--- a/gm/grayscalejpg.cpp
+++ b/gm/grayscalejpg.cpp
@@ -14,7 +14,7 @@
  *  http://crbug.com/436079
  */
 DEF_SIMPLE_GM(grayscalejpg, canvas, 128, 128) {
-    const char kResource[] = "grayscale.jpg";
+    const char kResource[] = "images/grayscale.jpg";
     sk_sp<SkImage> image(GetResourceAsImage(kResource));
     if (image) {
         canvas->drawImage(image, 0.0f, 0.0f);
diff --git a/gm/imagefilters.cpp b/gm/imagefilters.cpp
index dd6287b..146388f 100644
--- a/gm/imagefilters.cpp
+++ b/gm/imagefilters.cpp
@@ -163,7 +163,7 @@
 
     SkPaint paint;
     paint.setFilterQuality(kMedium_SkFilterQuality);
-    sk_sp<SkImage> image(GetResourceAsImage("mandrill_512.png"));
+    sk_sp<SkImage> image(GetResourceAsImage("images/mandrill_512.png"));
 
     canvas->translate(20, 20);
     for (const auto& xform : xforms) {
diff --git a/gm/makecolorspace.cpp b/gm/makecolorspace.cpp
index 0ea3d40..c0002b3 100644
--- a/gm/makecolorspace.cpp
+++ b/gm/makecolorspace.cpp
@@ -61,8 +61,8 @@
         sk_sp<SkColorSpace> wideGamutLinear = as_CSB(wideGamut)->makeLinearGamma();
 
         // Lazy images
-        sk_sp<SkImage> opaqueImage = GetResourceAsImage("mandrill_128.png");
-        sk_sp<SkImage> premulImage = GetResourceAsImage("color_wheel.png");
+        sk_sp<SkImage> opaqueImage = GetResourceAsImage("images/mandrill_128.png");
+        sk_sp<SkImage> premulImage = GetResourceAsImage("images/color_wheel.png");
         canvas->drawImage(opaqueImage, 0.0f, 0.0f);
         canvas->drawImage(make_color_space(opaqueImage, wideGamut, behavior), 128.0f, 0.0f);
         canvas->drawImage(make_color_space(opaqueImage, wideGamutLinear, behavior), 256.0f, 0.0f);
@@ -72,8 +72,8 @@
         canvas->translate(0.0f, 256.0f);
 
         // Raster images
-        opaqueImage = make_raster_image("mandrill_128.png", behavior);
-        premulImage = make_raster_image("color_wheel.png", behavior);
+        opaqueImage = make_raster_image("images/mandrill_128.png", behavior);
+        premulImage = make_raster_image("images/color_wheel.png", behavior);
         canvas->drawImage(opaqueImage, 0.0f, 0.0f);
         canvas->drawImage(make_color_space(opaqueImage, wideGamut, behavior), 128.0f, 0.0f);
         canvas->drawImage(make_color_space(opaqueImage, wideGamutLinear, behavior), 256.0f, 0.0f);
diff --git a/gm/patch.cpp b/gm/patch.cpp
index 1b6dbd1..5cfc8b5 100644
--- a/gm/patch.cpp
+++ b/gm/patch.cpp
@@ -152,7 +152,7 @@
     const SkColor colors[SkPatchUtils::kNumCorners] = {
         SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorCYAN
     };
-    dopatch(canvas, colors, GetResourceAsImage("mandrill_128.png"));
+    dopatch(canvas, colors, GetResourceAsImage("images/mandrill_128.png"));
 }
 DEF_SIMPLE_GM(patch_alpha, canvas, 1500, 1100) {
     const SkColor colors[SkPatchUtils::kNumCorners] = {
diff --git a/gm/readpixels.cpp b/gm/readpixels.cpp
index bd2fe9b..6e8a51a 100644
--- a/gm/readpixels.cpp
+++ b/gm/readpixels.cpp
@@ -51,7 +51,7 @@
 static const int kHeight = 64;
 
 static sk_sp<SkImage> make_raster_image(SkColorType colorType) {
-    std::unique_ptr<SkStream> stream(GetResourceAsStream("google_chrome.ico"));
+    std::unique_ptr<SkStream> stream(GetResourceAsStream("images/google_chrome.ico"));
     std::unique_ptr<SkCodec> codec = SkCodec::MakeFromStream(std::move(stream));
 
     SkBitmap bitmap;
@@ -66,7 +66,7 @@
 }
 
 static sk_sp<SkImage> make_codec_image() {
-    sk_sp<SkData> encoded = GetResourceAsData("randPixels.png");
+    sk_sp<SkData> encoded = GetResourceAsData("images/randPixels.png");
     return SkImage::MakeFromEncoded(encoded);
 }
 
diff --git a/gm/repeated_bitmap.cpp b/gm/repeated_bitmap.cpp
index a659e78..09f30fb 100644
--- a/gm/repeated_bitmap.cpp
+++ b/gm/repeated_bitmap.cpp
@@ -35,9 +35,9 @@
 }
 
 DEF_SIMPLE_GM(repeated_bitmap, canvas, 576, 576) {
-    draw_rotated_image(canvas, GetResourceAsImage("randPixels.png").get());
+    draw_rotated_image(canvas, GetResourceAsImage("images/randPixels.png").get());
 }
 
 DEF_SIMPLE_GM(repeated_bitmap_jpg, canvas, 576, 576) {
-    draw_rotated_image(canvas, GetResourceAsImage("color_wheel.jpg").get());
+    draw_rotated_image(canvas, GetResourceAsImage("images/color_wheel.jpg").get());
 }
diff --git a/gm/savelayer.cpp b/gm/savelayer.cpp
index dd7ff7b..a5b2f9c 100644
--- a/gm/savelayer.cpp
+++ b/gm/savelayer.cpp
@@ -109,7 +109,7 @@
 // restore with kPlus mode, which should show the mandrill super-bright on the outside, but
 // normal where we punched the hole.
 DEF_SIMPLE_GM(savelayer_initfromprev, canvas, 256, 256) {
-    canvas->drawImage(GetResourceAsImage("mandrill_256.png"), 0, 0, nullptr);
+    canvas->drawImage(GetResourceAsImage("images/mandrill_256.png"), 0, 0, nullptr);
 
     SkCanvas::SaveLayerRec rec;
     SkPaint paint;
diff --git a/gm/smallimage.cpp b/gm/smallimage.cpp
deleted file mode 100644
index 6eb48d8..0000000
--- a/gm/smallimage.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "Resources.h"
-#include "gm.h"
-
-DEF_SIMPLE_GM(small_image, canvas, 8, 8) {
-    SkBitmap bitmap;
-    if (GetResourceAsBitmap("randPixels.png", &bitmap)) {
-        canvas->drawBitmap(bitmap, 0.0f, 0.0f);
-    } else {
-        SkDebugf("\nCould not decode resource.\n");
-    }
-}
diff --git a/gm/srgb.cpp b/gm/srgb.cpp
index bbf0abd..f0bff69 100644
--- a/gm/srgb.cpp
+++ b/gm/srgb.cpp
@@ -13,7 +13,7 @@
 #include "SkColorFilter.h"
 
 DEF_SIMPLE_GM(srgb_colorfilter, canvas, 512, 256*3) {
-    auto img = GetResourceAsImage("mandrill_256.png");
+    auto img = GetResourceAsImage("images/mandrill_256.png");
 
     const float array[] = {
         1, 0, 0, 0, 0,
diff --git a/gm/subsetshader.cpp b/gm/subsetshader.cpp
index a7029f4..4657aa5 100644
--- a/gm/subsetshader.cpp
+++ b/gm/subsetshader.cpp
@@ -14,7 +14,7 @@
     canvas->clear(SK_ColorWHITE);
 
     SkBitmap source;
-    if (!GetResourceAsBitmap("color_wheel.png", &source)) {
+    if (!GetResourceAsBitmap("images/color_wheel.png", &source)) {
         return;
     }
     SkIRect left = SkIRect::MakeWH(source.width()/2, source.height());
diff --git a/gn/gm.gni b/gn/gm.gni
index 170c069..4d4833f 100644
--- a/gn/gm.gni
+++ b/gn/gm.gni
@@ -275,7 +275,6 @@
   "$_gm/skbug_5321.cpp",
   "$_gm/skbug1719.cpp",
   "$_gm/smallarc.cpp",
-  "$_gm/smallimage.cpp",
   "$_gm/smallpaths.cpp",
   "$_gm/spritebitmap.cpp",
   "$_gm/srcmode.cpp",
diff --git a/resources/16x1.png b/resources/images/16x1.png
similarity index 100%
rename from resources/16x1.png
rename to resources/images/16x1.png
Binary files differ
diff --git a/resources/1x1.png b/resources/images/1x1.png
similarity index 100%
rename from resources/1x1.png
rename to resources/images/1x1.png
Binary files differ
diff --git a/resources/1x16.png b/resources/images/1x16.png
similarity index 100%
rename from resources/1x16.png
rename to resources/images/1x16.png
Binary files differ
diff --git a/resources/1x3.png b/resources/images/1x3.png
similarity index 100%
rename from resources/1x3.png
rename to resources/images/1x3.png
Binary files differ
diff --git a/resources/2x2.png b/resources/images/2x2.png
similarity index 100%
rename from resources/2x2.png
rename to resources/images/2x2.png
Binary files differ
diff --git a/resources/3x1.png b/resources/images/3x1.png
similarity index 100%
rename from resources/3x1.png
rename to resources/images/3x1.png
Binary files differ
diff --git a/resources/3x3.png b/resources/images/3x3.png
similarity index 100%
rename from resources/3x3.png
rename to resources/images/3x3.png
Binary files differ
diff --git a/resources/CMYK.jpg b/resources/images/CMYK.jpg
similarity index 100%
rename from resources/CMYK.jpg
rename to resources/images/CMYK.jpg
Binary files differ
diff --git a/resources/alphabetAnim.gif b/resources/images/alphabetAnim.gif
similarity index 100%
rename from resources/alphabetAnim.gif
rename to resources/images/alphabetAnim.gif
Binary files differ
diff --git a/resources/arrow.png b/resources/images/arrow.png
similarity index 100%
rename from resources/arrow.png
rename to resources/images/arrow.png
Binary files differ
diff --git a/resources/baby_tux.png b/resources/images/baby_tux.png
similarity index 100%
rename from resources/baby_tux.png
rename to resources/images/baby_tux.png
Binary files differ
diff --git a/resources/baby_tux.webp b/resources/images/baby_tux.webp
similarity index 100%
rename from resources/baby_tux.webp
rename to resources/images/baby_tux.webp
Binary files differ
diff --git a/resources/blendBG.webp b/resources/images/blendBG.webp
similarity index 100%
rename from resources/blendBG.webp
rename to resources/images/blendBG.webp
Binary files differ
diff --git a/resources/box.gif b/resources/images/box.gif
similarity index 100%
rename from resources/box.gif
rename to resources/images/box.gif
Binary files differ
diff --git a/resources/brickwork-texture.jpg b/resources/images/brickwork-texture.jpg
similarity index 100%
rename from resources/brickwork-texture.jpg
rename to resources/images/brickwork-texture.jpg
Binary files differ
diff --git a/resources/brickwork_normal-map.jpg b/resources/images/brickwork_normal-map.jpg
similarity index 100%
rename from resources/brickwork_normal-map.jpg
rename to resources/images/brickwork_normal-map.jpg
Binary files differ
diff --git a/resources/colorTables.gif b/resources/images/colorTables.gif
similarity index 100%
rename from resources/colorTables.gif
rename to resources/images/colorTables.gif
Binary files differ
diff --git a/resources/color_wheel.gif b/resources/images/color_wheel.gif
similarity index 100%
rename from resources/color_wheel.gif
rename to resources/images/color_wheel.gif
Binary files differ
diff --git a/resources/color_wheel.ico b/resources/images/color_wheel.ico
similarity index 100%
rename from resources/color_wheel.ico
rename to resources/images/color_wheel.ico
Binary files differ
diff --git a/resources/color_wheel.jpg b/resources/images/color_wheel.jpg
similarity index 100%
rename from resources/color_wheel.jpg
rename to resources/images/color_wheel.jpg
Binary files differ
diff --git a/resources/color_wheel.png b/resources/images/color_wheel.png
similarity index 100%
rename from resources/color_wheel.png
rename to resources/images/color_wheel.png
Binary files differ
diff --git a/resources/color_wheel.webp b/resources/images/color_wheel.webp
similarity index 100%
rename from resources/color_wheel.webp
rename to resources/images/color_wheel.webp
Binary files differ
diff --git a/resources/color_wheel_with_profile.png b/resources/images/color_wheel_with_profile.png
similarity index 100%
rename from resources/color_wheel_with_profile.png
rename to resources/images/color_wheel_with_profile.png
Binary files differ
diff --git a/resources/cropped_mandrill.jpg b/resources/images/cropped_mandrill.jpg
similarity index 100%
rename from resources/cropped_mandrill.jpg
rename to resources/images/cropped_mandrill.jpg
Binary files differ
diff --git a/resources/dng_with_preview.dng b/resources/images/dng_with_preview.dng
similarity index 100%
rename from resources/dng_with_preview.dng
rename to resources/images/dng_with_preview.dng
Binary files differ
diff --git a/resources/dog.jpg b/resources/images/dog.jpg
similarity index 100%
rename from resources/dog.jpg
rename to resources/images/dog.jpg
Binary files differ
diff --git a/resources/exif-orientation-2-ur.jpg b/resources/images/exif-orientation-2-ur.jpg
similarity index 100%
rename from resources/exif-orientation-2-ur.jpg
rename to resources/images/exif-orientation-2-ur.jpg
Binary files differ
diff --git a/resources/flutter_logo.jpg b/resources/images/flutter_logo.jpg
similarity index 100%
rename from resources/flutter_logo.jpg
rename to resources/images/flutter_logo.jpg
Binary files differ
diff --git a/resources/gamut.png b/resources/images/gamut.png
similarity index 100%
rename from resources/gamut.png
rename to resources/images/gamut.png
Binary files differ
diff --git a/resources/google_chrome.ico b/resources/images/google_chrome.ico
similarity index 100%
rename from resources/google_chrome.ico
rename to resources/images/google_chrome.ico
Binary files differ
diff --git a/resources/grayscale.jpg b/resources/images/grayscale.jpg
similarity index 100%
rename from resources/grayscale.jpg
rename to resources/images/grayscale.jpg
Binary files differ
diff --git a/resources/half-transparent-white-pixel.png b/resources/images/half-transparent-white-pixel.png
similarity index 100%
rename from resources/half-transparent-white-pixel.png
rename to resources/images/half-transparent-white-pixel.png
Binary files differ
diff --git a/resources/half-transparent-white-pixel.webp b/resources/images/half-transparent-white-pixel.webp
similarity index 100%
rename from resources/half-transparent-white-pixel.webp
rename to resources/images/half-transparent-white-pixel.webp
Binary files differ
diff --git a/resources/icc-v2-gbr.jpg b/resources/images/icc-v2-gbr.jpg
similarity index 100%
rename from resources/icc-v2-gbr.jpg
rename to resources/images/icc-v2-gbr.jpg
Binary files differ
diff --git a/resources/iconstrip.png b/resources/images/iconstrip.png
similarity index 100%
rename from resources/iconstrip.png
rename to resources/images/iconstrip.png
Binary files differ
diff --git a/resources/index8.png b/resources/images/index8.png
similarity index 100%
rename from resources/index8.png
rename to resources/images/index8.png
Binary files differ
diff --git a/resources/mandrill.wbmp b/resources/images/mandrill.wbmp
similarity index 100%
rename from resources/mandrill.wbmp
rename to resources/images/mandrill.wbmp
Binary files differ
diff --git a/resources/mandrill_128.png b/resources/images/mandrill_128.png
similarity index 100%
rename from resources/mandrill_128.png
rename to resources/images/mandrill_128.png
Binary files differ
diff --git a/resources/mandrill_16.png b/resources/images/mandrill_16.png
similarity index 100%
rename from resources/mandrill_16.png
rename to resources/images/mandrill_16.png
Binary files differ
diff --git a/resources/mandrill_256.png b/resources/images/mandrill_256.png
similarity index 100%
rename from resources/mandrill_256.png
rename to resources/images/mandrill_256.png
Binary files differ
diff --git a/resources/mandrill_32.png b/resources/images/mandrill_32.png
similarity index 100%
rename from resources/mandrill_32.png
rename to resources/images/mandrill_32.png
Binary files differ
diff --git a/resources/mandrill_512.png b/resources/images/mandrill_512.png
similarity index 100%
rename from resources/mandrill_512.png
rename to resources/images/mandrill_512.png
Binary files differ
diff --git a/resources/mandrill_512_q075.jpg b/resources/images/mandrill_512_q075.jpg
similarity index 100%
rename from resources/mandrill_512_q075.jpg
rename to resources/images/mandrill_512_q075.jpg
Binary files differ
diff --git a/resources/mandrill_64.png b/resources/images/mandrill_64.png
similarity index 100%
rename from resources/mandrill_64.png
rename to resources/images/mandrill_64.png
Binary files differ
diff --git a/resources/mandrill_h1v1.jpg b/resources/images/mandrill_h1v1.jpg
similarity index 100%
rename from resources/mandrill_h1v1.jpg
rename to resources/images/mandrill_h1v1.jpg
Binary files differ
diff --git a/resources/mandrill_h2v1.jpg b/resources/images/mandrill_h2v1.jpg
similarity index 100%
rename from resources/mandrill_h2v1.jpg
rename to resources/images/mandrill_h2v1.jpg
Binary files differ
diff --git a/resources/plane.png b/resources/images/plane.png
similarity index 100%
rename from resources/plane.png
rename to resources/images/plane.png
Binary files differ
diff --git a/resources/plane_interlaced.png b/resources/images/plane_interlaced.png
similarity index 100%
rename from resources/plane_interlaced.png
rename to resources/images/plane_interlaced.png
Binary files differ
diff --git a/resources/rainbow-gradient.png b/resources/images/rainbow-gradient.png
similarity index 100%
rename from resources/rainbow-gradient.png
rename to resources/images/rainbow-gradient.png
Binary files differ
diff --git a/resources/randPixels.bmp b/resources/images/randPixels.bmp
similarity index 100%
rename from resources/randPixels.bmp
rename to resources/images/randPixels.bmp
Binary files differ
diff --git a/resources/randPixels.gif b/resources/images/randPixels.gif
similarity index 100%
rename from resources/randPixels.gif
rename to resources/images/randPixels.gif
Binary files differ
diff --git a/resources/randPixels.jpg b/resources/images/randPixels.jpg
similarity index 100%
rename from resources/randPixels.jpg
rename to resources/images/randPixels.jpg
Binary files differ
diff --git a/resources/randPixels.png b/resources/images/randPixels.png
similarity index 100%
rename from resources/randPixels.png
rename to resources/images/randPixels.png
Binary files differ
diff --git a/resources/randPixels.webp b/resources/images/randPixels.webp
similarity index 100%
rename from resources/randPixels.webp
rename to resources/images/randPixels.webp
Binary files differ
diff --git a/resources/randPixelsAnim.gif b/resources/images/randPixelsAnim.gif
similarity index 100%
rename from resources/randPixelsAnim.gif
rename to resources/images/randPixelsAnim.gif
Binary files differ
diff --git a/resources/randPixelsAnim2.gif b/resources/images/randPixelsAnim2.gif
similarity index 100%
rename from resources/randPixelsAnim2.gif
rename to resources/images/randPixelsAnim2.gif
Binary files differ
diff --git a/resources/randPixelsOffset.gif b/resources/images/randPixelsOffset.gif
similarity index 100%
rename from resources/randPixelsOffset.gif
rename to resources/images/randPixelsOffset.gif
Binary files differ
diff --git a/resources/required.gif b/resources/images/required.gif
similarity index 100%
rename from resources/required.gif
rename to resources/images/required.gif
Binary files differ
diff --git a/resources/required.webp b/resources/images/required.webp
similarity index 100%
rename from resources/required.webp
rename to resources/images/required.webp
Binary files differ
diff --git a/resources/rle.bmp b/resources/images/rle.bmp
similarity index 100%
rename from resources/rle.bmp
rename to resources/images/rle.bmp
Binary files differ
diff --git a/resources/sample_1mp.dng b/resources/images/sample_1mp.dng
similarity index 100%
rename from resources/sample_1mp.dng
rename to resources/images/sample_1mp.dng
Binary files differ
diff --git a/resources/sample_1mp_rotated.dng b/resources/images/sample_1mp_rotated.dng
similarity index 100%
rename from resources/sample_1mp_rotated.dng
rename to resources/images/sample_1mp_rotated.dng
Binary files differ
diff --git a/resources/shadowreference.png b/resources/images/shadowreference.png
old mode 100755
new mode 100644
similarity index 100%
rename from resources/shadowreference.png
rename to resources/images/shadowreference.png
Binary files differ
diff --git a/resources/ship.png b/resources/images/ship.png
old mode 100755
new mode 100644
similarity index 100%
rename from resources/ship.png
rename to resources/images/ship.png
Binary files differ
diff --git a/resources/test640x479.gif b/resources/images/test640x479.gif
similarity index 100%
rename from resources/test640x479.gif
rename to resources/images/test640x479.gif
Binary files differ
diff --git a/resources/webp-animated.webp b/resources/images/webp-animated.webp
old mode 100755
new mode 100644
similarity index 100%
rename from resources/webp-animated.webp
rename to resources/images/webp-animated.webp
Binary files differ
diff --git a/resources/webp-color-profile-crash.webp b/resources/images/webp-color-profile-crash.webp
similarity index 100%
rename from resources/webp-color-profile-crash.webp
rename to resources/images/webp-color-profile-crash.webp
Binary files differ
diff --git a/resources/webp-color-profile-lossless.webp b/resources/images/webp-color-profile-lossless.webp
similarity index 100%
rename from resources/webp-color-profile-lossless.webp
rename to resources/images/webp-color-profile-lossless.webp
Binary files differ
diff --git a/resources/webp-color-profile-lossy-alpha.webp b/resources/images/webp-color-profile-lossy-alpha.webp
similarity index 100%
rename from resources/webp-color-profile-lossy-alpha.webp
rename to resources/images/webp-color-profile-lossy-alpha.webp
Binary files differ
diff --git a/resources/webp-color-profile-lossy.webp b/resources/images/webp-color-profile-lossy.webp
similarity index 100%
rename from resources/webp-color-profile-lossy.webp
rename to resources/images/webp-color-profile-lossy.webp
Binary files differ
diff --git a/resources/yellow_rose.png b/resources/images/yellow_rose.png
similarity index 100%
rename from resources/yellow_rose.png
rename to resources/images/yellow_rose.png
Binary files differ
diff --git a/resources/yellow_rose.webp b/resources/images/yellow_rose.webp
similarity index 100%
rename from resources/yellow_rose.webp
rename to resources/images/yellow_rose.webp
Binary files differ
diff --git a/resources/slides.lua b/resources/lua/slides.lua
similarity index 100%
rename from resources/slides.lua
rename to resources/lua/slides.lua
diff --git a/resources/slides_content.lua b/resources/lua/slides_content.lua
similarity index 100%
rename from resources/slides_content.lua
rename to resources/lua/slides_content.lua
diff --git a/resources/slides_content2.lua b/resources/lua/slides_content2.lua
similarity index 100%
rename from resources/slides_content2.lua
rename to resources/lua/slides_content2.lua
diff --git a/resources/slides_transitions.lua b/resources/lua/slides_transitions.lua
similarity index 100%
rename from resources/slides_transitions.lua
rename to resources/lua/slides_transitions.lua
diff --git a/resources/slides_utils.lua b/resources/lua/slides_utils.lua
similarity index 100%
rename from resources/slides_utils.lua
rename to resources/lua/slides_utils.lua
diff --git a/resources/test.lua b/resources/lua/test.lua
similarity index 100%
rename from resources/test.lua
rename to resources/lua/test.lua
diff --git a/samplecode/SampleFilterQuality.cpp b/samplecode/SampleFilterQuality.cpp
index a68fa17..d7edbd3 100644
--- a/samplecode/SampleFilterQuality.cpp
+++ b/samplecode/SampleFilterQuality.cpp
@@ -28,7 +28,7 @@
 }
 
 static sk_sp<SkShader> make_shader(const SkRect& bounds) {
-    sk_sp<SkImage> image(GetResourceAsImage("mandrill_128.png"));
+    sk_sp<SkImage> image(GetResourceAsImage("images/mandrill_128.png"));
     return image ? image->makeShader() : nullptr;
 }
 
diff --git a/samplecode/SampleIdentityScale.cpp b/samplecode/SampleIdentityScale.cpp
index 6bf948d..2ec9112 100644
--- a/samplecode/SampleIdentityScale.cpp
+++ b/samplecode/SampleIdentityScale.cpp
@@ -80,5 +80,5 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-static SkView* MyFactory() { return new IdentityScaleView("mandrill_256.png"); }
+static SkView* MyFactory() { return new IdentityScaleView("images/mandrill_256.png"); }
 static SkViewRegister reg(MyFactory);
diff --git a/samplecode/SampleLayers.cpp b/samplecode/SampleLayers.cpp
index 36ed2ab..37dae88 100644
--- a/samplecode/SampleLayers.cpp
+++ b/samplecode/SampleLayers.cpp
@@ -213,7 +213,7 @@
     BackdropView() {
         fCenter.set(200, 150);
         fAngle = 0;
-        fImage = GetResourceAsImage("mandrill_512.png");
+        fImage = GetResourceAsImage("images/mandrill_512.png");
         fFilter = SkDilateImageFilter::Make(8, 8, nullptr);
     }
 
diff --git a/samplecode/SampleLua.cpp b/samplecode/SampleLua.cpp
index 99c5525..848a942 100644
--- a/samplecode/SampleLua.cpp
+++ b/samplecode/SampleLua.cpp
@@ -18,8 +18,8 @@
 #include "lauxlib.h"
 }
 
-//#define LUA_FILENAME    "test.lua"
-#define LUA_FILENAME    "slides.lua"
+//#define LUA_FILENAME    "lua/test.lua"
+#define LUA_FILENAME    "lua/slides.lua"
 
 static const char gDrawName[] = "onDrawContent";
 static const char gClickName[] = "onClickHandler";
@@ -44,7 +44,7 @@
     ~LuaView() override { delete fLua; }
 
     void setImageFilename(lua_State* L) {
-        SkString str = GetResourcePath("mandrill_256.png");
+        SkString str = GetResourcePath("images/mandrill_256.png");
 
         lua_getglobal(L, "setImageFilename");
         if (lua_isfunction(L, -1)) {
diff --git a/samplecode/SampleShadowReference.cpp b/samplecode/SampleShadowReference.cpp
index ef63fc5..b3d462d 100755
--- a/samplecode/SampleShadowReference.cpp
+++ b/samplecode/SampleShadowReference.cpp
@@ -35,7 +35,7 @@
 protected:
     void onOnceBeforeDraw() override {
         fRRectPath.addRRect(SkRRect::MakeRectXY(SkRect::MakeXYWH(-130, -128.5, 130, 128.5), 4, 4));
-        fReferenceImage = GetResourceAsImage("shadowreference.png");
+        fReferenceImage = GetResourceAsImage("images/shadowreference.png");
     }
 
     // overrides from SkEventSink
diff --git a/samplecode/SampleShip.cpp b/samplecode/SampleShip.cpp
index 3abfaf7..de650af 100644
--- a/samplecode/SampleShip.cpp
+++ b/samplecode/SampleShip.cpp
@@ -48,10 +48,10 @@
 class DrawShipView : public SampleView {
 public:
     DrawShipView(const char name[], DrawAtlasProc proc) : fName(name), fProc(proc) {
-        fAtlas = GetResourceAsImage("ship.png");
+        fAtlas = GetResourceAsImage("images/ship.png");
         if (!fAtlas) {
             SkDebugf("\nCould not decode file ship.png. Falling back to penguin mode.\n");
-            fAtlas = GetResourceAsImage("baby_tux.png");
+            fAtlas = GetResourceAsImage("images/baby_tux.png");
             if (!fAtlas) {
                 SkDebugf("\nCould not decode file baby_tux.png. Did you forget"
                          " to set the resourcePath?\n");
diff --git a/samplecode/SampleSubpixelTranslate.cpp b/samplecode/SampleSubpixelTranslate.cpp
index 7950003..51b5ef6 100644
--- a/samplecode/SampleSubpixelTranslate.cpp
+++ b/samplecode/SampleSubpixelTranslate.cpp
@@ -108,5 +108,5 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-static SkView* MyFactory() { return new SubpixelTranslateView("mandrill_256.png", .05f, .05f); }
+static SkView* MyFactory() { return new SubpixelTranslateView("images/mandrill_256.png", .05f, .05f); }
 static SkViewRegister reg(MyFactory);
diff --git a/samplecode/SampleUnpremul.cpp b/samplecode/SampleUnpremul.cpp
index 57f0efc..108d709 100644
--- a/samplecode/SampleUnpremul.cpp
+++ b/samplecode/SampleUnpremul.cpp
@@ -176,6 +176,6 @@
 //////////////////////////////////////////////////////////////////////////////
 
 static SkView* MyFactory() {
-    return new UnpremulView(GetResourcePath());
+    return new UnpremulView(GetResourcePath("images"));
 }
 static SkViewRegister reg(MyFactory);
diff --git a/tests/CodecAnimTest.cpp b/tests/CodecAnimTest.cpp
index b274ee5..b09c925 100644
--- a/tests/CodecAnimTest.cpp
+++ b/tests/CodecAnimTest.cpp
@@ -33,7 +33,7 @@
 }
 
 DEF_TEST(Codec_trunc, r) {
-    sk_sp<SkData> data(GetResourceAsData("box.gif"));
+    sk_sp<SkData> data(GetResourceAsData("images/box.gif"));
     if (!data) {
         return;
     }
@@ -44,7 +44,7 @@
 // animated image with a frame that has alpha but then blends onto an opaque
 // frame making the result opaque. Test that we can decode such a frame.
 DEF_TEST(Codec_565, r) {
-    sk_sp<SkData> data(GetResourceAsData("blendBG.webp"));
+    sk_sp<SkData> data(GetResourceAsData("images/blendBG.webp"));
     if (!data) {
         return;
     }
@@ -86,13 +86,13 @@
         int                                           fRepetitionCount;
         std::vector<SkCodecAnimation::DisposalMethod> fDisposalMethods;
     } gRecs[] = {
-        { "required.gif", 7,
+        { "images/required.gif", 7,
             { 0, 1, 2, 3, 4, 5 },
             { kOpaque, kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul },
             { 100, 100, 100, 100, 100, 100, 100 },
             0,
             { kKeep, kRestoreBG, kKeep, kKeep, kKeep, kRestoreBG, kKeep } },
-        { "alphabetAnim.gif", 13,
+        { "images/alphabetAnim.gif", 13,
             { SkCodec::kNone, 0, 0, 0, 0, 5, 6, SkCodec::kNone,
               SkCodec::kNone, 9, 10, 11 },
             { kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul,
@@ -102,7 +102,7 @@
             { kKeep, kRestorePrev, kRestorePrev, kRestorePrev, kRestorePrev,
               kRestoreBG, kKeep, kRestoreBG, kRestoreBG, kKeep, kKeep,
               kRestoreBG, kKeep } },
-        { "randPixelsAnim2.gif", 4,
+        { "images/randPixelsAnim2.gif", 4,
             // required frames
             { 0, 0, 1 },
             // alphas
@@ -112,7 +112,7 @@
             // repetition count
             0,
             { kKeep, kKeep, kRestorePrev, kKeep } },
-        { "randPixelsAnim.gif", 13,
+        { "images/randPixelsAnim.gif", 13,
             // required frames
             { 0, 1, 2, 3, 4, 3, 6, 7, 7, 7, 9, 9 },
             { kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul,
@@ -124,34 +124,34 @@
             { kKeep, kKeep, kKeep, kKeep, kRestoreBG, kRestoreBG, kRestoreBG,
               kRestoreBG, kRestorePrev, kRestoreBG, kRestorePrev, kRestorePrev,
               kRestorePrev,  } },
-        { "box.gif", 1, {}, {}, {}, 0, { kKeep } },
-        { "color_wheel.gif", 1, {}, {}, {}, 0, { kKeep } },
-        { "test640x479.gif", 4, { 0, 1, 2 },
+        { "images/box.gif", 1, {}, {}, {}, 0, { kKeep } },
+        { "images/color_wheel.gif", 1, {}, {}, {}, 0, { kKeep } },
+        { "images/test640x479.gif", 4, { 0, 1, 2 },
                 { kOpaque, kOpaque, kOpaque },
                 { 200, 200, 200, 200 },
                 SkCodec::kRepetitionCountInfinite,
                 { kKeep, kKeep, kKeep, kKeep } },
-        { "colorTables.gif", 2, { 0 }, { kOpaque }, { 1000, 1000 }, 5,
+        { "images/colorTables.gif", 2, { 0 }, { kOpaque }, { 1000, 1000 }, 5,
                 { kKeep, kKeep } },
 
-        { "arrow.png",  1, {}, {}, {}, 0, {} },
-        { "google_chrome.ico", 1, {}, {}, {}, 0, {} },
-        { "brickwork-texture.jpg", 1, {}, {}, {}, 0, {} },
+        { "images/arrow.png",  1, {}, {}, {}, 0, {} },
+        { "images/google_chrome.ico", 1, {}, {}, {}, 0, {} },
+        { "images/brickwork-texture.jpg", 1, {}, {}, {}, 0, {} },
 #if defined(SK_CODEC_DECODES_RAW) && (!defined(_WIN32))
-        { "dng_with_preview.dng", 1, {}, {}, {}, 0, {} },
+        { "images/dng_with_preview.dng", 1, {}, {}, {}, 0, {} },
 #endif
-        { "mandrill.wbmp", 1, {}, {}, {}, 0, {} },
-        { "randPixels.bmp", 1, {}, {}, {}, 0, {} },
-        { "yellow_rose.webp", 1, {}, {}, {}, 0, {} },
-        { "webp-animated.webp", 3, { 0, 1 }, { kOpaque, kOpaque },
+        { "images/mandrill.wbmp", 1, {}, {}, {}, 0, {} },
+        { "images/randPixels.bmp", 1, {}, {}, {}, 0, {} },
+        { "images/yellow_rose.webp", 1, {}, {}, {}, 0, {} },
+        { "images/webp-animated.webp", 3, { 0, 1 }, { kOpaque, kOpaque },
             { 1000, 500, 1000 }, SkCodec::kRepetitionCountInfinite,
             { kKeep, kKeep, kKeep } },
-        { "blendBG.webp", 7, { 0, SkCodec::kNone, SkCodec::kNone, SkCodec::kNone,
+        { "images/blendBG.webp", 7, { 0, SkCodec::kNone, SkCodec::kNone, SkCodec::kNone,
                                4, 4 },
             { kOpaque, kOpaque, kUnpremul, kOpaque, kUnpremul, kUnpremul },
             { 525, 500, 525, 437, 609, 729, 444 }, 7,
             { kKeep, kKeep, kKeep, kKeep, kKeep, kKeep, kKeep } },
-        { "required.webp", 7,
+        { "images/required.webp", 7,
             { 0, 1, 1, SkCodec::kNone, 4, 4 },
             { kOpaque, kUnpremul, kUnpremul, kOpaque, kOpaque, kOpaque },
             { 100, 100, 100, 100, 100, 100, 100 },
diff --git a/tests/CodecExactReadTest.cpp b/tests/CodecExactReadTest.cpp
index d00c0bc..6189bdf 100644
--- a/tests/CodecExactReadTest.cpp
+++ b/tests/CodecExactReadTest.cpp
@@ -44,13 +44,13 @@
 // end of the data. Some other SkCodecs do, but some Android apps rely on not
 // doing so for PNGs. Test on other formats that work.
 DEF_TEST(Codec_end, r) {
-    for (const char* path : { "plane.png",
-                              "yellow_rose.png",
-                              "plane_interlaced.png",
-                              "google_chrome.ico",
-                              "color_wheel.ico",
-                              "mandrill.wbmp",
-                              "randPixels.bmp",
+    for (const char* path : { "images/plane.png",
+                              "images/yellow_rose.png",
+                              "images/plane_interlaced.png",
+                              "images/google_chrome.ico",
+                              "images/color_wheel.ico",
+                              "images/mandrill.wbmp",
+                              "images/randPixels.bmp",
                               }) {
         sk_sp<SkData> data = GetResourceAsData(path);
         if (!data) {
diff --git a/tests/CodecPartialTest.cpp b/tests/CodecPartialTest.cpp
index 35249ac..561dddd 100644
--- a/tests/CodecPartialTest.cpp
+++ b/tests/CodecPartialTest.cpp
@@ -125,26 +125,26 @@
 #if 0
     // FIXME (scroggo): SkPngCodec needs to use SkStreamBuffer in order to
     // support incremental decoding.
-    test_partial(r, "plane.png");
-    test_partial(r, "plane_interlaced.png");
-    test_partial(r, "yellow_rose.png");
-    test_partial(r, "index8.png");
-    test_partial(r, "color_wheel.png");
-    test_partial(r, "mandrill_256.png");
-    test_partial(r, "mandrill_32.png");
-    test_partial(r, "arrow.png");
-    test_partial(r, "randPixels.png");
-    test_partial(r, "baby_tux.png");
+    test_partial(r, "images/plane.png");
+    test_partial(r, "images/plane_interlaced.png");
+    test_partial(r, "images/yellow_rose.png");
+    test_partial(r, "images/index8.png");
+    test_partial(r, "images/color_wheel.png");
+    test_partial(r, "images/mandrill_256.png");
+    test_partial(r, "images/mandrill_32.png");
+    test_partial(r, "images/arrow.png");
+    test_partial(r, "images/randPixels.png");
+    test_partial(r, "images/baby_tux.png");
 #endif
-    test_partial(r, "box.gif");
-    test_partial(r, "randPixels.gif", 215);
-    test_partial(r, "color_wheel.gif");
+    test_partial(r, "images/box.gif");
+    test_partial(r, "images/randPixels.gif", 215);
+    test_partial(r, "images/color_wheel.gif");
 }
 
 // Verify that when decoding an animated gif byte by byte we report the correct
 // fRequiredFrame as soon as getFrameInfo reports the frame.
 DEF_TEST(Codec_requiredFrame, r) {
-    auto path = "colorTables.gif";
+    auto path = "images/colorTables.gif";
     sk_sp<SkData> file = GetResourceAsData(path);
     if (!file) {
         return;
@@ -189,7 +189,7 @@
 }
 
 DEF_TEST(Codec_partialAnim, r) {
-    auto path = "test640x479.gif";
+    auto path = "images/test640x479.gif";
     sk_sp<SkData> file = GetResourceAsData(path);
     if (!file) {
         return;
@@ -323,9 +323,9 @@
 }
 
 DEF_TEST(Codec_rewind, r) {
-    test_interleaved(r, "plane.png");
-    test_interleaved(r, "plane_interlaced.png");
-    test_interleaved(r, "box.gif");
+    test_interleaved(r, "images/plane.png");
+    test_interleaved(r, "images/plane_interlaced.png");
+    test_interleaved(r, "images/box.gif");
 }
 
 // Modified version of the giflib logo, from
@@ -401,7 +401,7 @@
 }
 
 DEF_TEST(Codec_emptyIDAT, r) {
-    const char* name = "baby_tux.png";
+    const char* name = "images/baby_tux.png";
     sk_sp<SkData> file = GetResourceAsData(name);
     if (!file) {
         return;
@@ -425,13 +425,13 @@
 }
 
 DEF_TEST(Codec_incomplete, r) {
-    for (const char* name : { "baby_tux.png",
-                              "baby_tux.webp",
-                              "CMYK.jpg",
-                              "color_wheel.gif",
-                              "google_chrome.ico",
-                              "rle.bmp",
-                              "mandrill.wbmp",
+    for (const char* name : { "images/baby_tux.png",
+                              "images/baby_tux.webp",
+                              "images/CMYK.jpg",
+                              "images/color_wheel.gif",
+                              "images/google_chrome.ico",
+                              "images/rle.bmp",
+                              "images/mandrill.wbmp",
                               }) {
         sk_sp<SkData> file = GetResourceAsData(name);
         if (!name) {
diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp
index 91b07ef..ab21e4a 100644
--- a/tests/CodecTest.cpp
+++ b/tests/CodecTest.cpp
@@ -457,70 +457,70 @@
 }
 
 DEF_TEST(Codec_wbmp, r) {
-    check(r, "mandrill.wbmp", SkISize::Make(512, 512), true, false, true);
+    check(r, "images/mandrill.wbmp", SkISize::Make(512, 512), true, false, true);
 }
 
 DEF_TEST(Codec_webp, r) {
-    check(r, "baby_tux.webp", SkISize::Make(386, 395), false, true, true);
-    check(r, "color_wheel.webp", SkISize::Make(128, 128), false, true, true);
-    check(r, "yellow_rose.webp", SkISize::Make(400, 301), false, true, true);
+    check(r, "images/baby_tux.webp", SkISize::Make(386, 395), false, true, true);
+    check(r, "images/color_wheel.webp", SkISize::Make(128, 128), false, true, true);
+    check(r, "images/yellow_rose.webp", SkISize::Make(400, 301), false, true, true);
 }
 
 DEF_TEST(Codec_bmp, r) {
-    check(r, "randPixels.bmp", SkISize::Make(8, 8), true, false, true);
-    check(r, "rle.bmp", SkISize::Make(320, 240), true, false, true);
+    check(r, "images/randPixels.bmp", SkISize::Make(8, 8), true, false, true);
+    check(r, "images/rle.bmp", SkISize::Make(320, 240), true, false, true);
 }
 
 DEF_TEST(Codec_ico, r) {
     // FIXME: We are not ready to test incomplete ICOs
     // These two tests examine interestingly different behavior:
     // Decodes an embedded BMP image
-    check(r, "color_wheel.ico", SkISize::Make(128, 128), true, false, false);
+    check(r, "images/color_wheel.ico", SkISize::Make(128, 128), true, false, false);
     // Decodes an embedded PNG image
-    check(r, "google_chrome.ico", SkISize::Make(256, 256), false, false, false, true);
+    check(r, "images/google_chrome.ico", SkISize::Make(256, 256), false, false, false, true);
 }
 
 DEF_TEST(Codec_gif, r) {
-    check(r, "box.gif", SkISize::Make(200, 55), false, false, true, true);
-    check(r, "color_wheel.gif", SkISize::Make(128, 128), false, false, true, true);
+    check(r, "images/box.gif", SkISize::Make(200, 55), false, false, true, true);
+    check(r, "images/color_wheel.gif", SkISize::Make(128, 128), false, false, true, true);
     // randPixels.gif is too small to test incomplete
-    check(r, "randPixels.gif", SkISize::Make(8, 8), false, false, false, true);
+    check(r, "images/randPixels.gif", SkISize::Make(8, 8), false, false, false, true);
 }
 
 DEF_TEST(Codec_jpg, r) {
-    check(r, "CMYK.jpg", SkISize::Make(642, 516), true, false, true);
-    check(r, "color_wheel.jpg", SkISize::Make(128, 128), true, false, true);
+    check(r, "images/CMYK.jpg", SkISize::Make(642, 516), true, false, true);
+    check(r, "images/color_wheel.jpg", SkISize::Make(128, 128), true, false, true);
     // grayscale.jpg is too small to test incomplete
-    check(r, "grayscale.jpg", SkISize::Make(128, 128), true, false, false);
-    check(r, "mandrill_512_q075.jpg", SkISize::Make(512, 512), true, false, true);
+    check(r, "images/grayscale.jpg", SkISize::Make(128, 128), true, false, false);
+    check(r, "images/mandrill_512_q075.jpg", SkISize::Make(512, 512), true, false, true);
     // randPixels.jpg is too small to test incomplete
-    check(r, "randPixels.jpg", SkISize::Make(8, 8), true, false, false);
+    check(r, "images/randPixels.jpg", SkISize::Make(8, 8), true, false, false);
 }
 
 DEF_TEST(Codec_png, r) {
-    check(r, "arrow.png", SkISize::Make(187, 312), false, false, true, true);
-    check(r, "baby_tux.png", SkISize::Make(240, 246), false, false, true, true);
-    check(r, "color_wheel.png", SkISize::Make(128, 128), false, false, true, true);
+    check(r, "images/arrow.png", SkISize::Make(187, 312), false, false, true, true);
+    check(r, "images/baby_tux.png", SkISize::Make(240, 246), false, false, true, true);
+    check(r, "images/color_wheel.png", SkISize::Make(128, 128), false, false, true, true);
     // half-transparent-white-pixel.png is too small to test incomplete
-    check(r, "half-transparent-white-pixel.png", SkISize::Make(1, 1), false, false, false, true);
-    check(r, "mandrill_128.png", SkISize::Make(128, 128), false, false, true, true);
-    check(r, "mandrill_16.png", SkISize::Make(16, 16), false, false, true, true);
-    check(r, "mandrill_256.png", SkISize::Make(256, 256), false, false, true, true);
-    check(r, "mandrill_32.png", SkISize::Make(32, 32), false, false, true, true);
-    check(r, "mandrill_512.png", SkISize::Make(512, 512), false, false, true, true);
-    check(r, "mandrill_64.png", SkISize::Make(64, 64), false, false, true, true);
-    check(r, "plane.png", SkISize::Make(250, 126), false, false, true, true);
-    check(r, "plane_interlaced.png", SkISize::Make(250, 126), false, false, true, true);
-    check(r, "randPixels.png", SkISize::Make(8, 8), false, false, true, true);
-    check(r, "yellow_rose.png", SkISize::Make(400, 301), false, false, true, true);
+    check(r, "images/half-transparent-white-pixel.png", SkISize::Make(1, 1), false, false, false, true);
+    check(r, "images/mandrill_128.png", SkISize::Make(128, 128), false, false, true, true);
+    check(r, "images/mandrill_16.png", SkISize::Make(16, 16), false, false, true, true);
+    check(r, "images/mandrill_256.png", SkISize::Make(256, 256), false, false, true, true);
+    check(r, "images/mandrill_32.png", SkISize::Make(32, 32), false, false, true, true);
+    check(r, "images/mandrill_512.png", SkISize::Make(512, 512), false, false, true, true);
+    check(r, "images/mandrill_64.png", SkISize::Make(64, 64), false, false, true, true);
+    check(r, "images/plane.png", SkISize::Make(250, 126), false, false, true, true);
+    check(r, "images/plane_interlaced.png", SkISize::Make(250, 126), false, false, true, true);
+    check(r, "images/randPixels.png", SkISize::Make(8, 8), false, false, true, true);
+    check(r, "images/yellow_rose.png", SkISize::Make(400, 301), false, false, true, true);
 }
 
 // Disable RAW tests for Win32.
 #if defined(SK_CODEC_DECODES_RAW) && (!defined(_WIN32))
 DEF_TEST(Codec_raw, r) {
-    check(r, "sample_1mp.dng", SkISize::Make(600, 338), false, false, false);
-    check(r, "sample_1mp_rotated.dng", SkISize::Make(600, 338), false, false, false);
-    check(r, "dng_with_preview.dng", SkISize::Make(600, 338), true, false, false);
+    check(r, "images/sample_1mp.dng", SkISize::Make(600, 338), false, false, false);
+    check(r, "images/sample_1mp_rotated.dng", SkISize::Make(600, 338), false, false, false);
+    check(r, "images/dng_with_preview.dng", SkISize::Make(600, 338), true, false, false);
 }
 #endif
 
@@ -598,32 +598,32 @@
 // Ensure that onGetScaledDimensions returns valid image dimensions to use for decodes
 DEF_TEST(Codec_Dimensions, r) {
     // JPG
-    test_dimensions(r, "CMYK.jpg");
-    test_dimensions(r, "color_wheel.jpg");
-    test_dimensions(r, "grayscale.jpg");
-    test_dimensions(r, "mandrill_512_q075.jpg");
-    test_dimensions(r, "randPixels.jpg");
+    test_dimensions(r, "images/CMYK.jpg");
+    test_dimensions(r, "images/color_wheel.jpg");
+    test_dimensions(r, "images/grayscale.jpg");
+    test_dimensions(r, "images/mandrill_512_q075.jpg");
+    test_dimensions(r, "images/randPixels.jpg");
 
     // Decoding small images with very large scaling factors is a potential
     // source of bugs and crashes.  We disable these tests in Gold because
     // tiny images are not very useful to look at.
     // Here we make sure that we do not crash or access illegal memory when
     // performing scaled decodes on small images.
-    test_dimensions(r, "1x1.png");
-    test_dimensions(r, "2x2.png");
-    test_dimensions(r, "3x3.png");
-    test_dimensions(r, "3x1.png");
-    test_dimensions(r, "1x1.png");
-    test_dimensions(r, "16x1.png");
-    test_dimensions(r, "1x16.png");
-    test_dimensions(r, "mandrill_16.png");
+    test_dimensions(r, "images/1x1.png");
+    test_dimensions(r, "images/2x2.png");
+    test_dimensions(r, "images/3x3.png");
+    test_dimensions(r, "images/3x1.png");
+    test_dimensions(r, "images/1x1.png");
+    test_dimensions(r, "images/16x1.png");
+    test_dimensions(r, "images/1x16.png");
+    test_dimensions(r, "images/mandrill_16.png");
 
     // RAW
 // Disable RAW tests for Win32.
 #if defined(SK_CODEC_DECODES_RAW) && (!defined(_WIN32))
-    test_dimensions(r, "sample_1mp.dng");
-    test_dimensions(r, "sample_1mp_rotated.dng");
-    test_dimensions(r, "dng_with_preview.dng");
+    test_dimensions(r, "images/sample_1mp.dng");
+    test_dimensions(r, "images/sample_1mp_rotated.dng");
+    test_dimensions(r, "images/dng_with_preview.dng");
 #endif
 }
 
@@ -846,7 +846,7 @@
 // Test that the RawCodec works also for not asset stream. This will test the code path using
 // SkRawBufferedStream instead of SkRawAssetStream.
 DEF_TEST(Codec_raw_notseekable, r) {
-    const char* path = "dng_with_preview.dng";
+    const char* path = "images/dng_with_preview.dng";
     SkString fullPath(GetResourcePath(path));
     sk_sp<SkData> data(SkData::MakeFromFileName(fullPath.c_str()));
     if (!data) {
@@ -865,7 +865,7 @@
 // Test that even if webp_parse_header fails to peek enough, it will fall back to read()
 // + rewind() and succeed.
 DEF_TEST(Codec_webp_peek, r) {
-    const char* path = "baby_tux.webp";
+    const char* path = "images/baby_tux.webp";
     SkString fullPath(GetResourcePath(path));
     auto data = SkData::MakeFromFileName(fullPath.c_str());
     if (!data) {
@@ -892,7 +892,7 @@
 // a couple of bits to be 1 (so long as they do not overlap with 0x9F).
 // Test that SkCodec now supports an image with these bits set.
 DEF_TEST(Codec_wbmp_restrictive, r) {
-    const char* path = "mandrill.wbmp";
+    const char* path = "images/mandrill.wbmp";
     std::unique_ptr<SkStream> stream(GetResourceAsStream(path));
     if (!stream) {
         return;
@@ -942,7 +942,7 @@
 }
 
 DEF_TEST(Codec_jpeg_rewind, r) {
-    const char* path = "mandrill_512_q075.jpg";
+    const char* path = "images/mandrill_512_q075.jpg";
     sk_sp<SkData> data(GetResourceAsData(path));
     if (!data) {
         return;
@@ -1017,8 +1017,8 @@
 }
 
 DEF_TEST(Codec_ColorXform, r) {
-    check_color_xform(r, "mandrill_512_q075.jpg");
-    check_color_xform(r, "mandrill_512.png");
+    check_color_xform(r, "images/mandrill_512_q075.jpg");
+    check_color_xform(r, "images/mandrill_512.png");
 }
 
 static bool color_type_match(SkColorType origColorType, SkColorType codecColorType) {
@@ -1069,7 +1069,7 @@
 }
 
 DEF_TEST(Codec_PngRoundTrip, r) {
-    auto codec = SkCodec::MakeFromStream(GetResourceAsStream("mandrill_512_q075.jpg"));
+    auto codec = SkCodec::MakeFromStream(GetResourceAsStream("images/mandrill_512_q075.jpg"));
 
     SkColorType colorTypesOpaque[] = {
             kRGB_565_SkColorType, kRGBA_8888_SkColorType, kBGRA_8888_SkColorType
@@ -1079,10 +1079,10 @@
         check_round_trip(r, codec.get(), newInfo);
     }
 
-    codec = SkCodec::MakeFromStream(GetResourceAsStream("grayscale.jpg"));
+    codec = SkCodec::MakeFromStream(GetResourceAsStream("images/grayscale.jpg"));
     check_round_trip(r, codec.get(), codec->getInfo());
 
-    codec = SkCodec::MakeFromStream(GetResourceAsStream("yellow_rose.png"));
+    codec = SkCodec::MakeFromStream(GetResourceAsStream("images/yellow_rose.png"));
 
     SkColorType colorTypesWithAlpha[] = {
             kRGBA_8888_SkColorType, kBGRA_8888_SkColorType
@@ -1100,7 +1100,7 @@
         }
     }
 
-    codec = SkCodec::MakeFromStream(GetResourceAsStream("index8.png"));
+    codec = SkCodec::MakeFromStream(GetResourceAsStream("images/index8.png"));
 
     for (SkAlphaType alphaType : alphaTypes) {
         SkImageInfo newInfo = codec->getInfo().makeAlphaType(alphaType)
@@ -1167,9 +1167,9 @@
 }
 
 DEF_TEST(Codec_F16ConversionPossible, r) {
-    test_conversion_possible(r, "color_wheel.webp", false, false);
-    test_conversion_possible(r, "mandrill_512_q075.jpg", true, false);
-    test_conversion_possible(r, "yellow_rose.png", false, true);
+    test_conversion_possible(r, "images/color_wheel.webp", false, false);
+    test_conversion_possible(r, "images/mandrill_512_q075.jpg", true, false);
+    test_conversion_possible(r, "images/yellow_rose.png", false, true);
 }
 
 static void decode_frame(skiatest::Reporter* r, SkCodec* codec, size_t frame) {
@@ -1186,7 +1186,7 @@
 // For an animated GIF, we should only read enough to decode frame 0 if the
 // client never calls getFrameInfo and only decodes frame 0.
 DEF_TEST(Codec_skipFullParse, r) {
-    auto path = "test640x479.gif";
+    auto path = "images/test640x479.gif";
     auto streamObj = GetResourceAsStream(path);
     if (!streamObj) {
         return;
@@ -1269,10 +1269,10 @@
 
     // Formats that currently do not support incremental decoding
     auto files = {
-            "CMYK.jpg",
-            "color_wheel.ico",
-            "mandrill.wbmp",
-            "randPixels.bmp",
+            "images/CMYK.jpg",
+            "images/color_wheel.ico",
+            "images/mandrill.wbmp",
+            "images/randPixels.bmp",
             };
     for (auto file : files) {
         auto stream = LimitedRewindingStream::Make(file, SkCodec::MinBufferedBytesNeeded());
@@ -1308,7 +1308,7 @@
 // This test verifies that we fixed an assert statement that fired when reusing a png codec
 // after scaling.
 DEF_TEST(Codec_reusePng, r) {
-    std::unique_ptr<SkStream> stream(GetResourceAsStream("plane.png"));
+    std::unique_ptr<SkStream> stream(GetResourceAsStream("images/plane.png"));
     if (!stream) {
         return;
     }
@@ -1336,7 +1336,7 @@
 }
 
 DEF_TEST(Codec_rowsDecoded, r) {
-    auto file = "plane_interlaced.png";
+    auto file = "images/plane_interlaced.png";
     std::unique_ptr<SkStream> stream(GetResourceAsStream(file));
     if (!stream) {
         return;
@@ -1511,7 +1511,7 @@
 }
 
 DEF_TEST(Codec_webp_rowsDecoded, r) {
-    const char* path = "baby_tux.webp";
+    const char* path = "images/baby_tux.webp";
     sk_sp<SkData> data(GetResourceAsData(path));
     if (!data) {
         return;
diff --git a/tests/ColorSpaceTest.cpp b/tests/ColorSpaceTest.cpp
index efbfe8a..19e1044 100644
--- a/tests/ColorSpaceTest.cpp
+++ b/tests/ColorSpaceTest.cpp
@@ -82,22 +82,22 @@
 DEF_TEST(ColorSpaceParseICCProfiles, r) {
 
 #if (PNG_LIBPNG_VER_MAJOR > 1) || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 6)
-    test_path(r, "color_wheel_with_profile.png", g_sRGB_R, g_sRGB_G, g_sRGB_B,
+    test_path(r, "images/color_wheel_with_profile.png", g_sRGB_R, g_sRGB_G, g_sRGB_B,
               kSRGB_SkGammaNamed);
 #endif
 
     const float red[] = { 0.385117f, 0.716904f, 0.0970612f };
     const float green[] = { 0.143051f, 0.0606079f, 0.713913f };
     const float blue[] = { 0.436035f, 0.222488f, 0.013916f };
-    test_path(r, "icc-v2-gbr.jpg", red, green, blue, k2Dot2Curve_SkGammaNamed);
+    test_path(r, "images/icc-v2-gbr.jpg", red, green, blue, k2Dot2Curve_SkGammaNamed);
 
-    test_path(r, "webp-color-profile-crash.webp",
+    test_path(r, "images/webp-color-profile-crash.webp",
             red, green, blue, kNonStandard_SkGammaNamed);
-    test_path(r, "webp-color-profile-lossless.webp",
+    test_path(r, "images/webp-color-profile-lossless.webp",
             red, green, blue, kNonStandard_SkGammaNamed);
-    test_path(r, "webp-color-profile-lossy.webp",
+    test_path(r, "images/webp-color-profile-lossy.webp",
             red, green, blue, kNonStandard_SkGammaNamed);
-    test_path(r, "webp-color-profile-lossy-alpha.webp",
+    test_path(r, "images/webp-color-profile-lossy-alpha.webp",
             red, green, blue, kNonStandard_SkGammaNamed);
 }
 
diff --git a/tests/EncodeTest.cpp b/tests/EncodeTest.cpp
index 6638c1e..40e9956 100644
--- a/tests/EncodeTest.cpp
+++ b/tests/EncodeTest.cpp
@@ -47,7 +47,7 @@
 
 static void test_encode(skiatest::Reporter* r, SkEncodedImageFormat format) {
     SkBitmap bitmap;
-    bool success = GetResourceAsBitmap("mandrill_128.png", &bitmap);
+    bool success = GetResourceAsBitmap("images/mandrill_128.png", &bitmap);
     if (!success) {
         return;
     }
@@ -132,7 +132,7 @@
 
 DEF_TEST(Encode_JpegDownsample, r) {
     SkBitmap bitmap;
-    bool success = GetResourceAsBitmap("mandrill_128.png", &bitmap);
+    bool success = GetResourceAsBitmap("images/mandrill_128.png", &bitmap);
     if (!success) {
         return;
     }
@@ -244,7 +244,7 @@
 
 DEF_TEST(Encode_PngOptions, r) {
     SkBitmap bitmap;
-    bool success = GetResourceAsBitmap("mandrill_128.png", &bitmap);
+    bool success = GetResourceAsBitmap("images/mandrill_128.png", &bitmap);
     if (!success) {
         return;
     }
@@ -287,7 +287,7 @@
 
 DEF_TEST(Encode_WebpOptions, r) {
     SkBitmap bitmap;
-    bool success = GetResourceAsBitmap("google_chrome.ico", &bitmap);
+    bool success = GetResourceAsBitmap("images/google_chrome.ico", &bitmap);
     if (!success) {
         return;
     }
diff --git a/tests/ExifTest.cpp b/tests/ExifTest.cpp
index 4704d20..16f62bb 100644
--- a/tests/ExifTest.cpp
+++ b/tests/ExifTest.cpp
@@ -10,7 +10,7 @@
 #include "Test.h"
 
 DEF_TEST(ExifOrientation, r) {
-    std::unique_ptr<SkStream> stream(GetResourceAsStream("exif-orientation-2-ur.jpg"));
+    std::unique_ptr<SkStream> stream(GetResourceAsStream("images/exif-orientation-2-ur.jpg"));
     REPORTER_ASSERT(r, nullptr != stream);
     if (!stream) {
         return;
@@ -21,7 +21,7 @@
     SkEncodedOrigin origin = codec->getOrigin();
     REPORTER_ASSERT(r, kTopRight_SkEncodedOrigin == origin);
 
-    codec = SkCodec::MakeFromStream(GetResourceAsStream("mandrill_512_q075.jpg"));
+    codec = SkCodec::MakeFromStream(GetResourceAsStream("images/mandrill_512_q075.jpg"));
     REPORTER_ASSERT(r, nullptr != codec);
     origin = codec->getOrigin();
     REPORTER_ASSERT(r, kTopLeft_SkEncodedOrigin == origin);
diff --git a/tests/GifTest.cpp b/tests/GifTest.cpp
index 29150ba..5219825 100644
--- a/tests/GifTest.cpp
+++ b/tests/GifTest.cpp
@@ -225,7 +225,7 @@
 // Regression test for decoding a gif image with sampleSize of 4, which was
 // previously crashing.
 DEF_TEST(Gif_Sampled, r) {
-    auto stream = SkFILEStream::Make(GetResourcePath("test640x479.gif").c_str());
+    auto stream = SkFILEStream::Make(GetResourcePath("images/test640x479.gif").c_str());
     REPORTER_ASSERT(r, stream);
     if (!stream) {
         return;
@@ -250,7 +250,7 @@
 // If a GIF file is truncated before the header for the first image is defined,
 // we should not create an SkCodec.
 DEF_TEST(Codec_GifTruncated, r) {
-    sk_sp<SkData> data(GetResourceAsData("test640x479.gif"));
+    sk_sp<SkData> data(GetResourceAsData("images/test640x479.gif"));
     if (!data) {
         return;
     }
@@ -262,7 +262,7 @@
 }
 
 DEF_TEST(Codec_GifTruncated2, r) {
-    sk_sp<SkData> data(GetResourceAsData("box.gif"));
+    sk_sp<SkData> data(GetResourceAsData("images/box.gif"));
     if (!data) {
         return;
     }
diff --git a/tests/ImageIsOpaqueTest.cpp b/tests/ImageIsOpaqueTest.cpp
index bf3dea6..9b4837a 100644
--- a/tests/ImageIsOpaqueTest.cpp
+++ b/tests/ImageIsOpaqueTest.cpp
@@ -124,8 +124,8 @@
     };
     for (auto& image : {
         SkImage::MakeRasterCopy(pmap),
-        GetResourceAsImage("mandrill_128.png"),
-        GetResourceAsImage("color_wheel.jpg"),
+        GetResourceAsImage("images/mandrill_128.png"),
+        GetResourceAsImage("images/color_wheel.jpg"),
         SkImage::MakeFromPicture(make_picture(), { 10, 10 }, nullptr, nullptr,
                                  SkImage::BitDepth::kU8,
                                  SkColorSpace::MakeSRGB()),
diff --git a/tests/ImageTest.cpp b/tests/ImageTest.cpp
index d9140cf..1ba3f1d 100644
--- a/tests/ImageTest.cpp
+++ b/tests/ImageTest.cpp
@@ -957,7 +957,7 @@
 }
 
 DEF_GPUTEST(SkImage_MakeCrossContextFromEncodedRelease, reporter, options) {
-    sk_sp<SkData> data = GetResourceAsData("mandrill_128.png");
+    sk_sp<SkData> data = GetResourceAsData("images/mandrill_128.png");
     SkASSERT(data.get());
 
     test_cross_context_image(reporter, options, [&data](GrContext* ctx) {
@@ -968,7 +968,7 @@
 DEF_GPUTEST(SkImage_MakeCrossContextFromPixmapRelease, reporter, options) {
     SkBitmap bitmap;
     SkPixmap pixmap;
-    SkAssertResult(GetResourceAsBitmap("mandrill_128.png", &bitmap) && bitmap.peekPixels(&pixmap));
+    SkAssertResult(GetResourceAsBitmap("images/mandrill_128.png", &bitmap) && bitmap.peekPixels(&pixmap));
 
     test_cross_context_image(reporter, options, [&pixmap](GrContext* ctx) {
         return SkImage::MakeCrossContextFromPixmap(ctx, pixmap, false, nullptr);
@@ -1079,10 +1079,10 @@
 
 DEF_TEST(Image_ColorSpace, r) {
     sk_sp<SkColorSpace> srgb = SkColorSpace::MakeSRGB();
-    sk_sp<SkImage> image = GetResourceAsImage("mandrill_512_q075.jpg");
+    sk_sp<SkImage> image = GetResourceAsImage("images/mandrill_512_q075.jpg");
     REPORTER_ASSERT(r, srgb.get() == image->colorSpace());
 
-    image = GetResourceAsImage("webp-color-profile-lossy.webp");
+    image = GetResourceAsImage("images/webp-color-profile-lossy.webp");
     SkColorSpaceTransferFn fn;
     bool success = image->colorSpace()->isNumericalTransferFn(&fn);
     REPORTER_ASSERT(r, success);
@@ -1138,7 +1138,7 @@
     REPORTER_ASSERT(r, almost_equal(0x31, SkGetPackedG32(*adobeBitmap.getAddr32(0, 0))));
     REPORTER_ASSERT(r, almost_equal(0x4C, SkGetPackedB32(*adobeBitmap.getAddr32(0, 0))));
 
-    srgbImage = GetResourceAsImage("1x1.png");
+    srgbImage = GetResourceAsImage("images/1x1.png");
     p3Image = srgbImage->makeColorSpace(p3, SkTransferFunctionBehavior::kIgnore);
     success = p3Image->asLegacyBitmap(&p3Bitmap, SkImage::kRO_LegacyBitmapMode);
     REPORTER_ASSERT(r, success);
diff --git a/tests/PDFDocumentTest.cpp b/tests/PDFDocumentTest.cpp
index f01d0f9..9a79ec8 100644
--- a/tests/PDFDocumentTest.cpp
+++ b/tests/PDFDocumentTest.cpp
@@ -146,7 +146,7 @@
 DEF_TEST(SkPDF_document_dct_encoder, r) {
     REQUIRE_PDF_DOCUMENT(SkPDF_document_dct_encoder, r);
     SkBitmap bm;
-    if (GetResourceAsBitmap("mandrill_64.png", &bm)) {
+    if (GetResourceAsBitmap("images/mandrill_64.png", &bm)) {
         // Lossy encoding works better on photographs.
         REPORTER_ASSERT(r, count_bytes(bm, true) < count_bytes(bm, false));
     }
diff --git a/tests/PDFJpegEmbedTest.cpp b/tests/PDFJpegEmbedTest.cpp
index 100c9b3..b62b166 100644
--- a/tests/PDFJpegEmbedTest.cpp
+++ b/tests/PDFJpegEmbedTest.cpp
@@ -49,8 +49,8 @@
 DEF_TEST(SkPDF_JpegEmbedTest, r) {
     REQUIRE_PDF_DOCUMENT(SkPDF_JpegEmbedTest, r);
     const char test[] = "SkPDF_JpegEmbedTest";
-    sk_sp<SkData> mandrillData(load_resource(r, test, "mandrill_512_q075.jpg"));
-    sk_sp<SkData> cmykData(load_resource(r, test, "CMYK.jpg"));
+    sk_sp<SkData> mandrillData(load_resource(r, test, "images/mandrill_512_q075.jpg"));
+    sk_sp<SkData> cmykData(load_resource(r, test, "images/CMYK.jpg"));
     if (!mandrillData || !cmykData) {
         return;
     }
@@ -88,11 +88,11 @@
         const char* path;
         bool isJfif;
         SkJFIFInfo::Type type;
-    } kTests[] = {{"CMYK.jpg", false, SkJFIFInfo::kGrayscale},
-                  {"color_wheel.jpg", true, SkJFIFInfo::kYCbCr},
-                  {"grayscale.jpg", true, SkJFIFInfo::kGrayscale},
-                  {"mandrill_512_q075.jpg", true, SkJFIFInfo::kYCbCr},
-                  {"randPixels.jpg", true, SkJFIFInfo::kYCbCr}};
+    } kTests[] = {{"images/CMYK.jpg", false, SkJFIFInfo::kGrayscale},
+                  {"images/color_wheel.jpg", true, SkJFIFInfo::kYCbCr},
+                  {"images/grayscale.jpg", true, SkJFIFInfo::kGrayscale},
+                  {"images/mandrill_512_q075.jpg", true, SkJFIFInfo::kYCbCr},
+                  {"images/randPixels.jpg", true, SkJFIFInfo::kYCbCr}};
     for (size_t i = 0; i < SK_ARRAY_COUNT(kTests); ++i) {
         sk_sp<SkData> data(load_resource(r, "JpegIdentification", kTests[i].path));
         if (!data) {
diff --git a/tests/PipeTest.cpp b/tests/PipeTest.cpp
index e5d2f09..42b1a4c 100644
--- a/tests/PipeTest.cpp
+++ b/tests/PipeTest.cpp
@@ -46,7 +46,7 @@
 }
 
 DEF_TEST(Pipe_image_draw_first, reporter) {
-    sk_sp<SkImage> img = GetResourceAsImage("mandrill_128.png");
+    sk_sp<SkImage> img = GetResourceAsImage("images/mandrill_128.png");
     SkASSERT(img.get());
 
     SkPipeSerializer serializer;
@@ -84,7 +84,7 @@
 }
 
 DEF_TEST(Pipe_image_draw_second, reporter) {
-    sk_sp<SkImage> img = GetResourceAsImage("mandrill_128.png");
+    sk_sp<SkImage> img = GetResourceAsImage("images/mandrill_128.png");
     SkASSERT(img.get());
 
     SkPipeSerializer serializer;
diff --git a/tests/SerialProcsTest.cpp b/tests/SerialProcsTest.cpp
index 6361309..d975abb 100644
--- a/tests/SerialProcsTest.cpp
+++ b/tests/SerialProcsTest.cpp
@@ -27,7 +27,7 @@
 };
 
 DEF_TEST(serial_procs_image, reporter) {
-    auto src_img = GetResourceAsImage("mandrill_128.png");
+    auto src_img = GetResourceAsImage("images/mandrill_128.png");
     const char magic_str[] = "magic signature";
 
     const SkSerialImageProc sprocs[] = {
diff --git a/tests/StreamTest.cpp b/tests/StreamTest.cpp
index 26fea37..5112312 100644
--- a/tests/StreamTest.cpp
+++ b/tests/StreamTest.cpp
@@ -287,7 +287,7 @@
     test_fully_peekable_stream(reporter, &memStream, memStream.getLength());
 
     // Test an arbitrary file stream. file streams do not support peeking.
-    SkFILEStream fileStream(GetResourcePath("baby_tux.webp").c_str());
+    SkFILEStream fileStream(GetResourcePath("images/baby_tux.webp").c_str());
     REPORTER_ASSERT(reporter, fileStream.isValid());
     if (!fileStream.isValid()) {
         return;
diff --git a/tests/YUVTest.cpp b/tests/YUVTest.cpp
index 825e2d1..3862952 100644
--- a/tests/YUVTest.cpp
+++ b/tests/YUVTest.cpp
@@ -81,46 +81,46 @@
     sizes[0].set(128, 128);
     sizes[1].set(64, 64);
     sizes[2].set(64, 64);
-    codec_yuv(r, "color_wheel.jpg", sizes);
+    codec_yuv(r, "images/color_wheel.jpg", sizes);
 
     // H2V2
     sizes[0].set(512, 512);
     sizes[1].set(256, 256);
     sizes[2].set(256, 256);
-    codec_yuv(r, "mandrill_512_q075.jpg", sizes);
+    codec_yuv(r, "images/mandrill_512_q075.jpg", sizes);
 
     // H1V1
     sizes[1].set(512, 512);
     sizes[2].set(512, 512);
-    codec_yuv(r, "mandrill_h1v1.jpg", sizes);
+    codec_yuv(r, "images/mandrill_h1v1.jpg", sizes);
 
     // H2V1
     sizes[1].set(256, 512);
     sizes[2].set(256, 512);
-    codec_yuv(r, "mandrill_h2v1.jpg", sizes);
+    codec_yuv(r, "images/mandrill_h2v1.jpg", sizes);
 
     // Non-power of two dimensions
     sizes[0].set(439, 154);
     sizes[1].set(220, 77);
     sizes[2].set(220, 77);
-    codec_yuv(r, "cropped_mandrill.jpg", sizes);
+    codec_yuv(r, "images/cropped_mandrill.jpg", sizes);
 
     sizes[0].set(8, 8);
     sizes[1].set(4, 4);
     sizes[2].set(4, 4);
-    codec_yuv(r, "randPixels.jpg", sizes);
+    codec_yuv(r, "images/randPixels.jpg", sizes);
 
     // Progressive images
     sizes[0].set(512, 512);
     sizes[1].set(512, 512);
     sizes[2].set(512, 512);
-    codec_yuv(r, "brickwork-texture.jpg", sizes);
-    codec_yuv(r, "brickwork_normal-map.jpg", sizes);
+    codec_yuv(r, "images/brickwork-texture.jpg", sizes);
+    codec_yuv(r, "images/brickwork_normal-map.jpg", sizes);
 
     // A CMYK encoded image should fail.
-    codec_yuv(r, "CMYK.jpg", nullptr);
+    codec_yuv(r, "images/CMYK.jpg", nullptr);
     // A grayscale encoded image should fail.
-    codec_yuv(r, "grayscale.jpg", nullptr);
+    codec_yuv(r, "images/grayscale.jpg", nullptr);
     // A PNG should fail.
-    codec_yuv(r, "arrow.png", nullptr);
+    codec_yuv(r, "images/arrow.png", nullptr);
 }
diff --git a/tests/skbug6389.cpp b/tests/skbug6389.cpp
index f525158..42112a7 100644
--- a/tests/skbug6389.cpp
+++ b/tests/skbug6389.cpp
@@ -17,7 +17,7 @@
     SkPaint p;
     p.setMaskFilter(SkBlurMaskFilter::Make(SkBlurStyle::kNormal_SkBlurStyle, 5,
                                            SkBlurMaskFilter::kHighQuality_BlurFlag));
-    p.setImageFilter(SkImageSource::Make(GetResourceAsImage("mandrill_512.png"), {0, 0, 0, 0},
+    p.setImageFilter(SkImageSource::Make(GetResourceAsImage("images/mandrill_512.png"), {0, 0, 0, 0},
                                          {0, 0, 0, 0}, (SkFilterQuality)0));
     s->getCanvas()->drawPaint(p);
 }
diff --git a/tools/colorspaceinfo.cpp b/tools/colorspaceinfo.cpp
index 0002e96..be23f8d 100644
--- a/tools/colorspaceinfo.cpp
+++ b/tools/colorspaceinfo.cpp
@@ -523,7 +523,7 @@
 
         // Load a graph of the CIE XYZ color gamut.
         SkBitmap gamutCanvasBitmap;
-        if (!GetResourceAsBitmap("gamut.png", &gamutCanvasBitmap)) {
+        if (!GetResourceAsBitmap("images/gamut.png", &gamutCanvasBitmap)) {
             SkDebugf("Program failure (could not load gamut.png).\n");
             return -1;
         }
diff --git a/tools/create_flutter_test_images.cpp b/tools/create_flutter_test_images.cpp
index 2fa39f6..dbcd25e 100644
--- a/tools/create_flutter_test_images.cpp
+++ b/tools/create_flutter_test_images.cpp
@@ -36,7 +36,7 @@
 }
 
 int main(int argc, char** argv) {
-    sk_sp<SkImage> image = GetResourceAsImage("flutter_logo.jpg");
+    sk_sp<SkImage> image = GetResourceAsImage("images/flutter_logo.jpg");
     if (!image) {
         SkDebugf("Cannot find flutter_logo.jpg in resources.\n");
         return 1;
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 1cba520..ddef1da 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -533,7 +533,7 @@
     fImGuiFontPaint.setFilterQuality(kLow_SkFilterQuality);
     io.Fonts->TexID = &fImGuiFontPaint;
 
-    auto gamutImage = GetResourceAsImage("gamut.png");
+    auto gamutImage = GetResourceAsImage("images/gamut.png");
     if (gamutImage) {
         fImGuiGamutPaint.setShader(gamutImage->makeShader());
     }