P4 to Git Change 1163090 by gandryey@gera-w8 on 2015/06/18 17:29:32

ECR #304775 - Mipmaps support
	- Fix the view creation for the host path transfers. GSL can ignore the original mipmap surface dimensions and apply the new settings

Affected files ...

... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuresource.cpp#220 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gslbe/src/rt/GSLDevice.cpp#123 edit
Этот коммит содержится в:
foreman
2015-06-18 17:39:39 -04:00
родитель bbd0867848
Коммит 706ff60007
2 изменённых файлов: 20 добавлений и 2 удалений
+17 -2
Просмотреть файл
@@ -1661,6 +1661,13 @@ Resource::mapLayers(VirtualGPU* gpu, CALuint flags)
}
dstOffs = startLayer_ * cal()->slice_ * elementSize();
uint32_t viewFlags = CAL_RESALLOCSLICEVIEW_LEVEL_AND_LAYER;
if ((cal()->type_ == ImageView) && viewOwner_->mipMapped() &&
(cal()->dimension_ == GSL_MOA_TEXTURE_2D)) {
// GSL ignores the base surface dimensions if extra flags
// are specified
viewFlags = 0;
}
// Loop through all layers
for (uint i = startLayer_; i < layers; ++i) {
@@ -1681,7 +1688,7 @@ Resource::mapLayers(VirtualGPU* gpu, CALuint flags)
sliceResource = dev().resAllocView(
gslResource(), gslSize,
calOffset, cal()->format_, cal()->channelOrder_, gslDim,
0, i, CAL_RESALLOCSLICEVIEW_LEVEL_AND_LAYER);
0, i, viewFlags);
if (0 == sliceResource) {
LogError("Map layer. resAllocSliceView failed!");
return NULL;
@@ -1771,6 +1778,14 @@ Resource::unmapLayers(VirtualGPU* gpu)
srcOffs = startLayer_ * cal()->slice_ * elementSize();
uint32_t viewFlags = CAL_RESALLOCSLICEVIEW_LEVEL_AND_LAYER;
if ((cal()->type_ == ImageView) && viewOwner_->mipMapped() &&
(cal()->dimension_ == GSL_MOA_TEXTURE_2D)) {
// GSL ignores the base surface dimensions if extra flags
// are specified
viewFlags = 0;
}
// Check if map is write only
if (!(mapFlags_ == GSL_MAP_READ_ONLY)) {
// Loop through all layers
@@ -1792,7 +1807,7 @@ Resource::unmapLayers(VirtualGPU* gpu)
sliceResource = dev().resAllocView(
gslResource(), gslSize,
calOffset, cal()->format_, cal()->channelOrder_, gslDim,
0, i, CAL_RESALLOCSLICEVIEW_LEVEL_AND_LAYER);
0, i, viewFlags);
if (0 == sliceResource) {
LogError("Unmap layer. resAllocSliceView failed!");
return;
+3
Просмотреть файл
@@ -932,6 +932,9 @@ CALGSLDevice::resAllocView(gslMemObject res, gslResource3D size, CALdomain offse
levelobject = m_cs->createSubMemObject(res, GSL_LEVEL, levelParam);
attribs.bytePitch = static_cast<size_t>(levelobject->getPitch()) *
(levelobject->getBitsPerElement() / 8);
// GSL doesn't detect that the base surface is mipmaped
// and doesn't apply the height alignment
size.height = levelobject->getHeight();
}
if (flags & CAL_RESALLOCSLICEVIEW_LAYER)
{