intel/compiler: Add a flag for pull constant support
The Vulkan driver does not support pull constants. It simply limits things such that we can always push everything. Previously, we were determining whether or not to push things based on whether or not the prog_data::pull_param array is non-null. This is rather hackish and about to stop working. Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
9df64b5666
commit
4efd079aba
|
@ -105,6 +105,12 @@ struct brw_compiler {
|
|||
* Base Address? (If not, it's a normal GPU address.)
|
||||
*/
|
||||
bool constant_buffer_0_is_relative;
|
||||
|
||||
/**
|
||||
* Whether or not the driver supports pull constants. If not, the compiler
|
||||
* will attempt to push everything.
|
||||
*/
|
||||
bool supports_pull_constants;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1889,6 +1889,7 @@ set_push_pull_constant_loc(unsigned uniform, int *chunk_start,
|
|||
unsigned *num_pull_constants,
|
||||
const unsigned max_push_components,
|
||||
const unsigned max_chunk_size,
|
||||
bool allow_pull_constants,
|
||||
struct brw_stage_prog_data *stage_prog_data)
|
||||
{
|
||||
/* This is the first live uniform in the chunk */
|
||||
|
@ -1918,7 +1919,7 @@ set_push_pull_constant_loc(unsigned uniform, int *chunk_start,
|
|||
* Vulkan driver, push constants are explicitly exposed via the API
|
||||
* so we push everything. In GL, we only push small arrays.
|
||||
*/
|
||||
if (stage_prog_data->pull_param == NULL ||
|
||||
if (!allow_pull_constants ||
|
||||
(*num_push_constants + chunk_size <= max_push_components &&
|
||||
chunk_size <= max_chunk_size)) {
|
||||
assert(*num_push_constants + chunk_size <= max_push_components);
|
||||
|
@ -2054,6 +2055,7 @@ fs_visitor::assign_constant_locations()
|
|||
push_constant_loc, pull_constant_loc,
|
||||
&num_push_constants, &num_pull_constants,
|
||||
max_push_components, max_chunk_size,
|
||||
compiler->supports_pull_constants,
|
||||
stage_prog_data);
|
||||
|
||||
}
|
||||
|
@ -2074,6 +2076,7 @@ fs_visitor::assign_constant_locations()
|
|||
push_constant_loc, pull_constant_loc,
|
||||
&num_push_constants, &num_pull_constants,
|
||||
max_push_components, max_chunk_size,
|
||||
compiler->supports_pull_constants,
|
||||
stage_prog_data);
|
||||
}
|
||||
|
||||
|
|
|
@ -1777,7 +1777,7 @@ vec4_visitor::move_uniform_array_access_to_pull_constants()
|
|||
/* The vulkan dirver doesn't support pull constants other than UBOs so
|
||||
* everything has to be pushed regardless.
|
||||
*/
|
||||
if (stage_prog_data->pull_param == NULL) {
|
||||
if (!compiler->supports_pull_constants) {
|
||||
split_uniform_registers();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -390,6 +390,7 @@ anv_physical_device_init(struct anv_physical_device *device,
|
|||
}
|
||||
device->compiler->shader_debug_log = compiler_debug_log;
|
||||
device->compiler->shader_perf_log = compiler_perf_log;
|
||||
device->compiler->supports_pull_constants = false;
|
||||
|
||||
isl_device_init(&device->isl_dev, &device->info, swizzled);
|
||||
|
||||
|
|
|
@ -2511,6 +2511,7 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen)
|
|||
screen->compiler->shader_debug_log = shader_debug_log_mesa;
|
||||
screen->compiler->shader_perf_log = shader_perf_log_mesa;
|
||||
screen->compiler->constant_buffer_0_is_relative = devinfo->gen < 8;
|
||||
screen->compiler->supports_pull_constants = true;
|
||||
|
||||
screen->has_exec_fence =
|
||||
intel_get_boolean(screen, I915_PARAM_HAS_EXEC_FENCE);
|
||||
|
|
Loading…
Reference in New Issue