Skip to content

Commit 8fea35a

Browse files
committed
Add TEX_FORMAT_X24_TYPELESS_G8_UINT, TEX_FORMAT_X32_TYPELESS_G8X24_UINT and GL_STENCIL_INDEX support
1 parent 756fc8f commit 8fea35a

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

Graphics/GraphicsEngineOpenGL/src/GLTypeConversions.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class FormatToGLInternalTexFormatMap
7272
m_FmtToGLFmtMap[TEX_FORMAT_R32G8X24_TYPELESS] = GL_DEPTH32F_STENCIL8;
7373
m_FmtToGLFmtMap[TEX_FORMAT_D32_FLOAT_S8X24_UINT] = GL_DEPTH32F_STENCIL8;
7474
m_FmtToGLFmtMap[TEX_FORMAT_R32_FLOAT_X8X24_TYPELESS]=GL_DEPTH32F_STENCIL8;
75-
m_FmtToGLFmtMap[TEX_FORMAT_X32_TYPELESS_G8X24_UINT]= 0;//GL_DEPTH32F_STENCIL8;
75+
m_FmtToGLFmtMap[TEX_FORMAT_X32_TYPELESS_G8X24_UINT]= GL_DEPTH32F_STENCIL8;
7676

7777
m_FmtToGLFmtMap[TEX_FORMAT_RGB10A2_TYPELESS] = GL_RGB10_A2;
7878
m_FmtToGLFmtMap[TEX_FORMAT_RGB10A2_UNORM] = GL_RGB10_A2;
@@ -102,7 +102,7 @@ class FormatToGLInternalTexFormatMap
102102
m_FmtToGLFmtMap[TEX_FORMAT_R24G8_TYPELESS] = GL_DEPTH24_STENCIL8;
103103
m_FmtToGLFmtMap[TEX_FORMAT_D24_UNORM_S8_UINT] = GL_DEPTH24_STENCIL8;
104104
m_FmtToGLFmtMap[TEX_FORMAT_R24_UNORM_X8_TYPELESS] = GL_DEPTH24_STENCIL8;
105-
m_FmtToGLFmtMap[TEX_FORMAT_X24_TYPELESS_G8_UINT] = 0;//GL_DEPTH24_STENCIL8;
105+
m_FmtToGLFmtMap[TEX_FORMAT_X24_TYPELESS_G8_UINT] = GL_DEPTH24_STENCIL8;
106106

107107
m_FmtToGLFmtMap[TEX_FORMAT_RG8_TYPELESS] = GL_RG8;
108108
m_FmtToGLFmtMap[TEX_FORMAT_RG8_UNORM] = GL_RG8;

Graphics/GraphicsEngineOpenGL/src/RenderDeviceGLImpl.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,7 +1253,7 @@ void RenderDeviceGLImpl::FlagSupportedTexFormats()
12531253
FlagFormat(TEX_FORMAT_R32G8X24_TYPELESS, true );
12541254
FlagFormat(TEX_FORMAT_D32_FLOAT_S8X24_UINT, true, BIND_DEPTH_STENCIL );
12551255
FlagFormat(TEX_FORMAT_R32_FLOAT_X8X24_TYPELESS, true, TexBindFlags, bDekstopGL);
1256-
FlagFormat(TEX_FORMAT_X32_TYPELESS_G8X24_UINT, false );
1256+
FlagFormat(TEX_FORMAT_X32_TYPELESS_G8X24_UINT, true, BIND_SHADER_RESOURCE, false);
12571257
FlagFormat(TEX_FORMAT_RGB10A2_TYPELESS, true );
12581258
FlagFormat(TEX_FORMAT_RGB10A2_UNORM, true, BindSrvRtvUav, true);
12591259
FlagFormat(TEX_FORMAT_RGB10A2_UINT, true, BindSrvRtvUav );
@@ -1278,7 +1278,7 @@ void RenderDeviceGLImpl::FlagSupportedTexFormats()
12781278
FlagFormat(TEX_FORMAT_R24G8_TYPELESS, true );
12791279
FlagFormat(TEX_FORMAT_D24_UNORM_S8_UINT, true, BIND_DEPTH_STENCIL );
12801280
FlagFormat(TEX_FORMAT_R24_UNORM_X8_TYPELESS, true, TexBindFlags, true);
1281-
FlagFormat(TEX_FORMAT_X24_TYPELESS_G8_UINT, false );
1281+
FlagFormat(TEX_FORMAT_X24_TYPELESS_G8_UINT, true, BIND_SHADER_RESOURCE, false);
12821282
FlagFormat(TEX_FORMAT_RG8_TYPELESS, true );
12831283
FlagFormat(TEX_FORMAT_RG8_UNORM, true, U8BindFlags, true);
12841284
FlagFormat(TEX_FORMAT_RG8_UINT, true, UI8BindFlags );

Graphics/GraphicsEngineOpenGL/src/TextureBaseGL.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,9 +490,23 @@ void TextureBaseGL::CreateViewInternal(const TextureViewDesc& OrigViewDesc, ITex
490490
LOG_ERROR_AND_THROW("glTextureView is not supported");
491491

492492
glTextureView(pViewOGL->GetHandle(), GLViewTarget, m_GlTexture, GLViewFormat, ViewDesc.MostDetailedMip, ViewDesc.NumMipLevels, ViewDesc.FirstArraySlice, NumLayers);
493+
493494
DEV_CHECK_GL_ERROR_AND_THROW("Failed to create texture view");
494495
pViewOGL->SetBindTarget(GLViewTarget);
495496

497+
if(GLViewFormat == TEX_FORMAT_X24_TYPELESS_G8_UINT || GLViewFormat == TEX_FORMAT_X32_TYPELESS_G8X24_UINT)
498+
{
499+
RefCntAutoPtr<DeviceContextGLImpl> pDeviceContext = pDeviceGLImpl->GetImmediateContext(0);
500+
VERIFY(pDeviceContext, "Immediate device context has been destroyed");
501+
GLContextState& GLState = pDeviceContext->GetContextState();
502+
503+
GLState.BindTexture(-1, GLViewTarget, pViewOGL->GetHandle());
504+
505+
glTexParameteri(GLViewTarget, GL_DEPTH_STENCIL_TEXTURE_MODE, GL_STENCIL_INDEX);
506+
507+
GLState.BindTexture(-1, GLViewTarget, GLObjectWrappers::GLTextureObj::Null());
508+
}
509+
496510
if (!IsIdentityComponentMapping(ViewDesc.Swizzle))
497511
{
498512
RefCntAutoPtr<DeviceContextGLImpl> pDeviceContext = pDeviceGLImpl->GetImmediateContext(0);
@@ -508,6 +522,7 @@ void TextureBaseGL::CreateViewInternal(const TextureViewDesc& OrigViewDesc, ITex
508522
DEV_CHECK_GL_ERROR("Failed to set GL_TEXTURE_SWIZZLE_B texture parameter");
509523
glTexParameteri(GLViewTarget, GL_TEXTURE_SWIZZLE_A, TextureComponentSwizzleToGLTextureSwizzle(ViewDesc.Swizzle.A, GL_ALPHA));
510524
DEV_CHECK_GL_ERROR("Failed to set GL_TEXTURE_SWIZZLE_A texture parameter");
525+
511526
GLState.BindTexture(-1, GLViewTarget, GLObjectWrappers::GLTextureObj::Null());
512527
}
513528
}

0 commit comments

Comments
 (0)