mirror of
https://github.com/Yours3lf/rpi-vk-driver.git
synced 2025-03-21 12:29:15 +01:00
fixed render target T/LT mode setting
This commit is contained in:
parent
1e681e8292
commit
ed94d1586b
@ -358,11 +358,11 @@ VKAPI_ATTR VkResult VKAPI_CALL rpi_vkQueueSubmit(
|
||||
//fill out submit cl fields
|
||||
if(writeImage)
|
||||
{
|
||||
uint32_t nonPaddedSize = (marker->width * marker->height * getFormatBpp(writeImage->format)) >> 3;
|
||||
|
||||
uint32_t tiling = writeImage->tiling;
|
||||
|
||||
if(writeImage->tiling == VC4_TILING_FORMAT_T && nonPaddedSize < 4096)
|
||||
uint32_t isLT = isLTformat(getFormatBpp(writeImage->format), marker->width, marker->height);
|
||||
|
||||
if(writeImage->tiling == VC4_TILING_FORMAT_T && isLT)
|
||||
{
|
||||
tiling = VC4_TILING_FORMAT_LT;
|
||||
}
|
||||
@ -390,11 +390,11 @@ VKAPI_ATTR VkResult VKAPI_CALL rpi_vkQueueSubmit(
|
||||
|
||||
if(readImage)
|
||||
{
|
||||
uint32_t nonPaddedSize = (marker->width * marker->height * getFormatBpp(readImage->format)) >> 3;
|
||||
|
||||
uint32_t tiling = readImage->tiling;
|
||||
|
||||
if(readImage->tiling == VC4_TILING_FORMAT_T && nonPaddedSize < 4096)
|
||||
uint32_t isLT = isLTformat(getFormatBpp(readImage->format), marker->width, marker->height);
|
||||
|
||||
if(readImage->tiling == VC4_TILING_FORMAT_T && isLT)
|
||||
{
|
||||
tiling = VC4_TILING_FORMAT_LT;
|
||||
}
|
||||
@ -408,11 +408,11 @@ VKAPI_ATTR VkResult VKAPI_CALL rpi_vkQueueSubmit(
|
||||
|
||||
if(writeDepthStencilImage)
|
||||
{
|
||||
uint32_t nonPaddedSize = (marker->width * marker->height * getFormatBpp(writeDepthStencilImage->format)) >> 3;
|
||||
|
||||
uint32_t tiling = writeDepthStencilImage->tiling;
|
||||
|
||||
if(writeDepthStencilImage->tiling == VC4_TILING_FORMAT_T && nonPaddedSize < 4096)
|
||||
uint32_t isLT = isLTformat(getFormatBpp(writeDepthStencilImage->format), marker->width, marker->height);
|
||||
|
||||
if(writeDepthStencilImage->tiling == VC4_TILING_FORMAT_T && isLT)
|
||||
{
|
||||
tiling = VC4_TILING_FORMAT_LT;
|
||||
}
|
||||
@ -434,11 +434,11 @@ VKAPI_ATTR VkResult VKAPI_CALL rpi_vkQueueSubmit(
|
||||
|
||||
if(readDepthStencilImage)
|
||||
{
|
||||
uint32_t nonPaddedSize = (marker->width * marker->height * getFormatBpp(readDepthStencilImage->format)) >> 3;
|
||||
|
||||
uint32_t tiling = readDepthStencilImage->tiling;
|
||||
|
||||
if(readDepthStencilImage->tiling == VC4_TILING_FORMAT_T && nonPaddedSize < 4096)
|
||||
uint32_t isLT = isLTformat(getFormatBpp(readDepthStencilImage->format), marker->width, marker->height);
|
||||
|
||||
if(readDepthStencilImage->tiling == VC4_TILING_FORMAT_T && isLT)
|
||||
{
|
||||
tiling = VC4_TILING_FORMAT_LT;
|
||||
}
|
||||
|
@ -206,6 +206,13 @@ int findDeviceExtension(char* name)
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint32_t isLTformat(uint32_t bpp, uint32_t width, uint32_t height)
|
||||
{
|
||||
uint32_t utileW, utileH;
|
||||
getUTileDimensions(bpp, &utileW, &utileH);
|
||||
return (width <= 4 * utileW || height <= utileH);
|
||||
}
|
||||
|
||||
//Textures in T format:
|
||||
//formed out of 4KB tiles, which have 1KB subtiles (see page 105 in VC4 arch guide)
|
||||
//1KB subtiles have 512b microtiles.
|
||||
|
@ -546,6 +546,7 @@ uint32_t packVec4IntoABGR8(const float rgba[4]);
|
||||
void createImageBO(_image* i);
|
||||
int findInstanceExtension(char* name);
|
||||
int findDeviceExtension(char* name);
|
||||
uint32_t isLTformat(uint32_t bpp, uint32_t width, uint32_t height);
|
||||
void getUTileDimensions(uint32_t bpp, uint32_t* tileW, uint32_t* tileH);
|
||||
uint32_t roundUp(uint32_t numToRound, uint32_t multiple);
|
||||
int isDepthStencilFormat(VkFormat format);
|
||||
|
@ -211,7 +211,6 @@ VKAPI_ATTR VkResult VKAPI_CALL rpi_vkCreateImage(
|
||||
i->usageBits = pCreateInfo->usage;
|
||||
i->format = pCreateInfo->format;
|
||||
i->imageSpace = 0;
|
||||
uint32_t nonPaddedSize = (i->width * i->height * getFormatBpp(i->format)) >> 3;
|
||||
i->tiling = 0;
|
||||
if(pCreateInfo->tiling == VK_IMAGE_TILING_LINEAR)
|
||||
{
|
||||
@ -219,7 +218,8 @@ VKAPI_ATTR VkResult VKAPI_CALL rpi_vkCreateImage(
|
||||
}
|
||||
else
|
||||
{
|
||||
if(nonPaddedSize >= 4096)
|
||||
uint32_t isLT = isLTformat(getFormatBpp(i->format), i->width, i->height);
|
||||
if(!isLT)
|
||||
{
|
||||
i->tiling = VC4_TILING_FORMAT_T;
|
||||
}
|
||||
@ -432,9 +432,6 @@ VKAPI_ATTR VkResult VKAPI_CALL rpi_vkBindImageMemory(
|
||||
assert(memoryOffset % i->alignment == 0);
|
||||
assert(i->size <= m->size - memoryOffset);
|
||||
|
||||
//image memory must be aligned to 4096 bytes
|
||||
//assert((memoryOffset % 4096) == 0);
|
||||
|
||||
i->boundMem = m;
|
||||
i->boundOffset = memoryOffset;
|
||||
|
||||
|
@ -770,7 +770,10 @@ void recordCommandBuffers()
|
||||
|
||||
vkCmdPushConstants(presentCommandBuffers[i], samplePipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(pushConstants), &pushConstants);
|
||||
|
||||
float mipBias = 0.0f;
|
||||
//TODO some miplevels are small enough to fall
|
||||
//into LT sizes (eg. < 4096bytes overall)
|
||||
//and that doesn't work for some reason
|
||||
float mipBias = 6.0f;
|
||||
uint32_t fragPushConstants[1];
|
||||
fragPushConstants[0] = *(uint32_t*)&mipBias;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user