Skip to content

Commit 0abb7e2

Browse files
fftzengsys_zuul
authored andcommitted
Provide RT, SRV, UAV usage mask
Change-Id: I11c8c4de7ec39f145ab8cf859663673f38688e17
1 parent e566bb4 commit 0abb7e2

File tree

10 files changed

+57
-0
lines changed

10 files changed

+57
-0
lines changed

IGC/Compiler/CISACodeGen/CShader.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ CShader::CShader(Function* pFunc, CShaderProgram* pProgram)
6565
m_shaderStats = nullptr;
6666
m_constantBufferMask = 0;
6767
m_constantBufferLoaded = 0;
68+
m_uavLoaded = 0;
69+
m_shaderResourceLoaded = 0;
70+
m_renderTargetLoaded = 0;
6871
isInputsPulled = false;
6972
m_cbSlot = -1;
7073
m_statelessCBPushedSize = 0;
@@ -3096,11 +3099,26 @@ void CShader::SampleHeader(CVariable* payload, uint offset, uint writeMask, uint
30963099
encoder.Push();
30973100
}
30983101

3102+
void CShader::UavAccesed(uint index)
3103+
{
3104+
m_uavLoaded |= BIT(index);
3105+
}
3106+
30993107
void CShader::ConstantBufferAccesed(uint index)
31003108
{
31013109
m_constantBufferLoaded |= BIT(index);
31023110
}
31033111

