39#include "nvShaderExtnEnums.h"
58 uint numOutputsForIncCounter;
76#ifdef NV_SHADER_EXTN_REGISTER_SPACE
77RWStructuredBuffer<NvShaderExtnStruct> g_NvidiaExt :
register( NV_SHADER_EXTN_SLOT, NV_SHADER_EXTN_REGISTER_SPACE );
79RWStructuredBuffer<NvShaderExtnStruct> g_NvidiaExt :
register( NV_SHADER_EXTN_SLOT );
89int __NvGetShflMaskFromWidth(uint width)
91 return ((NV_WARP_SIZE - width) << 8) | 0x1F;
96void __NvReferenceUAVForOp(RWByteAddressBuffer uav)
98 uint index = g_NvidiaExt.IncrementCounter();
99 g_NvidiaExt[index].markUavRef = 1;
103void __NvReferenceUAVForOp(RWTexture1D<float2> uav)
105 uint index = g_NvidiaExt.IncrementCounter();
106 g_NvidiaExt[index].markUavRef = 1;
107 uav[index] = float2(0,0);
110void __NvReferenceUAVForOp(RWTexture2D<float2> uav)
112 uint index = g_NvidiaExt.IncrementCounter();
113 g_NvidiaExt[index].markUavRef = 1;
114 uav[uint2(index,index)] = float2(0,0);
117void __NvReferenceUAVForOp(RWTexture3D<float2> uav)
119 uint index = g_NvidiaExt.IncrementCounter();
120 g_NvidiaExt[index].markUavRef = 1;
121 uav[uint3(index,index,index)] = float2(0,0);
124void __NvReferenceUAVForOp(RWTexture1D<float4> uav)
126 uint index = g_NvidiaExt.IncrementCounter();
127 g_NvidiaExt[index].markUavRef = 1;
128 uav[index] = float4(0,0,0,0);
131void __NvReferenceUAVForOp(RWTexture2D<float4> uav)
133 uint index = g_NvidiaExt.IncrementCounter();
134 g_NvidiaExt[index].markUavRef = 1;
135 uav[uint2(index,index)] = float4(0,0,0,0);
138void __NvReferenceUAVForOp(RWTexture3D<float4> uav)
140 uint index = g_NvidiaExt.IncrementCounter();
141 g_NvidiaExt[index].markUavRef = 1;
142 uav[uint3(index,index,index)] = float4(0,0,0,0);
145void __NvReferenceUAVForOp(RWTexture1D<float> uav)
147 uint index = g_NvidiaExt.IncrementCounter();
148 g_NvidiaExt[index].markUavRef = 1;
152void __NvReferenceUAVForOp(RWTexture2D<float> uav)
154 uint index = g_NvidiaExt.IncrementCounter();
155 g_NvidiaExt[index].markUavRef = 1;
156 uav[uint2(index,index)] = 0.0f;
159void __NvReferenceUAVForOp(RWTexture3D<float> uav)
161 uint index = g_NvidiaExt.IncrementCounter();
162 g_NvidiaExt[index].markUavRef = 1;
163 uav[uint3(index,index,index)] = 0.0f;
167void __NvReferenceUAVForOp(RWTexture1D<uint2> uav)
169 uint index = g_NvidiaExt.IncrementCounter();
170 g_NvidiaExt[index].markUavRef = 1;
171 uav[index] = uint2(0,0);
174void __NvReferenceUAVForOp(RWTexture2D<uint2> uav)
176 uint index = g_NvidiaExt.IncrementCounter();
177 g_NvidiaExt[index].markUavRef = 1;
178 uav[uint2(index,index)] = uint2(0,0);
181void __NvReferenceUAVForOp(RWTexture3D<uint2> uav)
183 uint index = g_NvidiaExt.IncrementCounter();
184 g_NvidiaExt[index].markUavRef = 1;
185 uav[uint3(index,index,index)] = uint2(0,0);
188void __NvReferenceUAVForOp(RWTexture1D<uint4> uav)
190 uint index = g_NvidiaExt.IncrementCounter();
191 g_NvidiaExt[index].markUavRef = 1;
192 uav[index] = uint4(0,0,0,0);
195void __NvReferenceUAVForOp(RWTexture2D<uint4> uav)
197 uint index = g_NvidiaExt.IncrementCounter();
198 g_NvidiaExt[index].markUavRef = 1;
199 uav[uint2(index,index)] = uint4(0,0,0,0);
202void __NvReferenceUAVForOp(RWTexture3D<uint4> uav)
204 uint index = g_NvidiaExt.IncrementCounter();
205 g_NvidiaExt[index].markUavRef = 1;
206 uav[uint3(index,index,index)] = uint4(0,0,0,0);
209void __NvReferenceUAVForOp(RWTexture1D<uint> uav)
211 uint index = g_NvidiaExt.IncrementCounter();
212 g_NvidiaExt[index].markUavRef = 1;
216void __NvReferenceUAVForOp(RWTexture2D<uint> uav)
218 uint index = g_NvidiaExt.IncrementCounter();
219 g_NvidiaExt[index].markUavRef = 1;
220 uav[uint2(index,index)] = 0;
223void __NvReferenceUAVForOp(RWTexture3D<uint> uav)
225 uint index = g_NvidiaExt.IncrementCounter();
226 g_NvidiaExt[index].markUavRef = 1;
227 uav[uint3(index,index,index)] = 0;
230void __NvReferenceUAVForOp(RWTexture1D<int2> uav)
232 uint index = g_NvidiaExt.IncrementCounter();
233 g_NvidiaExt[index].markUavRef = 1;
234 uav[index] = int2(0,0);
237void __NvReferenceUAVForOp(RWTexture2D<int2> uav)
239 uint index = g_NvidiaExt.IncrementCounter();
240 g_NvidiaExt[index].markUavRef = 1;
241 uav[uint2(index,index)] = int2(0,0);
244void __NvReferenceUAVForOp(RWTexture3D<int2> uav)
246 uint index = g_NvidiaExt.IncrementCounter();
247 g_NvidiaExt[index].markUavRef = 1;
248 uav[uint3(index,index,index)] = int2(0,0);
251void __NvReferenceUAVForOp(RWTexture1D<int4> uav)
253 uint index = g_NvidiaExt.IncrementCounter();
254 g_NvidiaExt[index].markUavRef = 1;
255 uav[index] = int4(0,0,0,0);
258void __NvReferenceUAVForOp(RWTexture2D<int4> uav)
260 uint index = g_NvidiaExt.IncrementCounter();
261 g_NvidiaExt[index].markUavRef = 1;
262 uav[uint2(index,index)] = int4(0,0,0,0);
265void __NvReferenceUAVForOp(RWTexture3D<int4> uav)
267 uint index = g_NvidiaExt.IncrementCounter();
268 g_NvidiaExt[index].markUavRef = 1;
269 uav[uint3(index,index,index)] = int4(0,0,0,0);
272void __NvReferenceUAVForOp(RWTexture1D<int> uav)
274 uint index = g_NvidiaExt.IncrementCounter();
275 g_NvidiaExt[index].markUavRef = 1;
279void __NvReferenceUAVForOp(RWTexture2D<int> uav)
281 uint index = g_NvidiaExt.IncrementCounter();
282 g_NvidiaExt[index].markUavRef = 1;
283 uav[uint2(index,index)] = 0;
286void __NvReferenceUAVForOp(RWTexture3D<int> uav)
288 uint index = g_NvidiaExt.IncrementCounter();
289 g_NvidiaExt[index].markUavRef = 1;
290 uav[uint3(index,index,index)] = 0;
295#define NV_EXTN_ATOM_AND 0
296#define NV_EXTN_ATOM_OR 1
297#define NV_EXTN_ATOM_XOR 2
299#define NV_EXTN_ATOM_ADD 3
300#define NV_EXTN_ATOM_MAX 6
301#define NV_EXTN_ATOM_MIN 7
303#define NV_EXTN_ATOM_SWAP 8
304#define NV_EXTN_ATOM_CAS 9
313uint __NvAtomicOpFP16x2(RWByteAddressBuffer uav, uint byteAddress, uint fp16x2Val, uint atomicOpType)
315 __NvReferenceUAVForOp(uav);
316 uint index = g_NvidiaExt.IncrementCounter();
317 g_NvidiaExt[index].src0u.x = byteAddress;
318 g_NvidiaExt[index].src1u.x = fp16x2Val;
319 g_NvidiaExt[index].src2u.x = atomicOpType;
320 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP16_ATOMIC;
322 return g_NvidiaExt[index].dst0u.x;
334uint __NvAtomicOpFP16x2(RWTexture1D<float2> uav, uint address, uint fp16x2Val, uint atomicOpType)
336 __NvReferenceUAVForOp(uav);
337 uint index = g_NvidiaExt.IncrementCounter();
338 g_NvidiaExt[index].src0u.x = address;
339 g_NvidiaExt[index].src1u.x = fp16x2Val;
340 g_NvidiaExt[index].src2u.x = atomicOpType;
341 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP16_ATOMIC;
343 return g_NvidiaExt[index].dst0u.x;
346uint __NvAtomicOpFP16x2(RWTexture2D<float2> uav, uint2 address, uint fp16x2Val, uint atomicOpType)
348 __NvReferenceUAVForOp(uav);
349 uint index = g_NvidiaExt.IncrementCounter();
350 g_NvidiaExt[index].src0u.xy = address;
351 g_NvidiaExt[index].src1u.x = fp16x2Val;
352 g_NvidiaExt[index].src2u.x = atomicOpType;
353 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP16_ATOMIC;
355 return g_NvidiaExt[index].dst0u.x;
358uint __NvAtomicOpFP16x2(RWTexture3D<float2> uav, uint3 address, uint fp16x2Val, uint atomicOpType)
360 __NvReferenceUAVForOp(uav);
361 uint index = g_NvidiaExt.IncrementCounter();
362 g_NvidiaExt[index].src0u.xyz = address;
363 g_NvidiaExt[index].src1u.x = fp16x2Val;
364 g_NvidiaExt[index].src2u.x = atomicOpType;
365 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP16_ATOMIC;
367 return g_NvidiaExt[index].dst0u.x;
380uint2 __NvAtomicOpFP16x2(RWTexture1D<float4> uav, uint address, uint2 fp16x2Val, uint atomicOpType)
382 __NvReferenceUAVForOp(uav);
388 uint index = g_NvidiaExt.IncrementCounter();
389 g_NvidiaExt[index].src0u.x = address * 2;
390 g_NvidiaExt[index].src1u.x = fp16x2Val.x;
391 g_NvidiaExt[index].src2u.x = atomicOpType;
392 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP16_ATOMIC;
393 retVal.x = g_NvidiaExt[index].dst0u.x;
396 index = g_NvidiaExt.IncrementCounter();
397 g_NvidiaExt[index].src0u.x = address * 2 + 1;
398 g_NvidiaExt[index].src1u.x = fp16x2Val.y;
399 g_NvidiaExt[index].src2u.x = atomicOpType;
400 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP16_ATOMIC;
401 retVal.y = g_NvidiaExt[index].dst0u.x;
406uint2 __NvAtomicOpFP16x2(RWTexture2D<float4> uav, uint2 address, uint2 fp16x2Val, uint atomicOpType)
408 __NvReferenceUAVForOp(uav);
414 uint2 addressTemp = uint2(address.x * 2, address.y);
415 uint index = g_NvidiaExt.IncrementCounter();
416 g_NvidiaExt[index].src0u.xy = addressTemp;
417 g_NvidiaExt[index].src1u.x = fp16x2Val.x;
418 g_NvidiaExt[index].src2u.x = atomicOpType;
419 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP16_ATOMIC;
420 retVal.x = g_NvidiaExt[index].dst0u.x;
424 index = g_NvidiaExt.IncrementCounter();
425 g_NvidiaExt[index].src0u.xy = addressTemp;
426 g_NvidiaExt[index].src1u.x = fp16x2Val.y;
427 g_NvidiaExt[index].src2u.x = atomicOpType;
428 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP16_ATOMIC;
429 retVal.y = g_NvidiaExt[index].dst0u.x;
434uint2 __NvAtomicOpFP16x2(RWTexture3D<float4> uav, uint3 address, uint2 fp16x2Val, uint atomicOpType)
436 __NvReferenceUAVForOp(uav);
442 uint3 addressTemp = uint3(address.x * 2, address.y, address.z);
443 uint index = g_NvidiaExt.IncrementCounter();
444 g_NvidiaExt[index].src0u.xyz = addressTemp;
445 g_NvidiaExt[index].src1u.x = fp16x2Val.x;
446 g_NvidiaExt[index].src2u.x = atomicOpType;
447 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP16_ATOMIC;
448 retVal.x = g_NvidiaExt[index].dst0u.x;
452 index = g_NvidiaExt.IncrementCounter();
453 g_NvidiaExt[index].src0u.xyz = addressTemp;
454 g_NvidiaExt[index].src1u.x = fp16x2Val.y;
455 g_NvidiaExt[index].src2u.x = atomicOpType;
456 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP16_ATOMIC;
457 retVal.y = g_NvidiaExt[index].dst0u.x;
462uint __fp32x2Tofp16x2(float2 val)
464 return (f32tof16(val.y)<<16) | f32tof16(val.x) ;
467uint2 __fp32x4Tofp16x4(float4 val)
469 return uint2( (f32tof16(val.y)<<16) | f32tof16(val.x), (f32tof16(val.w)<<16) | f32tof16(val.z) ) ;
478float __NvAtomicAddFP32(RWByteAddressBuffer uav, uint byteAddress,
float val)
480 __NvReferenceUAVForOp(uav);
481 uint index = g_NvidiaExt.IncrementCounter();
482 g_NvidiaExt[index].src0u.x = byteAddress;
483 g_NvidiaExt[index].src1u.x = asuint(val);
484 g_NvidiaExt[index].src2u.x = NV_EXTN_ATOM_ADD;
485 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP32_ATOMIC;
487 return asfloat(g_NvidiaExt[index].dst0u.x);
490float __NvAtomicAddFP32(RWTexture1D<float> uav, uint address,
float val)
492 __NvReferenceUAVForOp(uav);
493 uint index = g_NvidiaExt.IncrementCounter();
494 g_NvidiaExt[index].src0u.x = address;
495 g_NvidiaExt[index].src1u.x = asuint(val);
496 g_NvidiaExt[index].src2u.x = NV_EXTN_ATOM_ADD;
497 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP32_ATOMIC;
499 return asfloat(g_NvidiaExt[index].dst0u.x);
502float __NvAtomicAddFP32(RWTexture2D<float> uav, uint2 address,
float val)
504 __NvReferenceUAVForOp(uav);
505 uint index = g_NvidiaExt.IncrementCounter();
506 g_NvidiaExt[index].src0u.xy = address;
507 g_NvidiaExt[index].src1u.x = asuint(val);
508 g_NvidiaExt[index].src2u.x = NV_EXTN_ATOM_ADD;
509 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP32_ATOMIC;
511 return asfloat(g_NvidiaExt[index].dst0u.x);
514float __NvAtomicAddFP32(RWTexture3D<float> uav, uint3 address,
float val)
516 __NvReferenceUAVForOp(uav);
517 uint index = g_NvidiaExt.IncrementCounter();
518 g_NvidiaExt[index].src0u.xyz = address;
519 g_NvidiaExt[index].src1u.x = asuint(val);
520 g_NvidiaExt[index].src2u.x = NV_EXTN_ATOM_ADD;
521 g_NvidiaExt[index].opcode = NV_EXTN_OP_FP32_ATOMIC;
523 return asfloat(g_NvidiaExt[index].dst0u.x);
534uint2 __NvAtomicCompareExchangeUINT64(RWByteAddressBuffer uav, uint byteAddress, uint2 compareValue, uint2 value)
536 __NvReferenceUAVForOp(uav);
538 uint index = g_NvidiaExt.IncrementCounter();
539 g_NvidiaExt[index].src0u.x = byteAddress;
540 g_NvidiaExt[index].src1u.xy = compareValue;
541 g_NvidiaExt[index].src1u.zw = value;
542 g_NvidiaExt[index].src2u.x = NV_EXTN_ATOM_CAS;
543 g_NvidiaExt[index].opcode = NV_EXTN_OP_UINT64_ATOMIC;
545 return g_NvidiaExt[index].dst0u.xy;
548uint2 __NvAtomicOpUINT64(RWByteAddressBuffer uav, uint byteAddress, uint2 value, uint atomicOpType)
550 __NvReferenceUAVForOp(uav);
552 uint index = g_NvidiaExt.IncrementCounter();
553 g_NvidiaExt[index].src0u.x = byteAddress;
554 g_NvidiaExt[index].src1u.xy = value;
555 g_NvidiaExt[index].src2u.x = atomicOpType;
556 g_NvidiaExt[index].opcode = NV_EXTN_OP_UINT64_ATOMIC;
558 return g_NvidiaExt[index].dst0u.xy;
561uint2 __NvAtomicCompareExchangeUINT64(RWTexture1D<uint2> uav, uint address, uint2 compareValue, uint2 value)
563 __NvReferenceUAVForOp(uav);
565 uint index = g_NvidiaExt.IncrementCounter();
566 g_NvidiaExt[index].src0u.x = address;
567 g_NvidiaExt[index].src1u.xy = compareValue;
568 g_NvidiaExt[index].src1u.zw = value;
569 g_NvidiaExt[index].src2u.x = NV_EXTN_ATOM_CAS;
570 g_NvidiaExt[index].opcode = NV_EXTN_OP_UINT64_ATOMIC;
572 return g_NvidiaExt[index].dst0u.xy;
575uint2 __NvAtomicOpUINT64(RWTexture1D<uint2> uav, uint address, uint2 value, uint atomicOpType)
577 __NvReferenceUAVForOp(uav);
579 uint index = g_NvidiaExt.IncrementCounter();
580 g_NvidiaExt[index].src0u.x = address;
581 g_NvidiaExt[index].src1u.xy = value;
582 g_NvidiaExt[index].src2u.x = atomicOpType;
583 g_NvidiaExt[index].opcode = NV_EXTN_OP_UINT64_ATOMIC;
585 return g_NvidiaExt[index].dst0u.xy;
588uint2 __NvAtomicCompareExchangeUINT64(RWTexture2D<uint2> uav, uint2 address, uint2 compareValue, uint2 value)
590 __NvReferenceUAVForOp(uav);
592 uint index = g_NvidiaExt.IncrementCounter();
593 g_NvidiaExt[index].src0u.xy = address;
594 g_NvidiaExt[index].src1u.xy = compareValue;
595 g_NvidiaExt[index].src1u.zw = value;
596 g_NvidiaExt[index].src2u.x = NV_EXTN_ATOM_CAS;
597 g_NvidiaExt[index].opcode = NV_EXTN_OP_UINT64_ATOMIC;
599 return g_NvidiaExt[index].dst0u.xy;
602uint2 __NvAtomicOpUINT64(RWTexture2D<uint2> uav, uint2 address, uint2 value, uint atomicOpType)
604 __NvReferenceUAVForOp(uav);
606 uint index = g_NvidiaExt.IncrementCounter();
607 g_NvidiaExt[index].src0u.xy = address;
608 g_NvidiaExt[index].src1u.xy = value;
609 g_NvidiaExt[index].src2u.x = atomicOpType;
610 g_NvidiaExt[index].opcode = NV_EXTN_OP_UINT64_ATOMIC;
612 return g_NvidiaExt[index].dst0u.xy;
615uint2 __NvAtomicCompareExchangeUINT64(RWTexture3D<uint2> uav, uint3 address, uint2 compareValue, uint2 value)
617 __NvReferenceUAVForOp(uav);
619 uint index = g_NvidiaExt.IncrementCounter();
620 g_NvidiaExt[index].src0u.xyz = address;
621 g_NvidiaExt[index].src1u.xy = compareValue;
622 g_NvidiaExt[index].src1u.zw = value;
623 g_NvidiaExt[index].src2u.x = NV_EXTN_ATOM_CAS;
624 g_NvidiaExt[index].opcode = NV_EXTN_OP_UINT64_ATOMIC;
626 return g_NvidiaExt[index].dst0u.xy;
629uint2 __NvAtomicOpUINT64(RWTexture3D<uint2> uav, uint3 address, uint2 value, uint atomicOpType)
631 __NvReferenceUAVForOp(uav);
633 uint index = g_NvidiaExt.IncrementCounter();
634 g_NvidiaExt[index].src0u.xyz = address;
635 g_NvidiaExt[index].src1u.xy = value;
636 g_NvidiaExt[index].src2u.x = atomicOpType;
637 g_NvidiaExt[index].opcode = NV_EXTN_OP_UINT64_ATOMIC;
639 return g_NvidiaExt[index].dst0u.xy;
643uint4 __NvFootprint(uint texSpace, uint texIndex, uint smpSpace, uint smpIndex, uint texType, float3 location, uint footprintmode, uint gran, int3 offset = int3(0, 0, 0))
645 uint index = g_NvidiaExt.IncrementCounter();
646 g_NvidiaExt[index].src0u.x = texIndex;
647 g_NvidiaExt[index].src0u.y = smpIndex;
648 g_NvidiaExt[index].src1u.xyz = asuint(location);
649 g_NvidiaExt[index].src1u.w = gran;
650 g_NvidiaExt[index].src3u.x = texSpace;
651 g_NvidiaExt[index].src3u.y = smpSpace;
652 g_NvidiaExt[index].src3u.z = texType;
653 g_NvidiaExt[index].src3u.w = footprintmode;
654 g_NvidiaExt[index].src4u.xyz = asuint(offset);
656 g_NvidiaExt[index].opcode = NV_EXTN_OP_FOOTPRINT;
657 g_NvidiaExt[index].numOutputsForIncCounter = 4;
661 op.x = g_NvidiaExt.IncrementCounter();
662 op.y = g_NvidiaExt.IncrementCounter();
663 op.z = g_NvidiaExt.IncrementCounter();
664 op.w = g_NvidiaExt.IncrementCounter();
668uint4 __NvFootprintBias(uint texSpace, uint texIndex, uint smpSpace, uint smpIndex, uint texType, float3 location, uint footprintmode, uint gran,
float bias, int3 offset = int3(0, 0, 0))
670 uint index = g_NvidiaExt.IncrementCounter();
671 g_NvidiaExt[index].src0u.x = texIndex;
672 g_NvidiaExt[index].src0u.y = smpIndex;
673 g_NvidiaExt[index].src1u.xyz = asuint(location);
674 g_NvidiaExt[index].src1u.w = gran;
675 g_NvidiaExt[index].src2u.x = asuint(bias);
676 g_NvidiaExt[index].src3u.x = texSpace;
677 g_NvidiaExt[index].src3u.y = smpSpace;
678 g_NvidiaExt[index].src3u.z = texType;
679 g_NvidiaExt[index].src3u.w = footprintmode;
680 g_NvidiaExt[index].src4u.xyz = asuint(offset);
682 g_NvidiaExt[index].opcode = NV_EXTN_OP_FOOTPRINT_BIAS;
683 g_NvidiaExt[index].numOutputsForIncCounter = 4;
687 op.x = g_NvidiaExt.IncrementCounter();
688 op.y = g_NvidiaExt.IncrementCounter();
689 op.z = g_NvidiaExt.IncrementCounter();
690 op.w = g_NvidiaExt.IncrementCounter();
694uint4 __NvFootprintLevel(uint texSpace, uint texIndex, uint smpSpace, uint smpIndex, uint texType, float3 location, uint footprintmode, uint gran,
float lodLevel, int3 offset = int3(0, 0, 0))
696 uint index = g_NvidiaExt.IncrementCounter();
697 g_NvidiaExt[index].src0u.x = texIndex;
698 g_NvidiaExt[index].src0u.y = smpIndex;
699 g_NvidiaExt[index].src1u.xyz = asuint(location);
700 g_NvidiaExt[index].src1u.w = gran;
701 g_NvidiaExt[index].src2u.x = asuint(lodLevel);
702 g_NvidiaExt[index].src3u.x = texSpace;
703 g_NvidiaExt[index].src3u.y = smpSpace;
704 g_NvidiaExt[index].src3u.z = texType;
705 g_NvidiaExt[index].src3u.w = footprintmode;
706 g_NvidiaExt[index].src4u.xyz = asuint(offset);
708 g_NvidiaExt[index].opcode = NV_EXTN_OP_FOOTPRINT_LEVEL;
709 g_NvidiaExt[index].numOutputsForIncCounter = 4;
713 op.x = g_NvidiaExt.IncrementCounter();
714 op.y = g_NvidiaExt.IncrementCounter();
715 op.z = g_NvidiaExt.IncrementCounter();
716 op.w = g_NvidiaExt.IncrementCounter();
720uint4 __NvFootprintGrad(uint texSpace, uint texIndex, uint smpSpace, uint smpIndex, uint texType, float3 location, uint footprintmode, uint gran, float3 ddx, float3 ddy, int3 offset = int3(0, 0, 0))
722 uint index = g_NvidiaExt.IncrementCounter();
723 g_NvidiaExt[index].src0u.x = texIndex;
724 g_NvidiaExt[index].src0u.y = smpIndex;
725 g_NvidiaExt[index].src1u.xyz = asuint(location);
726 g_NvidiaExt[index].src1u.w = gran;
727 g_NvidiaExt[index].src2u.xyz = asuint(ddx);
728 g_NvidiaExt[index].src5u.xyz = asuint(ddy);
729 g_NvidiaExt[index].src3u.x = texSpace;
730 g_NvidiaExt[index].src3u.y = smpSpace;
731 g_NvidiaExt[index].src3u.z = texType;
732 g_NvidiaExt[index].src3u.w = footprintmode;
733 g_NvidiaExt[index].src4u.xyz = asuint(offset);
734 g_NvidiaExt[index].opcode = NV_EXTN_OP_FOOTPRINT_GRAD;
735 g_NvidiaExt[index].numOutputsForIncCounter = 4;
739 op.x = g_NvidiaExt.IncrementCounter();
740 op.y = g_NvidiaExt.IncrementCounter();
741 op.z = g_NvidiaExt.IncrementCounter();
742 op.w = g_NvidiaExt.IncrementCounter();
747uint __NvGetSpecial(uint subOpCode)
749 uint index = g_NvidiaExt.IncrementCounter();
750 g_NvidiaExt[index].opcode = NV_EXTN_OP_GET_SPECIAL;
751 g_NvidiaExt[index].src0u.x = subOpCode;
752 return g_NvidiaExt.IncrementCounter();
756int __NvShflGeneric(
int val, uint srcLane, uint maskClampVal, out uint laneValid)
758 uint index = g_NvidiaExt.IncrementCounter();
759 g_NvidiaExt[index].src0u.x = val;
760 g_NvidiaExt[index].src0u.y = srcLane;
761 g_NvidiaExt[index].src0u.z = maskClampVal;
762 g_NvidiaExt[index].opcode = NV_EXTN_OP_SHFL_GENERIC;
763 g_NvidiaExt[index].numOutputsForIncCounter = 2;
765 laneValid = asuint(g_NvidiaExt.IncrementCounter());
766 return g_NvidiaExt.IncrementCounter();
Definition nvHLSLExtnsInternal.h:42