Flatten required bits of imageview into SampledImageDescriptor Bug: b/123244275 Bug: b/129523279 Change-Id: I46e59313ac152ba493fad78cfcdadbcd31566554 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/30929 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by: Chris Forbes <chrisforbes@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Pipeline/SpirvShaderSampling.cpp b/src/Pipeline/SpirvShaderSampling.cpp index 4d9e677..59dcb57 100644 --- a/src/Pipeline/SpirvShaderSampling.cpp +++ b/src/Pipeline/SpirvShaderSampling.cpp
@@ -37,34 +37,36 @@ namespace sw { -SpirvShader::ImageSampler *SpirvShader::getImageSampler(uint32_t inst, const vk::ImageView *imageView, const vk::Sampler *sampler) +SpirvShader::ImageSampler *SpirvShader::getImageSampler(uint32_t inst, vk::SampledImageDescriptor const *imageDescriptor, const vk::Sampler *sampler) { ImageInstruction instruction(inst); - ASSERT(imageView->id != 0 && (sampler->id != 0 || instruction.samplerMethod == Fetch)); + ASSERT(imageDescriptor->imageViewId != 0 && (sampler->id != 0 || instruction.samplerMethod == Fetch)); // TODO(b/129523279): Move somewhere sensible. static std::unordered_map<uint64_t, ImageSampler*> cache; static std::mutex mutex; // FIXME(b/129523279): Take instruction opcode and optional parameters into acount (SamplerMethod / SamplerOption). - auto key = (static_cast<uint64_t>(imageView->id) << 32) | static_cast<uint64_t>(sampler->id); + auto key = (static_cast<uint64_t>(imageDescriptor->imageViewId) << 32) | static_cast<uint64_t>(sampler->id); std::unique_lock<std::mutex> lock(mutex); auto it = cache.find(key); if (it != cache.end()) { return it->second; } + auto type = imageDescriptor->type; + Sampler samplerState = {}; - samplerState.textureType = convertTextureType(imageView->getType()); - samplerState.textureFormat = imageView->getFormat(vk::ImageView::SAMPLING); + samplerState.textureType = convertTextureType(type); + samplerState.textureFormat = imageDescriptor->format; samplerState.textureFilter = convertFilterMode(sampler); samplerState.border = sampler->borderColor; - samplerState.addressingModeU = convertAddressingMode(0, sampler->addressModeU, imageView->getType()); - samplerState.addressingModeV = convertAddressingMode(1, sampler->addressModeV, imageView->getType()); - samplerState.addressingModeW = convertAddressingMode(2, sampler->addressModeW, imageView->getType()); + samplerState.addressingModeU = convertAddressingMode(0, sampler->addressModeU, type); + samplerState.addressingModeV = convertAddressingMode(1, sampler->addressModeV, type); + samplerState.addressingModeW = convertAddressingMode(2, sampler->addressModeW, type); samplerState.mipmapFilter = convertMipmapMode(sampler); - samplerState.swizzle = imageView->getComponentMapping(); + samplerState.swizzle = imageDescriptor->swizzle; samplerState.highPrecisionFiltering = false; samplerState.compareEnable = (sampler->compareEnable == VK_TRUE); samplerState.compareOp = sampler->compareOp;