Commit f40cff91 by Chris Forbes

Enable sampling of 2d array textures

Test: dEQP-VK.*2d_array* Change-Id: I106c9d072362c16e2cff14a70901c2ce89657329 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/30069Tested-by: 's avatarChris Forbes <chrisforbes@google.com> Presubmit-Ready: Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent bfca87b3
......@@ -88,6 +88,10 @@ void SpirvShader::emitSamplerFunction(
samplerState.addressingModeU = convertAddressingMode(sampler->addressModeU, imageView->getType());
samplerState.addressingModeV = convertAddressingMode(sampler->addressModeV, imageView->getType());
samplerState.addressingModeW = convertAddressingMode(sampler->addressModeW, imageView->getType());
if (imageView->getType() == VK_IMAGE_VIEW_TYPE_2D_ARRAY)
samplerState.addressingModeW = ADDRESSING_LAYER;
samplerState.mipmapFilter = convertMipmapMode(sampler);
samplerState.sRGB = imageView->getFormat().isSRGBformat();
samplerState.swizzle = imageView->getComponentMapping();
......@@ -120,7 +124,7 @@ void SpirvShader::emitSamplerFunction(
// case VK_IMAGE_VIEW_TYPE_3D: coordinateCount = 3; break;
case VK_IMAGE_VIEW_TYPE_CUBE: coordinateCount = 3; break;
// case VK_IMAGE_VIEW_TYPE_1D_ARRAY: coordinateCount = 2; break;
// case VK_IMAGE_VIEW_TYPE_2D_ARRAY: coordinateCount = 3; break;
case VK_IMAGE_VIEW_TYPE_2D_ARRAY: coordinateCount = 3; break;
// case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: coordinateCount = 4; break;
default:
UNIMPLEMENTED("imageView type %d", imageView->getType());
......@@ -164,7 +168,7 @@ sw::TextureType SpirvShader::convertTextureType(VkImageViewType imageViewType)
// case VK_IMAGE_VIEW_TYPE_3D: return TEXTURE_3D;
case VK_IMAGE_VIEW_TYPE_CUBE: return TEXTURE_CUBE;
// case VK_IMAGE_VIEW_TYPE_1D_ARRAY: return TEXTURE_1D_ARRAY;
// case VK_IMAGE_VIEW_TYPE_2D_ARRAY: return TEXTURE_2D_ARRAY;
case VK_IMAGE_VIEW_TYPE_2D_ARRAY: return TEXTURE_2D_ARRAY;
// case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: return TEXTURE_CUBE_ARRAY;
default:
UNIMPLEMENTED("imageViewType %d", imageViewType);
......@@ -230,7 +234,7 @@ sw::AddressingMode SpirvShader::convertAddressingMode(VkSamplerAddressMode addre
case VK_IMAGE_VIEW_TYPE_2D:
// case VK_IMAGE_VIEW_TYPE_3D:
// case VK_IMAGE_VIEW_TYPE_1D_ARRAY:
// case VK_IMAGE_VIEW_TYPE_2D_ARRAY:
case VK_IMAGE_VIEW_TYPE_2D_ARRAY:
break;
default:
UNIMPLEMENTED("imageViewType %d", imageViewType);
......
......@@ -324,11 +324,13 @@ void DescriptorSetLayout::WriteDescriptorSet(DescriptorSet *dstSet, VkDescriptor
VkExtent3D extent = imageView->getMipLevelExtent(level);
Format format = imageView->getFormat();
int layers = imageView->getSubresourceRange().layerCount;
// TODO(b/129523279): Untangle depth vs layers throughout the sampler
int width = extent.width;
int height = extent.height;
int depth = extent.depth;
int depth = layers > 1 ? layers : extent.depth;
int pitchP = imageView->rowPitchBytes(aspect, level) / format.bytes();
int sliceP = imageView->slicePitchBytes(aspect, level) / format.bytes();
int sliceP = (layers > 1 ? imageView->layerPitchBytes(aspect) : imageView->slicePitchBytes(aspect, level)) / format.bytes();
float exp2LOD = 1.0f;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment