Skip to content

Add test for select (struct) #213

@spall

Description

@spall

We have existing tests for select over scalars, but need to extend them to support structs. Note that WaveReadLaneAt has examples of this that could be used for guidance.

https://github.com/llvm/llvm-project/blob/b474c3f69eae4230fc9a2eff07ba63d2bbac65c0/clang/lib/Headers/hlsl/hlsl_alias_intrinsics.h#L2039

In Test\Feature\HLSLLib create

  • Tests for Structs

A .test file should contain

  • a source portion; If multiple .test files can use the same source; it can go in its own file and be referenced in the run portion of each .test file instead.
@@ -0,0 +1,54 @@
#--- source.hlsl

StructuredBuffer<float4> In : register(t0);
RWStructuredBuffer<float> Out : register(u1);

[numthreads(1,1,1)]
void main() {
// A single test can test for all scalar/vector length as shown here.
  Out[0] = length(In[0]); // Test float4
  Out[1] = length(In[1].x); // Test float
  Out[2] = length(In[1].yzw); // Test float3
  Out[3] = length(In[1].yz); // Test float2
}
  • a yaml portion; If multiple .test files can use the same YAML, it can go in its own file and be referenced in the run portion of each .test file instead.
//--- pipeline.yaml

---
Shaders:
  - Stage: Compute
    Entry: main
    DispatchSize: [1, 1, 1]
Buffers:
  - Name: In
    Format: Float32
    Stride: 16
    Data: [ 4, 4, 4, 4, 3.14159, 0, 5, 12 ]
  - Name: Out
    Format: Float32
    Stride: 4
    ZeroInitSize: 12
  - Name: ExpectedOut # The result we expect
    Format: Float32
    Stride: 4
    Data: [ 8, 3.14159, 13, 5 ]
Results:  # A test might have more than 1 result.
  - Result: Test1
    Rule: BufferFuzzy # there is also a BufferExact rule
    ULPT: 1
    Actual: Out
    Expected: ExpectedOut
DescriptorSets:
  - Resources:
    - Name: In
      Kind: StructuredBuffer
      DirectXBinding:
        Register: 0
        Space: 0
      VulkanBinding:
        Binding: 0
    - Name: Out
      Kind: RWStructuredBuffer
      DirectXBinding:
        Register: 1
        Space: 0
      VulkanBinding:
        Binding: 1
...
#--- end
  • A run portion; which will be unique to each .test file.
# RUN: split-file %s %t
# RUN: %dxc_target -T cs_6_5 -Fo %t.o %t/source.hlsl
# RUN: %offloader %t/pipeline.yaml %t.o 

Tests for 16 bit floating point should have a # REQUIRES: Half. Don't forget -enable-16bit-types
Tests for 16 bit integer should have a # REQUIRES: Int16. Don't forget -enable-16bit-types
Tests for 64 bit floating point should have a # REQUIRES: Double.
Tests for 64 bit integer should have a # REQUIRES: Int64.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status

Active

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions