blob: 49db65caed68f8e2c7b180d18d73e8b7c794b378 [file] [log] [blame] [edit]
///////////////////////////////////////////////////////////////////////////////
// //
// DxilResource.h //
// Copyright (C) Microsoft Corporation. All rights reserved. //
// This file is distributed under the University of Illinois Open Source //
// License. See LICENSE.TXT for details. //
// //
// Representation of HLSL SRVs and UAVs. //
// //
///////////////////////////////////////////////////////////////////////////////
#pragma once
#include "DxilConstants.h"
#include "dxc/DXIL/DxilCompType.h"
#include "dxc/DXIL/DxilResourceBase.h"
namespace hlsl {
/// Use this class to represent an HLSL resource (SRV/UAV).
class DxilResource : public DxilResourceBase {
public:
/// Total number of coordinates necessary to access resource.
static unsigned GetNumCoords(Kind ResourceKind);
/// Total number of resource dimensions (Only width and height for cube).
static unsigned GetNumDimensions(Kind ResourceKind);
/// Total number of resource dimensions for CalcLOD (no array).
static unsigned GetNumDimensionsForCalcLOD(Kind ResourceKind);
/// Total number of offsets (in [-8,7]) necessary to access resource.
static unsigned GetNumOffsets(Kind ResourceKind);
/// Whether the resource kind is a texture. This does not include
/// FeedbackTextures.
static bool IsAnyTexture(Kind ResourceKind);
/// Whether the resource kind is an array of textures. This does not include
/// FeedbackTextures.
static bool IsAnyArrayTexture(Kind ResourceKind);
/// Whether the resource kind is a TextureCube or TextureCubeArray.
static bool IsAnyTextureCube(Kind ResourceKind);
/// Whether the resource kind is a FeedbackTexture.
static bool IsFeedbackTexture(Kind ResourceKind);
/// Whether the resource kind is a Texture or FeedbackTexture kind with array
/// dimension.
static bool IsArrayKind(Kind ResourceKind);
DxilResource();
CompType GetCompType() const;
void SetCompType(const CompType CT);
llvm::Type *GetRetType() const;
unsigned GetSampleCount() const;
void SetSampleCount(unsigned SampleCount);
unsigned GetElementStride() const;
void SetElementStride(unsigned ElemStride);
unsigned GetBaseAlignLog2() const;
void SetBaseAlignLog2(unsigned baseAlignLog2);
DXIL::SamplerFeedbackType GetSamplerFeedbackType() const;
void SetSamplerFeedbackType(DXIL::SamplerFeedbackType Value);
bool IsGloballyCoherent() const;
void SetGloballyCoherent(bool b);
bool HasCounter() const;
void SetHasCounter(bool b);
bool IsRO() const;
bool IsRW() const;
void SetRW(bool bRW);
bool IsROV() const;
void SetROV(bool bROV);
bool IsAnyTexture() const;
bool IsStructuredBuffer() const;
bool IsTypedBuffer() const;
bool IsRawBuffer() const;
bool IsTBuffer() const;
bool IsFeedbackTexture() const;
bool IsAnyArrayTexture() const;
bool IsAnyTextureCube() const;
bool IsArrayKind() const;
bool HasAtomic64Use() const;
void SetHasAtomic64Use(bool b);
static bool classof(const DxilResourceBase *R) {
return R->GetClass() == DXIL::ResourceClass::SRV ||
R->GetClass() == DXIL::ResourceClass::UAV;
}
private:
unsigned m_SampleCount;
unsigned m_ElementStride; // in bytes
unsigned m_baseAlignLog2 = 0; // worst-case alignment
CompType m_CompType;
DXIL::SamplerFeedbackType m_SamplerFeedbackType;
bool m_bGloballyCoherent;
bool m_bHasCounter;
bool m_bROV;
bool m_bHasAtomic64Use;
};
} // namespace hlsl