diff --git a/driver/common.c b/driver/common.c index cb295c1..f0ab67e 100644 --- a/driver/common.c +++ b/driver/common.c @@ -661,13 +661,13 @@ void encodeTextureUniform(uint32_t* params, //array of 4 uint32_t assert(params); params[0] = 0 - | numMipLevels & 0xf + | (numMipLevels & 0xf) | (uint32_t)(textureDataType & 0xf) << 4 | (uint32_t)(isCubeMap ? 1 : 0) << 9 | (uint32_t)(textureBasePtr & 0xfffff) << 12; params[1] = 0 - | wrapS & 0x3 + | (wrapS & 0x3) | (uint32_t)(wrapT & 0x3) << 2 | (uint32_t)(minFilter & 0x7) << 4 | (uint32_t)(magFilter & 0x1) << 7 @@ -676,7 +676,7 @@ void encodeTextureUniform(uint32_t* params, //array of 4 uint32_t | (uint32_t)((textureDataType & 0x10) >> 4) << 31; params[2] = 0 - | noAutoLod & 0x1 + | (noAutoLod & 0x1) | (uint32_t)(cubemapStride & 0x3ffff) << 12 | (uint32_t)(isCubeMap ? 1 : 0) << 30; @@ -731,7 +731,7 @@ void encodeStencilValue(uint32_t *values, uint32_t* numValues, VkStencilOpState break; default: values[1] = 0 - | front.writeMask & 0xff + | (front.writeMask & 0xff) | (front.writeMask & 0xff) << 8; *numValues = 2; break; @@ -803,7 +803,7 @@ void encodeStencilValue(uint32_t *values, uint32_t* numValues, VkStencilOpState else { values[2] = 0 - | front.writeMask & 0xff + | (front.writeMask & 0xff) | (back.writeMask & 0xff) << 8; *numValues = 3; } @@ -905,6 +905,8 @@ uint8_t getMinFilterType(VkFilter minFilter, VkSamplerMipmapMode mipFilter, floa return 5; } } + + return -1; } uint8_t getWrapMode(VkSamplerAddressMode mode) diff --git a/driver/resource.c b/driver/resource.c index 012a639..8174f7f 100644 --- a/driver/resource.c +++ b/driver/resource.c @@ -323,8 +323,6 @@ VKAPI_ATTR void VKAPI_CALL rpi_vkGetImageMemoryRequirements( i->stride = (i->paddedWidth * bpp) >> 3; - uint32_t mipSize = 0; - //mip levels are laid out in memory the following way: //0x0.................................................0xffffff //smallest mip level ... largest mip level - 1, base mip level @@ -383,12 +381,10 @@ VKAPI_ATTR void VKAPI_CALL rpi_vkGetImageMemoryRequirements( // fprintf(stderr, "mipPaddedHeight: %u\n", mipPaddedHeight); // fprintf(stderr, "i->levelOffsets[%u]: %u\n", c, i->levelOffsets[c]); prevMipPaddedSize += mipPaddedSize; - - mipSize += mipPaddedWidth * mipPaddedHeight; } //must be a multiple of 4096 bytes - i->levelOffsets[0] = getBOAlignedSize((mipSize * bpp) >> 3, 4096); + i->levelOffsets[0] = getBOAlignedSize(prevMipPaddedSize, 4096); i->size = getBOAlignedSize(((i->paddedWidth * i->paddedHeight * bpp) >> 3) + i->levelOffsets[0], ARM_PAGE_SIZE); diff --git a/test/mipmapping/mipmapping.cpp b/test/mipmapping/mipmapping.cpp index 1be0312..51d0f2d 100644 --- a/test/mipmapping/mipmapping.cpp +++ b/test/mipmapping/mipmapping.cpp @@ -1555,7 +1555,7 @@ void CreateTexture() sampler.mipLodBias = 0.0f; sampler.compareOp = VK_COMPARE_OP_NEVER; sampler.minLod = 0.0f; - sampler.maxLod = 0.0f; + sampler.maxLod = 999.0f; sampler.borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK; vkCreateSampler(device, &sampler, 0, &textureSampler); }