Merge pull request #2597 from kwagyeman/kwabena/better_transpose_gpu_fix
Some checks are pending
🔎 Check Code Formatting / formatting-check (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_GIGA) (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_NANO_33_BLE_SENSE) (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_NANO_RP2040_CONNECT) (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_NICLA_VISION) (push) Waiting to run
🔥 Firmware Build / build-firmware (ARDUINO_PORTENTA_H7) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV2) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV3) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV4) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV4P) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMVPT) (push) Waiting to run
🔥 Firmware Build / build-firmware (OPENMV_RT1060) (push) Waiting to run
🔥 Firmware Build / code-size-report (push) Blocked by required conditions
🔥 Firmware Build / stable-release (push) Blocked by required conditions
🔥 Firmware Build / development-release (push) Blocked by required conditions

ports/stm32: Move CLUT to DMA memory section.
This commit is contained in:
Ibrahim Abdelkader 2025-02-08 09:43:03 +02:00 committed by GitHub
commit 62984c8342
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -132,6 +132,8 @@ int omv_gpu_draw_image(image_t *src_img,
return 0;
}
#else
uint32_t OMV_ATTR_SECTION(OMV_ATTR_ALIGNED(CLUT_BUFFER[256], 32), ".dma_buffer");
int omv_gpu_draw_image(image_t *src_img,
rectangle_t *src_rect,
image_t *dst_img,
@ -204,45 +206,41 @@ int omv_gpu_draw_image(image_t *src_img,
if (src_img->pixfmt == PIXFORMAT_GRAYSCALE) {
dma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_L8;
dma2d.LayerCfg[1].AlphaMode = DMA2D_COMBINE_ALPHA;
uint32_t *clut = fb_alloc(256 * sizeof(uint32_t), FB_ALLOC_CACHE_ALIGN);
if (!alpha_palette) {
if (!color_palette) {
for (int i = 0; i < 256; i++) {
clut[i] = (0xff << 24) | COLOR_Y_TO_RGB888(i);
CLUT_BUFFER[i] = (0xff << 24) | COLOR_Y_TO_RGB888(i);
}
} else {
for (int i = 0; i < 256; i++) {
int pixel = color_palette[i];
clut[i] = (0xff << 24) |
(COLOR_RGB565_TO_R8(pixel) << 16) |
(COLOR_RGB565_TO_G8(pixel) << 8) |
COLOR_RGB565_TO_B8(pixel);
CLUT_BUFFER[i] = (0xff << 24) |
(COLOR_RGB565_TO_R8(pixel) << 16) |
(COLOR_RGB565_TO_G8(pixel) << 8) |
COLOR_RGB565_TO_B8(pixel);
}
}
} else {
if (!color_palette) {
for (int i = 0; i < 256; i++) {
clut[i] = (alpha_palette[i] << 24) | COLOR_Y_TO_RGB888(i);
CLUT_BUFFER[i] = (alpha_palette[i] << 24) | COLOR_Y_TO_RGB888(i);
}
} else {
for (int i = 0; i < 256; i++) {
int pixel = color_palette[i];
clut[i] = (alpha_palette[i] << 24) |
(COLOR_RGB565_TO_R8(pixel) << 16) |
(COLOR_RGB565_TO_G8(pixel) << 8) |
COLOR_RGB565_TO_B8(pixel);
CLUT_BUFFER[i] = (alpha_palette[i] << 24) |
(COLOR_RGB565_TO_R8(pixel) << 16) |
(COLOR_RGB565_TO_G8(pixel) << 8) |
COLOR_RGB565_TO_B8(pixel);
}
}
}
DMA2D_CLUTCfgTypeDef cfg;
cfg.pCLUT = clut;
cfg.pCLUT = CLUT_BUFFER;
cfg.CLUTColorMode = DMA2D_CCM_ARGB8888;
cfg.Size = 255;
#if __DCACHE_PRESENT
SCB_CleanDCache_by_Addr(clut, 256 * sizeof(uint32_t));
#endif
HAL_DMA2D_CLUTLoad(&dma2d, cfg, 1);
HAL_DMA2D_PollForTransfer(&dma2d, 1000);
} else {
@ -330,10 +328,6 @@ int omv_gpu_draw_image(image_t *src_img,
HAL_DMA2D_DeInit(&dma2d);
if (src_img->pixfmt == PIXFORMAT_GRAYSCALE) {
fb_free(); // clut
}
OMV_PROFILE_PRINT();
return 0;
}