dan sinclair | 8f1d276 | 2024-07-31 02:35:40 +0000 | [diff] [blame] | 1 | struct tint_GammaTransferParams { |
| 2 | float G; |
| 3 | float A; |
| 4 | float B; |
| 5 | float C; |
| 6 | float D; |
| 7 | float E; |
| 8 | float F; |
| 9 | uint padding; |
| 10 | }; |
dan sinclair | 6931379 | 2024-06-13 20:35:21 +0000 | [diff] [blame] | 11 | |
dan sinclair | 8f1d276 | 2024-07-31 02:35:40 +0000 | [diff] [blame] | 12 | struct tint_ExternalTextureParams { |
| 13 | uint numPlanes; |
| 14 | uint doYuvToRgbConversionOnly; |
| 15 | float3x4 yuvToRgbConversionMatrix; |
| 16 | tint_GammaTransferParams gammaDecodeParams; |
| 17 | tint_GammaTransferParams gammaEncodeParams; |
| 18 | float3x3 gamutConversionMatrix; |
| 19 | float3x2 sampleTransform; |
| 20 | float3x2 loadTransform; |
| 21 | float2 samplePlane0RectMin; |
| 22 | float2 samplePlane0RectMax; |
| 23 | float2 samplePlane1RectMin; |
| 24 | float2 samplePlane1RectMax; |
| 25 | uint2 visibleSize; |
| 26 | float2 plane1CoordFactor; |
| 27 | }; |
| 28 | |
| 29 | struct VertexOutput { |
| 30 | float4 pos; |
| 31 | float4 prevent_dce; |
| 32 | }; |
| 33 | |
| 34 | struct vertex_main_outputs { |
| 35 | nointerpolation float4 VertexOutput_prevent_dce : TEXCOORD0; |
| 36 | float4 VertexOutput_pos : SV_Position; |
| 37 | }; |
| 38 | |
| 39 | |
| 40 | RWByteAddressBuffer prevent_dce : register(u0); |
| 41 | Texture2D<float4> arg_0_plane0 : register(t0, space1); |
| 42 | Texture2D<float4> arg_0_plane1 : register(t1, space1); |
| 43 | cbuffer cbuffer_arg_0_params : register(b2, space1) { |
| 44 | uint4 arg_0_params[17]; |
| 45 | }; |
| 46 | uint2 tint_v2f32_to_v2u32(float2 value) { |
| 47 | return (((value <= (4294967040.0f).xx)) ? ((((value >= (0.0f).xx)) ? (uint2(value)) : ((0u).xx))) : ((4294967295u).xx)); |
| 48 | } |
| 49 | |
| 50 | float3 tint_GammaCorrection(float3 v, tint_GammaTransferParams params) { |
| 51 | float3 v_1 = float3((params.G).xxx); |
| 52 | float3 v_2 = float3((params.D).xxx); |
| 53 | float3 v_3 = abs(v); |
| 54 | float3 v_4 = float3(sign(v)); |
| 55 | return (((v_3 < v_2)) ? ((v_4 * ((params.C * v_3) + params.F))) : ((v_4 * (pow(((params.A * v_3) + params.B), v_1) + params.E)))); |
| 56 | } |
| 57 | |
| 58 | float4 tint_TextureLoadExternal(Texture2D<float4> plane_0, Texture2D<float4> plane_1, tint_ExternalTextureParams params, uint2 coords) { |
| 59 | float2 v_5 = round(mul(float3(float2(min(coords, params.visibleSize)), 1.0f), params.loadTransform)); |
| 60 | uint2 v_6 = tint_v2f32_to_v2u32(v_5); |
| 61 | float3 v_7 = (0.0f).xxx; |
| 62 | float v_8 = 0.0f; |
| 63 | if ((params.numPlanes == 1u)) { |
| 64 | int2 v_9 = int2(v_6); |
| 65 | float4 v_10 = float4(plane_0.Load(int3(v_9, int(0u)))); |
| 66 | v_7 = v_10.xyz; |
| 67 | v_8 = v_10[3u]; |
| 68 | } else { |
| 69 | int2 v_11 = int2(v_6); |
| 70 | float v_12 = float4(plane_0.Load(int3(v_11, int(0u))))[0u]; |
| 71 | int2 v_13 = int2(tint_v2f32_to_v2u32((v_5 * params.plane1CoordFactor))); |
| 72 | v_7 = mul(params.yuvToRgbConversionMatrix, float4(v_12, float4(plane_1.Load(int3(v_13, int(0u)))).xy, 1.0f)); |
| 73 | v_8 = 1.0f; |
| 74 | } |
| 75 | float3 v_14 = v_7; |
| 76 | float3 v_15 = (0.0f).xxx; |
| 77 | if ((params.doYuvToRgbConversionOnly == 0u)) { |
| 78 | tint_GammaTransferParams v_16 = params.gammaDecodeParams; |
| 79 | tint_GammaTransferParams v_17 = params.gammaEncodeParams; |
| 80 | v_15 = tint_GammaCorrection(mul(tint_GammaCorrection(v_14, v_16), params.gamutConversionMatrix), v_17); |
| 81 | } else { |
| 82 | v_15 = v_14; |
| 83 | } |
| 84 | return float4(v_15, v_8); |
| 85 | } |
| 86 | |
| 87 | float3x2 v_18(uint start_byte_offset) { |
| 88 | uint4 v_19 = arg_0_params[(start_byte_offset / 16u)]; |
| 89 | float2 v_20 = asfloat((((((start_byte_offset % 16u) / 4u) == 2u)) ? (v_19.zw) : (v_19.xy))); |
| 90 | uint4 v_21 = arg_0_params[((8u + start_byte_offset) / 16u)]; |
| 91 | float2 v_22 = asfloat(((((((8u + start_byte_offset) % 16u) / 4u) == 2u)) ? (v_21.zw) : (v_21.xy))); |
| 92 | uint4 v_23 = arg_0_params[((16u + start_byte_offset) / 16u)]; |
| 93 | return float3x2(v_20, v_22, asfloat(((((((16u + start_byte_offset) % 16u) / 4u) == 2u)) ? (v_23.zw) : (v_23.xy)))); |
| 94 | } |
| 95 | |
| 96 | float3x3 v_24(uint start_byte_offset) { |
| 97 | float3 v_25 = asfloat(arg_0_params[(start_byte_offset / 16u)].xyz); |
| 98 | float3 v_26 = asfloat(arg_0_params[((16u + start_byte_offset) / 16u)].xyz); |
| 99 | return float3x3(v_25, v_26, asfloat(arg_0_params[((32u + start_byte_offset) / 16u)].xyz)); |
| 100 | } |
| 101 | |
| 102 | tint_GammaTransferParams v_27(uint start_byte_offset) { |
| 103 | float v_28 = asfloat(arg_0_params[(start_byte_offset / 16u)][((start_byte_offset % 16u) / 4u)]); |
| 104 | float v_29 = asfloat(arg_0_params[((4u + start_byte_offset) / 16u)][(((4u + start_byte_offset) % 16u) / 4u)]); |
| 105 | float v_30 = asfloat(arg_0_params[((8u + start_byte_offset) / 16u)][(((8u + start_byte_offset) % 16u) / 4u)]); |
| 106 | float v_31 = asfloat(arg_0_params[((12u + start_byte_offset) / 16u)][(((12u + start_byte_offset) % 16u) / 4u)]); |
| 107 | float v_32 = asfloat(arg_0_params[((16u + start_byte_offset) / 16u)][(((16u + start_byte_offset) % 16u) / 4u)]); |
| 108 | float v_33 = asfloat(arg_0_params[((20u + start_byte_offset) / 16u)][(((20u + start_byte_offset) % 16u) / 4u)]); |
| 109 | float v_34 = asfloat(arg_0_params[((24u + start_byte_offset) / 16u)][(((24u + start_byte_offset) % 16u) / 4u)]); |
| 110 | tint_GammaTransferParams v_35 = {v_28, v_29, v_30, v_31, v_32, v_33, v_34, arg_0_params[((28u + start_byte_offset) / 16u)][(((28u + start_byte_offset) % 16u) / 4u)]}; |
| 111 | return v_35; |
| 112 | } |
| 113 | |
| 114 | float3x4 v_36(uint start_byte_offset) { |
| 115 | float4 v_37 = asfloat(arg_0_params[(start_byte_offset / 16u)]); |
| 116 | float4 v_38 = asfloat(arg_0_params[((16u + start_byte_offset) / 16u)]); |
| 117 | return float3x4(v_37, v_38, asfloat(arg_0_params[((32u + start_byte_offset) / 16u)])); |
| 118 | } |
| 119 | |
| 120 | tint_ExternalTextureParams v_39(uint start_byte_offset) { |
| 121 | uint v_40 = arg_0_params[(start_byte_offset / 16u)][((start_byte_offset % 16u) / 4u)]; |
| 122 | uint v_41 = arg_0_params[((4u + start_byte_offset) / 16u)][(((4u + start_byte_offset) % 16u) / 4u)]; |
| 123 | float3x4 v_42 = v_36((16u + start_byte_offset)); |
| 124 | tint_GammaTransferParams v_43 = v_27((64u + start_byte_offset)); |
| 125 | tint_GammaTransferParams v_44 = v_27((96u + start_byte_offset)); |
| 126 | float3x3 v_45 = v_24((128u + start_byte_offset)); |
| 127 | float3x2 v_46 = v_18((176u + start_byte_offset)); |
| 128 | float3x2 v_47 = v_18((200u + start_byte_offset)); |
| 129 | uint4 v_48 = arg_0_params[((224u + start_byte_offset) / 16u)]; |
| 130 | float2 v_49 = asfloat(((((((224u + start_byte_offset) % 16u) / 4u) == 2u)) ? (v_48.zw) : (v_48.xy))); |
| 131 | uint4 v_50 = arg_0_params[((232u + start_byte_offset) / 16u)]; |
| 132 | float2 v_51 = asfloat(((((((232u + start_byte_offset) % 16u) / 4u) == 2u)) ? (v_50.zw) : (v_50.xy))); |
| 133 | uint4 v_52 = arg_0_params[((240u + start_byte_offset) / 16u)]; |
| 134 | float2 v_53 = asfloat(((((((240u + start_byte_offset) % 16u) / 4u) == 2u)) ? (v_52.zw) : (v_52.xy))); |
| 135 | uint4 v_54 = arg_0_params[((248u + start_byte_offset) / 16u)]; |
| 136 | float2 v_55 = asfloat(((((((248u + start_byte_offset) % 16u) / 4u) == 2u)) ? (v_54.zw) : (v_54.xy))); |
| 137 | uint4 v_56 = arg_0_params[((256u + start_byte_offset) / 16u)]; |
| 138 | uint2 v_57 = ((((((256u + start_byte_offset) % 16u) / 4u) == 2u)) ? (v_56.zw) : (v_56.xy)); |
| 139 | uint4 v_58 = arg_0_params[((264u + start_byte_offset) / 16u)]; |
| 140 | tint_GammaTransferParams v_59 = v_43; |
| 141 | tint_GammaTransferParams v_60 = v_44; |
| 142 | tint_ExternalTextureParams v_61 = {v_40, v_41, v_42, v_59, v_60, v_45, v_46, v_47, v_49, v_51, v_53, v_55, v_57, asfloat(((((((264u + start_byte_offset) % 16u) / 4u) == 2u)) ? (v_58.zw) : (v_58.xy)))}; |
| 143 | return v_61; |
| 144 | } |
| 145 | |
| 146 | float4 textureLoad_8acf41() { |
dan sinclair | d42e0e9 | 2024-09-19 21:49:20 +0000 | [diff] [blame] | 147 | tint_ExternalTextureParams v_62 = v_39(0u); |
| 148 | tint_ExternalTextureParams v_63 = v_62; |
| 149 | float4 res = tint_TextureLoadExternal(arg_0_plane0, arg_0_plane1, v_63, uint2((int(1)).xx)); |
dan sinclair | 8f1d276 | 2024-07-31 02:35:40 +0000 | [diff] [blame] | 150 | return res; |
| 151 | } |
| 152 | |
| 153 | void fragment_main() { |
| 154 | prevent_dce.Store4(0u, asuint(textureLoad_8acf41())); |
| 155 | } |
| 156 | |
| 157 | [numthreads(1, 1, 1)] |
| 158 | void compute_main() { |
| 159 | prevent_dce.Store4(0u, asuint(textureLoad_8acf41())); |
| 160 | } |
| 161 | |
| 162 | VertexOutput vertex_main_inner() { |
| 163 | VertexOutput tint_symbol = (VertexOutput)0; |
| 164 | tint_symbol.pos = (0.0f).xxxx; |
| 165 | tint_symbol.prevent_dce = textureLoad_8acf41(); |
dan sinclair | d42e0e9 | 2024-09-19 21:49:20 +0000 | [diff] [blame] | 166 | VertexOutput v_64 = tint_symbol; |
| 167 | return v_64; |
dan sinclair | 8f1d276 | 2024-07-31 02:35:40 +0000 | [diff] [blame] | 168 | } |
| 169 | |
| 170 | vertex_main_outputs vertex_main() { |
dan sinclair | d42e0e9 | 2024-09-19 21:49:20 +0000 | [diff] [blame] | 171 | VertexOutput v_65 = vertex_main_inner(); |
| 172 | VertexOutput v_66 = v_65; |
| 173 | VertexOutput v_67 = v_65; |
| 174 | vertex_main_outputs v_68 = {v_67.prevent_dce, v_66.pos}; |
| 175 | return v_68; |
dan sinclair | 8f1d276 | 2024-07-31 02:35:40 +0000 | [diff] [blame] | 176 | } |
| 177 | |