[require] shader model >= 4.0 [srv 0] size (2d, 2, 2) 0.1 0.2 0.3 0.4 0.5 0.7 0.6 0.8 0.6 0.5 0.2 0.1 0.8 0.0 0.7 1.0 [pixel shader] Texture2D t; float4 main(float4 pos : sv_position) : sv_target { return t.Load(int3(pos.xy, 0)); } [test] draw quad probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4) probe (1, 0) rgba (0.5, 0.7, 0.6, 0.8) probe (0, 1) rgba (0.6, 0.5, 0.2, 0.1) probe (1, 1) rgba (0.8, 0.0, 0.7, 1.0) [pixel shader] Texture2D t; float4 main(float4 pos : sv_position) : sv_target { return t[pos.yx]; } [test] draw quad probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4) probe (1, 0) rgba (0.6, 0.5, 0.2, 0.1) probe (0, 1) rgba (0.5, 0.7, 0.6, 0.8) probe (1, 1) rgba (0.8, 0.0, 0.7, 1.0) [pixel shader] static const int size = 2; Texture2DMS t; Texture2DMS t2; float4 main(float4 pos : sv_position) : sv_target { return t.Load(pos.yx, 0); } [test] todo(glsl) draw quad probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4) probe (1, 0) rgba (0.6, 0.5, 0.2, 0.1) probe (0, 1) rgba (0.5, 0.7, 0.6, 0.8) probe (1, 1) rgba (0.8, 0.0, 0.7, 1.0) % The sample count only matters for the external definition in SM4-5; % internally it doesn't, you can even avoid it [require] shader model >= 4.0 shader model < 6.0 [pixel shader] static const int size = 2; Texture2DMS t; float4 main(float4 pos : sv_position) : sv_target { Texture2DMS s = t; return s.Load(pos.yx, 0); } [test] todo(glsl) draw quad probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4) probe (1, 0) rgba (0.6, 0.5, 0.2, 0.1) probe (0, 1) rgba (0.5, 0.7, 0.6, 0.8) probe (1, 1) rgba (0.8, 0.0, 0.7, 1.0) [pixel shader] static const int size = 2; Texture2DMS t; float4 main(float4 pos : sv_position) : sv_target { Texture2DMS s = t; return s.Load(pos.yx, 0); } [test] todo(glsl) draw quad probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4) probe (1, 0) rgba (0.6, 0.5, 0.2, 0.1) probe (0, 1) rgba (0.5, 0.7, 0.6, 0.8) probe (1, 1) rgba (0.8, 0.0, 0.7, 1.0) % SM6 is stricter instead [require] shader model >= 6.0 [pixel shader fail] static const int size = 2; Texture2DMS t; float4 main(float4 pos : sv_position) : sv_target { Texture2DMS s = t; return s.Load(pos.yx, 0); } [pixel shader fail] static const int size = 2; Texture2DMS t; float4 main(float4 pos : sv_position) : sv_target { Texture2DMS s = t; return s.Load(pos.yx, 0); } % SM4.0 cannot dynamically index multisampled textures, it relies on loop unrolling. [require] shader model >= 4.0 shader model < 4.1 [pixel shader] Texture2DMS t; float4 main(float4 pos : sv_position) : sv_target { int i; float4 o; for (i = 0; i < 1; i++) { o = t.Load(pos.xy, i); } return o; } [test] todo(glsl) draw quad probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4) probe (1, 0) rgba (0.5, 0.7, 0.6, 0.8) probe (0, 1) rgba (0.6, 0.5, 0.2, 0.1) probe (1, 1) rgba (0.8, 0.0, 0.7, 1.0)