Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions include/Support/Pipeline.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ enum class ResourceKind {
StructuredBuffer,
ByteAddressBuffer,
Texture2D,
Texture2DMS,
Texture2DMSArray,
RWBuffer,
RWStructuredBuffer,
RWByteAddressBuffer,
Expand Down Expand Up @@ -106,6 +108,8 @@ struct OutputProperties {
int Width;
int Depth;
int MipLevels = 1;
int SampleCount = 1;
int ArrayLayers = 1;
};

static inline uint32_t getFormatSize(DataFormat Format) {
Expand Down Expand Up @@ -157,6 +161,10 @@ struct CPUBuffer {
return Stride;
return getSingleElementSize() * Channels;
}

uint32_t getSampleCount() const { return OutputProps.SampleCount; }

uint32_t getArrayLayers() const { return OutputProps.ArrayLayers; }
};

struct Result {
Expand Down Expand Up @@ -187,6 +195,8 @@ struct Resource {
case ResourceKind::Buffer:
case ResourceKind::RWBuffer:
case ResourceKind::Texture2D:
case ResourceKind::Texture2DMS:
case ResourceKind::Texture2DMSArray:
case ResourceKind::RWTexture2D:
case ResourceKind::Sampler:
case ResourceKind::SampledTexture2D:
Expand All @@ -213,6 +223,8 @@ struct Resource {
case ResourceKind::RWByteAddressBuffer:
case ResourceKind::ConstantBuffer:
case ResourceKind::Texture2D:
case ResourceKind::Texture2DMS:
case ResourceKind::Texture2DMSArray:
case ResourceKind::RWTexture2D:
case ResourceKind::SampledTexture2D:
return false;
Expand All @@ -231,6 +243,8 @@ struct Resource {
case ResourceKind::Sampler:
return false;
case ResourceKind::Texture2D:
case ResourceKind::Texture2DMS:
case ResourceKind::Texture2DMSArray:
case ResourceKind::RWTexture2D:
case ResourceKind::SampledTexture2D:
return true;
Expand Down Expand Up @@ -267,6 +281,25 @@ struct Resource {
}
}

bool isMultiSampledTexture() const {
switch (Kind) {
case ResourceKind::Texture2DMS:
case ResourceKind::Texture2DMSArray:
return true;
default:
return false;
}
}

bool isArrayTexture() const {
switch (Kind) {
case ResourceKind::Texture2DMSArray:
return true;
default:
return false;
}
}

uint32_t getElementSize() const {
assert(!isSampler() && "Samplers do not have element size");
// ByteAddressBuffers are treated as 4-byte elements to match their memory
Expand All @@ -289,6 +322,8 @@ struct Resource {
case ResourceKind::StructuredBuffer:
case ResourceKind::ByteAddressBuffer:
case ResourceKind::Texture2D:
case ResourceKind::Texture2DMS:
case ResourceKind::Texture2DMSArray:
case ResourceKind::ConstantBuffer:
case ResourceKind::Sampler:
case ResourceKind::SampledTexture2D:
Expand Down Expand Up @@ -641,6 +676,8 @@ template <> struct ScalarEnumerationTraits<offloadtest::ResourceKind> {
ENUM_CASE(StructuredBuffer);
ENUM_CASE(ByteAddressBuffer);
ENUM_CASE(Texture2D);
ENUM_CASE(Texture2DMS);
ENUM_CASE(Texture2DMSArray);
ENUM_CASE(RWBuffer);
ENUM_CASE(RWStructuredBuffer);
ENUM_CASE(RWByteAddressBuffer);
Expand Down
9 changes: 9 additions & 0 deletions lib/API/DX/Device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ static D3D12_RESOURCE_DIMENSION getDXDimension(ResourceKind RK) {
case ResourceKind::ConstantBuffer:
return D3D12_RESOURCE_DIMENSION_BUFFER;
case ResourceKind::Texture2D:
case ResourceKind::Texture2DMS:
case ResourceKind::Texture2DMSArray:
case ResourceKind::RWTexture2D:
return D3D12_RESOURCE_DIMENSION_TEXTURE2D;
case ResourceKind::Sampler:
Expand All @@ -149,6 +151,8 @@ static DXResourceKind getDXKind(offloadtest::ResourceKind RK) {
case ResourceKind::StructuredBuffer:
case ResourceKind::ByteAddressBuffer:
case ResourceKind::Texture2D:
case ResourceKind::Texture2DMS:
case ResourceKind::Texture2DMSArray:
return SRV;

case ResourceKind::RWStructuredBuffer:
Expand Down Expand Up @@ -227,6 +231,9 @@ static D3D12_SHADER_RESOURCE_VIEW_DESC getSRVDescription(const Resource &R) {
Desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
Desc.Texture2D = D3D12_TEX2D_SRV{0, 1, 0, 0};
break;
case ResourceKind::Texture2DMS:
case ResourceKind::Texture2DMSArray:
llvm_unreachable("Multisampled textures aren't supported in DirectX!");
case ResourceKind::RWStructuredBuffer:
case ResourceKind::RWBuffer:
case ResourceKind::RWByteAddressBuffer:
Expand Down Expand Up @@ -270,6 +277,8 @@ static D3D12_UNORDERED_ACCESS_VIEW_DESC getUAVDescription(const Resource &R) {
case ResourceKind::Buffer:
case ResourceKind::ByteAddressBuffer:
case ResourceKind::Texture2D:
case ResourceKind::Texture2DMS:
case ResourceKind::Texture2DMSArray:
case ResourceKind::ConstantBuffer:
case ResourceKind::Sampler:
llvm_unreachable("Not a UAV type!");
Expand Down
Loading
Loading