[Mesa-dev] [PATCH 13/21] i965/fs: Combine assign_constant_locations and move_uniform_array_access_to_pull_constants
Jason Ekstrand
jason at jlekstrand.net
Mon Aug 24 19:52:03 PDT 2015
On Mon, Aug 24, 2015 at 4:48 PM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> On Wednesday, August 19, 2015 10:45:48 PM Jason Ekstrand wrote:
>> The comment above move_uniform_array_access_to_pull_constants was
>> completely bogus because it has nothing to do with lowering instructions.
>> Instead, it's assiging locations of pull constants.
>> ---
>> src/mesa/drivers/dri/i965/brw_fs.cpp | 38 +++++++++---------------------------
>> src/mesa/drivers/dri/i965/brw_fs.h | 1 -
>> 2 files changed, 9 insertions(+), 30 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
>> index 68bcbd0..b4003e0 100644
>> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
>> @@ -1766,21 +1766,19 @@ fs_visitor::compact_virtual_grfs()
>> return progress;
>> }
>>
>> -/*
>> - * Implements array access of uniforms by inserting a
>> - * PULL_CONSTANT_LOAD instruction.
>> +/**
>> + * Assign UNIFORM file registers to either push constants or pull constants.
>> *
>> - * Unlike temporary GRF array access (where we don't support it due to
>> - * the difficulty of doing relative addressing on instruction
>> - * destinations), we could potentially do array access of uniforms
>> - * that were loaded in GRF space as push constants. In real-world
>> - * usage we've seen, though, the arrays being used are always larger
>> - * than we could load as push constants, so just always move all
>> - * uniform array access out to a pull constant buffer.
>
> It might make sense to leave a comment (for now) saying that we demote
> all indirect addressing of uniform arrays to pull constants.
>
> (Admittedly, that comment would be removed at the end of your patch
> series, but depending how much we merge now vs. later...*shrug*)
Sure. I can throw one in.
>> + * We allow a fragment shader to have more than the specified minimum
>> + * maximum number of fragment shader uniform components (64). If
>> + * there are too many of these, they'd fill up all of register space.
>> + * So, this will push some of them out to the pull constant buffer and
>> + * update the program to load them.
>> */
>> void
>> -fs_visitor::move_uniform_array_access_to_pull_constants()
>> +fs_visitor::assign_constant_locations()
>> {
>> + /* Only the first compile (SIMD8 mode) gets to decide on locations. */
>> if (dispatch_width != 8)
>> return;
>>
>> @@ -1817,23 +1815,6 @@ fs_visitor::move_uniform_array_access_to_pull_constants()
>> }
>> }
>> }
>> -}
>> -
>> -/**
>> - * Assign UNIFORM file registers to either push constants or pull constants.
>> - *
>> - * We allow a fragment shader to have more than the specified minimum
>> - * maximum number of fragment shader uniform components (64). If
>> - * there are too many of these, they'd fill up all of register space.
>> - * So, this will push some of them out to the pull constant buffer and
>> - * update the program to load them.
>> - */
>> -void
>> -fs_visitor::assign_constant_locations()
>> -{
>> - /* Only the first compile (SIMD8 mode) gets to decide on locations. */
>> - if (dispatch_width != 8)
>> - return;
>>
>> /* Find which UNIFORM registers are still in use. */
>> bool is_live[uniforms];
>> @@ -4805,7 +4786,6 @@ fs_visitor::optimize()
>>
>> split_virtual_grfs();
>>
>> - move_uniform_array_access_to_pull_constants();
>> assign_constant_locations();
>> demote_pull_constants();
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
>> index 6bca762..31f39fe 100644
>> --- a/src/mesa/drivers/dri/i965/brw_fs.h
>> +++ b/src/mesa/drivers/dri/i965/brw_fs.h
>> @@ -146,7 +146,6 @@ public:
>> void spill_reg(int spill_reg);
>> void split_virtual_grfs();
>> bool compact_virtual_grfs();
>> - void move_uniform_array_access_to_pull_constants();
>> void assign_constant_locations();
>> void demote_pull_constants();
>> void invalidate_live_intervals();
>>
More information about the mesa-dev
mailing list