anv/hasvk/drirc: change anv_assume_full_subgroups to have subgroup size

Cc: mesa-stable
Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26385>
This commit is contained in:
Tapani Pälli 2023-12-12 10:30:07 +02:00 committed by Marge Bot
parent 1cf1b9d741
commit 7ff8f79a88
8 changed files with 19 additions and 15 deletions

View file

@ -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)
@ -2454,7 +2454,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 =

View file

@ -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,
@ -1992,7 +1992,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

View file

@ -1153,7 +1153,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;

View file

@ -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_ANV_HASVK_OVERRIDE_API_VERSION(false)
@ -1325,7 +1325,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 =

View file

@ -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;

View file

@ -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;

View file

@ -1126,13 +1126,13 @@ 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="Brawlhalla" executable="BrawlhallaGame.exe">
<option name="hasvk_report_vk_1_3_version" value="true" />
</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">

View file

@ -718,8 +718,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, \