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());
     }
