On 04/07/2014 06:24 AM, Ian Romanick wrote:
> On 04/06/2014 11:49 PM, Kenneth Graunke wrote:
>> The i965 MUL instruction doesn't natively support 32-bit by 32-bit
>> integer multiplication; additional instructions (MACH/MOV) are required.
>> However, we can avoid those if we know one of the operands can be
>> represented in 16 bits or less.  The vector backend's is_16bit_constant
>> static helper function checks for this.
> 
> In IVB+ the hardware actually does 32-bit by 16-bit to give a 48-bit
> result (on SNB and earlier it's 16-bit by 16-bit... yay).  According to
> Emil Persson, new generation consoles have similar (but different)
> integer multiplication issues (see slide 35 from
> http://www.humus.name/index.php?page=Comments&ID=371).  Should we expose
> a lesser precision integer multiply function similar to mul24()?

As, say, a GLSL built-in function?  Possibly.

Presumably our restrictions are different than anyone else's though, and
even ours changed between generations.  So I wonder if anyone would
bother using what we cooked up.

Plus, Broadwell just handles this properly, so this really only saves a
couple of instructions on "old" hardware.  Obviously, it's not really
"old", but...by the time we draft a GL extension, implement it, and get
people to bother using it in upcoming applications...we'll be down the
road a ways.

So, I doubt it's really worth doing, but I wouldn't be horribly against
it if someone bothered.

One big source of integer multiplication is for computing byte offsets
into UBOs or other constant buffers.  In that case, we're usually
scaling by a small constant factor (say, 4 or 16 bytes), which is well
covered by our existing optimization.

--Ken

Attachment: signature.asc
Description: OpenPGP digital signature

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

Reply via email to