SWDEV-479958 - Support different address mode

Support different address modes in X, Y, Z directions

Change-Id: If1db5a8af33c92dd14b48968c3e8eceb97daea6c
이 커밋은 다음에 포함됨:
taosang2
2024-11-15 17:47:37 -05:00
커밋한 사람 Tao Sang
부모 1af639ea44
커밋 d82d6a78cf
7개의 변경된 파일과 94개의 추가작업 그리고 125개의 파일을 삭제
+11 -7
파일 보기
@@ -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();