Skip to content

Commit 4c78efd

Browse files
authored
Unify stdlib Texture types into one generic type. (shader-slang#3327)
* Unify Texture types in stdlib into 1 generic type. * Fixes. * Fix. * Fixes. * Fix reflection. * Fix binding reflection. * Add gather intrinsics. * Fix gather intrinsics. * Fix texture type toText. * Fix intrinsic. * fix cuda intrinsic. * Fix project files. * cleanup. * Fix. * Fix. * Fix sampler feedback test. * Fix getDimension intrinsics. * Fix spirv sample image intrinsics. * Fix test. * Fix GLSL intrinsic. * Cleanup. --------- Co-authored-by: Yong He <yhe@nvidia.com>
1 parent 12f7237 commit 4c78efd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+2421
-1687
lines changed

slang.h

+2
Original file line numberDiff line numberDiff line change
@@ -2020,6 +2020,8 @@ extern "C"
20202020
SLANG_RESOURCE_ACCESS_APPEND,
20212021
SLANG_RESOURCE_ACCESS_CONSUME,
20222022
SLANG_RESOURCE_ACCESS_WRITE,
2023+
SLANG_RESOURCE_ACCESS_FEEDBACK,
2024+
SLANG_RESOURCE_ACCESS_UNKNOWN = 0x7FFFFFFF,
20232025
};
20242026

20252027
typedef unsigned int SlangParameterCategoryIntegral;

source/slang/core.meta.slang

-19
Original file line numberDiff line numberDiff line change
@@ -1476,25 +1476,6 @@ struct SamplerComparisonState
14761476
{
14771477
}
14781478

1479-
${{{{
1480-
1481-
for(auto& prefixInfo : kTexturePrefixes)
1482-
for(auto& shapeInfo : kBaseTextureShapes)
1483-
for(int isArray = 0; isArray < 2; ++isArray)
1484-
for(int isMultisample = 0; isMultisample < 2; ++isMultisample)
1485-
for(int isShadow = 0; isShadow < 2; ++isShadow)
1486-
for(auto& accessInfo : kBaseTextureAccessLevels)
1487-
{
1488-
// Define `Shadow` flavored types only for combined texture-samplers.
1489-
if (!prefixInfo.combined && isShadow == 1)
1490-
continue;
1491-
1492-
TextureTypeInfo info(prefixInfo, shapeInfo, isArray, isMultisample, isShadow, accessInfo, sb, path);
1493-
info.emitTypeDecl();
1494-
}
1495-
1496-
}}}}
1497-
14981479
//@ hidden:
14991480

