From 80ab916a5b79acfdabca97a218c2c858629391e4 Mon Sep 17 00:00:00 2001
From: foreman
Date: Wed, 27 Jan 2016 11:36:07 -0500
Subject: [PATCH] P4 to Git Change 1231549 by wchau@wchau_WIN_OCL_HSA on
2016/01/27 11:23:48
SWDEV-79308 - Use 64-bit to calculate the scratch buffer size for OCL. We observed that the computed scratch buffer size could be > 4G when compilier optimization option is not used.
Cross branch change - requires CL1231547.
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gslbe/src/rt/GSLDevice.cpp#157 edit
---
rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.cpp b/rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.cpp
index 5edfdea48c..026be11da7 100644
--- a/rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.cpp
+++ b/rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.cpp
@@ -1220,7 +1220,7 @@ CALGSLDevice::calcScratchBufferSize(uint32 regNum) const
// Determine the scratch size we need to allocate
cmScratchSpaceNeededPerShaderStage scratchSpacePerShaderStage;
memset(&scratchSpacePerShaderStage, 0, sizeof(scratchSpacePerShaderStage));
- uint32 scratchBufferSizes[gslProgramTarget_COUNT];
+ uint64 scratchBufferSizes[gslProgramTarget_COUNT];
memset(scratchBufferSizes, 0, sizeof(scratchBufferSizes));
uint32 enabledShadersFlag = 0;
@@ -1244,6 +1244,8 @@ CALGSLDevice::calcScratchBufferSize(uint32 regNum) const
if (scratchBufferSizes[target] == 0) { // assign minimum scratch buffer size of 64K
scratchBufferSizes[target] = 0x10000;
}
+
+ assert(scratchBufferSizes[target] <= 0xFFFFFFFF); // scratch buffer size < 4GB
}
return scratchBufferSizes[target];