1
0
mirror of https://github.com/fumiama/gozel.git synced 2026-06-05 00:10:24 +08:00
Files
gozel/examples/image_scale/README.md
fumiama 6522bde914 feat(examples): add image_scale (#7)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-29 17:11:22 +08:00

2.4 KiB
Raw Blame History

Image Scaling — GPU Bilinear Resize with Sampler

Downscale an image on the GPU using Level Zero's native image and sampler objects. The sampler performs hardware-accelerated bilinear interpolation, producing a high-quality resized image in a single kernel dispatch.

What It Does

  1. Decodes an embedded WebP image (1272 × 855) and converts it to RGBA
  2. Computes the target dimensions (capped at 512 px on the longest side)
  3. Discovers a GPU device and prints its basic & compute properties
  4. Creates a SPIR-V module from an OpenCL C kernel compiled offline
  5. Uses zeKernelSuggestGroupSize to pick an optimal 2-D workgroup size
  6. Allocates host/device memory and two Level Zero image objects (input & output)
  7. Creates a sampler with clamp addressing and bilinear filtering
  8. Executes three command lists via a command queue:
    • Pre: copy host pixels → device buffer → input image
    • Compute: launch the scale kernel
    • Post: copy output image → device buffer → host memory
  9. Writes the result to small.png

Run

go run main.go

Result

Before Scaling (1272 × 855) After Scaling (512 × 344)
input output

Console Output

===============   Image Information   ===============
Image Format:                webp
Image W/H ratio:             1.4877
Image Size:                  1272 x 855
Scale to Image Size:         512 x 344
Scale ratio:                 0.4025
Image Data Size:             144802 bytes
===============  Device Basic Properties  ===============
Running on device: ID = 32103 , Name = Intel(R) Graphics @ 0.00 GHz.
=============== Device Compute Properties ===============
Max Group Size (X, Y, Z):    (1024, 1024, 1024)
Max Group Count (X, Y, Z):   (4294967295, 4294967295, 4294967295)
Max Total Group Size:        1024
Max Shared Local Memory:     65536
Subgroup Sizes:              [8 16 32]
=============== Computation Configuration ===============
Group Size (X, Y, Z):        (64, 4, 1)
Group Count (X, Y, Z):       (8, 86, 1)
Total Elements (srcN, dstN): (4350240, 704512)
Source Buffer Size:          4248.28 KiB
Dest Buffer Size:            688.00 KiB
===============    Calculation Results    ===============
GPU Execution Time:          1.579000 ms
GPU Throughput:              2.76 GiB/s
Test Passed!!!