-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Another attempt at fixing 1014 for 6.8
- Loading branch information
1 parent
2611e10
commit 037e5d9
Showing
1 changed file
with
34 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,16 +8,16 @@ Add XRGB8888 emulation helper for devices that only support BGR888. | |
|
||
Signed-off-by: Kerem Karabay <[email protected]> | ||
--- | ||
drivers/gpu/drm/drm_format_helper.c | 53 ++++++++++++++ | ||
.../gpu/drm/tests/drm_format_helper_test.c | 69 +++++++++++++++++++ | ||
drivers/gpu/drm/drm_format_helper.c | 54 +++++++++++++ | ||
.../gpu/drm/tests/drm_format_helper_test.c | 81 +++++++++++++++++++ | ||
include/drm/drm_format_helper.h | 3 + | ||
3 files changed, 125 insertions(+) | ||
3 files changed, 138 insertions(+) | ||
|
||
diff --git a/drivers/gpu/drm/drm_format_helper.c b/drivers/gpu/drm/drm_format_helper.c | ||
index b1be458ed4dda5..24836384554a47 100644 | ||
index b1be458ed..28c0e76a1 100644 | ||
--- a/drivers/gpu/drm/drm_format_helper.c | ||
+++ b/drivers/gpu/drm/drm_format_helper.c | ||
@@ -702,6 +702,58 @@ void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pi | ||
@@ -702,6 +702,57 @@ void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pi | ||
} | ||
EXPORT_SYMBOL(drm_fb_xrgb8888_to_rgb888); | ||
|
||
|
@@ -61,22 +61,21 @@ index b1be458ed4dda5..24836384554a47 100644 | |
+ */ | ||
+void drm_fb_xrgb8888_to_bgr888(struct iosys_map *dst, const unsigned int *dst_pitch, | ||
+ const struct iosys_map *src, const struct drm_framebuffer *fb, | ||
+ const struct drm_rect *clip, | ||
+ struct drm_format_conv_state *state) | ||
+ const struct drm_rect *clip, struct drm_format_conv_state *state) | ||
+{ | ||
+ static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = { | ||
+ 3, | ||
+ }; | ||
+ | ||
+ drm_fb_xfrm(dst, dst_pitch, dst_pixsize, src, fb, clip, false, | ||
+ state, drm_fb_xrgb8888_to_bgr888_line); | ||
+ drm_fb_xfrm(dst, dst_pitch, dst_pixsize, src, fb, clip, false, state, | ||
+ drm_fb_xrgb8888_to_bgr888_line); | ||
+} | ||
+EXPORT_SYMBOL(drm_fb_xrgb8888_to_bgr888); | ||
+ | ||
static void drm_fb_xrgb8888_to_argb8888_line(void *dbuf, const void *sbuf, unsigned int pixels) | ||
{ | ||
__le32 *dbuf32 = dbuf; | ||
@@ -1035,6 +1087,9 @@ int drm_fb_blit(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t d | ||
@@ -1035,6 +1086,9 @@ int drm_fb_blit(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t d | ||
} else if (dst_format == DRM_FORMAT_RGB888) { | ||
drm_fb_xrgb8888_to_rgb888(dst, dst_pitch, src, fb, clip, state); | ||
return 0; | ||
|
@@ -87,10 +86,10 @@ index b1be458ed4dda5..24836384554a47 100644 | |
drm_fb_xrgb8888_to_argb8888(dst, dst_pitch, src, fb, clip, state); | ||
return 0; | ||
diff --git a/drivers/gpu/drm/tests/drm_format_helper_test.c b/drivers/gpu/drm/tests/drm_format_helper_test.c | ||
index 474bb7a1c..dff7fabd9 100644 | ||
index 08992636e..e54f0f6e7 100644 | ||
--- a/drivers/gpu/drm/tests/drm_format_helper_test.c | ||
+++ b/drivers/gpu/drm/tests/drm_format_helper_test.c | ||
@@ -52,6 +52,11 @@ struct convert_to_rgb888_result { | ||
@@ -60,6 +60,11 @@ struct convert_to_rgb888_result { | ||
const u8 expected[TEST_BUF_SIZE]; | ||
}; | ||
|
||
|
@@ -102,15 +101,15 @@ index 474bb7a1c..dff7fabd9 100644 | |
struct convert_to_argb8888_result { | ||
unsigned int dst_pitch; | ||
const u32 expected[TEST_BUF_SIZE]; | ||
@@ -84,6 +89,7 @@ struct convert_xrgb8888_case { | ||
@@ -107,6 +112,7 @@ struct convert_xrgb8888_case { | ||
struct convert_to_argb1555_result argb1555_result; | ||
struct convert_to_rgba5551_result rgba5551_result; | ||
struct convert_to_rgb888_result rgb888_result; | ||
+ struct convert_to_bgr888_result bgr888_result; | ||
struct convert_to_argb8888_result argb8888_result; | ||
struct convert_to_xrgb2101010_result xrgb2101010_result; | ||
struct convert_to_argb2101010_result argb2101010_result; | ||
@@ -125,6 +131,10 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = { | ||
@@ -151,6 +157,10 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = { | ||
.dst_pitch = TEST_USE_DEFAULT_PITCH, | ||
.expected = { 0x00, 0x00, 0xFF }, | ||
}, | ||
|
@@ -121,7 +120,7 @@ index 474bb7a1c..dff7fabd9 100644 | |
.argb8888_result = { | ||
.dst_pitch = TEST_USE_DEFAULT_PITCH, | ||
.expected = { 0xFFFF0000 }, | ||
@@ -179,6 +189,10 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = { | ||
@@ -217,6 +227,10 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = { | ||
.dst_pitch = TEST_USE_DEFAULT_PITCH, | ||
.expected = { 0x00, 0x00, 0xFF }, | ||
}, | ||
|
@@ -132,7 +131,7 @@ index 474bb7a1c..dff7fabd9 100644 | |
.argb8888_result = { | ||
.dst_pitch = TEST_USE_DEFAULT_PITCH, | ||
.expected = { 0xFFFF0000 }, | ||
@@ -280,6 +294,15 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = { | ||
@@ -330,6 +344,15 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = { | ||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, | ||
}, | ||
}, | ||
|
@@ -148,7 +147,7 @@ index 474bb7a1c..dff7fabd9 100644 | |
.argb8888_result = { | ||
.dst_pitch = TEST_USE_DEFAULT_PITCH, | ||
.expected = { | ||
@@ -391,6 +414,17 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = { | ||
@@ -468,6 +491,17 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = { | ||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
}, | ||
}, | ||
|
@@ -166,7 +165,7 @@ index 474bb7a1c..dff7fabd9 100644 | |
.argb8888_result = { | ||
.dst_pitch = 20, | ||
.expected = { | ||
@@ -727,6 +761,40 @@ static void drm_test_fb_xrgb8888_to_rgb888(struct kunit *test) | ||
@@ -914,6 +948,52 @@ static void drm_test_fb_xrgb8888_to_rgb888(struct kunit *test) | ||
KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size); | ||
} | ||
|
||
|
@@ -200,14 +199,26 @@ index 474bb7a1c..dff7fabd9 100644 | |
+ * BGR888 expected results are already in little-endian | ||
+ * order, so there's no need to convert the test output. | ||
+ */ | ||
+ drm_fb_xrgb8888_to_bgr888(&dst, &result->dst_pitch, &src, &fb, ¶ms->clip); | ||
+ drm_fb_xrgb8888_to_bgr888(&dst, &result->dst_pitch, &src, &fb, ¶ms->clip, | ||
+ &fmtcnv_state, true); | ||
+ KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size); | ||
+ | ||
+ buf = dst.vaddr; /* restore original value of buf */ | ||
+ memset(buf, 0, dst_size); | ||
+ | ||
+ int blit_result = 0; | ||
+ | ||
+ blit_result = drm_fb_blit(&dst, dst_pitch, DRM_FORMAT_BGR888, &src, &fb, ¶ms->clip, | ||
+ &fmtcnv_state); | ||
+ | ||
+ KUNIT_EXPECT_FALSE(test, blit_result); | ||
+ KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size); | ||
+} | ||
+ | ||
static void drm_test_fb_xrgb8888_to_argb8888(struct kunit *test) | ||
{ | ||
const struct convert_xrgb8888_case *params = test->param_value; | ||
@@ -858,6 +926,7 @@ static struct kunit_case drm_format_helper_test_cases[] = { | ||
@@ -1851,6 +1931,7 @@ static struct kunit_case drm_format_helper_test_cases[] = { | ||
KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb1555, convert_xrgb8888_gen_params), | ||
KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgba5551, convert_xrgb8888_gen_params), | ||
KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgb888, convert_xrgb8888_gen_params), | ||
|
@@ -216,10 +227,10 @@ index 474bb7a1c..dff7fabd9 100644 | |
KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_xrgb2101010, convert_xrgb8888_gen_params), | ||
KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb2101010, convert_xrgb8888_gen_params), | ||
diff --git a/include/drm/drm_format_helper.h b/include/drm/drm_format_helper.h | ||
index 291deb094..7fc553318 100644 | ||
index f13b34e0b..b53cf85ca 100644 | ||
--- a/include/drm/drm_format_helper.h | ||
+++ b/include/drm/drm_format_helper.h | ||
@@ -42,6 +42,9 @@ void drm_fb_xrgb8888_to_rgba5551(struct iosys_map *dst, const unsigned int *dst_ | ||
@@ -95,6 +95,9 @@ void drm_fb_xrgb8888_to_rgba5551(struct iosys_map *dst, const unsigned int *dst_ | ||
void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pitch, | ||
const struct iosys_map *src, const struct drm_framebuffer *fb, | ||
const struct drm_rect *clip, struct drm_format_conv_state *state); | ||
|
@@ -230,5 +241,5 @@ index 291deb094..7fc553318 100644 | |
const struct iosys_map *src, const struct drm_framebuffer *fb, | ||
const struct drm_rect *clip, struct drm_format_conv_state *state); | ||
-- | ||
2.42.0 | ||
2.34.1 | ||
|