SWDEV-479958 - Support different address mode

Support different address modes in X, Y, Z directions

Change-Id: If1db5a8af33c92dd14b48968c3e8eceb97daea6c
This commit is contained in:
taosang2
2024-11-15 17:47:37 -05:00
committed by Tao Sang
parent 1af639ea44
commit d82d6a78cf
7 changed files with 94 additions and 125 deletions
+11 -7
View File
@@ -655,28 +655,32 @@ hsa_status_t PALHSALoaderContext::SamplerCreate(
assert(false);
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
// This path works in OCL only, so address_mode is the same in X, Y and Z.
uint addressMode[3];
switch (sampler_descriptor->address_mode) {
case HSA_EXT_SAMPLER_ADDRESSING_MODE_CLAMP_TO_EDGE:
state |= amd::Sampler::StateAddressClampToEdge;
addressMode[0] = CL_ADDRESS_CLAMP_TO_EDGE;
break;
case HSA_EXT_SAMPLER_ADDRESSING_MODE_CLAMP_TO_BORDER:
state |= amd::Sampler::StateAddressClamp;
addressMode[0] = CL_ADDRESS_CLAMP;
break;
case HSA_EXT_SAMPLER_ADDRESSING_MODE_REPEAT:
state |= amd::Sampler::StateAddressRepeat;
addressMode[0] = CL_ADDRESS_REPEAT;
break;
case HSA_EXT_SAMPLER_ADDRESSING_MODE_MIRRORED_REPEAT:
state |= amd::Sampler::StateAddressMirroredRepeat;
addressMode[0] = CL_ADDRESS_MIRRORED_REPEAT;
break;
case HSA_EXT_SAMPLER_ADDRESSING_MODE_UNDEFINED:
state |= amd::Sampler::StateAddressNone;
addressMode[0] = CL_ADDRESS_NONE;
break;
default:
assert(false);
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
}
addressMode[1] = addressMode[2] = addressMode[0];
std::unique_ptr<pal::Sampler> sampler(new pal::Sampler(program_->palDevice()));
if (!sampler || !sampler->create(state)) {
if (!sampler || !sampler->create(state, addressMode)) {
return HSA_STATUS_ERROR;
}
sampler_handle->handle = sampler->hwSrd();