feedback.hlsl 4.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // RUN: %dxc -E main -T ps_6_5 %s | FileCheck %s
  2. // Test FeedbackTexture2D*** and their WriteSamplerFeedback methods
  3. FeedbackTexture2D<SAMPLER_FEEDBACK_MIN_MIP> feedbackMinMip;
  4. FeedbackTexture2D<SAMPLER_FEEDBACK_MIP_REGION_USED> feedbackMipRegionUsed;
  5. FeedbackTexture2DArray<SAMPLER_FEEDBACK_MIN_MIP> feedbackMinMipArray;
  6. FeedbackTexture2DArray<SAMPLER_FEEDBACK_MIP_REGION_USED> feebackMipRegionUsedArray;
  7. Texture2D<float> texture2D;
  8. Texture2D<float4> texture2D_float4;
  9. Texture2DArray<float> texture2DArray;
  10. SamplerState samp;
  11. float main() : SV_Target
  12. {
  13. float2 coords2D = float2(1, 2);
  14. float3 coords2DArray = float3(1, 2, 3);
  15. float clamp = 4;
  16. float bias = 0.5F;
  17. float lod = 6;
  18. float2 ddx = float2(1.0F / 32, 2.0F / 32);
  19. float2 ddy = float2(3.0F / 32, 4.0F / 32);
  20. float idx = 0; // Make each coord set unique
  21. // Test every dxil intrinsic
  22. // CHECK: call void @dx.op.writeSamplerFeedback(
  23. // CHECK: float 1.000000e+00, float 2.000000e+00, float undef, float undef, float 4.000000e+00)
  24. feedbackMinMip.WriteSamplerFeedback(texture2D, samp, coords2D + (10 * idx++), clamp);
  25. // CHECK: call void @dx.op.writeSamplerFeedbackBias(
  26. // CHECK: float 1.100000e+01, float 1.200000e+01, float undef, float undef, float 5.000000e-01, float 4.000000e+00)
  27. feedbackMinMip.WriteSamplerFeedbackBias(texture2D, samp, coords2D + (10 * idx++), bias, clamp);
  28. // CHECK: call void @dx.op.writeSamplerFeedbackLevel(
  29. // CHECK: float 2.100000e+01, float 2.200000e+01, float undef, float undef, float 6.000000e+00)
  30. feedbackMinMip.WriteSamplerFeedbackLevel(texture2D, samp, coords2D + (10 * idx++), lod);
  31. // CHECK: call void @dx.op.writeSamplerFeedbackGrad(
  32. // CHECK: float 3.100000e+01, float 3.200000e+01, float undef, float undef, float 3.125000e-02, float 6.250000e-02, float undef, float 9.375000e-02, float 1.250000e-01, float undef, float 4.000000e+00)
  33. feedbackMinMip.WriteSamplerFeedbackGrad(texture2D, samp, coords2D + (10 * idx++), ddx, ddy, clamp);
  34. // Test with undef clamp
  35. // CHECK: call void @dx.op.writeSamplerFeedback(
  36. // CHECK: float 4.100000e+01, float 4.200000e+01, float undef, float undef, float undef)
  37. feedbackMinMip.WriteSamplerFeedback(texture2D, samp, coords2D + (10 * idx++));
  38. // CHECK: call void @dx.op.writeSamplerFeedbackBias(
  39. // CHECK: float 5.100000e+01, float 5.200000e+01, float undef, float undef, float 5.000000e-01, float undef)
  40. feedbackMinMip.WriteSamplerFeedbackBias(texture2D, samp, coords2D + (10 * idx++), bias);
  41. // CHECK: call void @dx.op.writeSamplerFeedbackGrad(
  42. // CHECK: float 6.100000e+01, float 6.200000e+01, float undef, float undef, float 3.125000e-02, float 6.250000e-02, float undef, float 9.375000e-02, float 1.250000e-01, float undef, float undef)
  43. feedbackMinMip.WriteSamplerFeedbackGrad(texture2D, samp, coords2D + (10 * idx++), ddx, ddy);
  44. // Test on every FeedbackTexture variant
  45. // CHECK: call void @dx.op.writeSamplerFeedback(
  46. // CHECK: float 7.100000e+01, float 7.200000e+01, float undef, float undef, float undef)
  47. feedbackMipRegionUsed.WriteSamplerFeedback(texture2D, samp, coords2D + (10 * idx++));
  48. // CHECK: call void @dx.op.writeSamplerFeedback(
  49. // CHECK: float 8.100000e+01, float 8.200000e+01, float 8.300000e+01, float undef, float undef)
  50. feedbackMinMipArray.WriteSamplerFeedback(texture2DArray, samp, coords2DArray + (10 * idx++));
  51. // CHECK: call void @dx.op.writeSamplerFeedback(
  52. // CHECK: float 9.100000e+01, float 9.200000e+01, float 9.300000e+01, float undef, float undef)
  53. feebackMipRegionUsedArray.WriteSamplerFeedback(texture2DArray, samp, coords2DArray + (10 * idx++));
  54. // Test with overloaded texture type
  55. // CHECK: call void @dx.op.writeSamplerFeedback(
  56. // CHECK: float 1.010000e+02, float 1.020000e+02, float undef, float undef, float undef)
  57. feedbackMinMip.WriteSamplerFeedback(texture2D_float4, samp, coords2D + (10 * idx++));
  58. // Test max-clamped bias
  59. // CHECK: call void @dx.op.writeSamplerFeedbackBias(
  60. // CHECK: float 1.110000e+02, float 1.120000e+02, float undef, float undef, float 0x402FFAE140000000, float undef)
  61. feedbackMinMip.WriteSamplerFeedbackBias(texture2D, samp, coords2D + (10 * idx++), 27.0);
  62. // Test min-clamped bias
  63. // CHECK: call void @dx.op.writeSamplerFeedbackBias(
  64. // CHECK: float 1.210000e+02, float 1.220000e+02, float undef, float undef, float -1.600000e+01, float undef)
  65. feedbackMinMip.WriteSamplerFeedbackBias(texture2D, samp, coords2D + (10 * idx++), -27.0);
  66. return 0;
  67. }