Skip to content

Commit 3c43f05

Browse files
Merge pull request #1366 from KhronosGroup/fix-1365
HLSL: Implement image queries for UAV images.
2 parents d638d2d + f3a362b commit 3c43f05

8 files changed

Lines changed: 355 additions & 69 deletions
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
void frag_main()
2+
{
3+
}
4+
5+
void main()
6+
{
7+
frag_main();
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
void frag_main()
2+
{
3+
}
4+
5+
void main()
6+
{
7+
frag_main();
8+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
RWTexture1D<float4> uImage1D : register(u0);
2+
RWTexture2D<float2> uImage2D : register(u1);
3+
RWTexture2DArray<float> uImage2DArray : register(u2);
4+
RWTexture3D<unorm float4> uImage3D : register(u3);
5+
RWBuffer<snorm float4> uImageBuffer : register(u6);
6+
7+
uint3 SPIRV_Cross_imageSize(RWTexture2DArray<float> Tex, out uint Param)
8+
{
9+
uint3 ret;
10+
Tex.GetDimensions(ret.x, ret.y, ret.z);
11+
Param = 0u;
12+
return ret;
13+
}
14+
15+
uint2 SPIRV_Cross_imageSize(RWTexture2D<float2> Tex, out uint Param)
16+
{
17+
uint2 ret;
18+
Tex.GetDimensions(ret.x, ret.y);
19+
Param = 0u;
20+
return ret;
21+
}
22+
23+
uint SPIRV_Cross_imageSize(RWTexture1D<float4> Tex, out uint Param)
24+
{
25+
uint ret;
26+
Tex.GetDimensions(ret.x);
27+
Param = 0u;
28+
return ret;
29+
}
30+
31+
uint3 SPIRV_Cross_imageSize(RWTexture3D<unorm float4> Tex, out uint Param)
32+
{
33+
uint3 ret;
34+
Tex.GetDimensions(ret.x, ret.y, ret.z);
35+
Param = 0u;
36+
return ret;
37+
}
38+
39+
uint SPIRV_Cross_imageSize(RWBuffer<snorm float4> Tex, out uint Param)
40+
{
41+
uint ret;
42+
Tex.GetDimensions(ret.x);
43+
Param = 0u;
44+
return ret;
45+
}
46+
47+
void frag_main()
48+
{
49+
uint _14_dummy_parameter;
50+
int a = int(SPIRV_Cross_imageSize(uImage1D, _14_dummy_parameter));
51+
uint _22_dummy_parameter;
52+
int2 b = int2(SPIRV_Cross_imageSize(uImage2D, _22_dummy_parameter));
53+
uint _30_dummy_parameter;
54+
int3 c = int3(SPIRV_Cross_imageSize(uImage2DArray, _30_dummy_parameter));
55+
uint _36_dummy_parameter;
56+
int3 d = int3(SPIRV_Cross_imageSize(uImage3D, _36_dummy_parameter));
57+
uint _42_dummy_parameter;
58+
int e = int(SPIRV_Cross_imageSize(uImageBuffer, _42_dummy_parameter));
59+
}
60+
61+
void main()
62+
{
63+
frag_main();
64+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
RWTexture1D<float4> uImage1D : register(u0);
2+
RWTexture2D<float2> uImage2D : register(u1);
3+
Texture2DArray<float4> uImage2DArray : register(t2);
4+
RWTexture3D<unorm float4> uImage3D : register(u3);
5+
RWBuffer<snorm float4> uImageBuffer : register(u6);
6+
7+
uint3 SPIRV_Cross_textureSize(Texture2DArray<float4> Tex, uint Level, out uint Param)
8+
{
9+
uint3 ret;
10+
Tex.GetDimensions(Level, ret.x, ret.y, ret.z, Param);
11+
return ret;
12+
}
13+
14+
uint2 SPIRV_Cross_imageSize(RWTexture2D<float2> Tex, out uint Param)
15+
{
16+
uint2 ret;
17+
Tex.GetDimensions(ret.x, ret.y);
18+
Param = 0u;
19+
return ret;
20+
}
21+
22+
uint SPIRV_Cross_imageSize(RWTexture1D<float4> Tex, out uint Param)
23+
{
24+
uint ret;
25+
Tex.GetDimensions(ret.x);
26+
Param = 0u;
27+
return ret;
28+
}
29+
30+
uint3 SPIRV_Cross_imageSize(RWTexture3D<unorm float4> Tex, out uint Param)
31+
{
32+
uint3 ret;
33+
Tex.GetDimensions(ret.x, ret.y, ret.z);
34+
Param = 0u;
35+
return ret;
36+
}
37+
38+
uint SPIRV_Cross_imageSize(RWBuffer<snorm float4> Tex, out uint Param)
39+
{
40+
uint ret;
41+
Tex.GetDimensions(ret.x);
42+
Param = 0u;
43+
return ret;
44+
}
45+
46+
void frag_main()
47+
{
48+
uint _14_dummy_parameter;
49+
int a = int(SPIRV_Cross_imageSize(uImage1D, _14_dummy_parameter));
50+
uint _22_dummy_parameter;
51+
int2 b = int2(SPIRV_Cross_imageSize(uImage2D, _22_dummy_parameter));
52+
uint _30_dummy_parameter;
53+
int3 c = int3(SPIRV_Cross_textureSize(uImage2DArray, 0u, _30_dummy_parameter));
54+
uint _36_dummy_parameter;
55+
int3 d = int3(SPIRV_Cross_imageSize(uImage3D, _36_dummy_parameter));
56+
uint _42_dummy_parameter;
57+
int e = int(SPIRV_Cross_imageSize(uImageBuffer, _42_dummy_parameter));
58+
}
59+
60+
void main()
61+
{
62+
frag_main();
63+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#version 450
2+
3+
layout(rgba32f, binding = 0) uniform writeonly image1D uImage1D;
4+
layout(rg32f, binding = 1) uniform writeonly image2D uImage2D;
5+
layout(r32f, binding = 2) uniform readonly image2DArray uImage2DArray;
6+
layout(rgba8, binding = 3) uniform writeonly image3D uImage3D;
7+
layout(rgba8_snorm, binding = 6) uniform writeonly imageBuffer uImageBuffer;
8+
9+
// There is no RWTexture2DMS.
10+
11+
void main()
12+
{
13+
int a = imageSize(uImage1D);
14+
ivec2 b = imageSize(uImage2D);
15+
ivec3 c = imageSize(uImage2DArray);
16+
ivec3 d = imageSize(uImage3D);
17+
int e = imageSize(uImageBuffer);
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#version 450
2+
3+
layout(rgba32f, binding = 0) uniform writeonly image1D uImage1D;
4+
layout(rg32f, binding = 1) uniform writeonly image2D uImage2D;
5+
layout(r32f, binding = 2) uniform readonly image2DArray uImage2DArray;
6+
layout(rgba8, binding = 3) uniform writeonly image3D uImage3D;
7+
layout(rgba8_snorm, binding = 6) uniform writeonly imageBuffer uImageBuffer;
8+
9+
// There is no RWTexture2DMS.
10+
11+
void main()
12+
{
13+
int a = imageSize(uImage1D);
14+
ivec2 b = imageSize(uImage2D);
15+
ivec3 c = imageSize(uImage2DArray);
16+
ivec3 d = imageSize(uImage3D);
17+
int e = imageSize(uImageBuffer);
18+
}

0 commit comments

Comments
 (0)