SWDEV-479958 - Support different address mode

Support different address modes in X, Y, Z directions

Change-Id: If1db5a8af33c92dd14b48968c3e8eceb97daea6c


[ROCm/clr commit: d82d6a78cf]
Αυτή η υποβολή περιλαμβάνεται σε:
taosang2 authored and Tao Sang committed 2024-12-23 16:39:54 -05:00
1 γονέας 56ccdaf1dc
υποβολή da613fbbeb
7 files changed
+94 -125

No files matched your search

@@ -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();