gallium: replace DRM_CONF_THROTTLE with PIPE_CAP_MAX_FRAMES_IN_FLIGHT
authorMarek Olšák <marek.olsak@amd.com>
Mon, 22 Apr 2019 21:35:27 +0000 (17:35 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 24 Apr 2019 01:20:24 +0000 (21:20 -0400)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
23 files changed:
src/gallium/auxiliary/target-helpers/drm_helper.h
src/gallium/auxiliary/util/u_screen.c
src/gallium/docs/source/screen.rst
src/gallium/drivers/freedreno/freedreno_screen.c
src/gallium/drivers/i915/i915_screen.c
src/gallium/drivers/nouveau/nv30/nv30_screen.c
src/gallium/drivers/nouveau/nv50/nv50_screen.c
src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
src/gallium/drivers/r300/r300_screen.c
src/gallium/drivers/r600/r600_pipe.c
src/gallium/drivers/radeonsi/si_get.c
src/gallium/drivers/svga/svga_screen.c
src/gallium/include/pipe/p_defines.h
src/gallium/include/state_tracker/drm_driver.h
src/gallium/state_trackers/dri/dri2.c
src/gallium/targets/d3dadapter9/drm.c
src/gallium/targets/pipe-loader/pipe_i915.c
src/gallium/targets/pipe-loader/pipe_msm.c
src/gallium/targets/pipe-loader/pipe_nouveau.c
src/gallium/targets/pipe-loader/pipe_r300.c
src/gallium/targets/pipe-loader/pipe_r600.c
src/gallium/targets/pipe-loader/pipe_radeonsi.c
src/gallium/targets/pipe-loader/pipe_vmwgfx.c

index b98e17c3d9a5c58c7c54c6725fc27d91b9f49b1d..a89c47e4861032655512d933de1c14f491038043 100644 (file)
@@ -7,11 +7,6 @@
 #include "state_tracker/drm_driver.h"
 #include "util/xmlpool.h"
 
-static const struct drm_conf_ret throttle_ret = {
-   .type = DRM_CONF_INT,
-   .val.val_int = 2,
-};
-
 static const struct drm_conf_ret share_fd_ret = {
    .type = DRM_CONF_BOOL,
    .val.val_bool = true,
@@ -21,8 +16,6 @@ const struct drm_conf_ret *
 pipe_default_configuration_query(enum drm_conf conf)
 {
    switch (conf) {
-   case DRM_CONF_THROTTLE:
-      return &throttle_ret;
    case DRM_CONF_SHARE_FD:
       return &share_fd_ret;
    default:
index cbafcaa3e5fc29d2136e4f305688f47a0f5f9fb4..46aae302520cdec507b3d9b7c5c589c635a55a65 100644 (file)
@@ -352,6 +352,7 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
       return 0;
 
    case PIPE_CAP_COMPUTE_SHADER_DERIVATIVES:
+   case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
       return 0;
 
    default:
index fcb16aebe2d6cc12b50713dbcf2ab556473118b0..6018411631217f6fc2d057f9e33e5c7592ce781c 100644 (file)
@@ -516,6 +516,9 @@ The integer capabilities:
   A driver might rely on the input mapping that was defined with the original
   GLSL code.
 * ``PIPE_CAP_IMAGE_LOAD_FORMATTED``: True if a format for image loads does not need to be specified in the shader IR
+* ``PIPE_CAP_MAX_FRAMES_IN_FLIGHT``: Maximum number of frames that state
+  trackers should allow to be in flight before throttling pipe_context
+  execution. 0 = throttling is disabled.
 
 .. _pipe_capf:
 
index fdf2639071807d08bc88c6336410f3a7d553e318..38a459e73aae8cd31376f98b8864e205b36b7ac5 100644 (file)
@@ -380,6 +380,9 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
                /* only a4xx, requires new enough kernel so we know max_freq: */
                return (screen->max_freq > 0) && (is_a4xx(screen) || is_a5xx(screen) || is_a6xx(screen));
 
+       case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
+               return 2;
+
        case PIPE_CAP_VENDOR_ID:
                return 0x5143;
        case PIPE_CAP_DEVICE_ID:
index 78707c66e624d9c09c6c34934f1007d5e47131f2..62ff5f89198e72c3811f02e05bf793f309a8bcd6 100644 (file)
@@ -341,6 +341,9 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
    case PIPE_CAP_PROGRAMMABLE_SAMPLE_LOCATIONS:
       return 0;
 
+   case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
+      return 2;
+
    case PIPE_CAP_MAX_GS_INVOCATIONS:
       return 32;
 
index b5dc033bd2d43a34fd8e7ae3651a7cd0a3b11bcf..e6e7fac2a44af31e8dfae46a0b360fbe8d923312 100644 (file)
@@ -249,6 +249,9 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_IMAGE_LOAD_FORMATTED:
       return 0;
 
+   case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
+      return 2;
+
    case PIPE_CAP_MAX_GS_INVOCATIONS:
       return 32;
    case PIPE_CAP_MAX_SHADER_BUFFER_SIZE:
index 423b6af3b64bbfaec1239e181cd9352f84de6379..c439f507c1d9d38ddc38a22be56a9c950575dfad 100644 (file)
@@ -321,6 +321,9 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_IMAGE_LOAD_FORMATTED:
       return 0;
 
+   case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
+      return 2;
+
    case PIPE_CAP_VENDOR_ID:
       return 0x10de;
    case PIPE_CAP_DEVICE_ID: {
index 79224ac99a75aa958c325d824a2d347d1be9e051..930da324794da1b4eaa000a2a86565a51eefc910 100644 (file)
@@ -355,6 +355,9 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_IMAGE_LOAD_FORMATTED:
       return 0;
 
+   case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
+      return 2;
+
    case PIPE_CAP_VENDOR_ID:
       return 0x10de;
    case PIPE_CAP_DEVICE_ID: {
index be0b475e5efc987f5c39a4ff1c9cb904d4ac15ff..6b77d18843312936f357883952984825d0071883 100644 (file)
@@ -307,6 +307,9 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
         case PIPE_CAP_MAX_VARYINGS:
             return 10;
 
+        case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
+            return 2;
+
         case PIPE_CAP_VENDOR_ID:
                 return 0x1002;
         case PIPE_CAP_DEVICE_ID:
index 41a878ab9d249615adbdc2b16e73504a2a09ac09..9cef7c79cbd723d76b7cc65a6149782b88fbfea0 100644 (file)
@@ -398,6 +398,9 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
        case PIPE_CAP_MAX_COMBINED_SHADER_BUFFERS:
                return 8;
 
+       case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
+               return 2;
+
        /* Unsupported features. */
        case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
        case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
index eddb383c2707f7344b1972da74dc306b4b1dbde1..a6d558a735f25d6bdcaa1511db18d46454c56307 100644 (file)
@@ -306,6 +306,9 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
        case PIPE_CAP_ENDIANNESS:
                return PIPE_ENDIAN_LITTLE;
 
+       case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
+               return 2;
+
        case PIPE_CAP_VENDOR_ID:
                return ATI_VENDOR_ID;
        case PIPE_CAP_DEVICE_ID:
index 6cb5a14f5b0b5e630b2b92968e1b00deecc916ff..ceaf388c7db7d7a6c91b10ae37e262d2b4a28177 100644 (file)
@@ -479,6 +479,8 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
    case PIPE_CAP_PACKED_UNIFORMS:
    case PIPE_CAP_PROGRAMMABLE_SAMPLE_LOCATIONS:
       return 0;
+   case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
+      return 2;
    case PIPE_CAP_MAX_GS_INVOCATIONS:
       return 32;
    case PIPE_CAP_MAX_SHADER_BUFFER_SIZE:
index 304c3dcb2bbc3c7d05182d199409f1e3e1b842a8..1760fc2f1017795a0dfcb456a300e2406c8a17f7 100644 (file)
@@ -880,6 +880,7 @@ enum pipe_cap
    PIPE_CAP_COMPUTE_SHADER_DERIVATIVES,
    PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS,
    PIPE_CAP_IMAGE_LOAD_FORMATTED,
+   PIPE_CAP_MAX_FRAMES_IN_FLIGHT,
 };
 
 /**
index 19cd19f26e13d42ded0d96b65d6d4fe0796902be..8094734b67268845135d420b6569c645d8f24ee5 100644 (file)
@@ -15,8 +15,6 @@ struct pipe_resource;
  * Configuration queries.
  */
 enum drm_conf {
-   /* How many frames to allow before throttling. Or -1 to indicate any number */
-   DRM_CONF_THROTTLE, /* DRM_CONF_INT. */
    /* Can this driver, running on this kernel, import and export dma-buf fds? */
    DRM_CONF_SHARE_FD, /* DRM_CONF_BOOL. */
    /* XML string describing the available config options. */
@@ -28,7 +26,6 @@ enum drm_conf {
  * Type of configuration answer
  */
 enum drm_conf_type {
-   DRM_CONF_INT,
    DRM_CONF_BOOL,
    DRM_CONF_FLOAT,
    DRM_CONF_POINTER
@@ -40,7 +37,6 @@ enum drm_conf_type {
 struct drm_conf_ret {
    enum drm_conf_type type;
    union {
-      int val_int;
       bool val_bool;
       float val_float;
       void *val_pointer;
index 7edef415505abccc54afcc7f5724bbc000257ca2..2a4a6ac6dad5dbe6d80772a6eb335409883693ad 100644 (file)
@@ -1908,7 +1908,6 @@ dri2_init_screen(__DRIscreen * sPriv)
    const __DRIconfig **configs;
    struct dri_screen *screen;
    struct pipe_screen *pscreen = NULL;
-   const struct drm_conf_ret *throttle_ret;
    const struct drm_conf_ret *dmabuf_ret;
 
    screen = CALLOC_STRUCT(dri_screen);
@@ -1930,11 +1929,10 @@ dri2_init_screen(__DRIscreen * sPriv)
    if (!pscreen)
        goto release_pipe;
 
-   throttle_ret = pipe_loader_configuration(screen->dev, DRM_CONF_THROTTLE);
-   dmabuf_ret = pipe_loader_configuration(screen->dev, DRM_CONF_SHARE_FD);
+   screen->default_throttle_frames =
+      pscreen->get_param(pscreen, PIPE_CAP_MAX_FRAMES_IN_FLIGHT);
 
-   if (throttle_ret && throttle_ret->val.val_int > 0)
-      screen->default_throttle_frames = throttle_ret->val.val_int;
+   dmabuf_ret = pipe_loader_configuration(screen->dev, DRM_CONF_SHARE_FD);
 
    if (pscreen->resource_create_with_modifiers)
       dri2ImageExtension.createImageWithModifiers =
index 1d01d4a067cc9d1e5631033211a5bcdb265a5ff0..1c8460f7f033cddb81d5af5ef7fff3e29dd2eaa9 100644 (file)
@@ -205,7 +205,6 @@ drm_create_adapter( int fd,
     struct d3dadapter9drm_context *ctx = CALLOC_STRUCT(d3dadapter9drm_context);
     HRESULT hr;
     bool different_device;
-    const struct drm_conf_ret *throttle_ret = NULL;
     const struct drm_conf_ret *dmabuf_ret = NULL;
     driOptionCache defaultInitOptions;
     driOptionCache userInitOptions;
@@ -237,7 +236,6 @@ drm_create_adapter( int fd,
     }
 
     dmabuf_ret = pipe_loader_configuration(ctx->dev, DRM_CONF_SHARE_FD);
-    throttle_ret = pipe_loader_configuration(ctx->dev, DRM_CONF_THROTTLE);
     if (!dmabuf_ret || !dmabuf_ret->val.val_bool) {
         ERR("The driver is not capable of dma-buf sharing."
             "Abandon to load nine state tracker\n");
@@ -245,11 +243,9 @@ drm_create_adapter( int fd,
         return D3DERR_DRIVERINTERNALERROR;
     }
 
-    if (throttle_ret && throttle_ret->val.val_int != -1) {
-        ctx->base.throttling = TRUE;
-        ctx->base.throttling_value = throttle_ret->val.val_int;
-    } else
-        ctx->base.throttling = FALSE;
+    ctx->base.throttling_value =
+       ctx->base.hal->get_param(ctx->base.hal, PIPE_CAP_MAX_FRAMES_IN_FLIGHT);
+    ctx->base.throttling = ctx->base.throttling_value > 0;
 
     driParseOptionInfo(&defaultInitOptions, __driConfigOptionsNine);
     driParseConfigFiles(&userInitOptions, &defaultInitOptions, 0, "nine", NULL);
index 8524a1dc58f9b9de4f9595a07e5176f7b348de94..841990e0e23a35f19123a600283b4b59b8b7a444 100644 (file)
@@ -23,11 +23,6 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return screen;
 }
 
-static const struct drm_conf_ret throttle_ret = {
-   .type = DRM_CONF_INT,
-   .val.val_int = 2,
-};
-
 static const struct drm_conf_ret share_fd_ret = {
    .type = DRM_CONF_BOOL,
    .val.val_bool = true,
@@ -36,8 +31,6 @@ static const struct drm_conf_ret share_fd_ret = {
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
    switch (conf) {
-   case DRM_CONF_THROTTLE:
-      return &throttle_ret;
    case DRM_CONF_SHARE_FD:
       return &share_fd_ret;
    default:
index 683332579fea8ec03493c4066fa06a4fb731d8f5..eb38be586aca2ab9a56ea5777ebbaae3e00033f1 100644 (file)
@@ -17,11 +17,6 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return screen;
 }
 
-static const struct drm_conf_ret throttle_ret = {
-   .type = DRM_CONF_INT,
-   .val.val_int = 2,
-};
-
 static const struct drm_conf_ret share_fd_ret = {
    .type = DRM_CONF_BOOL,
    .val.val_bool = true,
@@ -30,8 +25,6 @@ static const struct drm_conf_ret share_fd_ret = {
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
    switch (conf) {
-   case DRM_CONF_THROTTLE:
-      return &throttle_ret;
    case DRM_CONF_SHARE_FD:
       return &share_fd_ret;
    default:
index d95aeda529be0fc5dca77ae6761a5f00669fc77f..ead5a18273850af4182f8a6552035a5fa4f7efa6 100644 (file)
@@ -17,11 +17,6 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return screen;
 }
 
-static const struct drm_conf_ret throttle_ret = {
-   .type = DRM_CONF_INT,
-   .val.val_int = 2,
-};
-
 static const struct drm_conf_ret share_fd_ret = {
    .type = DRM_CONF_BOOL,
    .val.val_bool = true,
@@ -30,8 +25,6 @@ static const struct drm_conf_ret share_fd_ret = {
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
    switch (conf) {
-   case DRM_CONF_THROTTLE:
-      return &throttle_ret;
    case DRM_CONF_SHARE_FD:
       return &share_fd_ret;
    default:
index 8aa1ba8735ca8040d0bf3811aad64b12e5025f89..2a03580223d41159f567ad730d3920b9cdd374fa 100644 (file)
@@ -13,11 +13,6 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return sws ? debug_screen_wrap(sws->screen) : NULL;
 }
 
-static const struct drm_conf_ret throttle_ret = {
-   .type = DRM_CONF_INT,
-   .val.val_int = 2,
-};
-
 static const struct drm_conf_ret share_fd_ret = {
    .type = DRM_CONF_BOOL,
    .val.val_bool = true,
@@ -26,8 +21,6 @@ static const struct drm_conf_ret share_fd_ret = {
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
    switch (conf) {
-   case DRM_CONF_THROTTLE:
-      return &throttle_ret;
    case DRM_CONF_SHARE_FD:
       return &share_fd_ret;
    default:
index a6051aa225851c87f83a5e4f280630d955bbfd20..a35e0a6179fa1ff9a72ed66991b21a40320f5b60 100644 (file)
@@ -13,11 +13,6 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return rw ? debug_screen_wrap(rw->screen) : NULL;
 }
 
-static const struct drm_conf_ret throttle_ret = {
-   .type = DRM_CONF_INT,
-   .val.val_int = 2,
-};
-
 static const struct drm_conf_ret share_fd_ret = {
    .type = DRM_CONF_BOOL,
    .val.val_bool = true,
@@ -26,8 +21,6 @@ static const struct drm_conf_ret share_fd_ret = {
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
    switch (conf) {
-   case DRM_CONF_THROTTLE:
-      return &throttle_ret;
    case DRM_CONF_SHARE_FD:
       return &share_fd_ret;
    default:
index 2defc521b248da1521d303de82851554e1bded61..947c9e1990e0bd2c203953ef92e19417e23ddff4 100644 (file)
@@ -20,11 +20,6 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return rw ? debug_screen_wrap(rw->screen) : NULL;
 }
 
-static const struct drm_conf_ret throttle_ret = {
-   .type = DRM_CONF_INT,
-   .val.val_int = 2,
-};
-
 static const struct drm_conf_ret share_fd_ret = {
    .type = DRM_CONF_BOOL,
    .val.val_bool = true,
@@ -39,8 +34,6 @@ static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
    };
 
    switch (conf) {
-   case DRM_CONF_THROTTLE:
-      return &throttle_ret;
    case DRM_CONF_SHARE_FD:
       return &share_fd_ret;
    case DRM_CONF_XML_OPTIONS:
index 68bf92ce82e55b4bdd729a0d3fad5315685bbe92..3b8c748594cb654c77cf76d7f550e494fa178b1c 100644 (file)
@@ -23,11 +23,6 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return screen;
 }
 
-static const struct drm_conf_ret throttle_ret = {
-   .type = DRM_CONF_INT,
-   .val.val_int = 2,
-};
-
 static const struct drm_conf_ret share_fd_ret = {
    .type = DRM_CONF_BOOL,
    .val.val_bool = true,
@@ -36,8 +31,6 @@ static const struct drm_conf_ret share_fd_ret = {
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
    switch (conf) {
-   case DRM_CONF_THROTTLE:
-      return &throttle_ret;
    case DRM_CONF_SHARE_FD:
       return &share_fd_ret;
    default: