-
Notifications
You must be signed in to change notification settings - Fork 165
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
HLSL texture intrinsic test first draft. (#3583)
* HLSL texture intrinsic test first draft. * Some updated to texture-intrinsics.slang * Update dx11 test config in texture-intrinsics.slang * made some edits that shouldn't matter, but commiting once more to be sure * Switch to filecheck-buffer and differing output values per api * Forgot to uncomment one function and updated expected values. * Delete tests/hlsl-intrinsic/texture/texture-intrinsics.slang.expected.txt * Cubemap SampleGrad * Enable Vulkan and have SampleCmpLevelZero ifdefed out for Vulkan
- Loading branch information
Showing
1 changed file
with
302 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,302 @@ | ||
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -shaderobj -output-using-type | ||
//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=DX11):-slang -compute -shaderobj -output-using-type -render-feature hardware-device | ||
//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=DX12):-slang -compute -dx12 -shaderobj -output-using-type | ||
//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=DX12CS6):-slang -compute -dx12 -profile cs_6_0 -use-dxil -shaderobj -output-using-type -xslang -DCS60 | ||
//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=VK):-vk -emit-spirv-directly -compute -shaderobj -output-using-type -render-feature hardware-device -xslang -DVK | ||
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj -output-using-type | ||
|
||
//TEST_INPUT: Texture1D(size=4, content = one):name t1D | ||
Texture1D<float> t1D; | ||
//TEST_INPUT: Texture2D(size=4, content = one):name t2D | ||
Texture2D<float> t2D; | ||
//TEST_INPUT: Texture3D(size=4, content = one):name t3D | ||
Texture3D<float> t3D; | ||
//TEST_INPUT: TextureCube(size=4, content = one):name tCube | ||
TextureCube<float> tCube; | ||
|
||
//TEST_INPUT: Texture1D(size=4, content = one, arrayLength=2):name t1DArray | ||
Texture1DArray<float> t1DArray; | ||
//TEST_INPUT: Texture2D(size=4, content = one, arrayLength=2):name t2DArray | ||
Texture2DArray<float> t2DArray; | ||
//TEST_INPUT: TextureCube(size=4, content = one, arrayLength=2):name tCubeArray | ||
TextureCubeArray<float> tCubeArray; | ||
|
||
//TEST_INPUT: Sampler:name samplerState | ||
SamplerState samplerState; | ||
//TEST_INPUT: Sampler:name shadowSampler | ||
SamplerComparisonState shadowSampler; | ||
|
||
|
||
//TEST_INPUT: ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer | ||
RWStructuredBuffer<float> outputBuffer; | ||
|
||
[numthreads(4, 1, 1)] | ||
void computeMain(int3 dispatchThreadID: SV_DispatchThreadID) | ||
{ | ||
int idx = dispatchThreadID.x; | ||
float u = idx * (1.0f / 4); | ||
|
||
float val = 0.0f; | ||
|
||
uint width = 0, height = 0, depth = 0; | ||
float fwidth = 0.0f, fheight = 0.0f, fdepth = 0.0f; | ||
uint numLevels = 0, elements = 0; | ||
float fnumLevels = 0.0f, felements = 0.0f; | ||
|
||
/* | ||
<Template Type> Object.SampleLevel() | ||
*/ | ||
val += t1D.SampleLevel(samplerState, u, 0); | ||
val += t2D.SampleLevel(samplerState, float2(u, u), 0); | ||
val += t3D.SampleLevel(samplerState, float3(u, u, u), 0); | ||
val += tCube.SampleLevel(samplerState, normalize(float3(u, 1 - u, u)), 0); | ||
|
||
val += t1DArray.SampleLevel(samplerState, float2(u, 0), 0); | ||
val += t2DArray.SampleLevel(samplerState, float3(u, u, 0), 0); | ||
val += tCubeArray.SampleLevel(samplerState, float4(u, u, u, 0), 0); | ||
|
||
// Offset variant | ||
// NOTE: The "cpu" profile does not like these, so it's disabled for now | ||
val += t1D.SampleLevel(samplerState, u, 0, 1); | ||
val += t2D.SampleLevel(samplerState, float2(u, u), 0, int2(1, 1)); | ||
val += t3D.SampleLevel(samplerState, float3(u, u, u), 0, int3(1, 1, 1)); | ||
|
||
val += t1DArray.SampleLevel(samplerState, float2(u, 0), 0, 1); | ||
val += t2DArray.SampleLevel(samplerState, float3(u, u, 0), 0, int2(1, 1)); | ||
|
||
/* | ||
float Object.SampleCmpLevelZero() | ||
*/ | ||
// NOTE: These are having issues with vulkan (glsl) | ||
#ifndef VK | ||
val += t1D.SampleCmpLevelZero(shadowSampler, u, 0); | ||
val += t2D.SampleCmpLevelZero(shadowSampler, float2(u, u), 0); | ||
val += tCube.SampleCmpLevelZero(shadowSampler, normalize(float3(u, 1 - u, u)), 0); | ||
|
||
// Offset variant | ||
val += t1D.SampleCmpLevelZero(shadowSampler, u, 0, 0); | ||
val += t2D.SampleCmpLevelZero(shadowSampler, float2(u, u), 0, int2(0, 0)); | ||
// TextureCube does not have an offset version of this | ||
#endif | ||
|
||
/* | ||
void Object.GetDimensions() | ||
*/ | ||
t1D.GetDimensions(width); | ||
val += width; | ||
|
||
t1D.GetDimensions(fwidth); | ||
val += fwidth; | ||
|
||
t1D.GetDimensions(0, width, numLevels); | ||
val += width; | ||
val += numLevels; | ||
|
||
t1D.GetDimensions(0, fwidth, fnumLevels); | ||
val += fwidth; | ||
val += fnumLevels; | ||
|
||
t2D.GetDimensions(width, height); | ||
val += width; | ||
val += height; | ||
|
||
t2D.GetDimensions(fwidth, fheight); | ||
val += fwidth; | ||
val += fheight; | ||
|
||
t2D.GetDimensions(0, width, height, numLevels); | ||
val += width; | ||
val += height; | ||
val += numLevels; | ||
|
||
t2D.GetDimensions(0, fwidth, fheight, fnumLevels); | ||
val += fwidth; | ||
val += fheight; | ||
val += fnumLevels; | ||
|
||
t3D.GetDimensions(width, height, depth); | ||
val += width; | ||
val += height; | ||
val += depth; | ||
|
||
t3D.GetDimensions(fwidth, fheight, fdepth); | ||
val += fwidth; | ||
val += fheight; | ||
val += fdepth; | ||
|
||
t3D.GetDimensions(0, width, height, depth, numLevels); | ||
val += width; | ||
val += height; | ||
val += depth; | ||
val += numLevels; | ||
|
||
t3D.GetDimensions(0, fwidth, fheight, fdepth, fnumLevels); | ||
val += fwidth; | ||
val += fheight; | ||
val += fdepth; | ||
val += fnumLevels; | ||
|
||
tCube.GetDimensions(width, height); | ||
val += width; | ||
val += height; | ||
|
||
tCube.GetDimensions(fwidth, fheight); | ||
val += fwidth; | ||
val += fheight; | ||
|
||
tCube.GetDimensions(0, width, height, numLevels); | ||
val += width; | ||
val += height; | ||
val += numLevels; | ||
|
||
tCube.GetDimensions(0, fwidth, fheight, fnumLevels); | ||
val += fwidth; | ||
val += fheight; | ||
val += fnumLevels; | ||
|
||
t1DArray.GetDimensions(width, elements); | ||
val += width; | ||
val += elements; | ||
|
||
t1DArray.GetDimensions(fwidth, felements); | ||
val += fwidth; | ||
val += felements; | ||
|
||
t1DArray.GetDimensions(0, width, elements, numLevels); | ||
val += width; | ||
val += elements; | ||
val += numLevels; | ||
|
||
t1DArray.GetDimensions(0, fwidth, felements, fnumLevels); | ||
val += fwidth; | ||
val += felements; | ||
val += fnumLevels; | ||
|
||
t2DArray.GetDimensions(width, height, elements); | ||
val += width; | ||
val += height; | ||
val += elements; | ||
|
||
t2DArray.GetDimensions(fwidth, fheight, felements); | ||
val += fwidth; | ||
val += fheight; | ||
val += felements; | ||
|
||
t2DArray.GetDimensions(0, width, height, elements, numLevels); | ||
val += width; | ||
val += height; | ||
val += elements; | ||
val += numLevels; | ||
|
||
t2DArray.GetDimensions(0, fwidth, fheight, felements, fnumLevels); | ||
val += fwidth; | ||
val += fheight; | ||
val += felements; | ||
val += fnumLevels; | ||
|
||
tCubeArray.GetDimensions(width, height, elements); | ||
val += width; | ||
val += height; | ||
val += elements; | ||
|
||
// fxc 47.0: (95): error X4598: The array element count of GetDimensions on TextureCubeArray objects is unavailable on cs_5_0 | ||
#if defined(CS60) || defined(VK) | ||
tCubeArray.GetDimensions(fwidth, fheight, felements); | ||
val += fwidth; | ||
val += fheight; | ||
val += felements; | ||
#endif | ||
|
||
tCubeArray.GetDimensions(0, width, height, elements, numLevels); | ||
val += width; | ||
val += height; | ||
val += elements; | ||
val += numLevels; | ||
|
||
#if defined(CS60) || defined(VK) | ||
tCubeArray.GetDimensions(0, fwidth, fheight, felements, fnumLevels); | ||
val += fwidth; | ||
val += fheight; | ||
val += felements; | ||
val += fnumLevels; | ||
#endif | ||
|
||
/* | ||
<Template Type>4 Object.Gather() | ||
*/ | ||
float4 f4 = t2D.Gather(samplerState, float2(u, u)); | ||
val += f4.x; val += f4.y; val += f4.z; val += f4.w; | ||
|
||
f4 = tCube.Gather(samplerState, normalize(float3(u, 1 - u, u))); | ||
val += f4.x; val += f4.y; val += f4.z; val += f4.w; | ||
|
||
f4 = t2DArray.Gather(samplerState, float3(u, u, 0)); | ||
val += f4.x; val += f4.y; val += f4.z; val += f4.w; | ||
|
||
f4 = tCubeArray.Gather(samplerState, float4(normalize(float3(u, 1 - u, u)), 0)); | ||
val += f4.x; val += f4.y; val += f4.z; val += f4.w; | ||
|
||
// Offset variant | ||
f4 = t2D.Gather(samplerState, float2(u, u), int2(0, 0)); | ||
val += f4.x; val += f4.y; val += f4.z; val += f4.w; | ||
|
||
f4 = t2DArray.Gather(samplerState, float3(u, u, 0), int2(0, 0)); | ||
val += f4.x; val += f4.y; val += f4.z; val += f4.w; | ||
|
||
/* | ||
ret Object.Load() | ||
*/ | ||
val += t1D.Load(int2(0, 0)); | ||
val += t2D.Load(int3(0, 0, 0)); | ||
val += t3D.Load(int4(0, 0, 0, 0)); | ||
|
||
val += t1DArray.Load(int3(0, 0, 0)); | ||
val += t2DArray.Load(int4(0, 0, 0, 0)); | ||
|
||
// Offset variant | ||
val += t1D.Load(int2(0, 0), 0); | ||
val += t2D.Load(int3(0, 0, 0), int2(0,0)); | ||
val += t3D.Load(int4(0, 0, 0, 0), int3(0, 0, 0)); | ||
|
||
val += t1DArray.Load(int3(0, 0, 0), 0); | ||
val += t2DArray.Load(int4(0, 0, 0, 0), int2(0, 0)); | ||
|
||
/* | ||
<Template Type> Object.SampleGrad() | ||
*/ | ||
float _ddx = 0.0f, _ddy = 0.0f; | ||
val += t1D.SampleGrad(samplerState, 0.0f, _ddx, _ddy); | ||
val += t2D.SampleGrad(samplerState, float2(u, u), float2(_ddx, _ddx), float2(_ddy, _ddy)); | ||
val += t3D.SampleGrad(samplerState, float3(u, u, u), float3(_ddx, _ddx, _ddx), float3(_ddy, _ddy, _ddy)); | ||
val += tCube.SampleGrad(samplerState, normalize(float3(u, 1 - u, u)), float3(_ddx, _ddx, _ddx), float3(_ddy, _ddy, _ddy)); | ||
|
||
val += t1DArray.SampleGrad(samplerState, float2(0.0f, 0.0f), _ddx, _ddy); | ||
val += t2DArray.SampleGrad(samplerState, float3(u, u, 0.0f), float2(_ddx, _ddx), float2(_ddy, _ddy)); | ||
|
||
// Offset variant | ||
val += t1D.SampleGrad(samplerState, 0.0f, _ddx, _ddy, 0); | ||
val += t2D.SampleGrad(samplerState, float2(u, u), float2(_ddx, _ddx), float2(_ddy, _ddy), int2(0, 0)); | ||
val += t3D.SampleGrad(samplerState, float3(u, u, u), float3(_ddx, _ddx, _ddx), float3(_ddy, _ddy, _ddy), int3(0, 0, 0)); | ||
|
||
val += t1DArray.SampleGrad(samplerState, float2(0.0f, 0.0f), _ddx, _ddy, 0); | ||
val += t2DArray.SampleGrad(samplerState, float3(u, u, 0.0f), float2(_ddx, _ddx), float2(_ddy, _ddy), int2(0, 0)); | ||
|
||
outputBuffer[idx] = val; | ||
} | ||
|
||
// DX11: 313 | ||
// DX11: 313 | ||
// DX11: 313 | ||
// DX11: 313 | ||
// DX12: 313 | ||
// DX12: 313 | ||
// DX12: 313 | ||
// DX12: 313 | ||
// DX12CS6: 336 | ||
// DX12CS6: 336 | ||
// DX12CS6: 336 | ||
// DX12CS6: 336 | ||
// VK: 331 | ||
// VK: 331 | ||
// VK: 331 | ||
// VK: 331 |