[Mesa-dev] [PATCH 11/21] glsl: Store ir_variable::ir_type in 8 bits instead of 32
Ian Romanick
idr at freedesktop.org
Wed May 28 12:39:03 PDT 2014
On 05/28/2014 12:17 PM, Ian Romanick wrote:
> On 05/27/2014 08:28 PM, Matt Turner wrote:
>> On Tue, May 27, 2014 at 7:49 PM, Ian Romanick <idr at freedesktop.org> wrote:
>>> From: Ian Romanick <ian.d.romanick at intel.com>
>>>
>>> No change in the peak ir_variable memory usage in a trimmed apitrace of
>>> dota2 on 64-bit.
>>>
>>> No change in the peak ir_variable memory usage in a trimmed apitrace of
>>> dota2 on 32-bit.
>>>
>>> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
>>> ---
>>> src/glsl/ir.h | 5 +++--
>>> 1 file changed, 3 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/src/glsl/ir.h b/src/glsl/ir.h
>>> index 7faee74..bc02f6e 100644
>>> --- a/src/glsl/ir.h
>>> +++ b/src/glsl/ir.h
>>> @@ -92,12 +92,13 @@ enum ir_node_type {
>>> */
>>> class ir_instruction : public exec_node {
>>> private:
>>> - enum ir_node_type ir_type;
>>> + uint8_t ir_type;
>>>
>>> public:
>>> inline enum ir_node_type get_ir_type() const
>>> {
>>> - return this->ir_type;
>>> + STATIC_ASSERT(ir_type_max < 256);
>>> + return (enum ir_node_type) this->ir_type;
>>> }
>>>
>>> /**
>>> --
>>> 1.8.1.4
>>
>> Instead of doing this, you can mark the enum type with the PACKED
>> attribute. I did this in a similar change in i965 already. See
>> http://lists.freedesktop.org/archives/mesa-dev/2014-February/054643.html
>>
>> This way we still get enum type checking and warnings out of switch
>> statements and such.
>
> Hmm... that would mean that patch 10 wouldn't strictly be necessary.
> The disadvantage is that the next patch would need (right?) some changes
> for MSVC, especially on 32-bit. I think it would need to be
>
> #if sizeof(ir_node_type) < sizeof(void *)
> # define PADDING_BYTES (sizeof(void *) - sizeof(ir_node_type))
> #else
> # define PADDING_BYTES sizeof(void *)
> # if (__GNUC__ >= 3)
> # error "GCC did us wrong."
> # endif
> #endif
>
> uint8_t padding[PADDING_BYTES];
After Patrick pointed out my obvious lack of C preprocessor skills, I
think the only alternative is:
uint8_t padding[sizeof(ir_node_type) < sizeof(void *)
? sizeof(void *) - sizeof(ir_node_type)
: sizeof(void *)];
I'd probably hide that with a #define and a big comment, but it's
still a bit ugly.
> Seems a little sketchy, but might still be better... hmm...
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list