On Tue, Feb 16, 2016 at 4:53 PM, Nicolai Hähnle <nhaeh...@gmail.com> wrote:
> On 15.02.2016 18:59, Marek Olšák wrote:
>>
>> From: Marek Olšák <marek.ol...@amd.com>
>>
>> ---
>>   src/gallium/drivers/radeonsi/si_shader.c | 35
>> ++++++++++++++++++++++++--------
>>   src/gallium/drivers/radeonsi/si_shader.h |  9 ++++++++
>>   2 files changed, 36 insertions(+), 8 deletions(-)
>>
>> diff --git a/src/gallium/drivers/radeonsi/si_shader.c
>> b/src/gallium/drivers/radeonsi/si_shader.c
>> index dbb9217..a6a0984 100644
>> --- a/src/gallium/drivers/radeonsi/si_shader.c
>> +++ b/src/gallium/drivers/radeonsi/si_shader.c
>> @@ -4036,26 +4036,45 @@ void si_shader_apply_scratch_relocs(struct
>> si_context *sctx,
>>
>>   int si_shader_binary_upload(struct si_screen *sscreen, struct si_shader
>> *shader)
>>   {
>> -       const struct radeon_shader_binary *binary = &shader->binary;
>> -       unsigned code_size = binary->code_size + binary->rodata_size;
>> +       const struct radeon_shader_binary *prolog =
>> +               shader->prolog ? &shader->prolog->binary : NULL;
>> +       const struct radeon_shader_binary *epilog =
>> +               shader->epilog ? &shader->epilog->binary : NULL;
>> +       const struct radeon_shader_binary *mainb = &shader->binary;
>> +       unsigned bo_size =
>> +               (prolog ? prolog->code_size : 0) +
>> +               mainb->code_size +
>> +               (epilog ? epilog->code_size : mainb->rodata_size);
>>         unsigned char *ptr;
>>
>> +       assert(!prolog || !prolog->rodata_size);
>> +       assert((!prolog && !epilog) || !mainb->rodata_size);
>> +       assert(!epilog || !epilog->rodata_size);
>
>
> Strictly speaking it should be possible for main to have rodata if there is
> a prolog but no epilog, right? In any case, patches 1-9 are

Yes. The thing is, the epilog is always present and can't be removed.
If it's empty, it must contain s_endpgm at least.

On the other hand, empty prologs aren't even compiled and
shader->prolog is NULL in that case.

We could support rodata for main if the compiler reserved some free
space for the epilog between the code and rodata.

Marek
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to