| 1378 | <h4>IMAGE_GATHER4</h4> |
| 1379 | <p>Opcode: 64 (0x40)<br /> |
| 1380 | Syntax: IMAGE_GATHER4 VDATA(4), VADDR(1:4), SRSRC(4,8), SSAMP(4)<br /> |
| 1381 | Description: Get component's value from 4 neighboring pixels, that closest to choosen |
| 1382 | coordinates in VADDR. Choosen component is first one bit in DMASK. The left top pixel are |
| 1383 | choosen from FLOOR(X-0.5) for X coordinate, FLOOR(Y-0.5) for Y coordinate. |
| 1384 | Following VDATA registers stores:</p> |
| 1385 | <ul> |
| 1386 | <li>VDATA[0] - bottom left pixel's component (X,Y+1)</li> |
| 1387 | <li>VDATA[1] - bottom right pixel's component (X+1,Y+1)</li> |
| 1388 | <li>VDATA[0] - top right pixel's component (X+1,Y)</li> |
| 1389 | <li>VDATA[1] - top left pixel's component (X,Y)</li> |
| 1390 | </ul> |
| 1391 | <p>Operation:<br /> |
| 1392 | <code>INT X = FLOOR(ASFLOAT(VADDR[0])-0.5) |
| 1393 | INT Y = FLOOR(ASFLOAT(VADDR[1])-0.5) |
| 1394 | COMPTYPE* VMLT = VMIMG_SAMPLE(SRSRC, { X, Y, VADDR[2] }, SSAMP) |
| 1395 | COMPTYPE* VMRT = VMIMG_SAMPLE(SRSRC, { X+1 Y, VADDR[2] }, SSAMP) |
| 1396 | COMPTYPE* VMLB = VMIMG_SAMPLE(SRSRC, { X, Y+1, VADDR[2] }, SSAMP) |
| 1397 | COMPTYPE* VMRB = VMIMG_SAMPLE(SRSRC, { X+1, Y+1, VADDR[2] }, SSAMP) |
| 1398 | BYTE COMP = (DMASK&1) ? 0 : (DMASK&2) ? 1 : (DMASK&4) ? 2 : 3; |
| 1399 | VDATA[0] = CONVERT_FROM_IMAGE(SRSRC, VMLB)[COMP] |
| 1400 | VDATA[1] = CONVERT_FROM_IMAGE(SRSRC, VMRB)[COMP] |
| 1401 | VDATA[2] = CONVERT_FROM_IMAGE(SRSRC, VMRT)[COMP] |
| 1402 | VDATA[3] = CONVERT_FROM_IMAGE(SRSRC, VMLT)[COMP]</code></p> |