[Mesa-dev] [PATCH 05/14] glsl_to_tgsi: reduce the size of glsl_to_tgsi_instruction using bitfields

Marek Olšák maraeo at gmail.com
Mon Oct 17 19:23:49 UTC 2016


On Mon, Oct 17, 2016 at 4:44 PM, Roland Scheidegger <sroland at vmware.com> wrote:
> Am 17.10.2016 um 15:39 schrieb Marek Olšák:
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> sizeof(glsl_to_tgsi_instruction): 464 -> 416
>> ---
>>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 33 +++++++++++++++---------------
>>  1 file changed, 16 insertions(+), 17 deletions(-)
>>
>> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> index 78d9409..b3654fe 100644
>> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> @@ -263,42 +263,41 @@ st_dst_reg::st_dst_reg(st_src_reg reg)
>>     this->index2D = reg.index2D;
>>     this->reladdr2 = reg.reladdr2;
>>     this->has_index2 = reg.has_index2;
>>     this->array_id = reg.array_id;
>>  }
>>
>>  class glsl_to_tgsi_instruction : public exec_node {
>>  public:
>>     DECLARE_RALLOC_CXX_OPERATORS(glsl_to_tgsi_instruction)
>>
>> -   unsigned op;
>>     st_dst_reg dst[2];
>>     st_src_reg src[4];
>> -   /** Pointer to the ir source this tree came from for debugging */
>> -   ir_instruction *ir;
>> -   GLboolean cond_update;
>> -   bool saturate;
>> -   bool is_64bit_expanded;
>>     st_src_reg sampler; /**< sampler register */
>> -   int sampler_base;
>> -   int sampler_array_size; /**< 1-based size of sampler array, 1 if not array */
>> -   int tex_target; /**< One of TEXTURE_*_INDEX */
>> -   glsl_base_type tex_type;
>> -   GLboolean tex_shadow;
>> -   unsigned image_format;
>> -
>>     st_src_reg tex_offsets[MAX_GLSL_TEXTURE_OFFSET];
>> -   unsigned tex_offset_num_offset;
>> -   int dead_mask; /**< Used in dead code elimination */
>> -
>>     st_src_reg buffer; /**< buffer register */
>> -   unsigned buffer_access; /**< buffer access type */
>> +
>> +   /** Pointer to the ir source this tree came from for debugging */
>> +   ir_instruction *ir;
>> +
>> +   unsigned op:8; /**< TGSI opcode */
> Maybe should throw in some static assert somewhere that TGSI_OPCODE_LAST
> is <= 255.
> Given how close we're to the limit I wouldn't quite bet on it staying 8
> bits forever (though of course it would need some changes elsewhere too).

I'm adding this:

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index c5cd382..4ad5e2c 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -663,6 +663,9 @@ glsl_to_tgsi_visitor::emit_asm(ir_instruction *ir,
unsigned op,
    }
    assert(num_reladdr == 0);

+   /* inst->op has only 8 bits. */
+   STATIC_ASSERT(TGSI_OPCODE_LAST <= 255);
+
    inst->op = op;
    inst->info = tgsi_get_opcode_info(op);
    inst->dst[0] = dst;

Marek


More information about the mesa-dev mailing list