Module: Mesa Branch: staging/23.3 Commit: 22224035debb8e4e79b4c04893ecaa150e0d40d0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=22224035debb8e4e79b4c04893ecaa150e0d40d0
Author: Tapani Pälli <tapani.pa...@intel.com> Date: Tue Dec 12 10:30:07 2023 +0200 anv/hasvk/drirc: change anv_assume_full_subgroups to have subgroup size Cc: mesa-stable Signed-off-by: Tapani Pälli <tapani.pa...@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26385> (cherry picked from commit 7ff8f79a8841d439af449fac8b382070a7b76c9f) --- .pick_status.json | 2 +- src/intel/vulkan/anv_device.c | 4 ++-- src/intel/vulkan/anv_pipeline.c | 8 +++++--- src/intel/vulkan/anv_private.h | 2 +- src/intel/vulkan_hasvk/anv_device.c | 4 ++-- src/intel/vulkan_hasvk/anv_pipeline.c | 6 ++++-- src/intel/vulkan_hasvk/anv_private.h | 2 +- src/util/00-mesa-defaults.conf | 4 ++-- src/util/driconf.h | 4 ++-- 9 files changed, 20 insertions(+), 16 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 07a2d0fd05a..736954d6081 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -594,7 +594,7 @@ "description": "anv/hasvk/drirc: change anv_assume_full_subgroups to have subgroup size", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index e887e9e2f78..cf3876deb2f 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -77,7 +77,7 @@ static const driOptionDescription anv_dri_options[] = { DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false) DRI_CONF_VK_KHR_PRESENT_WAIT(false) DRI_CONF_VK_XWAYLAND_WAIT_READY(true) - DRI_CONF_ANV_ASSUME_FULL_SUBGROUPS(false) + DRI_CONF_ANV_ASSUME_FULL_SUBGROUPS(0) DRI_CONF_ANV_DISABLE_FCV(false) DRI_CONF_ANV_SAMPLE_MASK_OUT_OPENGL_BEHAVIOUR(false) DRI_CONF_ANV_FP64_WORKAROUND_ENABLED(false) @@ -1580,7 +1580,7 @@ anv_init_dri_options(struct anv_instance *instance) instance->vk.app_info.engine_version); instance->assume_full_subgroups = - driQueryOptionb(&instance->dri_options, "anv_assume_full_subgroups"); + driQueryOptioni(&instance->dri_options, "anv_assume_full_subgroups"); instance->limit_trig_input_range = driQueryOptionb(&instance->dri_options, "limit_trig_input_range"); instance->sample_mask_out_opengl_behaviour = diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index 52f97aec312..e7f0d873e9b 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -771,7 +771,7 @@ anv_pipeline_hash_graphics(struct anv_graphics_base_pipeline *pipeline, } if (stages[MESA_SHADER_MESH].info || stages[MESA_SHADER_TASK].info) { - const bool afs = device->physical->instance->assume_full_subgroups; + const uint8_t afs = device->physical->instance->assume_full_subgroups; _mesa_sha1_update(&ctx, &afs, sizeof(afs)); } @@ -789,7 +789,7 @@ anv_pipeline_hash_compute(struct anv_compute_pipeline *pipeline, anv_pipeline_hash_common(&ctx, &pipeline->base); - const bool afs = device->physical->instance->assume_full_subgroups; + const uint8_t afs = device->physical->instance->assume_full_subgroups; _mesa_sha1_update(&ctx, &afs, sizeof(afs)); _mesa_sha1_update(&ctx, stage->shader_sha1, @@ -1991,7 +1991,9 @@ anv_fixup_subgroup_size(struct anv_device *device, struct shader_info *info) * a size. */ if (info->subgroup_size == SUBGROUP_SIZE_FULL_SUBGROUPS) - info->subgroup_size = BRW_SUBGROUP_SIZE; + info->subgroup_size = + device->physical->instance->assume_full_subgroups != 0 ? + device->physical->instance->assume_full_subgroups : BRW_SUBGROUP_SIZE; } static void diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index d963e6e5177..e0e35a5264a 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1022,7 +1022,7 @@ struct anv_instance { /** * Workarounds for game bugs. */ - bool assume_full_subgroups; + uint8_t assume_full_subgroups; bool limit_trig_input_range; bool sample_mask_out_opengl_behaviour; bool fp64_workaround_enabled; diff --git a/src/intel/vulkan_hasvk/anv_device.c b/src/intel/vulkan_hasvk/anv_device.c index caa57a7f106..6935232c86b 100644 --- a/src/intel/vulkan_hasvk/anv_device.c +++ b/src/intel/vulkan_hasvk/anv_device.c @@ -67,7 +67,7 @@ static const driOptionDescription anv_dri_options[] = { DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0) DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false) DRI_CONF_VK_XWAYLAND_WAIT_READY(true) - DRI_CONF_ANV_ASSUME_FULL_SUBGROUPS(false) + DRI_CONF_ANV_ASSUME_FULL_SUBGROUPS(0) DRI_CONF_ANV_SAMPLE_MASK_OUT_OPENGL_BEHAVIOUR(false) DRI_CONF_NO_16BIT(false) DRI_CONF_SECTION_END @@ -1324,7 +1324,7 @@ anv_init_dri_options(struct anv_instance *instance) instance->vk.app_info.engine_version); instance->assume_full_subgroups = - driQueryOptionb(&instance->dri_options, "anv_assume_full_subgroups"); + driQueryOptioni(&instance->dri_options, "anv_assume_full_subgroups"); instance->limit_trig_input_range = driQueryOptionb(&instance->dri_options, "limit_trig_input_range"); instance->sample_mask_out_opengl_behaviour = diff --git a/src/intel/vulkan_hasvk/anv_pipeline.c b/src/intel/vulkan_hasvk/anv_pipeline.c index 6df9c3f79ff..3e0671d992a 100644 --- a/src/intel/vulkan_hasvk/anv_pipeline.c +++ b/src/intel/vulkan_hasvk/anv_pipeline.c @@ -472,7 +472,7 @@ anv_pipeline_hash_compute(struct anv_compute_pipeline *pipeline, const bool rba = device->vk.enabled_features.robustBufferAccess; _mesa_sha1_update(&ctx, &rba, sizeof(rba)); - const bool afs = device->physical->instance->assume_full_subgroups; + const uint8_t afs = device->physical->instance->assume_full_subgroups; _mesa_sha1_update(&ctx, &afs, sizeof(afs)); _mesa_sha1_update(&ctx, stage->shader_sha1, @@ -1581,7 +1581,9 @@ anv_pipeline_compile_cs(struct anv_compute_pipeline *pipeline, * a size. */ if (stage.nir->info.subgroup_size == SUBGROUP_SIZE_FULL_SUBGROUPS) - stage.nir->info.subgroup_size = BRW_SUBGROUP_SIZE; + stage.nir->info.subgroup_size = + device->physical->instance->assume_full_subgroups != 0 ? + device->physical->instance->assume_full_subgroups : BRW_SUBGROUP_SIZE; stage.num_stats = 1; diff --git a/src/intel/vulkan_hasvk/anv_private.h b/src/intel/vulkan_hasvk/anv_private.h index aec64f5cecc..6cff8e33a18 100644 --- a/src/intel/vulkan_hasvk/anv_private.h +++ b/src/intel/vulkan_hasvk/anv_private.h @@ -944,7 +944,7 @@ struct anv_instance { /** * Workarounds for game bugs. */ - bool assume_full_subgroups; + uint8_t assume_full_subgroups; bool limit_trig_input_range; bool sample_mask_out_opengl_behaviour; float lower_depth_range_rate; diff --git a/src/util/00-mesa-defaults.conf b/src/util/00-mesa-defaults.conf index f5123e77dab..79baae36208 100644 --- a/src/util/00-mesa-defaults.conf +++ b/src/util/00-mesa-defaults.conf @@ -1114,10 +1114,10 @@ TODO: document the other workarounds. </device> <device driver="anv"> <application name="Aperture Desk Job" executable="deskjob"> - <option name="anv_assume_full_subgroups" value="true" /> + <option name="anv_assume_full_subgroups" value="32" /> </application> <application name="DOOMEternal" executable="DOOMEternalx64vk.exe"> - <option name="anv_assume_full_subgroups" value="true" /> + <option name="anv_assume_full_subgroups" value="32" /> <option name="fp64_workaround_enabled" value="true" /> </application> <application name="Wolfenstein: Youngblood(x64vk)" executable="Youngblood_x64vk.exe"> diff --git a/src/util/driconf.h b/src/util/driconf.h index c79f969d517..c3e6c7f5212 100644 --- a/src/util/driconf.h +++ b/src/util/driconf.h @@ -693,8 +693,8 @@ */ #define DRI_CONF_ANV_ASSUME_FULL_SUBGROUPS(def) \ - DRI_CONF_OPT_B(anv_assume_full_subgroups, def, \ - "Allow assuming full subgroups requirement even when it's not specified explicitly") + DRI_CONF_OPT_I(anv_assume_full_subgroups, def, 0, 32, \ + "Allow assuming full subgroups requirement even when it's not specified explicitly and set the given size") #define DRI_CONF_ANV_SAMPLE_MASK_OUT_OPENGL_BEHAVIOUR(def) \ DRI_CONF_OPT_B(anv_sample_mask_out_opengl_behaviour, def, \