@@ -304,6 +304,56 @@ func.func @sample_implicit_proj_dref(%arg0 : !spirv.sampled_image<!spirv.image<f
304304
305305// -----
306306
307+ //===----------------------------------------------------------------------===//
308+ // spirv.ImageFetch
309+ //===----------------------------------------------------------------------===//
310+
311+ func.func @image_fetch (%arg0: !spirv.image <f32 , Dim2D , NoDepth , NonArrayed , SingleSampled , NeedSampler , Rgba8 >, %arg1: vector <2 xsi32 >) -> () {
312+ // CHECK: {{%.*}} = spirv.ImageFetch {{%.*}}, {{%.*}} : !spirv.image<f32, Dim2D, NoDepth, NonArrayed, SingleSampled, NeedSampler, Rgba8>, vector<2xsi32> -> vector<4xf32>
313+ %0 = spirv.ImageFetch %arg0 , %arg1 : !spirv.image <f32 , Dim2D , NoDepth , NonArrayed , SingleSampled , NeedSampler , Rgba8 >, vector <2 xsi32 > -> vector <4 xf32 >
314+ spirv.Return
315+ }
316+
317+ // -----
318+
319+ func.func @image_fetch_dim_cube (%arg0: !spirv.image <f32 , Cube , NoDepth , NonArrayed , SingleSampled , NeedSampler , Rgba8 >, %arg1: vector <2 xsi32 >) -> () {
320+ // expected-error @+1 {{op failed to verify that the Dim operand of the underlying image must not be Cube}}
321+ %0 = spirv.ImageFetch %arg0 , %arg1 : !spirv.image <f32 , Cube , NoDepth , NonArrayed , SingleSampled , NeedSampler , Rgba8 >, vector <2 xsi32 > -> vector <4 xf32 >
322+ spirv.Return
323+ }
324+
325+ // -----
326+
327+ func.func @image_fetch_no_sampler (%arg0: !spirv.image <f32 , Dim2D , NoDepth , NonArrayed , SingleSampled , NoSampler , Rgba8 >, %arg1: vector <2 xsi32 >) -> () {
328+ // expected-error @+1 {{op failed to verify that the sampled operand of the underlying image must be NeedSampler}}
329+ %0 = spirv.ImageFetch %arg0 , %arg1 : !spirv.image <f32 , Dim2D , NoDepth , NonArrayed , SingleSampled , NoSampler , Rgba8 >, vector <2 xsi32 > -> vector <4 xf16 >
330+ spirv.Return
331+ }
332+
333+ // -----
334+
335+ func.func @image_fetch_type_mismatch (%arg0: !spirv.image <f32 , Dim2D , NoDepth , NonArrayed , SingleSampled , NeedSampler , Rgba8 >, %arg1: vector <2 xsi32 >) -> () {
336+ // expected-error @+1 {{op failed to verify that the result component type must match the image sampled type}}
337+ %0 = spirv.ImageFetch %arg0 , %arg1 : !spirv.image <f32 , Dim2D , NoDepth , NonArrayed , SingleSampled , NeedSampler , Rgba8 >, vector <2 xsi32 > -> vector <4 xf16 >
338+ spirv.Return
339+ }
340+
341+ // -----
342+
343+ func.func @image_fetch_2d_result (%arg0: !spirv.image <f32 , Dim2D , NoDepth , NonArrayed , SingleSampled , NeedSampler , Rgba8 >, %arg1: vector <2 xsi32 >) -> () {
344+ // expected-error @+1 {{op result #0 must be vector of 16/32/64-bit float values of length 4 or vector of 8/16/32/64-bit integer values of length 4, but got 'vector<2xf32>'}}
345+ %0 = spirv.ImageFetch %arg0 , %arg1 : !spirv.image <f32 , Dim2D , NoDepth , NonArrayed , SingleSampled , NeedSampler , Rgba8 >, vector <2 xsi32 > -> vector <2 xf32 >
346+ spirv.Return
347+ }
348+
349+ // -----
350+
351+ func.func @image_fetch_float_coords (%arg0: !spirv.image <f32 , Dim2D , NoDepth , NonArrayed , SingleSampled , NeedSampler , Rgba8 >, %arg1: vector <2 xf32 >) -> () {
352+ // expected-error @+1 {{op operand #1 must be 8/16/32/64-bit integer or vector of 8/16/32/64-bit integer values of length 2/3/4/8/16, but got 'vector<2xf32>'}}
353+ %0 = spirv.ImageFetch %arg0 , %arg1 : !spirv.image <f32 , Dim2D , NoDepth , NonArrayed , SingleSampled , NeedSampler , Rgba8 >, vector <2 xf32 > -> vector <2 xf32 >
354+ spirv.Return
355+ }
356+
307357//===----------------------------------------------------------------------===//
308358// spirv.ImageOperands: Bias
309359//===----------------------------------------------------------------------===//
0 commit comments