summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/glsl.meta.slang513
-rw-r--r--source/slang/hlsl.meta.slang298
-rw-r--r--source/slang/slang-check-inheritance.cpp4
-rw-r--r--source/slang/slang-emit-cpp.cpp5
-rw-r--r--source/slang/slang-ir-peephole.cpp2
5 files changed, 461 insertions, 361 deletions
diff --git a/source/slang/glsl.meta.slang b/source/slang/glsl.meta.slang
index ba26b5d84..1b44c7825 100644
--- a/source/slang/glsl.meta.slang
+++ b/source/slang/glsl.meta.slang
@@ -1354,6 +1354,9 @@ public vector<bool,N> not(vector<bool,N> x)
return !x;
}
+__intrinsic_op(vectorReshape)
+vector<T,N> __vectorReshape2<T, let N : int, U>(U vin);
+
//
// Section 8.9.1. Texture Query Functions
//
@@ -1472,7 +1475,7 @@ public typealias sampler2DMSArray = Sampler2DMSArray<float4>;
public typealias isampler2DMSArray = Sampler2DMSArray<int4>;
public typealias usampler2DMSArray = Sampler2DMSArray<uint4>;
-__generic<T=float4, let sampleCount:int=0, let format:int=0>
+__generic<T:ITexelElement=float4, let sampleCount:int=0, let format:int=0>
public typealias Sampler2DRect = _Texture<T, __Shape2D, 0, 0, sampleCount, 0, 0, 1, format>;
public typealias sampler2DRect = Sampler2DRect<float4>;
public typealias isampler2DRect = Sampler2DRect<int4>;
@@ -1491,7 +1494,7 @@ public typealias sampler2DRectShadow = _Texture<
format
>;
-__generic<T, let format:int=0>
+__generic<T:ITexelElement, let format:int=0>
public typealias SamplerBuffer = _Texture<
T,
__ShapeBuffer,
@@ -1512,10 +1515,10 @@ public typealias usamplerBuffer = SamplerBuffer<uint4>;
// textureSize
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_size)]
-public int textureSize(Sampler1D<vector<T,N>> sampler, int lod)
+public int textureSize(Sampler1D<T> sampler, int lod)
{
int result;
int numberOfLevels;
@@ -1523,10 +1526,10 @@ public int textureSize(Sampler1D<vector<T,N>> sampler, int lod)
return result;
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_size)]
-public ivec2 textureSize(Sampler2D<vector<T,N>> sampler, int lod)
+public ivec2 textureSize(Sampler2D<T> sampler, int lod)
{
vector<int,2> result;
int numberOfLevels;
@@ -1534,10 +1537,10 @@ public ivec2 textureSize(Sampler2D<vector<T,N>> sampler, int lod)
return result;
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_size)]
-public ivec3 textureSize(Sampler3D<vector<T,N>> sampler, int lod)
+public ivec3 textureSize(Sampler3D<T> sampler, int lod)
{
vector<int,3> result;
int numberOfLevels;
@@ -1545,10 +1548,10 @@ public ivec3 textureSize(Sampler3D<vector<T,N>> sampler, int lod)
return result;
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_size)]
-public ivec2 textureSize(SamplerCube<vector<T,N>> sampler, int lod)
+public ivec2 textureSize(SamplerCube<T> sampler, int lod)
{
vector<int,2> result;
int numberOfLevels;
@@ -1587,9 +1590,9 @@ public ivec2 textureSize(samplerCubeShadow sampler, int lod)
}
[require(glsl_hlsl_spirv, texture_size)]
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
-public ivec3 textureSize(SamplerCubeArray<vector<T,N>> sampler, int lod)
+public ivec3 textureSize(SamplerCubeArray<T> sampler, int lod)
{
vector<int,3> result;
int numberOfLevels;
@@ -1608,9 +1611,9 @@ public ivec3 textureSize(samplerCubeArrayShadow sampler, int lod)
}
[require(glsl_hlsl_spirv, texture_size)]
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
-public ivec2 textureSize(Sampler2DRect<vector<T,N>> sampler)
+public ivec2 textureSize(Sampler2DRect<T> sampler)
{
vector<int,2> result;
int numberOfLevels;
@@ -1629,9 +1632,9 @@ public ivec2 textureSize(sampler2DRectShadow sampler)
}
[require(glsl_hlsl_spirv, texture_size)]
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
-public ivec2 textureSize(Sampler1DArray<vector<T,N>> sampler, int lod)
+public ivec2 textureSize(Sampler1DArray<T> sampler, int lod)
{
vector<int,2> result;
int numberOfLevels;
@@ -1650,9 +1653,9 @@ public ivec2 textureSize(sampler1DArrayShadow sampler, int lod)
}
[require(glsl_hlsl_spirv, texture_size)]
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
-public ivec3 textureSize(Sampler2DArray<vector<T,N>> sampler, int lod)
+public ivec3 textureSize(Sampler2DArray<T> sampler, int lod)
{
vector<int,3> result;
int numberOfLevels;
@@ -1671,9 +1674,9 @@ public ivec3 textureSize(sampler2DArrayShadow sampler, int lod)
}
[require(glsl_hlsl_spirv, texture_size)]
-__generic<T:__BuiltinArithmeticType, let N:int, let format:int>
+__generic<T:ITexelElement, let format:int>
[ForceInline]
-public int textureSize(SamplerBuffer<vector<T,N>,format> sampler)
+public int textureSize(SamplerBuffer<T,format> sampler)
{
uint result;
sampler.GetDimensions(result);
@@ -1681,9 +1684,9 @@ public int textureSize(SamplerBuffer<vector<T,N>,format> sampler)
}
[require(glsl_hlsl_spirv, texture_size)]
-__generic<T:__BuiltinArithmeticType, let N:int, let sampleCount:int>
+__generic<T:ITexelElement, let sampleCount:int>
[ForceInline]
-public ivec2 textureSize(Sampler2DMS<vector<T,N>,sampleCount> sampler)
+public ivec2 textureSize(Sampler2DMS<T,sampleCount> sampler)
{
vector<int,2> result;
int sampleCount;
@@ -1693,9 +1696,9 @@ public ivec2 textureSize(Sampler2DMS<vector<T,N>,sampleCount> sampler)
}
[require(glsl_hlsl_spirv, texture_size)]
-__generic<T:__BuiltinArithmeticType, let N:int, let sampleCount:int>
+__generic<T:ITexelElement, let sampleCount:int>
[ForceInline]
-public ivec3 textureSize(Sampler2DMSArray<vector<T,N>,sampleCount> sampler)
+public ivec3 textureSize(Sampler2DMSArray<T,sampleCount> sampler)
{
vector<int,3> result;
int sampleCount;
@@ -1708,7 +1711,7 @@ public ivec3 textureSize(Sampler2DMSArray<vector<T,N>,sampleCount> sampler)
// textureQueryLod
// -------------------
-__generic<T, let isArray:int, let sampleCount:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, let isArray:int, let sampleCount:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_hlsl_metal_spirv, texture_querylod)]
public vec2 textureQueryLod(_Texture<
@@ -1741,7 +1744,7 @@ public vec2 textureQueryLod(_Texture<
}
}
-__generic<T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_hlsl_metal_spirv, texture_querylod)]
public vec2 textureQueryLod(_Texture<
@@ -1778,10 +1781,10 @@ public vec2 textureQueryLod(_Texture<
// textureQueryLevels
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_metal_spirv, texture_querylevels)]
-public int textureQueryLevels(Sampler1D<vector<T,N>> sampler)
+public int textureQueryLevels(Sampler1D<T> sampler)
{
int width;
int numberOfLevels;
@@ -1789,10 +1792,10 @@ public int textureQueryLevels(Sampler1D<vector<T,N>> sampler)
return numberOfLevels;
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_metal_spirv, texture_querylevels)]
-public int textureQueryLevels(Sampler2D<vector<T,N>> sampler)
+public int textureQueryLevels(Sampler2D<T> sampler)
{
vector<int,2> dim;
int numberOfLevels;
@@ -1800,10 +1803,10 @@ public int textureQueryLevels(Sampler2D<vector<T,N>> sampler)
return numberOfLevels;
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_metal_spirv, texture_querylevels)]
-public int textureQueryLevels(Sampler3D<vector<T,N>> sampler)
+public int textureQueryLevels(Sampler3D<T> sampler)
{
vector<int,3> dim;
int numberOfLevels;
@@ -1811,10 +1814,10 @@ public int textureQueryLevels(Sampler3D<vector<T,N>> sampler)
return numberOfLevels;
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_metal_spirv, texture_querylevels)]
-public int textureQueryLevels(SamplerCube<vector<T,N>> sampler)
+public int textureQueryLevels(SamplerCube<T> sampler)
{
vector<int,2> dim;
int numberOfLevels;
@@ -1822,10 +1825,10 @@ public int textureQueryLevels(SamplerCube<vector<T,N>> sampler)
return numberOfLevels;
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_metal_spirv, texture_querylevels)]
-public int textureQueryLevels(Sampler1DArray<vector<T,N>> sampler)
+public int textureQueryLevels(Sampler1DArray<T> sampler)
{
vector<int,2> dim;
int numberOfLevels;
@@ -1833,10 +1836,10 @@ public int textureQueryLevels(Sampler1DArray<vector<T,N>> sampler)
return numberOfLevels;
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_metal_spirv, texture_querylevels)]
-public int textureQueryLevels(Sampler2DArray<vector<T,N>> sampler)
+public int textureQueryLevels(Sampler2DArray<T> sampler)
{
vector<int,3> dim;
int numberOfLevels;
@@ -1844,10 +1847,10 @@ public int textureQueryLevels(Sampler2DArray<vector<T,N>> sampler)
return numberOfLevels;
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_metal_spirv, texture_querylevels)]
-public int textureQueryLevels(SamplerCubeArray<vector<T,N>> sampler)
+public int textureQueryLevels(SamplerCubeArray<T> sampler)
{
vector<int,3> dim;
int numberOfLevels;
@@ -1919,7 +1922,7 @@ public int textureQueryLevels(samplerCubeArrayShadow sampler)
// textureSamples
// -------------------
-__generic<T, let sampleCount:int>
+__generic<T:ITexelElement, let sampleCount:int>
[ForceInline]
[require(glsl_hlsl_spirv, image_samples)]
public int textureSamples(Sampler2DMS<T,sampleCount> sampler)
@@ -1931,7 +1934,7 @@ public int textureSamples(Sampler2DMS<T,sampleCount> sampler)
return sampleCount;
}
-__generic<T, let sampleCount:int>
+__generic<T:ITexelElement, let sampleCount:int>
[ForceInline]
[require(glsl_hlsl_spirv, image_samples)]
public int textureSamples(Sampler2DMSArray<T,sampleCount> sampler)
@@ -1951,27 +1954,27 @@ public int textureSamples(Sampler2DMSArray<T,sampleCount> sampler)
// texture
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> texture(Sampler1D<vector<T,N>> sampler, float p)
+public vector<T.Element,4> texture(Sampler1D<T> sampler, float p)
{
- return __vectorReshape<4>(sampler.Sample(p));
+ return __vectorReshape2<T.Element, 4>(sampler.Sample(p));
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> texture(Sampler1D<vector<T,N>> sampler, float p, constexpr float bias)
+public vector<T.Element,4> texture(Sampler1D<T> sampler, float p, constexpr float bias)
{
- return __vectorReshape<4>(sampler.SampleBias(p, bias));
+ return __vectorReshape2<T.Element, 4>(sampler.SampleBias(p, bias));
}
-__generic<T:__BuiltinArithmeticType, let N:int, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let format:int>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> texture(_Texture<
- vector<T,N>,
+public vector<T.Element,4> texture(_Texture<
+ T,
Shape,
isArray,
0, // isMS
@@ -1982,14 +1985,14 @@ public vector<T,4> texture(_Texture<
format
> sampler, vector<float,Shape.dimensions+isArray> p)
{
- return __vectorReshape<4>(sampler.Sample(p));
+ return __vectorReshape2<T.Element, 4>(sampler.Sample(p));
}
-__generic<T:__BuiltinArithmeticType, let N:int, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let format:int>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> texture(_Texture<
- vector<T,N>,
+public vector<T.Element,4> texture(_Texture<
+ T,
Shape,
isArray,
0, // isMS
@@ -2000,7 +2003,7 @@ public vector<T,4> texture(_Texture<
format
> sampler, vector<float,Shape.dimensions+isArray> p, constexpr float bias)
{
- return __vectorReshape<4>(sampler.SampleBias(p, bias));
+ return __vectorReshape2<T.Element,4>(sampler.SampleBias(p, bias));
}
[ForceInline]
@@ -2137,170 +2140,170 @@ public float texture(samplerCubeArrayShadow sampler, vec4 p, float compare)
// textureProj
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProj(Sampler1D<vector<T,N>> sampler, vec2 p)
+public vector<T.Element,4> textureProj(Sampler1D<T> sampler, vec2 p)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProj";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p
};
default:
return texture(sampler, p.x / p.y);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProj(Sampler1D<vector<T,N>> sampler, vec2 p, float bias)
+public vector<T.Element,4> textureProj(Sampler1D<T> sampler, vec2 p, float bias)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProj";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p Bias $bias
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p Bias $bias
};
default:
return texture(sampler, p.x / p.y, bias);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProj(Sampler1D<vector<T,N>> sampler, vec4 p)
+public vector<T.Element,4> textureProj(Sampler1D<T> sampler, vec4 p)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProj";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p
};
default:
return texture(sampler, p.x / p.w);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProj(Sampler1D<vector<T,N>> sampler, vec4 p, float bias)
+public vector<T.Element,4> textureProj(Sampler1D<T> sampler, vec4 p, float bias)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProj";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p Bias $bias
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p Bias $bias
};
default:
return texture(sampler, p.x / p.w, bias);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProj(Sampler2D<vector<T,N>> sampler, vec3 p)
+public vector<T.Element,4> textureProj(Sampler2D<T> sampler, vec3 p)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProj";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p
};
default:
return texture(sampler, p.xy / p.z);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProj(Sampler2D<vector<T,N>> sampler, vec3 p, float bias)
+public vector<T.Element,4> textureProj(Sampler2D<T> sampler, vec3 p, float bias)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProj";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p Bias $bias
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p Bias $bias
};
default:
return texture(sampler, p.xy / p.z, bias);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProj(Sampler2D<vector<T,N>> sampler, vec4 p)
+public vector<T.Element,4> textureProj(Sampler2D<T> sampler, vec4 p)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProj";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p
};
default:
return texture(sampler, p.xy / p.w);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProj(Sampler2D<vector<T,N>> sampler, vec4 p, float bias)
+public vector<T.Element,4> textureProj(Sampler2D<T> sampler, vec4 p, float bias)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProj";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p Bias $bias
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p Bias $bias
};
default:
return texture(sampler, p.xy / p.w, bias);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProj(Sampler3D<vector<T,N>> sampler, vec4 p)
+public vector<T.Element,4> textureProj(Sampler3D<T> sampler, vec4 p)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProj";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p
};
default:
return texture(sampler, p.xyz / p.w);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProj(Sampler3D<vector<T,N>> sampler, vec4 p, float bias)
+public vector<T.Element,4> textureProj(Sampler3D<T> sampler, vec4 p, float bias)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProj";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p Bias $bias
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p Bias $bias
};
default:
return texture(sampler, p.xyz / p.w, bias);
@@ -2395,19 +2398,19 @@ public float textureProj(sampler2DShadow sampler, vec4 p, float bias)
// textureLod
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureLod(Sampler1D<vector<T,N>> sampler, float p, float lod)
+public vector<T.Element,4> textureLod(Sampler1D<T> sampler, float p, float lod)
{
- return __vectorReshape<4>(sampler.SampleLevel(p, lod));
+ return __vectorReshape2<T.Element,4>(sampler.SampleLevel(p, lod));
}
-__generic<T:__BuiltinArithmeticType, let N:int, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let format:int>
[ForceInline]
[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureLod(_Texture<
- vector<T,N>,
+public vector<T.Element,4> textureLod(_Texture<
+ T,
Shape,
isArray,
0, // isMS
@@ -2418,7 +2421,7 @@ public vector<T,4> textureLod(_Texture<
format
> sampler, vector<float,Shape.dimensions+isArray> p, float lod)
{
- return __vectorReshape<4>(sampler.SampleLevel(p, lod));
+ return __vectorReshape2<T.Element,4>(sampler.SampleLevel(p, lod));
}
[ForceInline]
@@ -2501,28 +2504,28 @@ public float textureLod(sampler1DArrayShadow sampler, vec3 p, float lod)
// textureOffset
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureOffset(Sampler1D<vector<T,N>> sampler, float p, constexpr int offset, float bias = 0.0)
+public vector<T.Element,4> textureOffset(Sampler1D<T> sampler, float p, constexpr int offset, float bias = 0.0)
{
- return __vectorReshape<4>(sampler.SampleBias(p, bias, offset));
+ return __vectorReshape2<T.Element,4>(sampler.SampleBias(p, bias, offset));
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureOffset(Sampler2D<vector<T,N>> sampler, vec2 p, constexpr ivec2 offset, float bias = 0.0)
+public vector<T.Element,4> textureOffset(Sampler2D<T> sampler, vec2 p, constexpr ivec2 offset, float bias = 0.0)
{
- return __vectorReshape<4>(sampler.SampleBias(p, bias, offset));
+ return __vectorReshape2<T.Element,4>(sampler.SampleBias(p, bias, offset));
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureOffset(Sampler3D<vector<T,N>> sampler, vec3 p, constexpr ivec3 offset, float bias = 0.0)
+public vector<T.Element,4> textureOffset(Sampler3D<T> sampler, vec3 p, constexpr ivec3 offset, float bias = 0.0)
{
- return __vectorReshape<4>(sampler.SampleBias(p, bias, offset));
+ return __vectorReshape2<T.Element,4>(sampler.SampleBias(p, bias, offset));
}
[ForceInline]
@@ -2591,20 +2594,20 @@ public float textureOffset(sampler1DShadow sampler, vec3 p, constexpr int offset
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureOffset(Sampler1DArray<vector<T,N>> sampler, vec2 p, constexpr int offset, float bias = 0.0)
+public vector<T.Element,4> textureOffset(Sampler1DArray<T> sampler, vec2 p, constexpr int offset, float bias = 0.0)
{
- return __vectorReshape<4>(sampler.SampleBias(p, bias, offset));
+ return __vectorReshape2<T.Element,4>(sampler.SampleBias(p, bias, offset));
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureOffset(Sampler2DArray<vector<T,N>> sampler, vec3 p, constexpr ivec2 offset, float bias = 0.0)
+public vector<T.Element,4> textureOffset(Sampler2DArray<T> sampler, vec3 p, constexpr ivec2 offset, float bias = 0.0)
{
- return __vectorReshape<4>(sampler.SampleBias(p, bias, offset));
+ return __vectorReshape2<T.Element,4>(sampler.SampleBias(p, bias, offset));
}
[ForceInline]
@@ -2662,19 +2665,19 @@ public float textureOffset(sampler2DArrayShadow sampler, vec4 p, constexpr ivec2
// texelFetch
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)]
-public vector<T,4> texelFetch(Sampler1D<vector<T,N>> sampler, int p, int lod)
+public vector<T.Element,4> texelFetch(Sampler1D<T> sampler, int p, int lod)
{
- return __vectorReshape<4>(sampler.Load(int2(p, lod)));
+ return __vectorReshape2<T.Element,4>(sampler.Load(int2(p, lod)));
}
-__generic<T:__BuiltinArithmeticType, let N:int, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int>
+__generic<T:ITexelElement, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)]
-public vector<T,4> texelFetch(_Texture<
- vector<T,N>,
+public vector<T.Element,4> texelFetch(_Texture<
+ T,
Shape,
isArray,
0, // isMS
@@ -2685,30 +2688,30 @@ public vector<T,4> texelFetch(_Texture<
format
> sampler, vector<int,Shape.dimensions+isArray> p, int lod)
{
- return __vectorReshape<4>(sampler.Load(__makeVector(p,lod)));
+ return __vectorReshape2<T.Element,4>(sampler.Load(__makeVector(p,lod)));
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)]
-public vector<T,4> texelFetch(Sampler2DRect<vector<T,N>> sampler, ivec2 p)
+public vector<T.Element,4> texelFetch(Sampler2DRect<T> sampler, ivec2 p)
{
- return __vectorReshape<4>(sampler.Load(int3(p.xy,0)));
+ return __vectorReshape2<T.Element,4>(sampler.Load(int3(p.xy,0)));
}
-__generic<T:__BuiltinArithmeticType, let N:int, let format:int>
+__generic<T:ITexelElement, let format:int>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_1_samplerless)]
-public vector<T,4> texelFetch(SamplerBuffer<vector<T,N>,format> sampler, int p)
+public vector<T.Element,4> texelFetch(SamplerBuffer<T,format> sampler, int p)
{
- return __vectorReshape<4>(sampler.Load(p));
+ return __vectorReshape2<T.Element,4>(sampler.Load(p));
}
-__generic<T:__BuiltinArithmeticType, let N:int, let isArray:int, let sampleCount:int, let format:int>
+__generic<T:ITexelElement, let isArray:int, let sampleCount:int, let format:int>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)]
-public vector<T,4> texelFetch(_Texture<
- vector<T,N>,
+public vector<T.Element,4> texelFetch(_Texture<
+ T,
__Shape2D,
isArray,
1, // isMS
@@ -2724,7 +2727,7 @@ public vector<T,4> texelFetch(_Texture<
case glsl: __intrinsic_asm "texelFetch";
default:
// TODO: Need to apply lod
- return __vectorReshape<4>(sampler.Load(__makeVector(p, 0)));
+ return __vectorReshape2<T.Element,4>(sampler.Load(__makeVector(p, 0)));
}
}
@@ -2732,19 +2735,19 @@ public vector<T,4> texelFetch(_Texture<
// texelFetchOffset
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)]
-public vector<T,4> texelFetchOffset(Sampler1D<vector<T,N>> sampler, int p, int lod, constexpr int offset)
+public vector<T.Element,4> texelFetchOffset(Sampler1D<T> sampler, int p, int lod, constexpr int offset)
{
- return __vectorReshape<4>(sampler.Load(int2(p, lod), offset));
+ return __vectorReshape2<T.Element,4>(sampler.Load(int2(p, lod), offset));
}
-__generic<T:__BuiltinArithmeticType, let N:int, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int>
+__generic<T:ITexelElement, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)]
-public vector<T,4> texelFetchOffset(_Texture<
- vector<T,N>,
+public vector<T.Element,4> texelFetchOffset(_Texture<
+ T,
Shape,
isArray,
0, // isMS
@@ -2755,59 +2758,59 @@ public vector<T,4> texelFetchOffset(_Texture<
format
> sampler, vector<int,Shape.dimensions+isArray> p, int lod, constexpr vector<int,Shape.planeDimensions> offset)
{
- return __vectorReshape<4>(sampler.Load(__makeVector(p,lod), offset));
+ return __vectorReshape2<T.Element,4>(sampler.Load(__makeVector(p,lod), offset));
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)]
-public vector<T,4> texelFetchOffset(Sampler2DRect<vector<T,N>> sampler, ivec2 p, constexpr ivec2 offset)
+public vector<T.Element,4> texelFetchOffset(Sampler2DRect<T> sampler, ivec2 p, constexpr ivec2 offset)
{
- return __vectorReshape<4>(sampler.Load(__makeVector(p, 0), offset));
+ return __vectorReshape2<T.Element,4>(sampler.Load(__makeVector(p, 0), offset));
}
// -------------------
// textureProjOffset
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjOffset(Sampler1D<vector<T,N>> sampler, vec2 p, constexpr int offset)
+public vector<T.Element,4> textureProjOffset(Sampler1D<T> sampler, vec2 p, constexpr int offset)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProjOffset";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p ConstOffset $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p ConstOffset $offset
};
default:
return textureOffset(sampler, p.x / p.y, offset);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjOffset(Sampler1D<vector<T,N>> sampler, vec2 p, constexpr int offset, float bias)
+public vector<T.Element,4> textureProjOffset(Sampler1D<T> sampler, vec2 p, constexpr int offset, float bias)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProjOffset";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p Bias|ConstOffset $bias $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p Bias|ConstOffset $bias $offset
};
default:
return textureOffset(sampler, p.x / p.y, offset, bias);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjOffset(Sampler1D<vector<T,N>> sampler, vec4 p, constexpr int offset)
+public vector<T.Element,4> textureProjOffset(Sampler1D<T> sampler, vec4 p, constexpr int offset)
{
__requireComputeDerivative();
__target_switch
@@ -2817,7 +2820,7 @@ public vector<T,4> textureProjOffset(Sampler1D<vector<T,N>> sampler, vec4 p, con
{
vec4 xw__ = p.xwww;
return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $xw__ ConstOffset $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $xw__ ConstOffset $offset
};
}
default:
@@ -2825,10 +2828,10 @@ public vector<T,4> textureProjOffset(Sampler1D<vector<T,N>> sampler, vec4 p, con
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjOffset(Sampler1D<vector<T,N>> sampler, vec4 p, constexpr int offset, float bias)
+public vector<T.Element,4> textureProjOffset(Sampler1D<T> sampler, vec4 p, constexpr int offset, float bias)
{
__requireComputeDerivative();
__target_switch
@@ -2838,7 +2841,7 @@ public vector<T,4> textureProjOffset(Sampler1D<vector<T,N>> sampler, vec4 p, con
{
vec4 xw__ = p.xwww;
return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $xw__ Bias|ConstOffset $bias $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $xw__ Bias|ConstOffset $bias $offset
};
}
default:
@@ -2846,44 +2849,44 @@ public vector<T,4> textureProjOffset(Sampler1D<vector<T,N>> sampler, vec4 p, con
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjOffset(Sampler2D<vector<T,N>> sampler, vec3 p, constexpr ivec2 offset)
+public vector<T.Element,4> textureProjOffset(Sampler2D<T> sampler, vec3 p, constexpr ivec2 offset)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProjOffset";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p ConstOffset $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p ConstOffset $offset
};
default:
return textureOffset(sampler, p.xy / p.z, offset);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjOffset(Sampler2D<vector<T,N>> sampler, vec3 p, constexpr ivec2 offset, float bias)
+public vector<T.Element,4> textureProjOffset(Sampler2D<T> sampler, vec3 p, constexpr ivec2 offset, float bias)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProjOffset";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p Bias|ConstOffset $bias $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p Bias|ConstOffset $bias $offset
};
default:
return textureOffset(sampler, p.xy / p.z, offset, bias);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjOffset(Sampler2D<vector<T,N>> sampler, vec4 p, constexpr ivec2 offset)
+public vector<T.Element,4> textureProjOffset(Sampler2D<T> sampler, vec4 p, constexpr ivec2 offset)
{
__requireComputeDerivative();
__target_switch
@@ -2893,7 +2896,7 @@ public vector<T,4> textureProjOffset(Sampler2D<vector<T,N>> sampler, vec4 p, con
{
vec4 xyw__ = p.xyww;
return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $xyw__ ConstOffset $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $xyw__ ConstOffset $offset
};
}
default:
@@ -2901,10 +2904,10 @@ public vector<T,4> textureProjOffset(Sampler2D<vector<T,N>> sampler, vec4 p, con
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjOffset(Sampler2D<vector<T,N>> sampler, vec4 p, constexpr ivec2 offset, float bias)
+public vector<T.Element,4> textureProjOffset(Sampler2D<T> sampler, vec4 p, constexpr ivec2 offset, float bias)
{
__requireComputeDerivative();
__target_switch
@@ -2914,7 +2917,7 @@ public vector<T,4> textureProjOffset(Sampler2D<vector<T,N>> sampler, vec4 p, con
{
vec4 xyw_ = p.xyww;
return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $xyw_ Bias|ConstOffset $bias $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $xyw_ Bias|ConstOffset $bias $offset
};
}
default:
@@ -2922,34 +2925,34 @@ public vector<T,4> textureProjOffset(Sampler2D<vector<T,N>> sampler, vec4 p, con
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjOffset(Sampler3D<vector<T,N>> sampler, vec4 p, constexpr ivec3 offset)
+public vector<T.Element,4> textureProjOffset(Sampler3D<T> sampler, vec4 p, constexpr ivec3 offset)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProjOffset";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p ConstOffset $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p ConstOffset $offset
};
default:
return textureOffset(sampler, p.xyz / p.w, offset);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjOffset(Sampler3D<vector<T,N>> sampler, vec4 p, constexpr ivec3 offset, float bias)
+public vector<T.Element,4> textureProjOffset(Sampler3D<T> sampler, vec4 p, constexpr ivec3 offset, float bias)
{
__requireComputeDerivative();
__target_switch
{
case glsl: __intrinsic_asm "textureProjOffset";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjImplicitLod $sampler $p Bias|ConstOffset $bias $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjImplicitLod $sampler $p Bias|ConstOffset $bias $offset
};
default:
return textureOffset(sampler, p.xyz / p.w, offset, bias);
@@ -3044,19 +3047,19 @@ public float textureProjOffset(sampler2DShadow sampler, vec4 p, constexpr ivec2
// textureLodOffset
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0)]
-public vector<T,4> textureLodOffset(Sampler1D<vector<T,N>> sampler, float p, float lod, constexpr int offset)
+public vector<T.Element,4> textureLodOffset(Sampler1D<T> sampler, float p, float lod, constexpr int offset)
{
- return __vectorReshape<4>(sampler.SampleLevel(p, lod, offset));
+ return __vectorReshape2<T.Element,4>(sampler.SampleLevel(p, lod, offset));
}
-__generic<T:__BuiltinArithmeticType, let N:int, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int>
+__generic<T:ITexelElement, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_0)]
-public vector<T,4> textureLodOffset(_Texture<
- vector<T,N>,
+public vector<T.Element,4> textureLodOffset(_Texture<
+ T,
Shape,
isArray,
0, // isMS
@@ -3067,7 +3070,7 @@ public vector<T,4> textureLodOffset(_Texture<
format
> sampler, vector<float,Shape.dimensions+isArray> p, float lod, constexpr vector<int,Shape.planeDimensions> offset)
{
- return __vectorReshape<4>(sampler.SampleLevel(p, lod, offset));
+ return __vectorReshape2<T.Element,4>(sampler.SampleLevel(p, lod, offset));
}
[ForceInline]
@@ -3134,26 +3137,26 @@ public float textureLodOffset(sampler1DArrayShadow sampler, vec3 p, float lod, c
// textureProjLod
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjLod(Sampler1D<vector<T,N>> sampler, vec2 p, float lod)
+public vector<T.Element,4> textureProjLod(Sampler1D<T> sampler, vec2 p, float lod)
{
__target_switch
{
case glsl: __intrinsic_asm "textureProjLod";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $p Lod $lod
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $p Lod $lod
};
default:
return textureLod(sampler, p.x / p.y, lod);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjLod(Sampler1D<vector<T,N>> sampler, vec4 p, float lod)
+public vector<T.Element,4> textureProjLod(Sampler1D<T> sampler, vec4 p, float lod)
{
__target_switch
{
@@ -3162,7 +3165,7 @@ public vector<T,4> textureProjLod(Sampler1D<vector<T,N>> sampler, vec4 p, float
{
vec4 xw__ = p.xwww;
return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $xw__ Lod $lod
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $xw__ Lod $lod
};
}
default:
@@ -3170,26 +3173,26 @@ public vector<T,4> textureProjLod(Sampler1D<vector<T,N>> sampler, vec4 p, float
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjLod(Sampler2D<vector<T,N>> sampler, vec3 p, float lod)
+public vector<T.Element,4> textureProjLod(Sampler2D<T> sampler, vec3 p, float lod)
{
__target_switch
{
case glsl: __intrinsic_asm "textureProjLod";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $p Lod $lod
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $p Lod $lod
};
default:
return textureLod(sampler, p.xy / p.z, lod);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjLod(Sampler2D<vector<T,N>> sampler, vec4 p, float lod)
+public vector<T.Element,4> textureProjLod(Sampler2D<T> sampler, vec4 p, float lod)
{
__target_switch
{
@@ -3198,7 +3201,7 @@ public vector<T,4> textureProjLod(Sampler2D<vector<T,N>> sampler, vec4 p, float
{
vec4 xyw_ = p.xyww;
return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $xyw_ Lod $lod
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $xyw_ Lod $lod
};
}
default:
@@ -3206,16 +3209,16 @@ public vector<T,4> textureProjLod(Sampler2D<vector<T,N>> sampler, vec4 p, float
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjLod(Sampler3D<vector<T,N>> sampler, vec4 p, float lod)
+public vector<T.Element,4> textureProjLod(Sampler3D<T> sampler, vec4 p, float lod)
{
__target_switch
{
case glsl: __intrinsic_asm "textureProjLod";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $p Lod $lod
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $p Lod $lod
};
default:
return textureLod(sampler, p.xyz / p.w, lod);
@@ -3266,26 +3269,26 @@ public float textureProjLod(sampler2DShadow sampler, vec4 p, float lod)
// textureProjLodOffset
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjLodOffset(Sampler1D<vector<T,N>> sampler, vec2 p, float lod, constexpr int offset)
+public vector<T.Element,4> textureProjLodOffset(Sampler1D<T> sampler, vec2 p, float lod, constexpr int offset)
{
__target_switch
{
case glsl: __intrinsic_asm "textureProjLodOffset";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $p Lod|ConstOffset $lod $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $p Lod|ConstOffset $lod $offset
};
default:
return textureLodOffset(sampler, p.x / p.y, lod, offset);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjLodOffset(Sampler1D<vector<T,N>> sampler, vec4 p, float lod, constexpr int offset)
+public vector<T.Element,4> textureProjLodOffset(Sampler1D<T> sampler, vec4 p, float lod, constexpr int offset)
{
__target_switch
{
@@ -3294,7 +3297,7 @@ public vector<T,4> textureProjLodOffset(Sampler1D<vector<T,N>> sampler, vec4 p,
{
vec4 xw__ = p.xwww;
return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $xw__ Lod|ConstOffset $lod $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $xw__ Lod|ConstOffset $lod $offset
};
}
default:
@@ -3302,26 +3305,26 @@ public vector<T,4> textureProjLodOffset(Sampler1D<vector<T,N>> sampler, vec4 p,
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjLodOffset(Sampler2D<vector<T,N>> sampler, vec3 p, float lod, constexpr ivec2 offset)
+public vector<T.Element,4> textureProjLodOffset(Sampler2D<T> sampler, vec3 p, float lod, constexpr ivec2 offset)
{
__target_switch
{
case glsl: __intrinsic_asm "textureProjLodOffset";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $p Lod|ConstOffset $lod $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $p Lod|ConstOffset $lod $offset
};
default:
return textureLodOffset(sampler, p.xy / p.z, lod, offset);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjLodOffset(Sampler2D<vector<T,N>> sampler, vec4 p, float lod, constexpr ivec2 offset)
+public vector<T.Element,4> textureProjLodOffset(Sampler2D<T> sampler, vec4 p, float lod, constexpr ivec2 offset)
{
__target_switch
{
@@ -3330,7 +3333,7 @@ public vector<T,4> textureProjLodOffset(Sampler2D<vector<T,N>> sampler, vec4 p,
{
vec4 xyw_ = p.xyww;
return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $xyw_ Lod|ConstOffset $lod $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $xyw_ Lod|ConstOffset $lod $offset
};
}
default:
@@ -3338,16 +3341,16 @@ public vector<T,4> textureProjLodOffset(Sampler2D<vector<T,N>> sampler, vec4 p,
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(glsl_hlsl_spirv, texture_sm_4_0_fragment)]
-public vector<T,4> textureProjLodOffset(Sampler3D<vector<T,N>> sampler, vec4 p, float lod, constexpr ivec3 offset)
+public vector<T.Element,4> textureProjLodOffset(Sampler3D<T> sampler, vec4 p, float lod, constexpr ivec3 offset)
{
__target_switch
{
case glsl: __intrinsic_asm "textureProjLodOffset";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $p Lod|ConstOffset $lod $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $p Lod|ConstOffset $lod $offset
};
default:
return textureLodOffset(sampler, p.xyz / p.w, lod, offset);
@@ -3399,19 +3402,19 @@ public float textureProjLodOffset(sampler2DShadow sampler, vec4 p, float lod, co
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureGrad(Sampler1D<vector<T,N>> sampler, float p, float dPdx, float dPdy)
+public vector<T.Element,4> textureGrad(Sampler1D<T> sampler, float p, float dPdx, float dPdy)
{
- return __vectorReshape<4>(sampler.SampleGrad(p, dPdx, dPdy));
+ return __vectorReshape2<T.Element,4>(sampler.SampleGrad(p, dPdx, dPdy));
}
-__generic<T:__BuiltinArithmeticType, let N:int, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int>
+__generic<T:ITexelElement, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureGrad(_Texture<
- vector<T,N>,
+public vector<T.Element,4> textureGrad(_Texture<
+ T,
Shape,
isArray,
0, // isMS
@@ -3422,7 +3425,7 @@ public vector<T,4> textureGrad(_Texture<
format
> sampler, vector<float,Shape.dimensions+isArray> p, vector<float,Shape.dimensions> dPdx, vector<float,Shape.dimensions> dPdy)
{
- return __vectorReshape<4>(sampler.SampleGrad(p, dPdx, dPdy));
+ return __vectorReshape2<T.Element,4>(sampler.SampleGrad(p, dPdx, dPdy));
}
[ForceInline]
@@ -3514,19 +3517,19 @@ public float textureGrad(sampler2DArrayShadow sampler, vec4 p, vec2 dPdx, vec2 d
// textureGradOffset
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureGradOffset(Sampler1D<vector<T,N>> sampler, float p, float dPdx, float dPdy, constexpr int offset)
+public vector<T.Element,4> textureGradOffset(Sampler1D<T> sampler, float p, float dPdx, float dPdy, constexpr int offset)
{
- return __vectorReshape<4>(sampler.SampleGrad(p, dPdx, dPdy, offset));
+ return __vectorReshape2<T.Element,4>(sampler.SampleGrad(p, dPdx, dPdy, offset));
}
-__generic<T:__BuiltinArithmeticType, let N:int, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int>
+__generic<T:ITexelElement, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int>
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
[ForceInline]
-public vector<T,4> textureGradOffset(_Texture<
- vector<T,N>,
+public vector<T.Element,4> textureGradOffset(_Texture<
+ T,
Shape,
isArray,
0, // isMS
@@ -3537,7 +3540,7 @@ public vector<T,4> textureGradOffset(_Texture<
format
> sampler, vector<float,Shape.dimensions+isArray> p, vector<float,Shape.dimensions> dPdx, vector<float,Shape.dimensions> dPdy, constexpr vector<int,Shape.dimensions> offset)
{
- return __vectorReshape<4>(sampler.SampleGrad(p, dPdx, dPdy, offset));
+ return __vectorReshape2<T.Element,4>(sampler.SampleGrad(p, dPdx, dPdy, offset));
}
[ForceInline]
@@ -3612,26 +3615,26 @@ public float textureGradOffset(sampler2DArrayShadow sampler, vec4 p, vec2 dPdx,
// textureProjGrad
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureProjGrad(Sampler1D<vector<T,N>> sampler, vec2 p, float dPdx, float dPdy)
+public vector<T.Element,4> textureProjGrad(Sampler1D<T> sampler, vec2 p, float dPdx, float dPdy)
{
__target_switch
{
case glsl: __intrinsic_asm "textureProjGrad";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $p Grad $dPdx $dPdy
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $p Grad $dPdx $dPdy
};
default:
return textureGrad(sampler, p.x / p.y, dPdx, dPdy);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureProjGrad(Sampler1D<vector<T,N>> sampler, vec4 p, float dPdx, float dPdy)
+public vector<T.Element,4> textureProjGrad(Sampler1D<T> sampler, vec4 p, float dPdx, float dPdy)
{
__target_switch
{
@@ -3640,7 +3643,7 @@ public vector<T,4> textureProjGrad(Sampler1D<vector<T,N>> sampler, vec4 p, float
{
vec4 xw__ = p.xwww;
return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $xw__ Grad $dPdx $dPdy
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $xw__ Grad $dPdx $dPdy
};
}
default:
@@ -3648,26 +3651,26 @@ public vector<T,4> textureProjGrad(Sampler1D<vector<T,N>> sampler, vec4 p, float
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureProjGrad(Sampler2D<vector<T,N>> sampler, vec3 p, vec2 dPdx, vec2 dPdy)
+public vector<T.Element,4> textureProjGrad(Sampler2D<T> sampler, vec3 p, vec2 dPdx, vec2 dPdy)
{
__target_switch
{
case glsl: __intrinsic_asm "textureProjGrad";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $p Grad $dPdx $dPdy
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $p Grad $dPdx $dPdy
};
default:
return textureGrad(sampler, p.xy / p.z, dPdx, dPdy);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureProjGrad(Sampler2D<vector<T,N>> sampler, vec4 p, vec2 dPdx, vec2 dPdy)
+public vector<T.Element,4> textureProjGrad(Sampler2D<T> sampler, vec4 p, vec2 dPdx, vec2 dPdy)
{
__target_switch
{
@@ -3676,7 +3679,7 @@ public vector<T,4> textureProjGrad(Sampler2D<vector<T,N>> sampler, vec4 p, vec2
{
vec4 xyw_ = p.xyww;
return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $xyw_ Grad $dPdx $dPdy
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $xyw_ Grad $dPdx $dPdy
};
}
default:
@@ -3684,16 +3687,16 @@ public vector<T,4> textureProjGrad(Sampler2D<vector<T,N>> sampler, vec4 p, vec2
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureProjGrad(Sampler3D<vector<T,N>> sampler, vec4 p, vec3 dPdx, vec3 dPdy)
+public vector<T.Element,4> textureProjGrad(Sampler3D<T> sampler, vec4 p, vec3 dPdx, vec3 dPdy)
{
__target_switch
{
case glsl: __intrinsic_asm "textureProjGrad";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $p Grad $dPdx $dPdy
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $p Grad $dPdx $dPdy
};
default:
return textureGrad(sampler, p.xyz / p.w, dPdx, dPdy);
@@ -3744,26 +3747,26 @@ public float textureProjGrad(sampler2DShadow sampler, vec4 p, vec2 dPdx, vec2 dP
// textureProjGradOffset
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureProjGradOffset(Sampler1D<vector<T,N>> sampler, vec2 p, float dPdx, float dPdy, constexpr int offset)
+public vector<T.Element,4> textureProjGradOffset(Sampler1D<T> sampler, vec2 p, float dPdx, float dPdy, constexpr int offset)
{
__target_switch
{
case glsl: __intrinsic_asm "textureProjGradOffset";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $p Grad|ConstOffset $dPdx $dPdy $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $p Grad|ConstOffset $dPdx $dPdy $offset
};
default:
return textureGradOffset(sampler, p.x / p.y, dPdx, dPdy, offset);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureProjGradOffset(Sampler1D<vector<T,N>> sampler, vec4 p, float dPdx, float dPdy, constexpr int offset)
+public vector<T.Element,4> textureProjGradOffset(Sampler1D<T> sampler, vec4 p, float dPdx, float dPdy, constexpr int offset)
{
__target_switch
{
@@ -3772,7 +3775,7 @@ public vector<T,4> textureProjGradOffset(Sampler1D<vector<T,N>> sampler, vec4 p,
{
vec4 xw__ = p.xwww;
return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $xw__ Grad|ConstOffset $dPdx $dPdy $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $xw__ Grad|ConstOffset $dPdx $dPdy $offset
};
}
default:
@@ -3780,26 +3783,26 @@ public vector<T,4> textureProjGradOffset(Sampler1D<vector<T,N>> sampler, vec4 p,
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureProjGradOffset(Sampler2D<vector<T,N>> sampler, vec3 p, vec2 dPdx, vec2 dPdy, constexpr ivec2 offset)
+public vector<T.Element,4> textureProjGradOffset(Sampler2D<T> sampler, vec3 p, vec2 dPdx, vec2 dPdy, constexpr ivec2 offset)
{
__target_switch
{
case glsl: __intrinsic_asm "textureProjGradOffset";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $p Grad|ConstOffset $dPdx $dPdy $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $p Grad|ConstOffset $dPdx $dPdy $offset
};
default:
return textureGradOffset(sampler, p.xy / p.z, dPdx, dPdy, offset);
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureProjGradOffset(Sampler2D<vector<T,N>> sampler, vec4 p, vec2 dPdx, vec2 dPdy, constexpr ivec2 offset)
+public vector<T.Element,4> textureProjGradOffset(Sampler2D<T> sampler, vec4 p, vec2 dPdx, vec2 dPdy, constexpr ivec2 offset)
{
__target_switch
{
@@ -3808,7 +3811,7 @@ public vector<T,4> textureProjGradOffset(Sampler2D<vector<T,N>> sampler, vec4 p,
{
vec4 xyw_ = p.xyww;
return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $xyw_ Grad|ConstOffset $dPdx $dPdy $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $xyw_ Grad|ConstOffset $dPdx $dPdy $offset
};
}
default:
@@ -3816,16 +3819,16 @@ public vector<T,4> textureProjGradOffset(Sampler2D<vector<T,N>> sampler, vec4 p,
}
}
-__generic<T:__BuiltinArithmeticType, let N:int>
+__generic<T:ITexelElement>
[ForceInline]
[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)]
-public vector<T,4> textureProjGradOffset(Sampler3D<vector<T,N>> sampler, vec4 p, vec3 dPdx, vec3 dPdy, constexpr ivec3 offset)
+public vector<T.Element,4> textureProjGradOffset(Sampler3D<T> sampler, vec4 p, vec3 dPdx, vec3 dPdy, constexpr ivec3 offset)
{
__target_switch
{
case glsl: __intrinsic_asm "textureProjGradOffset";
case spirv: return spirv_asm {
- result:$$vector<T,4> = OpImageSampleProjExplicitLod $sampler $p Grad|ConstOffset $dPdx $dPdy $offset
+ result:$$vector<T.Element,4> = OpImageSampleProjExplicitLod $sampler $p Grad|ConstOffset $dPdx $dPdy $offset
};
default:
return textureGradOffset(sampler, p.xyz / p.w, dPdx, dPdy, offset);
@@ -3880,11 +3883,11 @@ public float textureProjGradOffset(sampler2DShadow sampler, vec4 p, vec2 dPdx, v
// textureGather
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int>
+__generic<T:ITexelElement, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int>
[ForceInline]
[require(glsl_hlsl_spirv, texture_gather)]
-public vector<T,4> textureGather(_Texture<
- vector<T,N>,
+public vector<T.Element,4> textureGather(_Texture<
+ T,
Shape,
isArray,
0, // isMS
@@ -3926,11 +3929,11 @@ public vec4 textureGather(_Texture<
// textureGatherOffset
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int, let isArray:int, let sampleCount:int, let format:int>
+__generic<T:ITexelElement, let isArray:int, let sampleCount:int, let format:int>
[ForceInline]
[require(glsl_hlsl_spirv, texture_gather)]
-public vector<T,4> textureGatherOffset(_Texture<
- vector<T,N>,
+public vector<T.Element,4> textureGatherOffset(_Texture<
+ T,
__Shape2D,
isArray,
0, // isMS
@@ -3972,11 +3975,11 @@ public vec4 textureGatherOffset(_Texture<
// textureGatherOffsets
// -------------------
-__generic<T:__BuiltinArithmeticType, let N:int, let isArray:int, let sampleCount:int, let format:int>
+__generic<T:ITexelElement, let isArray:int, let sampleCount:int, let format:int>
[ForceInline]
[require(glsl_hlsl_spirv, texture_gather)]
-public vector<T,4> textureGatherOffsets(_Texture<
- vector<T,N>,
+public vector<T.Element,4> textureGatherOffsets(_Texture<
+ T,
__Shape2D,
isArray,
0, // isMS
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index d620197f3..9d6a81f84 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -10,6 +10,7 @@ void __requireGLSLExtension(String extensionName);
/// Represents an interface for buffer data layout.
/// This interface is used as a base for defining specific data layouts for buffers.
[sealed]
+[builtin]
__magic_type(IBufferDataLayoutType)
interface IBufferDataLayout
{
@@ -513,6 +514,86 @@ __generic<T, let N:int>
vector<T,N+1> __makeVector(vector<T,N> vec, T scalar);
//@public:
+/// Represent types that can be used as texel element.
+[sealed]
+[builtin]
+interface ITexelElement
+{
+ associatedtype Element : __BuiltinArithmeticType;
+ static const int elementCount;
+ __init(Element x);
+}
+
+${{{
+// Scalar types that can be used as texel element.
+const char* texeElementScalarTypes[] = {
+ "half",
+ "float",
+ "int",
+ "uint",
+ "int8_t",
+ "int16_t",
+ "uint8_t",
+ "uint16_t"
+};
+for (auto elementType : texeElementScalarTypes)
+{
+}}}
+extension $(elementType) : ITexelElement
+{
+ typealias Element = $(elementType);
+ static const int elementCount = 1;
+ __intrinsic_op(0) __init(Element x);
+}
+extension<int N> vector<$(elementType), N> : ITexelElement
+{
+ typealias Element = $(elementType);
+ static const int elementCount = N;
+ __intrinsic_op($(kIROp_MakeVectorFromScalar)) __init(Element x);
+}
+${{{
+} // end for texelElementScalarTypes.
+}}}
+
+// Additional 64-bit types that can be used as texel element.
+extension double:ITexelElement
+{
+ typealias Element = double;
+ static const int elementCount = 1;
+ __intrinsic_op(0) __init(Element x);
+}
+extension double2:ITexelElement
+{
+ typealias Element = double;
+ static const int elementCount = 2;
+ __intrinsic_op($(kIROp_MakeVectorFromScalar)) __init(Element x);
+}
+extension uint64_t:ITexelElement
+{
+ typealias Element = uint64_t;
+ static const int elementCount = 1;
+ __intrinsic_op(0) __init(Element x);
+}
+extension int64_t:ITexelElement
+{
+ typealias Element = int64_t;
+ static const int elementCount = 1;
+ __intrinsic_op(0) __init(Element x);
+}
+extension vector<uint64_t,2>:ITexelElement
+{
+ typealias Element = uint64_t;
+ static const int elementCount = 2;
+ __intrinsic_op($(kIROp_MakeVectorFromScalar)) __init(Element x);
+}
+extension vector<int64_t,2>:ITexelElement
+{
+ typealias Element = int64_t;
+ static const int elementCount = 2;
+ __intrinsic_op($(kIROp_MakeVectorFromScalar)) __init(Element x);
+}
+
+//@public:
/// A parameterized type that represents all flavors of texture types supported by the Slang language.
/// Please note that this type is not intended to be used directly in user code, and not all combinations
/// of the generic arguments are valid.
@@ -591,7 +672,7 @@ vector<T,N+1> __makeVector(vector<T,N> vec, T scalar);
/// @category texture_types Texture types
__magic_type(TextureType)
__intrinsic_type($(kIROp_TextureType))
-struct _Texture<T, Shape: __ITextureShape, let isArray:int, let isMS:int, let sampleCount:int, let access:int, let isShadow:int, let isCombined:int, let format:int>
+struct _Texture<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let isMS:int, let sampleCount:int, let access:int, let isShadow:int, let isCombined:int, let format:int>
{
}
@@ -776,7 +857,7 @@ float __glsl_texture_level_offset_1d_shadow<TTexture, TCoord, TOffset>(TTexture
//@public:
-__generic<T, Shape: __ITextureShape, let isArray:int, let isMS:int, let sampleCount:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let isMS:int, let sampleCount:int, let isShadow:int, let format:int>
extension _Texture<T,Shape,isArray,isMS,sampleCount,0,isShadow,1,format>
{
//@hidden:
@@ -1498,7 +1579,7 @@ extension _Texture<T,Shape,isArray,isMS,sampleCount,0,isShadow,1,format>
// Non-combined texture types specific functions
-__generic<T, Shape: __ITextureShape, let isArray:int, let isMS:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let isMS:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
extension _Texture<T,Shape,isArray,isMS,sampleCount,access,isShadow,0,format>
{
typealias TextureCoord = vector<float, Shape.dimensions>;
@@ -1596,7 +1677,7 @@ extension _Texture<T,Shape,isArray,isMS,sampleCount,access,isShadow,0,format>
}
}
-__generic<T, Shape: __ITextureShape, let isArray:int, let isMS:int, let sampleCount:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let isMS:int, let sampleCount:int, let isShadow:int, let format:int>
extension _Texture<T,Shape,isArray,isMS,sampleCount,0,isShadow,0,format>
{
[__readNone]
@@ -2720,7 +2801,7 @@ for (int isMS = 0; isMS <= 1; isMS++) {
TextureTypeInfo textureTypeInfo(kBaseTextureShapes[shapeIndex], isArray, isMS, 0, sb, path);
}}}}
-__generic<T, let sampleCount:int, let access:int, let isShadow:int, let isCombined:int, let format:int>
+__generic<T:ITexelElement, let sampleCount:int, let access:int, let isShadow:int, let isCombined:int, let format:int>
extension _Texture<T,$(shapeTypeName),$(isArray),$(isMS),sampleCount,access,isShadow,isCombined,format>
{
${{{{
@@ -2733,7 +2814,7 @@ ${{{{
}}}}
// Texture.GetSamplePosition(int s);
-__generic<T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let isCombined:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let isCombined:int, let format:int>
extension _Texture<T,Shape,isArray,1,sampleCount,access,isShadow,isCombined,format>
{
[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_1_vertex_fragment_geometry)]
@@ -2745,10 +2826,10 @@ Array<T,4> __makeArray<T>(T v0, T v1, T v2, T v3);
// Beginning of Texture Gather
-__generic<TElement, T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_metal_spirv_wgsl, texture_gather)]
-vector<TElement,4> __texture_gather(
+vector<T.Element,4> __texture_gather(
_Texture<T, Shape, isArray, 0, sampleCount, access, isShadow, 0, format> texture,
SamplerState s,
vector<float, Shape.dimensions+isArray> location,
@@ -2781,7 +2862,7 @@ vector<TElement,4> __texture_gather(
case spirv:
return spirv_asm {
%sampledImage : __sampledImageType(texture) = OpSampledImage $texture $s;
- result:$$vector<TElement,4> = OpImageGather %sampledImage $location $component;
+ result:$$vector<T.Element,4> = OpImageGather %sampledImage $location $component;
};
case wgsl:
if (isShadow == 1)
@@ -2814,10 +2895,10 @@ vector<TElement,4> __texture_gather(
}
}
-__generic<TElement, T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_spirv, texture_gather)]
-vector<TElement,4> __texture_gather(
+vector<T.Element,4> __texture_gather(
_Texture<T, Shape, isArray, 0, sampleCount, access, isShadow, 1, format> sampler,
vector<float, Shape.dimensions+isArray> location,
int component)
@@ -2828,15 +2909,15 @@ vector<TElement,4> __texture_gather(
__intrinsic_asm "textureGather($0, $1, $2)";
case spirv:
return spirv_asm {
- result:$$vector<TElement,4> = OpImageGather $sampler $location $component;
+ result:$$vector<T.Element,4> = OpImageGather $sampler $location $component;
};
}
}
-__generic<TElement, T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_metal_spirv_wgsl, texture_gather)]
-vector<TElement,4> __texture_gather_offset(
+vector<T.Element,4> __texture_gather_offset(
_Texture<T, Shape, isArray, 0, sampleCount, access, isShadow, 0, format> texture,
SamplerState s,
vector<float, Shape.dimensions+isArray> location,
@@ -2862,7 +2943,7 @@ vector<TElement,4> __texture_gather_offset(
return spirv_asm {
OpCapability ImageGatherExtended;
%sampledImage : __sampledImageType(texture) = OpSampledImage $texture $s;
- result:$$vector<TElement,4> = OpImageGather %sampledImage $location $component Offset $offset;
+ result:$$vector<T.Element,4> = OpImageGather %sampledImage $location $component Offset $offset;
};
case wgsl:
if (isShadow == 1)
@@ -2895,10 +2976,10 @@ vector<TElement,4> __texture_gather_offset(
}
}
-__generic<TElement, T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_spirv, texture_gather)]
-vector<TElement,4> __texture_gather_offset(
+vector<T.Element,4> __texture_gather_offset(
_Texture<T, Shape, isArray, 0, sampleCount, access, isShadow, 1, format> sampler,
vector<float, Shape.dimensions+isArray> location,
constexpr vector<int, Shape.planeDimensions> offset,
@@ -2911,15 +2992,15 @@ vector<TElement,4> __texture_gather_offset(
case spirv:
return spirv_asm {
OpCapability ImageGatherExtended;
- result:$$vector<TElement,4> = OpImageGather $sampler $location $component Offset $offset;
+ result:$$vector<T.Element,4> = OpImageGather $sampler $location $component Offset $offset;
};
}
}
-__generic<TElement, T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_spirv, texture_gather)]
-vector<TElement,4> __texture_gather_offsets(
+vector<T.Element,4> __texture_gather_offsets(
_Texture<T, Shape, isArray, 0, sampleCount, access, isShadow, 0, format> texture,
SamplerState s,
vector<float, Shape.dimensions+isArray> location,
@@ -2938,15 +3019,15 @@ vector<TElement,4> __texture_gather_offsets(
return spirv_asm {
OpCapability ImageGatherExtended;
%sampledImage : __sampledImageType(texture) = OpSampledImage $texture $s;
- result:$$vector<TElement,4> = OpImageGather %sampledImage $location $component ConstOffsets $offsets;
+ result:$$vector<T.Element,4> = OpImageGather %sampledImage $location $component ConstOffsets $offsets;
};
}
}
-__generic<TElement, T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_spirv, texture_gather)]
-vector<TElement,4> __texture_gather_offsets(
+vector<T.Element,4> __texture_gather_offsets(
_Texture<T, Shape, isArray, 0, sampleCount, access, isShadow, 1, format> sampler,
vector<float, Shape.dimensions+isArray> location,
constexpr vector<int, Shape.planeDimensions> offset1,
@@ -2963,19 +3044,19 @@ vector<TElement,4> __texture_gather_offsets(
let offsets = __makeArray(offset1,offset2,offset3,offset4);
return spirv_asm {
OpCapability ImageGatherExtended;
- result:$$vector<TElement,4> = OpImageGather $sampler $location $component ConstOffsets $offsets;
+ result:$$vector<T.Element,4> = OpImageGather $sampler $location $component ConstOffsets $offsets;
};
}
}
-__generic<TElement, T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_metal_spirv_wgsl, texture_gather)]
-vector<TElement,4> __texture_gatherCmp(
+vector<T.Element,4> __texture_gatherCmp(
_Texture<T, Shape, isArray, 0, sampleCount, access, isShadow, 0, format> texture,
SamplerComparisonState s,
vector<float, Shape.dimensions+isArray> location,
- TElement compareValue)
+ T.Element compareValue)
{
__target_switch
{
@@ -2999,7 +3080,7 @@ vector<TElement,4> __texture_gatherCmp(
case spirv:
return spirv_asm {
%sampledImage : __sampledImageType(texture) = OpSampledImage $texture $s;
- result:$$vector<TElement,4> = OpImageDrefGather %sampledImage $location $compareValue;
+ result:$$vector<T.Element,4> = OpImageDrefGather %sampledImage $location $compareValue;
};
case wgsl:
static_assert(isShadow == 1, "WGSL supports textureGatherCompare only for depth textures.");
@@ -3018,13 +3099,13 @@ vector<TElement,4> __texture_gatherCmp(
}
}
-__generic<TElement, T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_spirv, texture_gather)]
-vector<TElement,4> __texture_gatherCmp(
+vector<T.Element,4> __texture_gatherCmp(
_Texture<T, Shape, isArray, 0, sampleCount, access, isShadow, 1, format> sampler,
vector<float, Shape.dimensions+isArray> location,
- TElement compareValue)
+ T.Element compareValue)
{
__target_switch
{
@@ -3032,19 +3113,19 @@ vector<TElement,4> __texture_gatherCmp(
__intrinsic_asm "textureGather($0, $1, $2)";
case spirv:
return spirv_asm {
- result:$$vector<TElement,4> = OpImageDrefGather $sampler $location $compareValue;
+ result:$$vector<T.Element,4> = OpImageDrefGather $sampler $location $compareValue;
};
}
}
-__generic<TElement, T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_metal_spirv_wgsl, texture_gather)]
-vector<TElement,4> __texture_gatherCmp_offset(
+vector<T.Element,4> __texture_gatherCmp_offset(
_Texture<T, Shape, isArray, 0, sampleCount, access, isShadow, 0, format> texture,
SamplerComparisonState s,
vector<float, Shape.dimensions+isArray> location,
- TElement compareValue,
+ T.Element compareValue,
constexpr vector<int, Shape.planeDimensions> offset)
{
__target_switch
@@ -3065,7 +3146,7 @@ vector<TElement,4> __texture_gatherCmp_offset(
case spirv:
return spirv_asm {
%sampledImage : __sampledImageType(texture) = OpSampledImage $texture $s;
- result:$$vector<TElement,4> = OpImageDrefGather %sampledImage $location $compareValue ConstOffset $offset;
+ result:$$vector<T.Element,4> = OpImageDrefGather %sampledImage $location $compareValue ConstOffset $offset;
};
case wgsl:
static_assert(isShadow == 1, "WGSL supports textureGatherCompare only for depth textures.");
@@ -3084,13 +3165,13 @@ vector<TElement,4> __texture_gatherCmp_offset(
}
}
-__generic<TElement, T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_spirv, texture_gather)]
-vector<TElement,4> __texture_gatherCmp_offset(
+vector<T.Element,4> __texture_gatherCmp_offset(
_Texture<T, Shape, isArray, 0, sampleCount, access, isShadow, 1, format> sampler,
vector<float, Shape.dimensions+isArray> location,
- TElement compareValue,
+ T.Element compareValue,
constexpr vector<int, Shape.planeDimensions> offset)
{
__target_switch
@@ -3099,19 +3180,19 @@ vector<TElement,4> __texture_gatherCmp_offset(
__intrinsic_asm "textureGatherOffset($0, $1, $2, $3)";
case spirv:
return spirv_asm {
- result:$$vector<TElement,4> = OpImageDrefGather $sampler $location $compareValue ConstOffset $offset;
+ result:$$vector<T.Element,4> = OpImageDrefGather $sampler $location $compareValue ConstOffset $offset;
};
}
}
-__generic<TElement, T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_spirv, texture_gather)]
-vector<TElement,4> __texture_gatherCmp_offsets(
+vector<T.Element,4> __texture_gatherCmp_offsets(
_Texture<T, Shape, isArray, 0, sampleCount, access, isShadow, 0, format> texture,
SamplerComparisonState s,
vector<float, Shape.dimensions+isArray> location,
- TElement compareValue,
+ T.Element compareValue,
vector<int, Shape.planeDimensions> offset1,
vector<int, Shape.planeDimensions> offset2,
vector<int, Shape.planeDimensions> offset3,
@@ -3126,18 +3207,18 @@ vector<TElement,4> __texture_gatherCmp_offsets(
return spirv_asm {
OpCapability ImageGatherExtended;
%sampledImage : __sampledImageType(texture) = OpSampledImage $texture $s;
- result:$$vector<TElement,4> = OpImageDrefGather %sampledImage $location $compareValue ConstOffsets $offsets;
+ result:$$vector<T.Element,4> = OpImageDrefGather %sampledImage $location $compareValue ConstOffsets $offsets;
};
}
}
-__generic<TElement, T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let access:int, let isShadow:int, let format:int>
[ForceInline]
[require(glsl_spirv, texture_gather)]
-vector<TElement,4> __texture_gatherCmp_offsets(
+vector<T.Element,4> __texture_gatherCmp_offsets(
_Texture<T, Shape, isArray, 0, sampleCount, access, isShadow, 1, format> sampler,
vector<float, Shape.dimensions+isArray> location,
- TElement compareValue,
+ T.Element compareValue,
vector<int, Shape.planeDimensions> offset1,
vector<int, Shape.planeDimensions> offset2,
vector<int, Shape.planeDimensions> offset3,
@@ -3151,30 +3232,26 @@ vector<TElement,4> __texture_gatherCmp_offsets(
let offsets = __makeArray(offset1,offset2,offset3,offset4);
return spirv_asm {
OpCapability ImageGatherExtended;
- result:$$vector<TElement,4> = OpImageDrefGather $sampler $location $compareValue ConstOffsets $offsets;
+ result:$$vector<T.Element,4> = OpImageDrefGather $sampler $location $compareValue ConstOffsets $offsets;
};
}
}
${{{{
for (int isCombined = 0; isCombined < 2; isCombined++)
-for (int isScalarTexture = 0; isScalarTexture < 2; isScalarTexture++)
{
- const char* extSizeParam = isScalarTexture ? "" : ", let N:int";
- const char* extTexType = isScalarTexture ? "T" : "vector<T,N>";
-
}}}}
-// Gather for [TextureType = $(extTexType), isCombined = $(isCombined)]
+// Gather for [isCombined = $(isCombined)]
-__generic<T:__BuiltinArithmeticType $(extSizeParam), Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let format:int>
-extension _Texture<$(extTexType),Shape,isArray,0,sampleCount,0,isShadow,$(isCombined),format>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let format:int>
+extension _Texture<T,Shape,isArray,0,sampleCount,0,isShadow,$(isCombined),format>
{
${{{{
for (int isShadow = 0; isShadow < 2; isShadow++)
for (auto componentId = 0; componentId < 5; componentId++)
{
const char* compareFunc = isShadow ? "Cmp" : "";
- const char* compareParam = isShadow ? ", T compareValue" : "";
+ const char* compareParam = isShadow ? ", T.Element compareValue" : "";
const char* compareArg = isShadow ? ", compareValue" : "";
// Some targets support the combined texture natively
@@ -3190,7 +3267,7 @@ ${{{{
}}}}
[ForceInline]
[require(glsl_hlsl_metal_spirv_wgsl, texture_gather)]
- vector<T,4> Gather$(compareFunc)$(componentFunc)(
+ vector<T.Element,4> Gather$(compareFunc)$(componentFunc)(
$(samplerParam)
vector<float, Shape.dimensions+isArray> location
$(compareParam))
@@ -3203,16 +3280,16 @@ ${{{{
case hlsl: __intrinsic_asm ".Gather$(compareFunc)$(componentFunc)";
case metal:
case wgsl:
- return __texture_gather$(compareFunc)<T>($(getTexture) $(getSampler), location $(compareArg) $(componentArg));
+ return __texture_gather$(compareFunc)($(getTexture) $(getSampler), location $(compareArg) $(componentArg));
case glsl:
case spirv:
- return __texture_gather$(compareFunc)<T>(this $(samplerArg), location $(compareArg) $(componentArg));
+ return __texture_gather$(compareFunc)(this $(samplerArg), location $(compareArg) $(componentArg));
}
}
[ForceInline]
[require(hlsl, texture_gather)]
- vector<T,4> Gather$(compareFunc)$(componentFunc)(
+ vector<T.Element,4> Gather$(compareFunc)$(componentFunc)(
$(samplerParam)
vector<float, Shape.dimensions+isArray> location
$(compareParam),
@@ -3229,7 +3306,7 @@ ${{{{
[ForceInline]
[require(glsl_hlsl_metal_spirv_wgsl, texture_gather)]
- vector<T,4> Gather$(compareFunc)$(componentFunc)(
+ vector<T.Element,4> Gather$(compareFunc)$(componentFunc)(
$(samplerParam)
vector<float, Shape.dimensions+isArray> location
$(compareParam),
@@ -3243,16 +3320,16 @@ ${{{{
case hlsl: __intrinsic_asm ".Gather$(compareFunc)$(componentFunc)";
case metal:
case wgsl:
- return __texture_gather$(compareFunc)_offset<T>($(getTexture) $(getSampler), location $(compareArg), offset $(componentArg));
+ return __texture_gather$(compareFunc)_offset($(getTexture) $(getSampler), location $(compareArg), offset $(componentArg));
case glsl:
case spirv:
- return __texture_gather$(compareFunc)_offset<T>(this $(samplerArg), location $(compareArg), offset $(componentArg));
+ return __texture_gather$(compareFunc)_offset(this $(samplerArg), location $(compareArg), offset $(componentArg));
}
}
[ForceInline]
[require(hlsl, texture_gather)]
- vector<T,4> Gather$(compareFunc)$(componentFunc)(
+ vector<T.Element,4> Gather$(compareFunc)$(componentFunc)(
$(samplerParam)
vector<float, Shape.dimensions+isArray> location
$(compareParam),
@@ -3270,7 +3347,7 @@ ${{{{
[ForceInline]
[require(glsl_hlsl_spirv, texture_gather)]
- vector<T,4> Gather$(compareFunc)$(componentFunc)(
+ vector<T.Element,4> Gather$(compareFunc)$(componentFunc)(
$(samplerParam)
vector<float, Shape.dimensions+isArray> location
$(compareParam),
@@ -3293,7 +3370,7 @@ ${{{{
[ForceInline]
[require(hlsl, texture_gather)]
- vector<T,4> Gather$(compareFunc)$(componentFunc)(
+ vector<T.Element,4> Gather$(compareFunc)$(componentFunc)(
$(samplerParam)
vector<float, Shape.dimensions+isArray> location
$(compareParam),
@@ -3315,7 +3392,7 @@ ${{{{
${{{{
} // for (componentId)
}}}}
-} // End of: Gather for [TextureType = $(extTexType), isCombined = $(isCombined)]
+} // End of: Gather for [isCombined = $(isCombined)]
${{{{
} // for (isScalarTexture)
@@ -3325,7 +3402,7 @@ ${{{{
// Load/Subscript for readonly, no MS textures
-__generic<T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let isCombined:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let isCombined:int, let format:int>
extension _Texture<T,Shape,isArray,0,sampleCount,0,isShadow,isCombined,format>
{
//@hidden:
@@ -3453,7 +3530,7 @@ extension _Texture<T,Shape,isArray,0,sampleCount,0,isShadow,isCombined,format>
case $(SLANG_TEXTURE_3D):
__intrinsic_asm "textureLoad($0, ($1).xyz, ($1).w)$z";
}
- return T();
+ return __default<T>();
}
}
@@ -3555,7 +3632,7 @@ extension _Texture<T,Shape,isArray,0,sampleCount,0,isShadow,isCombined,format>
// Texture Load/Subscript for readonly, MS textures
-__generic<T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let isCombined:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let isCombined:int, let format:int>
extension _Texture<T,Shape,isArray,1,sampleCount,0,isShadow,isCombined,format>
{
//@hidden:
@@ -3746,7 +3823,7 @@ ${{{{
const char* glslIntrinsicMSOffset = "$cimageLoad($0, ($1)+($3), $2)$z";
}}}}
-__generic<T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let format:int>
extension _Texture<T,Shape,isArray,0,sampleCount,$(access),isShadow, 0,format>
{
${{{{
@@ -4081,7 +4158,7 @@ if (access == kCoreModule_ResourceAccessReadWrite) {
// RW MS textures.
-__generic<T, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let format:int>
extension _Texture<T,Shape,isArray,1,sampleCount,$(access),isShadow, 0,format>
{
[__readNone]
@@ -4234,7 +4311,7 @@ ${{{{
}}}}
// Definitions to support the legacy texture .mips[][] operator.
-struct __TextureMip<T, Shape : __ITextureShape, let isArray : int, let isCombined : int, let format : int>
+struct __TextureMip<T:ITexelElement, Shape : __ITextureShape, let isArray : int, let isCombined : int, let format : int>
{
_Texture<T, Shape, isArray, 0 /*isMS*/, 0 /*sampleCount*/, 0 /*access*/, 0 /*isShadow*/, isCombined, format> tex;
int mip;
@@ -4245,7 +4322,7 @@ struct __TextureMip<T, Shape : __ITextureShape, let isArray : int, let isCombine
}
}
-struct __TextureMips<T, Shape : __ITextureShape, let isArray : int, let isCombined : int, let format : int>
+struct __TextureMips<T:ITexelElement, Shape : __ITextureShape, let isArray : int, let isCombined : int, let format : int>
{
_Texture<T, Shape, isArray, 0 /*isMS*/, 0 /*sampleCount*/, 0 /*access*/, 0 /*isShadow*/, isCombined, format> tex;
__subscript(int mip)->__TextureMip<T, Shape, isArray, isCombined, format>
@@ -4256,7 +4333,7 @@ struct __TextureMips<T, Shape : __ITextureShape, let isArray : int, let isCombin
}
//@hidden:
-__generic<T, Shape : __ITextureShape, let isArray : int, let isCombined : int, let format : int>
+__generic<T:ITexelElement, Shape : __ITextureShape, let isArray : int, let isCombined : int, let format : int>
extension _Texture<T, Shape, isArray, 0 /*isMS*/, 0 /*sampleCount*/, 0 /*access*/, 0 /*isShadow*/, isCombined, format>
{
property __TextureMips<T, Shape, isArray, isCombined, format> mips
@@ -4267,7 +4344,7 @@ extension _Texture<T, Shape, isArray, 0 /*isMS*/, 0 /*sampleCount*/, 0 /*access*
}
// Definitions to support the .sample[][] operator.
-struct __TextureSample<T, Shape : __ITextureShape, let isArray : int, let isCombined : int, let format : int>
+struct __TextureSample<T:ITexelElement, Shape : __ITextureShape, let isArray : int, let isCombined : int, let format : int>
{
_Texture<T, Shape, isArray, 1 /*isMS*/, 0 /*sampleCount*/, 0 /*access*/, 0 /*isShadow*/, isCombined, format> tex;
int sample;
@@ -4278,7 +4355,7 @@ struct __TextureSample<T, Shape : __ITextureShape, let isArray : int, let isComb
}
}
-struct __TextureSampleMS<T, Shape : __ITextureShape, let isArray : int, let isCombined : int, let format : int>
+struct __TextureSampleMS<T:ITexelElement, Shape : __ITextureShape, let isArray : int, let isCombined : int, let format : int>
{
_Texture<T, Shape, isArray, 1 /*isMS*/, 0 /*sampleCount*/, 0 /*access*/, 0 /*isShadow*/, isCombined, format> tex;
__subscript(int sample)->__TextureSample<T, Shape, isArray, isCombined, format>
@@ -4288,7 +4365,7 @@ struct __TextureSampleMS<T, Shape : __ITextureShape, let isArray : int, let isCo
}
}
-__generic<T, Shape : __ITextureShape, let isArray : int, let isCombined : int, let format : int>
+__generic<T:ITexelElement, Shape : __ITextureShape, let isArray : int, let isCombined : int, let format : int>
extension _Texture<T, Shape, isArray, 1 /*isMS*/, 0 /*sampleCount*/, 0 /*access*/, 0 /*isShadow*/, isCombined, format>
{
property __TextureSampleMS<T, Shape, isArray, isCombined, format> sample
@@ -4345,7 +4422,7 @@ ${{{{
/// @param format The storage format of the texture.
/// @see Please refer to `_Texture` for more information about texture types.
/// @category texture_types
-typealias $(accessPrefix[access])$(textureTypeName)$(shapeTypeNames[shape])$(msPostFix[isMS])$(arrayPostFix[isArray])<T=float4, let sampleCount:int=0, let format:int=0> = _Texture<T, __Shape$(shapeTypeNames[shape]), $(isArray), $(isMS), sampleCount, $(access), 0, $(isCombined), format>;
+typealias $(accessPrefix[access])$(textureTypeName)$(shapeTypeNames[shape])$(msPostFix[isMS])$(arrayPostFix[isArray])<T:ITexelElement=float4, let sampleCount:int=0, let format:int=0> = _Texture<T, __Shape$(shapeTypeNames[shape]), $(isArray), $(isMS), sampleCount, $(access), 0, $(isCombined), format>;
${{{{
}
}}}}
@@ -15633,7 +15710,7 @@ for (int aa = 0; aa < kBaseBufferAccessLevelCount; ++aa)
{
auto access = kBaseBufferAccessLevels[aa].access;
sb << "/// @category texture_types\n";
- sb << "__generic<T,let format:int=0>\n";
+ sb << "__generic<T:ITexelElement,let format:int=0>\n";
sb << "typealias ";
sb << kBaseBufferAccessLevels[aa].name;
sb << "Buffer = _Texture<T, __ShapeBuffer, 0, 0, 0, " << aa << ", 0, 0, format>;\n";
@@ -15648,7 +15725,7 @@ for (int aa = 0; aa < kBaseBufferAccessLevelCount; ++aa)
char const* requireToSet_onlyHLSL = (isReadOnly) ? "[require(hlsl, texture_sm_4_1)]" : "[require(hlsl, texture_sm_4_1_compute_fragment)]";
}}}}
-__generic<T, let format:int>
+__generic<T:ITexelElement, let format:int>
extension _Texture<T, __ShapeBuffer, 0, 0, 0, $(aa), 0, 0, format>
{
[__readNone]
@@ -16920,23 +16997,33 @@ interface __BuiltinSamplerFeedbackType {};
[sealed]
__magic_type(FeedbackType, $(int(FeedbackType::Kind::MinMip)))
__target_intrinsic(hlsl, SAMPLER_FEEDBACK_MIN_MIP)
-struct SAMPLER_FEEDBACK_MIN_MIP : __BuiltinSamplerFeedbackType {};
+struct SAMPLER_FEEDBACK_MIN_MIP : __BuiltinSamplerFeedbackType, ITexelElement {
+ typealias Element = float;
+ static const int elementCount = 1;
+ __intrinsic_op(0) __init(float x){}
+};
/// @category texture_types
[sealed]
__magic_type(FeedbackType, $(int(FeedbackType::Kind::MipRegionUsed)))
__target_intrinsic(hlsl, SAMPLER_FEEDBACK_MIP_REGION_USED)
-struct SAMPLER_FEEDBACK_MIP_REGION_USED : __BuiltinSamplerFeedbackType {};
+struct SAMPLER_FEEDBACK_MIP_REGION_USED : __BuiltinSamplerFeedbackType, ITexelElement
+{
+ typealias Element = float;
+ static const int elementCount = 1;
+ __intrinsic_op(0) __init(float x){}
+};
// All of these objects are write-only resources that point to a special kind of unordered access view meant for sampler feedback.
-__generic<T:__BuiltinSamplerFeedbackType>
-extension _Texture<T,__Shape2D, 0, 0, 0, $(kCoreModule_ResourceAccessFeedback), 0, 0, 0>
+extension<T> _Texture<T,__Shape2D, 0, 0, 0, $(kCoreModule_ResourceAccessFeedback), 0, 0, 0>
+ where T:ITexelElement
+ where T:__BuiltinSamplerFeedbackType
{
// With Clamp
[require(cpp_hlsl)]
- void WriteSamplerFeedback<S>(Texture2D<S> tex, SamplerState samp, float2 location, float clamp)
+ void WriteSamplerFeedback<S:ITexelElement>(Texture2D<S> tex, SamplerState samp, float2 location, float clamp)
{
__target_switch
{
@@ -16946,7 +17033,7 @@ extension _Texture<T,__Shape2D, 0, 0, 0, $(kCoreModule_ResourceAccessFeedback),
}
[require(cpp_hlsl)]
- void WriteSamplerFeedbackBias<S>(Texture2D<S> tex, SamplerState samp, float2 location, float bias, float clamp)
+ void WriteSamplerFeedbackBias<S:ITexelElement>(Texture2D<S> tex, SamplerState samp, float2 location, float bias, float clamp)
{
__target_switch
{
@@ -16956,7 +17043,7 @@ extension _Texture<T,__Shape2D, 0, 0, 0, $(kCoreModule_ResourceAccessFeedback),
}
[require(cpp_hlsl)]
- void WriteSamplerFeedbackGrad<S>(Texture2D<S> tex, SamplerState samp, float2 location, float2 ddx, float2 ddy, float clamp)
+ void WriteSamplerFeedbackGrad<S:ITexelElement>(Texture2D<S> tex, SamplerState samp, float2 location, float2 ddx, float2 ddy, float clamp)
{
__target_switch
{
@@ -16968,7 +17055,7 @@ extension _Texture<T,__Shape2D, 0, 0, 0, $(kCoreModule_ResourceAccessFeedback),
// Level
[require(cpp_hlsl)]
- void WriteSamplerFeedbackLevel<S>(Texture2D<S> tex, SamplerState samp, float2 location, float lod)
+ void WriteSamplerFeedbackLevel<S:ITexelElement>(Texture2D<S> tex, SamplerState samp, float2 location, float lod)
{
__target_switch
{
@@ -16980,7 +17067,7 @@ extension _Texture<T,__Shape2D, 0, 0, 0, $(kCoreModule_ResourceAccessFeedback),
// Without Clamp
[require(cpp_hlsl)]
- void WriteSamplerFeedback<S>(Texture2D<S> tex, SamplerState samp, float2 location)
+ void WriteSamplerFeedback<S:ITexelElement>(Texture2D<S> tex, SamplerState samp, float2 location)
{
__target_switch
{
@@ -16990,7 +17077,7 @@ extension _Texture<T,__Shape2D, 0, 0, 0, $(kCoreModule_ResourceAccessFeedback),
}
[require(cpp_hlsl)]
- void WriteSamplerFeedbackBias<S>(Texture2D<S> tex, SamplerState samp, float2 location, float bias)
+ void WriteSamplerFeedbackBias<S:ITexelElement>(Texture2D<S> tex, SamplerState samp, float2 location, float bias)
{
__target_switch
{
@@ -17000,7 +17087,7 @@ extension _Texture<T,__Shape2D, 0, 0, 0, $(kCoreModule_ResourceAccessFeedback),
}
[require(cpp_hlsl)]
- void WriteSamplerFeedbackGrad<S>(Texture2D<S> tex, SamplerState samp, float2 location, float2 ddx, float2 ddy)
+ void WriteSamplerFeedbackGrad<S:ITexelElement>(Texture2D<S> tex, SamplerState samp, float2 location, float2 ddx, float2 ddy)
{
__target_switch
{
@@ -17010,13 +17097,14 @@ extension _Texture<T,__Shape2D, 0, 0, 0, $(kCoreModule_ResourceAccessFeedback),
}
};
-__generic<T:__BuiltinSamplerFeedbackType>
-extension _Texture<T,__Shape2D, 1, 0, 0, $(kCoreModule_ResourceAccessFeedback), 0, 0, 0>
+extension<T> _Texture<T,__Shape2D, 1, 0, 0, $(kCoreModule_ResourceAccessFeedback), 0, 0, 0>
+ where T:__BuiltinSamplerFeedbackType
+ where T:ITexelElement
{
// With Clamp
[require(cpp_hlsl)]
- void WriteSamplerFeedback<S>(Texture2DArray<S> texArray, SamplerState samp, float3 location, float clamp)
+ void WriteSamplerFeedback<S:ITexelElement>(Texture2DArray<S> texArray, SamplerState samp, float3 location, float clamp)
{
__target_switch
{
@@ -17026,7 +17114,7 @@ extension _Texture<T,__Shape2D, 1, 0, 0, $(kCoreModule_ResourceAccessFeedback),
}
[require(cpp_hlsl)]
- void WriteSamplerFeedbackBias<S>(Texture2DArray<S> texArray, SamplerState samp, float3 location, float bias, float clamp)
+ void WriteSamplerFeedbackBias<S:ITexelElement>(Texture2DArray<S> texArray, SamplerState samp, float3 location, float bias, float clamp)
{
__target_switch
{
@@ -17036,7 +17124,7 @@ extension _Texture<T,__Shape2D, 1, 0, 0, $(kCoreModule_ResourceAccessFeedback),
}
[require(cpp_hlsl)]
- void WriteSamplerFeedbackGrad<S>(Texture2DArray<S> texArray, SamplerState samp, float3 location, float3 ddx, float3 ddy, float clamp)
+ void WriteSamplerFeedbackGrad<S:ITexelElement>(Texture2DArray<S> texArray, SamplerState samp, float3 location, float3 ddx, float3 ddy, float clamp)
{
__target_switch
{
@@ -17048,7 +17136,7 @@ extension _Texture<T,__Shape2D, 1, 0, 0, $(kCoreModule_ResourceAccessFeedback),
// Level
[require(cpp_hlsl)]
- void WriteSamplerFeedbackLevel<S>(Texture2DArray<S> texArray, SamplerState samp, float3 location, float lod)
+ void WriteSamplerFeedbackLevel<S:ITexelElement>(Texture2DArray<S> texArray, SamplerState samp, float3 location, float lod)
{
__target_switch
{
@@ -17060,7 +17148,7 @@ extension _Texture<T,__Shape2D, 1, 0, 0, $(kCoreModule_ResourceAccessFeedback),
// Without Clamp
[require(cpp_hlsl)]
- void WriteSamplerFeedback<S>(Texture2DArray<S> texArray, SamplerState samp, float3 location)
+ void WriteSamplerFeedback<S:ITexelElement>(Texture2DArray<S> texArray, SamplerState samp, float3 location)
{
__target_switch
{
@@ -17070,7 +17158,7 @@ extension _Texture<T,__Shape2D, 1, 0, 0, $(kCoreModule_ResourceAccessFeedback),
}
[require(cpp_hlsl)]
- void WriteSamplerFeedbackBias<S>(Texture2DArray<S> texArray, SamplerState samp, float3 location, float bias)
+ void WriteSamplerFeedbackBias<S:ITexelElement>(Texture2DArray<S> texArray, SamplerState samp, float3 location, float bias)
{
__target_switch
{
@@ -17080,7 +17168,7 @@ extension _Texture<T,__Shape2D, 1, 0, 0, $(kCoreModule_ResourceAccessFeedback),
}
[require(cpp_hlsl)]
- void WriteSamplerFeedbackGrad<S>(Texture2DArray<S> texArray, SamplerState samp, float3 location, float3 ddx, float3 ddy)
+ void WriteSamplerFeedbackGrad<S:ITexelElement>(Texture2DArray<S> texArray, SamplerState samp, float3 location, float3 ddx, float3 ddy)
{
__target_switch
{
@@ -20025,10 +20113,10 @@ ${
// for any resource type.
}
-__intrinsic_op($(kIROp_GetRegisterSpace)) uint __getRegisterSpace<T, Shape: __ITextureShape, let isArray:int, let isMS:int, let sampleCount:int, let access:int, let isShadow:int, let isCombined:int, let format:int>(_Texture<T,Shape,isArray,isMS,sampleCount,access,isShadow,isCombined,format> texture);
+__intrinsic_op($(kIROp_GetRegisterSpace)) uint __getRegisterSpace<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let isMS:int, let sampleCount:int, let access:int, let isShadow:int, let isCombined:int, let format:int>(_Texture<T,Shape,isArray,isMS,sampleCount,access,isShadow,isCombined,format> texture);
__intrinsic_op($(kIROp_GetRegisterSpace)) uint __getRegisterSpace(SamplerState sampler);
-__intrinsic_op($(kIROp_GetRegisterIndex)) uint __getRegisterIndex<T, Shape: __ITextureShape, let isArray:int, let isMS:int, let sampleCount:int, let access:int, let isShadow:int, let isCombined:int, let format:int>(_Texture<T,Shape,isArray,isMS,sampleCount,access,isShadow,isCombined,format> texture);
+__intrinsic_op($(kIROp_GetRegisterIndex)) uint __getRegisterIndex<T:ITexelElement, Shape: __ITextureShape, let isArray:int, let isMS:int, let sampleCount:int, let access:int, let isShadow:int, let isCombined:int, let format:int>(_Texture<T,Shape,isArray,isMS,sampleCount,access,isShadow,isCombined,format> texture);
__intrinsic_op($(kIROp_GetRegisterIndex)) uint __getRegisterIndex(SamplerState sampler);
//@public:
@@ -20218,7 +20306,7 @@ ${
// further clutter the original type declarations.
}
-__generic<T, Shape: __ITextureShape, let sampleCount:int, let isShadow:int, let format:int>
+__generic<T:ITexelElement, Shape: __ITextureShape, let sampleCount:int, let isShadow:int, let format:int>
extension _Texture<T,Shape,0,0,sampleCount,0,isShadow,0,format>
{
${
@@ -21035,7 +21123,7 @@ enum __DynamicResourceKind
Sampler = 1
}
-__generic<T, Shape : __ITextureShape, let isArray : int, let isMS : int, let sampleCount : int, let access : int, let isShadow : int, let isCombined : int, let format : int>
+__generic<T:ITexelElement, Shape : __ITextureShape, let isArray : int, let isMS : int, let sampleCount : int, let access : int, let isShadow : int, let isCombined : int, let format : int>
extension _Texture<T, Shape, isArray, isMS, sampleCount, access, isShadow, isCombined, format> : __IDynamicResourceCastable<__DynamicResourceKind.General>
{
__intrinsic_op($(kIROp_CastDynamicResource))
diff --git a/source/slang/slang-check-inheritance.cpp b/source/slang/slang-check-inheritance.cpp
index f774aae38..7af2d2e81 100644
--- a/source/slang/slang-check-inheritance.cpp
+++ b/source/slang/slang-check-inheritance.cpp
@@ -1149,6 +1149,10 @@ InheritanceInfo SharedSemanticsContext::_calcInheritanceInfo(
info.facets = FacetList(directFacet);
return info;
}
+ else if (auto modifiedType = as<ModifiedType>(type))
+ {
+ return _calcInheritanceInfo(modifiedType->getBase(), circularityInfo);
+ }
else
{
// As a fallback, any type not covered by the above cases will
diff --git a/source/slang/slang-emit-cpp.cpp b/source/slang/slang-emit-cpp.cpp
index b0d1fbb4c..13a85e8ab 100644
--- a/source/slang/slang-emit-cpp.cpp
+++ b/source/slang/slang-emit-cpp.cpp
@@ -614,7 +614,10 @@ void CPPSourceEmitter::emitGlobalRTTISymbolPrefix()
void CPPSourceEmitter::emitWitnessTable(IRWitnessTable* witnessTable)
{
- auto interfaceType = cast<IRInterfaceType>(witnessTable->getConformanceType());
+ auto interfaceType = as<IRInterfaceType>(witnessTable->getConformanceType());
+
+ if (!interfaceType)
+ return;
// Ignore witness tables for builtin interface types.
if (isBuiltin(interfaceType))
diff --git a/source/slang/slang-ir-peephole.cpp b/source/slang/slang-ir-peephole.cpp
index 0a08c67ff..ced0b5eb0 100644
--- a/source/slang/slang-ir-peephole.cpp
+++ b/source/slang/slang-ir-peephole.cpp
@@ -829,6 +829,8 @@ struct PeepholeContext : InstPassBase
case kIROp_VectorReshape:
{
auto fromType = as<IRVectorType>(inst->getOperand(0)->getDataType());
+ if (!fromType)
+ break;
auto resultType = as<IRVectorType>(inst->getDataType());
if (!resultType)
{