[PATCH 2/8] wined3d: Introduce a format flag for volume texture support.
Stefan Dösinger
stefan at codeweavers.com
Tue Sep 17 04:39:44 CDT 2013
Formats requiring conversion are not supported. S3TC and RGTC extensions
explicitly disallow volume textures. AMD's 3DC does not have a proper
extension spec, so I assumed it doesn't allow it either. With that
combined, no compressed formats are allowed on volumes.
GL_APPLE_ycbcr_422, ARB_half_float_pixel and GL_ARB_texture_float allow
them. GL_NV_texture_shader formats are allowed.
---
dlls/wined3d/directx.c | 42 +-------------
dlls/wined3d/utils.c | 124 ++++++++++++++++++++++++-----------------
dlls/wined3d/wined3d_private.h | 1 +
3 files changed, 74 insertions(+), 93 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 653d123..304b15f 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -3865,47 +3865,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad
case WINED3D_RTYPE_VOLUME_TEXTURE:
case WINED3D_RTYPE_VOLUME:
- /* Volume is to VolumeTexture what Surface is to Texture, but its
- * usage caps are not documented. Most driver seem to offer
- * (nearly) the same on Volume and VolumeTexture, so do that too. */
- if (!gl_info->supported[EXT_TEXTURE3D])
- {
- TRACE("[FAILED] - No volume texture support.\n");
- return WINED3DERR_NOTAVAILABLE;
- }
-
- /* Filter formats that need conversion; For one part, this
- * conversion is unimplemented, and volume textures are huge, so
- * it would be a big performance hit. Unless we hit an application
- * needing one of those formats, don't advertize them to avoid
- * leading applications into temptation. The windows drivers don't
- * support most of those formats on volumes anyway. */
- if (format->convert)
- {
- TRACE("[FAILED] - No converted formats on volumes.\n");
- return WINED3DERR_NOTAVAILABLE;
- }
-
- /* The GL_EXT_texture_compression_s3tc spec requires that loading
- * an s3tc compressed texture results in an error. While the D3D
- * refrast does support s3tc volumes, at least the nvidia Windows
- * driver does not, so we're free not to support this format. */
- switch (check_format_id)
- {
- case WINED3DFMT_DXT1:
- case WINED3DFMT_DXT2:
- case WINED3DFMT_DXT3:
- case WINED3DFMT_DXT4:
- case WINED3DFMT_DXT5:
- TRACE("[FAILED] - DXTn does not support 3D textures.\n");
- return WINED3DERR_NOTAVAILABLE;
-
- default:
- /* Do nothing, continue with checking the format below */
- break;
- }
-
- format_flags |= WINED3DFMT_FLAG_TEXTURE;
+ format_flags |= WINED3DFMT_FLAG_VOLUME;
allowed_usage = WINED3DUSAGE_DYNAMIC
| WINED3DUSAGE_SOFTWAREPROCESSING
| WINED3DUSAGE_QUERY_FILTER
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 6eafb85..f3ae501 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -604,7 +604,7 @@ static const struct wined3d_format_texture_info format_texture_info[] =
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_UYVY, GL_RGB, GL_RGB, 0,
GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_FILTERING,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_FILTERING,
APPLE_YCBCR_422, NULL},
{WINED3DFMT_YUY2, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, 0,
GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, 0,
@@ -612,7 +612,7 @@ static const struct wined3d_format_texture_info format_texture_info[] =
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_YUY2, GL_RGB, GL_RGB, 0,
GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_FILTERING,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_FILTERING,
APPLE_YCBCR_422, NULL},
{WINED3DFMT_YV12, GL_ALPHA, GL_ALPHA, 0,
GL_ALPHA, GL_UNSIGNED_BYTE, 0,
@@ -646,45 +646,45 @@ static const struct wined3d_format_texture_info format_texture_info[] =
/* IEEE formats */
{WINED3DFMT_R32_FLOAT, GL_RGB32F_ARB, GL_RGB32F_ARB, 0,
GL_RED, GL_FLOAT, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
ARB_TEXTURE_FLOAT, NULL},
{WINED3DFMT_R32_FLOAT, GL_R32F, GL_R32F, 0,
GL_RED, GL_FLOAT, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
ARB_TEXTURE_RG, NULL},
{WINED3DFMT_R32G32_FLOAT, GL_RGB32F_ARB, GL_RGB32F_ARB, 0,
GL_RGB, GL_FLOAT, 12,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
ARB_TEXTURE_FLOAT, convert_r32g32_float},
{WINED3DFMT_R32G32_FLOAT, GL_RG32F, GL_RG32F, 0,
GL_RG, GL_FLOAT, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
ARB_TEXTURE_RG, NULL},
{WINED3DFMT_R32G32B32A32_FLOAT, GL_RGBA32F_ARB, GL_RGBA32F_ARB, 0,
GL_RGBA, GL_FLOAT, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
ARB_TEXTURE_FLOAT, NULL},
/* Float */
{WINED3DFMT_R16_FLOAT, GL_RGB16F_ARB, GL_RGB16F_ARB, 0,
GL_RED, GL_HALF_FLOAT_ARB, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
ARB_TEXTURE_FLOAT, NULL},
{WINED3DFMT_R16_FLOAT, GL_R16F, GL_R16F, 0,
GL_RED, GL_HALF_FLOAT_ARB, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
ARB_TEXTURE_RG, NULL},
{WINED3DFMT_R16G16_FLOAT, GL_RGB16F_ARB, GL_RGB16F_ARB, 0,
GL_RGB, GL_HALF_FLOAT_ARB, 6,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
ARB_TEXTURE_FLOAT, convert_r16g16},
{WINED3DFMT_R16G16_FLOAT, GL_RG16F, GL_RG16F, 0,
GL_RG, GL_HALF_FLOAT_ARB, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
ARB_TEXTURE_RG, NULL},
{WINED3DFMT_R16G16B16A16_FLOAT, GL_RGBA16F_ARB, GL_RGBA16F_ARB, 0,
GL_RGBA, GL_HALF_FLOAT_ARB, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_RENDERTARGET
- | WINED3DFMT_FLAG_VTF,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF,
ARB_TEXTURE_FLOAT, NULL},
/* Palettized formats */
{WINED3DFMT_P8_UINT, GL_RGBA, GL_RGBA, 0,
@@ -698,32 +698,35 @@ static const struct wined3d_format_texture_info format_texture_info[] =
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_B8G8R8A8_UNORM, GL_RGBA8, GL_SRGB8_ALPHA8_EXT, 0,
GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_SRGB_WRITE
- | WINED3DFMT_FLAG_VTF,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_SRGB_READ
+ | WINED3DFMT_FLAG_SRGB_WRITE | WINED3DFMT_FLAG_VTF,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_B8G8R8X8_UNORM, GL_RGB8, GL_SRGB8_EXT, 0,
GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_SRGB_WRITE,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_SRGB_READ
+ | WINED3DFMT_FLAG_SRGB_WRITE,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_B5G6R5_UNORM, GL_RGB5, GL_RGB5, GL_RGB8,
GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_RENDERTARGET,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_B5G5R5X1_UNORM, GL_RGB5, GL_RGB5_A1, 0,
GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_B5G5R5A1_UNORM, GL_RGB5_A1, GL_RGB5_A1, 0,
GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_B4G4R4A4_UNORM, GL_RGBA4, GL_SRGB8_ALPHA8_EXT, 0,
GL_BGRA, GL_UNSIGNED_SHORT_4_4_4_4_REV, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_SRGB_READ,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_SRGB_READ,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_B2G3R3_UNORM, GL_R3_G3_B2, GL_R3_G3_B2, 0,
GL_RGB, GL_UNSIGNED_BYTE_3_3_2, 0,
@@ -731,24 +734,28 @@ static const struct wined3d_format_texture_info format_texture_info[] =
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_A8_UNORM, GL_ALPHA8, GL_ALPHA8, 0,
GL_ALPHA, GL_UNSIGNED_BYTE, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_B4G4R4X4_UNORM, GL_RGB4, GL_RGB4, 0,
GL_BGRA, GL_UNSIGNED_SHORT_4_4_4_4_REV, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_R10G10B10A2_UNORM, GL_RGB10_A2, GL_RGB10_A2, 0,
GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_RENDERTARGET,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_R8G8B8A8_UNORM, GL_RGBA8, GL_RGBA8, 0,
GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_R8G8B8X8_UNORM, GL_RGB8, GL_RGB8, 0,
GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_R16G16_UNORM, GL_RGB16, GL_RGB16, GL_RGBA16,
GL_RGB, GL_UNSIGNED_SHORT, 6,
@@ -756,29 +763,29 @@ static const struct wined3d_format_texture_info format_texture_info[] =
WINED3D_GL_EXT_NONE, convert_r16g16},
{WINED3DFMT_R16G16_UNORM, GL_RG16, GL_RG16, 0,
GL_RG, GL_UNSIGNED_SHORT, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_RENDERTARGET,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET,
ARB_TEXTURE_RG, NULL},
{WINED3DFMT_B10G10R10A2_UNORM, GL_RGB10_A2, GL_RGB10_A2, 0,
GL_BGRA, GL_UNSIGNED_INT_2_10_10_10_REV, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_RENDERTARGET,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_R16G16B16A16_UNORM, GL_RGBA16, GL_RGBA16, 0,
GL_RGBA, GL_UNSIGNED_SHORT, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_RENDERTARGET,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET,
WINED3D_GL_EXT_NONE, NULL},
/* Luminance */
{WINED3DFMT_L8_UNORM, GL_LUMINANCE8, GL_SLUMINANCE8_EXT, 0,
GL_LUMINANCE, GL_UNSIGNED_BYTE, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_SRGB_READ,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_SRGB_READ,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_L8A8_UNORM, GL_LUMINANCE8_ALPHA8, GL_SLUMINANCE8_ALPHA8_EXT, 0,
GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_SRGB_READ,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_SRGB_READ,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_L4A4_UNORM, GL_LUMINANCE4_ALPHA4, GL_LUMINANCE4_ALPHA4, 0,
GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, 2,
@@ -792,8 +799,8 @@ static const struct wined3d_format_texture_info format_texture_info[] =
WINED3D_GL_EXT_NONE, convert_r8g8_snorm},
{WINED3DFMT_R8G8_SNORM, GL_DSDT8_NV, GL_DSDT8_NV, 0,
GL_DSDT_NV, GL_BYTE, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_BUMPMAP,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP,
NV_TEXTURE_SHADER, NULL},
{WINED3DFMT_R5G5_SNORM_L6_UNORM, GL_RGB5, GL_RGB5, 0,
GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 2,
@@ -822,8 +829,8 @@ static const struct wined3d_format_texture_info format_texture_info[] =
WINED3D_GL_EXT_NONE, convert_r8g8b8a8_snorm},
{WINED3DFMT_R8G8B8A8_SNORM, GL_SIGNED_RGBA8_NV, GL_SIGNED_RGBA8_NV, 0,
GL_RGBA, GL_BYTE, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_BUMPMAP,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP,
NV_TEXTURE_SHADER, NULL},
{WINED3DFMT_R16G16_SNORM, GL_RGB16, GL_RGB16, 0,
GL_BGR, GL_UNSIGNED_SHORT, 6,
@@ -832,8 +839,8 @@ static const struct wined3d_format_texture_info format_texture_info[] =
WINED3D_GL_EXT_NONE, convert_r16g16_snorm},
{WINED3DFMT_R16G16_SNORM, GL_SIGNED_HILO16_NV, GL_SIGNED_HILO16_NV, 0,
GL_HILO_NV, GL_SHORT, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING
- | WINED3DFMT_FLAG_BUMPMAP,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP,
NV_TEXTURE_SHADER, NULL},
/* Depth stencil formats */
{WINED3DFMT_D16_LOCKABLE, GL_DEPTH_COMPONENT24_ARB, GL_DEPTH_COMPONENT24_ARB, 0,
@@ -895,7 +902,8 @@ static const struct wined3d_format_texture_info format_texture_info[] =
ARB_DEPTH_TEXTURE, NULL},
{WINED3DFMT_L16_UNORM, GL_LUMINANCE16, GL_LUMINANCE16, 0,
GL_LUMINANCE, GL_UNSIGNED_SHORT, 0,
- WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
+ WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING
+ | WINED3DFMT_FLAG_FILTERING,
WINED3D_GL_EXT_NONE, NULL},
{WINED3DFMT_D32_FLOAT, GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT32F, 0,
GL_DEPTH_COMPONENT, GL_FLOAT, 0,
@@ -1794,19 +1802,19 @@ static void apply_format_fixups(struct wined3d_adapter *adapter, struct wined3d_
if (!gl_info->supported[ARB_HALF_FLOAT_PIXEL])
{
idx = getFmtIdx(WINED3DFMT_R16_FLOAT);
- gl_info->formats[idx].flags &= ~WINED3DFMT_FLAG_TEXTURE;
+ gl_info->formats[idx].flags &= ~(WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME);
idx = getFmtIdx(WINED3DFMT_R16G16_FLOAT);
- gl_info->formats[idx].flags &= ~WINED3DFMT_FLAG_TEXTURE;
+ gl_info->formats[idx].flags &= ~(WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME);
idx = getFmtIdx(WINED3DFMT_R16G16B16A16_FLOAT);
- gl_info->formats[idx].flags &= ~WINED3DFMT_FLAG_TEXTURE;
+ gl_info->formats[idx].flags &= ~(WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME);
}
if (gl_info->quirks & WINED3D_QUIRK_BROKEN_RGBA16)
{
idx = getFmtIdx(WINED3DFMT_R16G16B16A16_UNORM);
- gl_info->formats[idx].flags &= ~WINED3DFMT_FLAG_TEXTURE;
+ gl_info->formats[idx].flags &= ~(WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME);
}
/* ATI instancing hack: Although ATI cards do not support Shader Model
@@ -1858,7 +1866,7 @@ static void apply_format_fixups(struct wined3d_adapter *adapter, struct wined3d_
if (!adapter->shader_backend->shader_color_fixup_supported(format->color_fixup)
|| !adapter->fragment_pipe->color_fixup_supported(format->color_fixup))
- format->flags &= ~WINED3DFMT_FLAG_TEXTURE;
+ format->flags &= ~(WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_VOLUME);
}
}
@@ -1904,6 +1912,17 @@ BOOL initPixelFormatsNoGL(struct wined3d_gl_info *gl_info)
return TRUE;
}
+static void init_format_volume_info(struct wined3d_gl_info *gl_info)
+{
+ unsigned int i;
+
+ if (gl_info->supported[EXT_TEXTURE3D])
+ return;
+
+ for (i = 0; i < sizeof(formats) / sizeof(*formats); ++i)
+ gl_info->formats[i].flags &= ~WINED3DFMT_FLAG_VOLUME;
+}
+
/* Context activation is done by the caller. */
BOOL wined3d_adapter_init_format_info(struct wined3d_adapter *adapter)
{
@@ -1918,6 +1937,7 @@ BOOL wined3d_adapter_init_format_info(struct wined3d_adapter *adapter)
apply_format_fixups(adapter, gl_info);
init_format_fbo_compat_info(gl_info);
init_format_filter_info(gl_info, adapter->driver_info.vendor);
+ init_format_volume_info(gl_info);
return TRUE;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 4928f92..eabf890 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2927,6 +2927,7 @@ extern enum wined3d_format_id pixelformat_for_depth(DWORD depth) DECLSPEC_HIDDEN
#define WINED3DFMT_FLAG_HEIGHT_SCALE 0x00040000
#define WINED3DFMT_FLAG_TEXTURE 0x00080000
#define WINED3DFMT_FLAG_BLOCKS_NO_VERIFY 0x00100000
+#define WINED3DFMT_FLAG_VOLUME 0x00200000
struct wined3d_rational
{
--
1.8.1.5
More information about the wine-patches
mailing list