3112+
void CShader::ShaderResourceAccesed(uint index)
3113+
{
3114+
m_shaderResourceLoaded |= BIT(index);
3115+
}
3116+
3117+
void CShader::RenderTargetAccesed(uint index)
3118+
{
3119+
m_renderTargetLoaded |= BIT(index);
3120+
}
3121+
31043122
// Helper function to copy raw register
31053123
void CShader::CopyVariable(
31063124
CVariable* dst,

IGC/Compiler/CISACodeGen/ComputeShaderCodeGen.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,10 @@ namespace IGC
481481
CreateConstantBufferOutput(pKernelProgram);
482482

483483
pKernelProgram->ConstantBufferLoaded = m_constantBufferLoaded;
484+
pKernelProgram->UavLoaded = m_uavLoaded;
485+
pKernelProgram->ShaderResourceLoaded = m_shaderResourceLoaded;
486+
pKernelProgram->RenderTargetLoaded = m_renderTargetLoaded;
487+
484488
pKernelProgram->hasControlFlow = m_numBlocks > 1 ? true : false;
485489

486490
pKernelProgram->MaxNumberOfThreads = m_Platform->getMaxGPGPUShaderThreads();

IGC/Compiler/CISACodeGen/DomainShaderCodeGen.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,10 @@ namespace IGC
276276
pKernelProgram->VertexURBEntryReadOffset = OctEltUnit(0);
277277
pKernelProgram->VertexURBEntryOutputReadOffset = GetURBHeaderSize();
278278
pKernelProgram->ConstantBufferLoaded = m_constantBufferLoaded;
279+
pKernelProgram->UavLoaded = m_uavLoaded;
280+
pKernelProgram->ShaderResourceLoaded = m_shaderResourceLoaded;
281+
pKernelProgram->RenderTargetLoaded = m_renderTargetLoaded;
282+
279283
pKernelProgram->DeclaresRTAIndex = m_properties.m_isRTAIndexDeclared;
280284
pKernelProgram->DeclaresVPAIndex = m_properties.m_isVPAIndexDeclared;
281285
pKernelProgram->HasClipCullAsOutput = m_properties.m_hasClipDistance;

IGC/Compiler/CISACodeGen/EmitVISAPass.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4328,6 +4328,7 @@ void EmitPass::emitRenderTargetWrite(llvm::RTWritIntrinsic* inst, bool fromRet)
43284328
if (RTIndex != -1)
43294329
{
43304330
bindingTableIndex = m_currShader->m_pBtiLayout->GetRenderTargetIndex(RTIndex);
4331+
m_currShader->RenderTargetAccesed(RTIndex);
43314332
}
43324333
else
43334334
{
@@ -15198,17 +15199,20 @@ ResourceDescriptor EmitPass::GetResourceVariable(Value* resourcePtr)
1519815199
{
1519915200
case UAV:
1520015201
bti = m_currShader->m_pBtiLayout->GetUavIndex(bufferIndex);
15202+
m_currShader->UavAccesed(bufferIndex); // return to driver
1520115203
break;
1520215204
case CONSTANT_BUFFER:
1520315205
bti = m_currShader->m_pBtiLayout->GetConstantBufferIndex(bufferIndex);
1520415206
m_currShader->ConstantBufferAccesed(bufferIndex); // return to driver
1520515207
break;
1520615208
case RESOURCE:
1520715209
bti = m_currShader->m_pBtiLayout->GetTextureIndex(bufferIndex);
15210+
m_currShader->ShaderResourceAccesed(bufferIndex); // return to driver
1520815211
break;
1520915212
case RENDER_TARGET:
1521015213
assert(m_currShader->GetShaderType() == ShaderType::PIXEL_SHADER);
1521115214
bti = m_currShader->m_pBtiLayout->GetRenderTargetIndex(bufferIndex);
15215+
m_currShader->RenderTargetAccesed(bufferIndex); // return to driver
1521215216
break;
1521315217
case SLM:
1521415218
bti = 254; // \todo, remove hard-coding

IGC/Compiler/CISACodeGen/GeometryShaderCodeGen.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,10 @@ namespace IGC
350350
CreateConstantBufferOutput(pKernelProgram);
351351

352352
pKernelProgram->ConstantBufferLoaded = m_constantBufferLoaded;
353+
pKernelProgram->UavLoaded = m_uavLoaded;
354+
pKernelProgram->ShaderResourceLoaded = m_shaderResourceLoaded;
355+
pKernelProgram->RenderTargetLoaded = m_renderTargetLoaded;
356+
353357
pKernelProgram->NOSBufferSize = m_NOSBufferSize / getGRFSize(); // in 256 bits
354358

355359
pKernelProgram->MaxNumberOfThreads = m_Platform->getMaxGeometryShaderThreads();

IGC/Compiler/CISACodeGen/HullShaderCodeGen.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,10 @@ namespace IGC
277277
CreateConstantBufferOutput(pKernelProgram);
278278

279279
pKernelProgram->ConstantBufferLoaded = m_constantBufferLoaded;
280+
pKernelProgram->UavLoaded = m_uavLoaded;
281+
pKernelProgram->ShaderResourceLoaded = m_shaderResourceLoaded;
282+
pKernelProgram->RenderTargetLoaded = m_renderTargetLoaded;
283+
280284
pKernelProgram->NOSBufferSize = m_NOSBufferSize / getGRFSize(); // in 256 bits
281285

282286
pKernelProgram->MaxNumberOfThreads = m_Platform->getMaxHullShaderThreads();

IGC/Compiler/CISACodeGen/PixelShaderCodeGen.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,10 @@ namespace IGC
713713
pKernelProgram->hasSampleOffset = m_SampleOffsetX || m_SampleOffsetY;
714714
pKernelProgram->hasZWDelta = m_ZWDelta;
715715
pKernelProgram->ConstantBufferLoaded = m_constantBufferLoaded;
716+
pKernelProgram->UavLoaded = m_uavLoaded;
717+
pKernelProgram->ShaderResourceLoaded = m_shaderResourceLoaded;
718+
pKernelProgram->RenderTargetLoaded = m_renderTargetLoaded;
719+
716720
pKernelProgram->hasControlFlow = m_numBlocks > 1 ? true : false;
717721
pKernelProgram->MaxNumberOfThreads = m_Platform->getMaxPixelShaderThreads();
718722
pKernelProgram->needPerspectiveBary = m_PerspectivePixel ? true : false;

IGC/Compiler/CISACodeGen/ShaderCodeGen.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,9 @@ namespace IGC
206206
ShaderType GetShaderType() const { return GetContext()->type; }
207207
bool IsValueCoalesced(llvm::Value* v);
208208
void ConstantBufferAccesed(uint index);
209+
void UavAccesed(uint index);
210+
void ShaderResourceAccesed(uint index);
211+
void RenderTargetAccesed(uint index);
209212

210213
void SampleHeader(CVariable* payload, uint offset, uint writeMask, uint rti);
211214

@@ -456,6 +459,10 @@ namespace IGC
456459
uint m_ConstantBufferLength;
457460
uint m_constantBufferMask;
458461
uint m_constantBufferLoaded;
462+
uint m_uavLoaded;
463+
uint m_shaderResourceLoaded;
464+
uint m_renderTargetLoaded;
465+
459466
int m_cbSlot;
460467
uint m_statelessCBPushedSize;
461468
uint m_NOSBufferSize;

IGC/Compiler/CISACodeGen/VertexShaderCodeGen.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,10 @@ namespace IGC
173173
pKernelProgram->hasControlFlow = m_numBlocks > 1 ? true : false;
174174
pKernelProgram->MaxNumberOfThreads = m_Platform->getMaxVertexShaderThreads(isPositionOnlyShader);
175175
pKernelProgram->ConstantBufferLoaded = m_constantBufferLoaded;
176+
pKernelProgram->UavLoaded = m_uavLoaded;
177+
pKernelProgram->ShaderResourceLoaded = m_shaderResourceLoaded;
178+
pKernelProgram->RenderTargetLoaded = m_renderTargetLoaded;
179+
176180
pKernelProgram->hasVertexID = m_properties.m_HasVertexID;
177181
pKernelProgram->vertexIdLocation = m_properties.m_VID;
178182
pKernelProgram->hasInstanceID = m_properties.m_HasInstanceID;

IGC/Compiler/CodeGenPublic.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,10 @@ namespace IGC
262262

263263
unsigned int NOSBufferSize;
264264
unsigned int ConstantBufferLoaded;
265+
unsigned int UavLoaded;
266+
unsigned int ShaderResourceLoaded;
267+
unsigned int RenderTargetLoaded;
268+
265269
bool hasControlFlow;
266270
unsigned int bufferSlot;
267271
unsigned int statelessCBPushedSize;

0 commit comments

Comments
 (0)