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
Этот коммит содержится в:
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Ссылка в новой задаче
Block a user