15001481
${{{{

source/slang/glsl.meta.slang

+26-56
Original file line numberDiff line numberDiff line change
@@ -94,17 +94,20 @@ typealias usamplerCube = SamplerCube<uint4>;
9494
typealias isamplerCube = SamplerCube<int4>;
9595
typealias samplerCube = SamplerCube<float4>;
9696

97-
typealias usampler1DShadow = Sampler1DShadow<uint4>;
98-
typealias isampler1DShadow = Sampler1DShadow<int4>;
99-
typealias sampler1DShadow = Sampler1DShadow<float4>;
97+
typealias Sampler1DShadow<T=float> = __TextureImpl<T, __Shape1D, /*isArray:*/ 0, /*isMS:*/ 0, /*sampleCount:*/ 0, /*access:*/ 0, /*isShadow: */ 1, /*isCombined: */ 1, /*format*/ 0>;
98+
typealias usampler1DShadow = Sampler1DShadow<uint>;
99+
typealias isampler1DShadow = Sampler1DShadow<int>;
100+
typealias sampler1DShadow = Sampler1DShadow<float>;
100101

101-
typealias usampler2DShadow = Sampler2DShadow<uint4>;
102-
typealias isampler2DShadow = Sampler2DShadow<int4>;
103-
typealias sampler2DShadow = Sampler2DShadow<float4>;
102+
typealias Sampler2DShadow<T=float> = __TextureImpl<T, __Shape2D, /*isArray:*/ 0, /*isMS:*/ 0, /*sampleCount:*/ 0, /*access:*/ 0, /*isShadow: */ 1, /*isCombined: */ 1, /*format*/ 0>;
103+
typealias usampler2DShadow = Sampler2DShadow<uint>;
104+
typealias isampler2DShadow = Sampler2DShadow<int>;
105+
typealias sampler2DShadow = Sampler2DShadow<float>;
104106

105-
typealias usamplerCubeShadow = SamplerCubeShadow<uint4>;
106-
typealias isamplerCubeShadow = SamplerCubeShadow<int4>;
107-
typealias samplerCubeShadow = SamplerCubeShadow<float4>;
107+
typealias SamplerCubeShadow<T=float> = __TextureImpl<T, __ShapeCube, /*isArray:*/ 0, /*isMS:*/ 0, /*sampleCount:*/ 0, /*access:*/ 0, /*isShadow: */ 1, /*isCombined: */ 1, /*format*/ 0>;
108+
typealias usamplerCubeShadow = SamplerCubeShadow<uint>;
109+
typealias isamplerCubeShadow = SamplerCubeShadow<int>;
110+
typealias samplerCubeShadow = SamplerCubeShadow<float>;
108111

109112
typealias usampler1DArray = Sampler1DArray<uint4>;
110113
typealias isampler1DArray = Sampler1DArray<int4>;
@@ -118,20 +121,20 @@ typealias usamplerCubeArray = SamplerCubeArray<uint4>;
118121
typealias isamplerCubeArray = SamplerCubeArray<int4>;
119122
typealias samplerCubeArray = SamplerCubeArray<float4>;
120123

121-
typealias usampler1DArrayShadow = Sampler1DArrayShadow<uint4>;
122-
typealias isampler1DArrayShadow = Sampler1DArrayShadow<int4>;
123-
typealias sampler1DArrayShadow = Sampler1DArrayShadow<float4>;
124+
typealias Sampler1DArrayShadow<T=float> = __TextureImpl<T, __Shape1D, /*isArray:*/ 1, /*isMS:*/ 0, /*sampleCount:*/ 0, /*access:*/ 0, /*isShadow: */ 1, /*isCombined: */ 1, /*format*/ 0>;
125+
typealias usampler1DArrayShadow = Sampler1DArrayShadow<uint>;
126+
typealias isampler1DArrayShadow = Sampler1DArrayShadow<int>;
127+
typealias sampler1DArrayShadow = Sampler1DArrayShadow<float>;
124128

125-
typealias usampler2DArrayShadow = Sampler2DArrayShadow<uint4>;
126-
typealias isampler2DArrayShadow = Sampler2DArrayShadow<int4>;
127-
typealias sampler2DArrayShadow = Sampler2DArrayShadow<float4>;
129+
typealias Sampler2DArrayShadow<T=float> = __TextureImpl<T, __Shape2D, /*isArray:*/ 1, /*isMS:*/ 0, /*sampleCount:*/ 0, /*access:*/ 0, /*isShadow: */ 1, /*isCombined: */ 1, /*format*/ 0>;
130+
typealias usampler2DArrayShadow = Sampler2DArrayShadow<uint>;
131+
typealias isampler2DArrayShadow = Sampler2DArrayShadow<int>;
132+
typealias sampler2DArrayShadow = Sampler2DArrayShadow<float>;
128133

129-
typealias usamplerCubeArrayShadow = SamplerCubeArrayShadow<uint4>;
130-
typealias isamplerCubeArrayShadow = SamplerCubeArrayShadow<int4>;
131-
typealias samplerCubeArrayShadow = SamplerCubeArrayShadow<float4>;
132-
133-
__intrinsic_op(vectorReshape)
134-
vector<T,N> __vectorReshape<let N : int, T, let M : int>(vector<T,M> vin);
134+
typealias SamplerCubeArrayShadow<T=float> = __TextureImpl<T, __ShapeCube, /*isArray:*/ 1, /*isMS:*/ 0, /*sampleCount:*/ 0, /*access:*/ 0, /*isShadow: */ 1, /*isCombined: */ 1, /*format*/ 0>;
135+
typealias usamplerCubeArrayShadow = SamplerCubeArrayShadow<uint>;
136+
typealias isamplerCubeArrayShadow = SamplerCubeArrayShadow<int>;
137+
typealias samplerCubeArrayShadow = SamplerCubeArrayShadow<float>;
135138

136139
[ForceInline]
137140
vector<T,4> texelFetch<T:__BuiltinArithmeticType, let N : int> (Sampler1D<vector<T,N>> sampler, int p, int lod)
@@ -235,45 +238,12 @@ float texture<T:__BuiltinArithmeticType, let N : int> (Sampler2DArrayShadow<vect
235238
return sampler.SampleCmp(p.xyz, p.w);
236239
}
237240

238-
// TODO: define `texture` for SamplerCubeArrayShadow.
239-
240-
241-
vector<T,4> textureGrad<T:__BuiltinArithmeticType, let N : int> (Sampler1D<vector<T,N>> sampler, float P, float dPdx, float dPdy)
242-
{
243-
return __vectorReshape<4>(sampler.SampleGrad(P, dPdx, dPdy));
244-
}
245-
246-
vector<T,4> textureGrad<T:__BuiltinArithmeticType, let N : int> (Sampler2D<vector<T,N>> sampler, vec2 P, vec2 dPdx, vec2 dPdy)
247-
{
248-
return __vectorReshape<4>(sampler.SampleGrad(P, dPdx, dPdy));
249-
}
250-
251-
vector<T,4> textureGrad<T:__BuiltinArithmeticType, let N : int> (Sampler3D<vector<T,N>> sampler, vec3 P, vec3 dPdx, vec3 dPdy)
252-
{
253-
return __vectorReshape<4>(sampler.SampleGrad(P, dPdx, dPdy));
254-
}
255-
256-
vector<T,4> textureGrad<T:__BuiltinArithmeticType, let N : int> (SamplerCube<vector<T,N>> sampler, vec3 P, vec3 dPdx, vec3 dPdy)
257-
{
258-
return __vectorReshape<4>(sampler.SampleGrad(P, dPdx, dPdy));
259-
}
260-
261-
vector<T,4> textureGrad<T:__BuiltinArithmeticType, let N : int> (Sampler1DArray<vector<T,N>> sampler, vec2 P, float dPdx, float dPdy)
262-
{
263-
return __vectorReshape<4>(sampler.SampleGrad(P, dPdx, dPdy));
264-
}
265-
266-
vector<T,4> textureGrad<T:__BuiltinArithmeticType, let N : int> (Sampler2DArray<vector<T,N>> sampler, vec3 P, vec2 dPdx, vec2 dPdy)
241+
__generic<T:__BuiltinArithmeticType, let N : int, shape:__ITextureShape, let sampleCount: int, let isArray:int, let format:int>
242+
vector<T,4> textureGrad(__TextureImpl<vector<T,N>, shape, isArray, 0, sampleCount, 0, 1, 1, format> sampler, vector<float, shape.dimensions+isArray> P, vector<float,shape.planeDimensions> dPdx, vector<float,shape.planeDimensions> dPdy)
267243
{
268244
return __vectorReshape<4>(sampler.SampleGrad(P, dPdx, dPdy));
269245
}
270246

271-
vector<T,4> textureGrad<T:__BuiltinArithmeticType, let N : int> (SamplerCubeArray<vector<T,N>> sampler, vec4 P, vec3 dPdx, vec3 dPdy)
272-
{
273-
return __vectorReshape<4>(sampler.SampleGrad(P, dPdx, dPdy));
274-
}
275-
276-
277247
out float4 gl_Position : SV_Position;
278248
out float gl_PointSize : SV_PointSize;
279249
in vec4 gl_FragCoord : SV_Position;

0 commit comments

Comments
 (0)