mirror of
https://github.com/love2d/love.git
synced 2026-08-16 00:02:12 +02:00
metal: tag texture formats with compute write support
This commit is contained in:
@@ -324,59 +324,6 @@ size_t getPixelFormatSliceSize(PixelFormat format, int width, int height)
|
||||
return info.blockSize * blockW * blockH;
|
||||
}
|
||||
|
||||
size_t getPixelFormatRowStride(PixelFormat format, int width)
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case PIXELFORMAT_R8_UNORM:
|
||||
case PIXELFORMAT_STENCIL8:
|
||||
return 1 * width;
|
||||
case PIXELFORMAT_RG8_UNORM:
|
||||
case PIXELFORMAT_R16_UNORM:
|
||||
case PIXELFORMAT_R16_FLOAT:
|
||||
case PIXELFORMAT_LA8_UNORM:
|
||||
case PIXELFORMAT_RGBA4_UNORM:
|
||||
case PIXELFORMAT_RGB5A1_UNORM:
|
||||
case PIXELFORMAT_RGB565_UNORM:
|
||||
case PIXELFORMAT_DEPTH16_UNORM:
|
||||
return 2 * width;
|
||||
case PIXELFORMAT_RGBA8_UNORM:
|
||||
case PIXELFORMAT_RGBA8_UNORM_sRGB:
|
||||
case PIXELFORMAT_BGRA8_UNORM:
|
||||
case PIXELFORMAT_BGRA8_UNORM_sRGB:
|
||||
case PIXELFORMAT_RG16_UNORM:
|
||||
case PIXELFORMAT_RG16_FLOAT:
|
||||
case PIXELFORMAT_R32_FLOAT:
|
||||
case PIXELFORMAT_RGB10A2_UNORM:
|
||||
case PIXELFORMAT_RG11B10_FLOAT:
|
||||
case PIXELFORMAT_DEPTH24_UNORM:
|
||||
case PIXELFORMAT_DEPTH32_FLOAT:
|
||||
case PIXELFORMAT_DEPTH24_UNORM_STENCIL8:
|
||||
return 4 * width;
|
||||
case PIXELFORMAT_RGBA16_UNORM:
|
||||
case PIXELFORMAT_RGBA16_FLOAT:
|
||||
case PIXELFORMAT_RG32_FLOAT:
|
||||
case PIXELFORMAT_DEPTH32_FLOAT_STENCIL8:
|
||||
return 8 * width;
|
||||
case PIXELFORMAT_RGBA32_FLOAT:
|
||||
return 16 * width;
|
||||
case PIXELFORMAT_DXT1_UNORM:
|
||||
case PIXELFORMAT_DXT3_UNORM:
|
||||
case PIXELFORMAT_BC4_UNORM:
|
||||
case PIXELFORMAT_BC4_SNORM:
|
||||
return width; // TODO: block size?
|
||||
case PIXELFORMAT_DXT5_UNORM:
|
||||
return 2 * width;
|
||||
case PIXELFORMAT_UNKNOWN:
|
||||
case PIXELFORMAT_NORMAL:
|
||||
case PIXELFORMAT_HDR:
|
||||
case PIXELFORMAT_MAX_ENUM:
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int getPixelFormatColorComponents(PixelFormat format)
|
||||
{
|
||||
return formatInfo[format].components;
|
||||
|
||||
@@ -1563,7 +1563,8 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags
|
||||
const uint32 msaa = PIXELFORMATUSAGEFLAGS_MSAA;
|
||||
const uint32 commonsample = PIXELFORMATUSAGEFLAGS_SAMPLE | PIXELFORMATUSAGEFLAGS_LINEAR;
|
||||
const uint32 commonrender = PIXELFORMATUSAGEFLAGS_RENDERTARGET | PIXELFORMATUSAGEFLAGS_BLEND | PIXELFORMATUSAGEFLAGS_MSAA;
|
||||
const uint32 all = commonsample | commonrender;
|
||||
const uint32 computewrite = PIXELFORMATUSAGEFLAGS_COMPUTEWRITE;
|
||||
const uint32 all = commonsample | commonrender | computewrite;
|
||||
|
||||
uint32 flags = PIXELFORMATUSAGEFLAGS_NONE;
|
||||
|
||||
@@ -1583,7 +1584,7 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags
|
||||
break;
|
||||
case PIXELFORMAT_R16_UNORM:
|
||||
if (families.apple[1])
|
||||
flags |= commonsample | commonrender;
|
||||
flags |= commonsample | commonrender | computewrite;
|
||||
if (families.mac[1] || families.macCatalyst[1])
|
||||
flags |= all;
|
||||
break;
|
||||
@@ -1592,7 +1593,7 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags
|
||||
break;
|
||||
case PIXELFORMAT_R32_FLOAT:
|
||||
if (families.apple[1])
|
||||
flags |= sample | rt | blend | msaa;
|
||||
flags |= sample | rt | blend | msaa | computewrite;
|
||||
if (families.mac[1])
|
||||
flags |= all;
|
||||
break;
|
||||
@@ -1606,7 +1607,7 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags
|
||||
break;
|
||||
case PIXELFORMAT_RG16_UNORM:
|
||||
if (families.apple[1])
|
||||
flags |= commonsample | rt | blend | msaa;
|
||||
flags |= commonsample | rt | blend | msaa | computewrite;
|
||||
if (families.mac[1] || families.macCatalyst[1])
|
||||
flags |= all;
|
||||
break;
|
||||
@@ -1615,9 +1616,9 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags
|
||||
break;
|
||||
case PIXELFORMAT_RG32_FLOAT:
|
||||
if (families.apple[1])
|
||||
flags |= sample | rt | blend;
|
||||
flags |= sample | rt | blend | computewrite;
|
||||
if (families.apple[7])
|
||||
flags |= sample | rt | msaa | blend;
|
||||
flags |= sample | rt | msaa | blend | computewrite;
|
||||
if (families.mac[1] || families.macCatalyst[1])
|
||||
flags |= all;
|
||||
break;
|
||||
@@ -1636,7 +1637,7 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags
|
||||
|
||||
case PIXELFORMAT_RGBA16_UNORM:
|
||||
if (families.apple[1])
|
||||
flags |= commonsample | rt | msaa | blend;
|
||||
flags |= commonsample | rt | msaa | blend | computewrite;
|
||||
if (families.mac[1] || families.macCatalyst[1])
|
||||
flags |= all;
|
||||
break;
|
||||
@@ -1645,9 +1646,9 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags
|
||||
break;
|
||||
case PIXELFORMAT_RGBA32_FLOAT:
|
||||
if (families.apple[1])
|
||||
flags |= sample | rt;
|
||||
flags |= sample | rt | computewrite;
|
||||
if (families.apple[7])
|
||||
flags |= sample | rt | msaa;
|
||||
flags |= sample | rt | msaa | computewrite;
|
||||
if (families.mac[1] || families.macCatalyst[1])
|
||||
flags |= all;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user