Build ROCr core and image libraries as one shared object

Change-Id: I3a16c1227e7db2e386ab33886965596fa0fb0c87
Tá an tiomantas seo le fáil i:
Ramesh Errabolu
2020-05-19 17:37:57 -05:00
tiomanta ag Sean Keely
tuismitheoir db6a781f0c
tiomantas 0ca0691ca7
D'athraigh 39 comhad le 942 breiseanna agus 778 scriosta
+24 -22
Féach ar an gComhad
@@ -7,6 +7,7 @@
#include <climits>
#include "inc/hsa_ext_amd.h"
#include "core/inc/hsa_internal.h"
#include "addrlib/src/core/addrlib.h"
#include "image_runtime.h"
#include "resource.h"
@@ -14,7 +15,8 @@
#include "util.h"
#include "device_info.h"
namespace amd {
namespace rocr {
namespace image {
//-----------------------------------------------------------------------------
// Workaround switch to combined format/type codes and missing gfx10
@@ -143,8 +145,7 @@ hsa_status_t ImageManagerNv::CalculateImageSizeAndAlignment(
hsa_ext_image_data_info_t& image_info) const {
ADDR2_COMPUTE_SURFACE_INFO_OUTPUT out = {0};
hsa_profile_t profile;
hsa_status_t status = hsa_agent_get_info(component,
HSA_AGENT_INFO_PROFILE, &profile);
hsa_status_t status = HSA::hsa_agent_get_info(component, HSA_AGENT_INFO_PROFILE, &profile);
Image::TileMode tileMode = Image::TileMode::LINEAR;
if (image_data_layout == HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE) {
tileMode = (profile == HSA_PROFILE_BASE &&
@@ -217,10 +218,10 @@ hsa_status_t ImageManagerNv::PopulateImageSrd(Image& image,
SQ_BUF_RSRC_WORD3 word3;
word0.val = 0;
word0.f.BASE_ADDRESS = ext_image::PtrLow32(image_data_addr);
word0.f.BASE_ADDRESS = PtrLow32(image_data_addr);
word1.val = image.srd[1];
word1.f.BASE_ADDRESS_HI = ext_image::PtrHigh32(image_data_addr);
word1.f.BASE_ADDRESS_HI = PtrHigh32(image_data_addr);
word1.f.STRIDE = image_prop.element_size;
word3.val = image.srd[3];
@@ -242,9 +243,9 @@ hsa_status_t ImageManagerNv::PopulateImageSrd(Image& image,
return (hsa_status_t)HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED;
}
reinterpret_cast<SQ_IMG_RSRC_WORD0*>(&image.srd[0])->bits.BASE_ADDRESS =
ext_image::PtrLow40Shift8(image_data_addr);
reinterpret_cast<SQ_IMG_RSRC_WORD1*>(&image.srd[1])->bits.BASE_ADDRESS_HI
= ext_image::PtrHigh64Shift40(image_data_addr);
PtrLow40Shift8(image_data_addr);
reinterpret_cast<SQ_IMG_RSRC_WORD1*>(&image.srd[1])->bits.BASE_ADDRESS_HI =
PtrHigh64Shift40(image_data_addr);
reinterpret_cast<SQ_IMG_RSRC_WORD1*>(&image.srd[1])->bits.FORMAT = GetCombinedFormat(image_prop.data_format, image_prop.data_type);
reinterpret_cast<SQ_IMG_RSRC_WORD3*>(&image.srd[3])->bits.DST_SEL_X =
swizzle.x;
@@ -264,9 +265,10 @@ hsa_status_t ImageManagerNv::PopulateImageSrd(Image& image,
uintptr_t meta = uintptr_t(((SQ_IMG_RSRC_WORD7*)(&image.srd[7]))->bits.META_DATA_ADDRESS_HI) << 16;
meta |= uintptr_t(((SQ_IMG_RSRC_WORD6*)(&image.srd[6]))->bits.META_DATA_ADDRESS) << 8;
meta += reinterpret_cast<uintptr_t>(image_data_addr);
((SQ_IMG_RSRC_WORD6*)(&image.srd[6]))->bits.META_DATA_ADDRESS = ext_image::PtrLow16Shift8((void*)meta);
((SQ_IMG_RSRC_WORD7*)(&image.srd[7]))->bits.META_DATA_ADDRESS_HI = ext_image::PtrHigh64Shift16((void*)meta);
((SQ_IMG_RSRC_WORD6*)(&image.srd[6]))->bits.META_DATA_ADDRESS = PtrLow16Shift8((void*)meta);
((SQ_IMG_RSRC_WORD7*)(&image.srd[7]))->bits.META_DATA_ADDRESS_HI =
PtrHigh64Shift16((void*)meta);
}
// Looks like this is only used for CPU copies.
image.row_pitch = 0;
@@ -352,10 +354,10 @@ hsa_status_t ImageManagerNv::PopulateImageSrd(Image& image) const {
SQ_BUF_RSRC_WORD3 word3;
word0.val = 0;
word0.f.BASE_ADDRESS = ext_image::PtrLow32(image_data_addr);
word0.f.BASE_ADDRESS = PtrLow32(image_data_addr);
word1.val = 0;
word1.f.BASE_ADDRESS_HI = ext_image::PtrHigh32(image_data_addr);
word1.f.BASE_ADDRESS_HI = PtrHigh32(image_data_addr);
word1.f.STRIDE = image_prop.element_size;
word1.f.SWIZZLE_ENABLE = false;
word1.f.CACHE_SWIZZLE = false;
@@ -404,18 +406,18 @@ hsa_status_t ImageManagerNv::PopulateImageSrd(Image& image) const {
const size_t row_pitch_size = out.pitch * image_prop.element_size;
word0.f.BASE_ADDRESS = ext_image::PtrLow40Shift8(image_data_addr);
word0.f.BASE_ADDRESS = PtrLow40Shift8(image_data_addr);
word1.val = 0;
word1.f.BASE_ADDRESS_HI = ext_image::PtrHigh64Shift40(image_data_addr);
word1.f.BASE_ADDRESS_HI = PtrHigh64Shift40(image_data_addr);
word1.f.MIN_LOD = 0;
word1.f.FORMAT = GetCombinedFormat(image_prop.data_format, image_prop.data_type);
// Only take the lowest 2 bits of (image.desc.width - 1)
word1.f.WIDTH = ext_image::BitSelect<0, 1>(image.desc.width - 1);
word1.f.WIDTH = BitSelect<0, 1>(image.desc.width - 1);
word2.val = 0;
// Take the high 12 bits of (image.desc.width - 1)
word2.f.WIDTH_HI = ext_image::BitSelect<2, 13>(image.desc.width - 1);
word2.f.WIDTH_HI = BitSelect<2, 13>(image.desc.width - 1);
word2.f.HEIGHT = image.desc.height ? image.desc.height - 1 : 0;
word2.f.RESOURCE_LEVEL = 1;
@@ -507,7 +509,7 @@ hsa_status_t ImageManagerNv::ModifyImageSrd(
return HSA_STATUS_SUCCESS;
}
hsa_status_t ImageManagerNv::PopulateSamplerSrd(amd::Sampler& sampler) const {
hsa_status_t ImageManagerNv::PopulateSamplerSrd(Sampler& sampler) const {
const hsa_ext_sampler_descriptor_t sampler_descriptor = sampler.desc;
SQ_IMG_SAMP_WORD0 word0;
@@ -720,9 +722,8 @@ hsa_status_t ImageManagerNv::FillImage(const Image& image, const void* pattern,
break;
}
hsa_status_t status =
ext_image::ImageRuntime::instance()->blit_kernel().FillImage(
blit_queue_, blit_code_catalog_, *image_view, new_pattern, region);
hsa_status_t status = ImageRuntime::instance()->blit_kernel().FillImage(
blit_queue_, blit_code_catalog_, *image_view, new_pattern, region);
// Revert back original configuration.
if (word3_buff != NULL) {
@@ -740,4 +741,5 @@ hsa_status_t ImageManagerNv::FillImage(const Image& image, const void* pattern,
return status;
}
} // namespace amd
} // namespace image
} // namespace rocr