Skip to content

Commit 0ccb23b

Browse files
committed
Support testing multi sampled textures
1 parent 7bc29c0 commit 0ccb23b

27 files changed

Lines changed: 991 additions & 32 deletions

include/Support/Pipeline.h

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ enum class ResourceKind {
5353
StructuredBuffer,
5454
ByteAddressBuffer,
5555
Texture2D,
56+
Texture2DMS,
57+
Texture2DMSArray,
5658
RWBuffer,
5759
RWStructuredBuffer,
5860
RWByteAddressBuffer,
@@ -106,6 +108,8 @@ struct OutputProperties {
106108
int Width;
107109
int Depth;
108110
int MipLevels = 1;
111+
int SampleCount = 1;
112+
int ArrayLayers = 1;
109113
};
110114

111115
static inline uint32_t getFormatSize(DataFormat Format) {
@@ -157,6 +161,10 @@ struct CPUBuffer {
157161
return Stride;
158162
return getSingleElementSize() * Channels;
159163
}
164+
165+
uint32_t getSampleCount() const { return OutputProps.SampleCount; }
166+
167+
uint32_t getArrayLayers() const { return OutputProps.ArrayLayers; }
160168
};
161169

162170
struct Result {
@@ -187,6 +195,8 @@ struct Resource {
187195
case ResourceKind::Buffer:
188196
case ResourceKind::RWBuffer:
189197
case ResourceKind::Texture2D:
198+
case ResourceKind::Texture2DMS:
199+
case ResourceKind::Texture2DMSArray:
190200
case ResourceKind::RWTexture2D:
191201
case ResourceKind::Sampler:
192202
case ResourceKind::SampledTexture2D:
@@ -213,6 +223,8 @@ struct Resource {
213223
case ResourceKind::RWByteAddressBuffer:
214224
case ResourceKind::ConstantBuffer:
215225
case ResourceKind::Texture2D:
226+
case ResourceKind::Texture2DMS:
227+
case ResourceKind::Texture2DMSArray:
216228
case ResourceKind::RWTexture2D:
217229
case ResourceKind::SampledTexture2D:
218230
return false;
@@ -231,6 +243,8 @@ struct Resource {
231243
case ResourceKind::Sampler:
232244
return false;
233245
case ResourceKind::Texture2D:
246+
case ResourceKind::Texture2DMS:
247+
case ResourceKind::Texture2DMSArray:
234248
case ResourceKind::RWTexture2D:
235249
case ResourceKind::SampledTexture2D:
236250
return true;
@@ -267,6 +281,25 @@ struct Resource {
267281
}
268282
}
269283

284+
bool isMultiSampledTexture() const {
285+
switch (Kind) {
286+
case ResourceKind::Texture2DMS:
287+
case ResourceKind::Texture2DMSArray:
288+
return true;
289+
default:
290+
return false;
291+
}
292+
}
293+
294+
bool isArrayTexture() const {
295+
switch (Kind) {
296+
case ResourceKind::Texture2DMSArray:
297+
return true;
298+
default:
299+
return false;
300+
}
301+
}
302+
270303
uint32_t getElementSize() const {
271304
assert(!isSampler() && "Samplers do not have element size");
272305
// ByteAddressBuffers are treated as 4-byte elements to match their memory
@@ -289,6 +322,8 @@ struct Resource {
289322
case ResourceKind::StructuredBuffer:
290323
case ResourceKind::ByteAddressBuffer:
291324
case ResourceKind::Texture2D:
325+
case ResourceKind::Texture2DMS:
326+
case ResourceKind::Texture2DMSArray:
292327
case ResourceKind::ConstantBuffer:
293328
case ResourceKind::Sampler:
294329
case ResourceKind::SampledTexture2D:
@@ -641,6 +676,8 @@ template <> struct ScalarEnumerationTraits<offloadtest::ResourceKind> {
641676
ENUM_CASE(StructuredBuffer);
642677
ENUM_CASE(ByteAddressBuffer);
643678
ENUM_CASE(Texture2D);
679+
ENUM_CASE(Texture2DMS);
680+
ENUM_CASE(Texture2DMSArray);
644681
ENUM_CASE(RWBuffer);
645682
ENUM_CASE(RWStructuredBuffer);
646683
ENUM_CASE(RWByteAddressBuffer);

lib/API/DX/Device.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ static D3D12_RESOURCE_DIMENSION getDXDimension(ResourceKind RK) {
131131
case ResourceKind::ConstantBuffer:
132132
return D3D12_RESOURCE_DIMENSION_BUFFER;
133133
case ResourceKind::Texture2D:
134+
case ResourceKind::Texture2DMS:
135+
case ResourceKind::Texture2DMSArray:
134136
case ResourceKind::RWTexture2D:
135137
return D3D12_RESOURCE_DIMENSION_TEXTURE2D;
136138
case ResourceKind::Sampler:
@@ -149,6 +151,8 @@ static DXResourceKind getDXKind(offloadtest::ResourceKind RK) {
149151
case ResourceKind::StructuredBuffer:
150152
case ResourceKind::ByteAddressBuffer:
151153
case ResourceKind::Texture2D:
154+
case ResourceKind::Texture2DMS:
155+
case ResourceKind::Texture2DMSArray:
152156
return SRV;
153157

154158
case ResourceKind::RWStructuredBuffer:
@@ -227,6 +231,9 @@ static D3D12_SHADER_RESOURCE_VIEW_DESC getSRVDescription(const Resource &R) {
227231
Desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
228232
Desc.Texture2D = D3D12_TEX2D_SRV{0, 1, 0, 0};
229233
break;
234+
case ResourceKind::Texture2DMS:
235+
case ResourceKind::Texture2DMSArray:
236+
llvm_unreachable("Multisampled textures aren't supported in DirectX!");
230237
case ResourceKind::RWStructuredBuffer:
231238
case ResourceKind::RWBuffer:
232239
case ResourceKind::RWByteAddressBuffer:
@@ -270,6 +277,8 @@ static D3D12_UNORDERED_ACCESS_VIEW_DESC getUAVDescription(const Resource &R) {
270277
case ResourceKind::Buffer:
271278
case ResourceKind::ByteAddressBuffer:
272279
case ResourceKind::Texture2D:
280+
case ResourceKind::Texture2DMS:
281+
case ResourceKind::Texture2DMSArray:
273282
case ResourceKind::ConstantBuffer:
274283
case ResourceKind::Sampler:
275284
llvm_unreachable("Not a UAV type!");

0 commit comments

Comments
 (0)