// RUN: mlir-translate --no-implicit-module --split-input-file --test-spirv-roundtrip %s | FileCheck %s // RUN: %if spirv-tools %{ rm -rf %t %} // RUN: %if spirv-tools %{ mkdir %t %} // RUN: %if spirv-tools %{ mlir-translate --no-implicit-module --serialize-spirv --split-input-file --spirv-save-validation-files-with-prefix=%t/module %s %} // RUN: %if spirv-tools %{ spirv-val %t %} spirv.module Logical GLSL450 requires #spirv.vce { spirv.func @image(%arg0 : !spirv.sampled_image>, %arg1 : vector<4xf32>, %arg2 : f32) "None" { // CHECK: {{%.*}} = spirv.Image {{%.*}} : !spirv.sampled_image> %0 = spirv.Image %arg0 : !spirv.sampled_image> // CHECK: {{%.*}} = spirv.ImageDrefGather {{%.*}}, {{%.*}}, {{%.*}} : !spirv.sampled_image>, vector<4xf32>, f32 -> vector<4xf32> %1 = spirv.ImageDrefGather %arg0, %arg1, %arg2 : !spirv.sampled_image>, vector<4xf32>, f32 -> vector<4xf32> spirv.Return } spirv.func @image_query_size(%arg0 : !spirv.image) "None" { // CHECK: {{%.*}} = spirv.ImageQuerySize %arg0 : !spirv.image -> vector<2xi32> %0 = spirv.ImageQuerySize %arg0 : !spirv.image -> vector<2xi32> spirv.Return } spirv.func @image_read(%arg0 : !spirv.image, %arg1 : vector<2xsi32>) "None" { // CHECK: {{.*}} = spirv.ImageRead {{%.*}}, {{%.*}} : !spirv.image, vector<2xsi32> -> vector<4xf32> %0 = spirv.ImageRead %arg0, %arg1 : !spirv.image, vector<2xsi32> -> vector<4xf32> spirv.Return } spirv.func @image_write(%arg0 : !spirv.image, %arg1 : vector<2xsi32>, %arg2 : vector<4xf32>) "None" { // CHECK: spirv.ImageWrite {{%.*}}, {{%.*}}, {{%.*}} : !spirv.image, vector<2xsi32>, vector<4xf32> spirv.ImageWrite %arg0, %arg1, %arg2 : !spirv.image, vector<2xsi32>, vector<4xf32> spirv.Return } spirv.func @explicit_sample(%arg0 : !spirv.sampled_image>, %arg1 : vector<2xf32>, %arg2 : f32) "None" { // CHECK: {{%.*}} = spirv.ImageSampleExplicitLod {{%.*}}, {{%.*}} ["Lod"], {{%.*}} : !spirv.sampled_image>, vector<2xf32>, f32 -> vector<4xf32> %0 = spirv.ImageSampleExplicitLod %arg0, %arg1 ["Lod"], %arg2 : !spirv.sampled_image>, vector<2xf32>, f32 -> vector<4xf32> spirv.Return } spirv.func @implicit_sample(%arg0 : !spirv.sampled_image>, %arg1 : vector<3xf32>) "None" { // CHECK: {{%.*}} = spirv.ImageSampleImplicitLod {{%.*}}, {{%.*}} : !spirv.sampled_image>, vector<3xf32> -> vector<4xf32> %0 = spirv.ImageSampleImplicitLod %arg0, %arg1 : !spirv.sampled_image>, vector<3xf32> -> vector<4xf32> spirv.Return } spirv.func @implicit_sample_proj_dref(%arg0 : !spirv.sampled_image>, %arg1 : vector<4xf32>, %arg2 : f32) "None" { // CHECK: {{%.*}} = spirv.ImageSampleProjDrefImplicitLod {{%.*}}, {{%.*}}, {{%.*}} : !spirv.sampled_image>, vector<4xf32>, f32 -> f32 %0 = spirv.ImageSampleProjDrefImplicitLod %arg0, %arg1, %arg2 : !spirv.sampled_image>, vector<4xf32>, f32 -> f32 spirv.Return } spirv.func @image_fetch(%arg0 : !spirv.image, %arg1 : vector<2xsi32>) "None" { // CHECK: {{%.*}} = spirv.ImageFetch {{%.*}}, {{%.*}} : !spirv.image, vector<2xsi32> -> vector<4xf32> %0 = spirv.ImageFetch %arg0, %arg1 : !spirv.image, vector<2xsi32> -> vector<4xf32> spirv.Return } } // ----- spirv.module Logical GLSL450 requires #spirv.vce { spirv.func @image_read_write(%arg0 : !spirv.image, %arg1 : vector<2xsi32>) "None" { // CHECK: spirv.ImageRead {{%.*}}, {{%.*}} : !spirv.image, vector<2xsi32> -> vector<4xf32> %0 = spirv.ImageRead %arg0, %arg1 : !spirv.image, vector<2xsi32> -> vector<4xf32> // CHECK: spirv.ImageWrite {{%.*}}, {{%.*}}, {{%.*}} : !spirv.image, vector<2xsi32>, vector<4xf32> spirv.ImageWrite %arg0, %arg1, %0 : !spirv.image, vector<2xsi32>, vector<4xf32> spirv.Return } } // ----- spirv.module Logical GLSL450 requires #spirv.vce { spirv.func @sampled_image(%arg0 : !spirv.image, %arg1 : !spirv.sampler) "None" { // CHECK: {{%.*}} = spirv.SampledImage {{%.*}}, {{%.*}} : !spirv.image, !spirv.sampler -> !spirv.sampled_image> %0 = spirv.SampledImage %arg0, %arg1 : !spirv.image, !spirv.sampler -> !spirv.sampled_image> spirv.Return } }