diff options
author | Tapani Pälli <[email protected]> | 2019-09-02 13:02:33 +0300 |
---|---|---|
committer | Tapani Pälli <[email protected]> | 2019-09-25 08:28:45 +0300 |
commit | f4d9169204e1b83f87779a350dd23501a085b36c (patch) | |
tree | 09a179e7dad5b8c87ac9f4d34ca30d1cb6c57a66 /src/gallium/drivers/iris | |
parent | 88f909eb37dc3867f9d2fcd44ccee6dceaac071c (diff) |
iris: disable aux on first get_param if not created with aux
This moves the fix from commit 361f3d19f1f to happen in get_param
(used now instead of get_handle by st/dri). This fixes artifacts
seen with Xorg and CCS_E.
Fixes: fc12fd05f56 "iris: Implement pipe_screen::resource_get_param"
Signed-off-by: Tapani Pälli <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/gallium/drivers/iris')
-rw-r--r-- | src/gallium/drivers/iris/iris_resource.c | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/gallium/drivers/iris/iris_resource.c b/src/gallium/drivers/iris/iris_resource.c index 7394825f637..72b68a28815 100644 --- a/src/gallium/drivers/iris/iris_resource.c +++ b/src/gallium/drivers/iris/iris_resource.c @@ -1023,6 +1023,25 @@ iris_flush_resource(struct pipe_context *ctx, struct pipe_resource *resource) mod ? mod->supports_clear_color : false); } +static void +iris_resource_disable_aux_on_first_query(struct pipe_resource *resource, + unsigned usage) +{ + struct iris_resource *res = (struct iris_resource *)resource; + bool mod_with_aux = + res->mod_info && res->mod_info->aux_usage != ISL_AUX_USAGE_NONE; + + /* Disable aux usage if explicit flush not set and this is the first time + * we are dealing with this resource and the resource was not created with + * a modifier with aux. + */ + if (!mod_with_aux && + (!(usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH) && res->aux.usage != 0) && + p_atomic_read(&resource->reference.count) == 1) { + iris_resource_disable_aux(res); + } +} + static bool iris_resource_get_param(struct pipe_screen *screen, struct pipe_context *context, @@ -1041,6 +1060,8 @@ iris_resource_get_param(struct pipe_screen *screen, bool result; unsigned handle; + iris_resource_disable_aux_on_first_query(resource, handle_usage); + switch (param) { case PIPE_RESOURCE_PARAM_NPLANES: if (mod_with_aux) { @@ -1091,15 +1112,7 @@ iris_resource_get_handle(struct pipe_screen *pscreen, bool mod_with_aux = res->mod_info && res->mod_info->aux_usage != ISL_AUX_USAGE_NONE; - /* Disable aux usage if explicit flush not set and this is the first time - * we are dealing with this resource and the resource was not created with - * a modifier with aux. - */ - if (!mod_with_aux && - (!(usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH) && res->aux.usage != 0) && - p_atomic_read(&resource->reference.count) == 1) { - iris_resource_disable_aux(res); - } + iris_resource_disable_aux_on_first_query(resource, usage); struct iris_bo *bo; if (mod_with_aux && whandle->plane > 0) { |