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( ...@@ -88,6 +88,10 @@ void SpirvShader::emitSamplerFunction(
samplerState.addressingModeU = convertAddressingMode(sampler->addressModeU, imageView->getType()); samplerState.addressingModeU = convertAddressingMode(sampler->addressModeU, imageView->getType());
samplerState.addressingModeV = convertAddressingMode(sampler->addressModeV, imageView->getType()); samplerState.addressingModeV = convertAddressingMode(sampler->addressModeV, imageView->getType());
samplerState.addressingModeW = convertAddressingMode(sampler->addressModeW, 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.mipmapFilter = convertMipmapMode(sampler);
samplerState.sRGB = imageView->getFormat().isSRGBformat(); samplerState.sRGB = imageView->getFormat().isSRGBformat();
samplerState.swizzle = imageView->getComponentMapping(); samplerState.swizzle = imageView->getComponentMapping();
...@@ -120,7 +124,7 @@ void SpirvShader::emitSamplerFunction( ...@@ -120,7 +124,7 @@ void SpirvShader::emitSamplerFunction(
// case VK_IMAGE_VIEW_TYPE_3D: coordinateCount = 3; break; // case VK_IMAGE_VIEW_TYPE_3D: coordinateCount = 3; break;
case VK_IMAGE_VIEW_TYPE_CUBE: 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_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; // case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: coordinateCount = 4; break;
default: default:
UNIMPLEMENTED("imageView type %d", imageView->getType()); UNIMPLEMENTED("imageView type %d", imageView->getType());
...@@ -164,7 +168,7 @@ sw::TextureType SpirvShader::convertTextureType(VkImageViewType imageViewType) ...@@ -164,7 +168,7 @@ sw::TextureType SpirvShader::convertTextureType(VkImageViewType imageViewType)
// case VK_IMAGE_VIEW_TYPE_3D: return TEXTURE_3D; // case VK_IMAGE_VIEW_TYPE_3D: return TEXTURE_3D;
case VK_IMAGE_VIEW_TYPE_CUBE: return TEXTURE_CUBE; 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_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; // case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: return TEXTURE_CUBE_ARRAY;
default: default:
UNIMPLEMENTED("imageViewType %d", imageViewType); UNIMPLEMENTED("imageViewType %d", imageViewType);
...@@ -230,7 +234,7 @@ sw::AddressingMode SpirvShader::convertAddressingMode(VkSamplerAddressMode addre ...@@ -230,7 +234,7 @@ sw::AddressingMode SpirvShader::convertAddressingMode(VkSamplerAddressMode addre
case VK_IMAGE_VIEW_TYPE_2D: case VK_IMAGE_VIEW_TYPE_2D:
// case VK_IMAGE_VIEW_TYPE_3D: // case VK_IMAGE_VIEW_TYPE_3D:
// case VK_IMAGE_VIEW_TYPE_1D_ARRAY: // case VK_IMAGE_VIEW_TYPE_1D_ARRAY:
// case VK_IMAGE_VIEW_TYPE_2D_ARRAY: case VK_IMAGE_VIEW_TYPE_2D_ARRAY:
break; break;
default: default:
UNIMPLEMENTED("imageViewType %d", imageViewType); UNIMPLEMENTED("imageViewType %d", imageViewType);
......
...@@ -324,11 +324,13 @@ void DescriptorSetLayout::WriteDescriptorSet(DescriptorSet *dstSet, VkDescriptor ...@@ -324,11 +324,13 @@ void DescriptorSetLayout::WriteDescriptorSet(DescriptorSet *dstSet, VkDescriptor
VkExtent3D extent = imageView->getMipLevelExtent(level); VkExtent3D extent = imageView->getMipLevelExtent(level);
Format format = imageView->getFormat(); Format format = imageView->getFormat();
int layers = imageView->getSubresourceRange().layerCount;
// TODO(b/129523279): Untangle depth vs layers throughout the sampler
int width = extent.width; int width = extent.width;
int height = extent.height; int height = extent.height;
int depth = extent.depth; int depth = layers > 1 ? layers : extent.depth;
int pitchP = imageView->rowPitchBytes(aspect, level) / format.bytes(); 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; 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