Changes between Version 8 and Version 9 of GcnInstrsMimg


Ignore:
Timestamp:
01/15/16 15:00:15 (8 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GcnInstrsMimg

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