| 1130 | <h4>IMAGE_ATOMIC_FMAX</h4> |
| 1131 | <p>Opcode: 30 (0x1e)<br /> |
| 1132 | Syntax: IMAGE_ATOMIC_FMAX VDATA(1:4), VADDR(1:4), SRSRC(4,8)<br /> |
| 1133 | Description: Choose greatest single or double (if VDATA size is greater than 32-bit) |
| 1134 | floating point values between VDATA values and values of image SRSRC at address VADDR, |
| 1135 | and store result into image. If GLC is set then return old values from image, |
| 1136 | otherwise keep VDATA value. Only 32-bit, 64-bit and 128-bit data formats are supported. |
| 1137 | Operation is atomic.<br /> |
| 1138 | Operation:<br /> |
| 1139 | <code>PIXELTYPE* VM = VMIMG(SRSRC, VADDR) |
| 1140 | PIXELTYPE P = *VM; |
| 1141 | if (sizeof(PIXELTYPE)==4) |
| 1142 | ((FLOAT*)VM)[0] = MAX(ASFLOAT(VDATA[0]),((FLOAT*)VM)[0]) |
| 1143 | else // add 64-bit dwords |
| 1144 | for (BYTE i = 0; i < (sizeof(VDATA)>>3); i++) |
| 1145 | ((DOUBLE*)VM)[i] = MAX(ASDOUBLE(VDATA[i]),((DOUBLE*)VM)[i]) |
| 1146 | VDATA = (GLC) ? P : VDATA // atomic</code></p> |
| 1147 | <h4>IMAGE_ATOMIC_FMIN</h4> |
| 1148 | <p>Opcode: 30 (0x1e)<br /> |
| 1149 | Syntax: IMAGE_ATOMIC_FMIN VDATA(1:4), VADDR(1:4), SRSRC(4,8)<br /> |
| 1150 | Description: Choose smallest single or double (if VDATA size is greater than 32-bit) |
| 1151 | floating point values between VDATA values and values of image SRSRC at address VADDR, |
| 1152 | and store result into image. If GLC is set then return old values from image, |
| 1153 | otherwise keep VDATA value. Only 32-bit, 64-bit and 128-bit data formats are supported. |
| 1154 | Operation is atomic.<br /> |
| 1155 | Operation:<br /> |
| 1156 | <code>PIXELTYPE* VM = VMIMG(SRSRC, VADDR) |
| 1157 | PIXELTYPE P = *VM; |
| 1158 | if (sizeof(PIXELTYPE)==4) |
| 1159 | ((FLOAT*)VM)[0] = MIN(ASFLOAT(VDATA[0]),((FLOAT*)VM)[0]) |
| 1160 | else // add 64-bit dwords |
| 1161 | for (BYTE i = 0; i < (sizeof(VDATA)>>3); i++) |
| 1162 | ((DOUBLE*)VM)[i] = MIN(ASDOUBLE(VDATA[i]),((DOUBLE*)VM)[i]) |
| 1163 | VDATA = (GLC) ? P : VDATA // atomic</code></p> |