mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-12 10:26:12 +00:00
kms_frontbuffer_tracking: add options for setting the shared fb X/Y
I'm using this to debug some aspects of the GTT tracking. While at it, do a small rename and fix the ASCII art. Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
This commit is contained in:
parent
5e68ad9f82
commit
c1fe951b8a
@ -238,6 +238,8 @@ struct {
|
|||||||
int step;
|
int step;
|
||||||
int only_feature;
|
int only_feature;
|
||||||
int only_pipes;
|
int only_pipes;
|
||||||
|
int shared_fb_x_offset;
|
||||||
|
int shared_fb_y_offset;
|
||||||
} opt = {
|
} opt = {
|
||||||
.check_status = true,
|
.check_status = true,
|
||||||
.check_crc = true,
|
.check_crc = true,
|
||||||
@ -249,6 +251,8 @@ struct {
|
|||||||
.step = 0,
|
.step = 0,
|
||||||
.only_feature = FEATURE_COUNT,
|
.only_feature = FEATURE_COUNT,
|
||||||
.only_pipes = PIPE_COUNT,
|
.only_pipes = PIPE_COUNT,
|
||||||
|
.shared_fb_x_offset = 500,
|
||||||
|
.shared_fb_y_offset = 500,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct modeset_params {
|
struct modeset_params {
|
||||||
@ -582,16 +586,15 @@ static void fill_fb(struct igt_fb *fb, enum color ecolor)
|
|||||||
igt_draw_fill_fb(drm.fd, fb, pick_color(fb, ecolor));
|
igt_draw_fill_fb(drm.fd, fb, pick_color(fb, ecolor));
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BIGFB_X_OFFSET 500
|
|
||||||
#define BIGFB_Y_OFFSET 500
|
|
||||||
/*
|
/*
|
||||||
* This is how the prim, scnd and offscreen FBs should be positioned inside the
|
* This is how the prim, scnd and offscreen FBs should be positioned inside the
|
||||||
* big FB. The prim buffer starts at the X and Y offsets defined above, then
|
* shared FB. The prim buffer starts at the X and Y offsets defined by
|
||||||
* scnd starts at the same X pixel offset, right after prim ends on the Y axis,
|
* opt.shared_fb_{x,y}_offset, then scnd starts at the same X pixel offset,
|
||||||
* then the offscreen fb starts after scnd ends. Just like the picture:
|
* right after prim ends on the Y axis, then the offscreen fb starts after scnd
|
||||||
|
* ends. Just like the picture:
|
||||||
*
|
*
|
||||||
* +----------------------+--+
|
* +-------------------------+
|
||||||
* | big | |
|
* | shared fb |
|
||||||
* | +------------------+ |
|
* | +------------------+ |
|
||||||
* | | prim | |
|
* | | prim | |
|
||||||
* | | | |
|
* | | | |
|
||||||
@ -610,7 +613,7 @@ static void fill_fb(struct igt_fb *fb, enum color ecolor)
|
|||||||
* We do it vertically instead of the more common horizontal case in order to
|
* We do it vertically instead of the more common horizontal case in order to
|
||||||
* avoid super huge strides not supported by FBC.
|
* avoid super huge strides not supported by FBC.
|
||||||
*/
|
*/
|
||||||
static void create_big_fb(enum pixel_format format)
|
static void create_shared_fb(enum pixel_format format)
|
||||||
{
|
{
|
||||||
int prim_w, prim_h, scnd_w, scnd_h, offs_w, offs_h, big_w, big_h;
|
int prim_w, prim_h, scnd_w, scnd_h, offs_w, offs_h, big_w, big_h;
|
||||||
struct screen_fbs *s = &fbs[format];
|
struct screen_fbs *s = &fbs[format];
|
||||||
@ -633,9 +636,9 @@ static void create_big_fb(enum pixel_format format)
|
|||||||
big_w = scnd_w;
|
big_w = scnd_w;
|
||||||
if (offs_w > big_w)
|
if (offs_w > big_w)
|
||||||
big_w = offs_w;
|
big_w = offs_w;
|
||||||
big_w += BIGFB_X_OFFSET;
|
big_w += opt.shared_fb_x_offset;
|
||||||
|
|
||||||
big_h = prim_h + scnd_h + offs_h + BIGFB_Y_OFFSET;
|
big_h = prim_h + scnd_h + offs_h + opt.shared_fb_y_offset;
|
||||||
|
|
||||||
create_fb(format, big_w, big_h, LOCAL_I915_FORMAT_MOD_X_TILED,
|
create_fb(format, big_w, big_h, LOCAL_I915_FORMAT_MOD_X_TILED,
|
||||||
PLANE_PRI, &s->big);
|
PLANE_PRI, &s->big);
|
||||||
@ -663,7 +666,7 @@ static void create_fbs(enum pixel_format format)
|
|||||||
create_fb(format, offscreen_fb.w, offscreen_fb.h,
|
create_fb(format, offscreen_fb.w, offscreen_fb.h,
|
||||||
LOCAL_I915_FORMAT_MOD_X_TILED, PLANE_PRI, &s->offscreen);
|
LOCAL_I915_FORMAT_MOD_X_TILED, PLANE_PRI, &s->offscreen);
|
||||||
|
|
||||||
create_big_fb(format);
|
create_shared_fb(format);
|
||||||
|
|
||||||
if (!scnd_mode_params.connector_id)
|
if (!scnd_mode_params.connector_id)
|
||||||
return;
|
return;
|
||||||
@ -1695,16 +1698,16 @@ static void set_crtc_fbs(const struct test_mode *t)
|
|||||||
offscreen_fb.y = 0;
|
offscreen_fb.y = 0;
|
||||||
break;
|
break;
|
||||||
case FBS_SHARED:
|
case FBS_SHARED:
|
||||||
/* Please see the comment at the top of create_big_fb(). */
|
/* Please see the comment at the top of create_shared_fb(). */
|
||||||
prim_mode_params.fb.fb = &s->big;
|
prim_mode_params.fb.fb = &s->big;
|
||||||
scnd_mode_params.fb.fb = &s->big;
|
scnd_mode_params.fb.fb = &s->big;
|
||||||
offscreen_fb.fb = &s->big;
|
offscreen_fb.fb = &s->big;
|
||||||
|
|
||||||
prim_mode_params.fb.x = BIGFB_X_OFFSET;
|
prim_mode_params.fb.x = opt.shared_fb_x_offset;
|
||||||
scnd_mode_params.fb.x = BIGFB_X_OFFSET;
|
scnd_mode_params.fb.x = opt.shared_fb_x_offset;
|
||||||
offscreen_fb.x = BIGFB_X_OFFSET;
|
offscreen_fb.x = opt.shared_fb_x_offset;
|
||||||
|
|
||||||
prim_mode_params.fb.y = BIGFB_Y_OFFSET;
|
prim_mode_params.fb.y = opt.shared_fb_y_offset;
|
||||||
scnd_mode_params.fb.y = prim_mode_params.fb.y +
|
scnd_mode_params.fb.y = prim_mode_params.fb.y +
|
||||||
prim_mode_params.fb.h;
|
prim_mode_params.fb.h;
|
||||||
offscreen_fb.y = scnd_mode_params.fb.y + scnd_mode_params.fb.h;
|
offscreen_fb.y = scnd_mode_params.fb.y + scnd_mode_params.fb.h;
|
||||||
@ -2716,6 +2719,16 @@ static int opt_handler(int option, int option_index, void *data)
|
|||||||
igt_assert(opt.only_feature == FEATURE_COUNT);
|
igt_assert(opt.only_feature == FEATURE_COUNT);
|
||||||
opt.only_feature = FEATURE_PSR;
|
opt.only_feature = FEATURE_PSR;
|
||||||
break;
|
break;
|
||||||
|
case 'x':
|
||||||
|
errno = 0;
|
||||||
|
opt.shared_fb_x_offset = strtol(optarg, NULL, 0);
|
||||||
|
igt_assert(errno == 0);
|
||||||
|
break;
|
||||||
|
case 'y':
|
||||||
|
errno = 0;
|
||||||
|
opt.shared_fb_y_offset = strtol(optarg, NULL, 0);
|
||||||
|
igt_assert(errno == 0);
|
||||||
|
break;
|
||||||
case '1':
|
case '1':
|
||||||
igt_assert(opt.only_pipes == PIPE_COUNT);
|
igt_assert(opt.only_pipes == PIPE_COUNT);
|
||||||
opt.only_pipes = PIPE_SINGLE;
|
opt.only_pipes = PIPE_SINGLE;
|
||||||
@ -2743,6 +2756,8 @@ const char *help_str =
|
|||||||
" --nop-only Only run the \"nop\" feature subtests\n"
|
" --nop-only Only run the \"nop\" feature subtests\n"
|
||||||
" --fbc-only Only run the \"fbc\" feature subtests\n"
|
" --fbc-only Only run the \"fbc\" feature subtests\n"
|
||||||
" --psr-only Only run the \"psr\" feature subtests\n"
|
" --psr-only Only run the \"psr\" feature subtests\n"
|
||||||
|
" --shared-fb-x offset Use 'offset' as the X offset for the shared FB\n"
|
||||||
|
" --shared-fb-y offset Use 'offset' as the Y offset for the shared FB\n"
|
||||||
" --1p-only Only run subtests that use 1 pipe\n"
|
" --1p-only Only run subtests that use 1 pipe\n"
|
||||||
" --2p-only Only run subtests that use 2 pipes\n";
|
" --2p-only Only run subtests that use 2 pipes\n";
|
||||||
|
|
||||||
@ -2868,6 +2883,8 @@ int main(int argc, char *argv[])
|
|||||||
{ "nop-only", 0, 0, 'n'},
|
{ "nop-only", 0, 0, 'n'},
|
||||||
{ "fbc-only", 0, 0, 'f'},
|
{ "fbc-only", 0, 0, 'f'},
|
||||||
{ "psr-only", 0, 0, 'p'},
|
{ "psr-only", 0, 0, 'p'},
|
||||||
|
{ "shared-fb-x", 1, 0, 'x'},
|
||||||
|
{ "shared-fb-y", 1, 0, 'y'},
|
||||||
{ "1p-only", 0, 0, '1'},
|
{ "1p-only", 0, 0, '1'},
|
||||||
{ "2p-only", 0, 0, '2'},
|
{ "2p-only", 0, 0, '2'},
|
||||||
{ 0, 0, 0, 0 }
|
{ 0, 0, 0, 0 }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user