Skip to content

Invalid color formats: RG32F, RG16F, R16F, RGBA1010102, BGRA1010102, D32 #6716

@Akabenko

Description

@Akabenko

Details

x86-64 branch has potentially working IMAGE FORMATS, but it cause ShaderAPIDX8::CreateD3DTexture: Invalid color format! on creating:

if BRANCH == "x86-64" then -- CS:GO ids
	IMAGE_FORMAT_RG1616F 				= 	30
	IMAGE_FORMAT_RG3232F 				= 	31 
	IMAGE_FORMAT_RGBA1010102 			= 	36 	-- 10 bit-per component render targets
	IMAGE_FORMAT_BGRA1010102 			= 	37
	IMAGE_FORMAT_R16F 					= 	38 	-- 16 bit FP format
end

This formats is valid for GTX1650, GTX660, using IsTextureFormatOk func from IDirect3D9::CheckDeviceFormat method (d3d9helper.h):

void IsTextureFormatOk(D3DFORMAT TextureFormat, D3DFORMAT g_DeviceFormat, int nUsage)
{
    UINT g_DisplayAdapter = D3DADAPTER_DEFAULT;
    D3DDEVTYPE g_DeviceType = D3DDEVTYPE_HAL;

    HRESULT hr = pD3D->CheckDeviceFormat(
        g_DisplayAdapter, g_DeviceType, g_DeviceFormat,
        nUsage, ((nUsage & D3DUSAGE_DEPTHSTENCIL) != 0 || ForceTypeSurface(TextureFormat)) ? D3DRTYPE_SURFACE : D3DRTYPE_TEXTURE, TextureFormat);

    bool state = SUCCEEDED(hr);
    SetConsoleColor(state ? GREEN : RED);
    const char* fmt = D3DFormatToString(TextureFormat);
    std::cout << fmt << (state ? " VALID" : " INVALID") << "\n";
}

Here result of testing for many image formats. D3DFMT_G16R16, D3DFMT_A2R10G10B10, D3DFMT_R16F, D3DFMT_G16R16F, D3DFMT_A2B10G10R10 is valid here.
DxTest.cpp result (GTX 1650):

Image
  • Here also D3DFMT_D32 invalid. It could be replaced with a working format: D3DFMT_D32F_LOCKABLE. But this is a separate proposal.
  • IMAGE_FORMAT_RGB323232F = 28 (main, x86-64) doesn't exist in DX9. It can also be replaced with anything. And it won't harm anyone, since this form could never be used by anyone. For example: D3DFMT_L16 or maybe R2VB(D3DFORMAT)MAKEFOURCC('R', '2', 'V', 'B').
  • D24S8 and D24X8 should works, but they not.
IMAGE_FORMAT_D24S8				= 	42 -- ShaderAPIDX8::CreateD3DTexture: Invalid color format!
IMAGE_FORMAT_D24X8 				= 	44 -- ShaderAPIDX8::CreateD3DTexture: Invalid color format!
IMAGE_FORMAT_D24X8_SHADOW 		= 	48 -- works

D32 test:

-- x86-64
IMAGE_FORMAT_D32 = 41
local size = 1024
local rtFlags = render.GetHDREnabled() and CREATERENDERTARGETFLAGS_HDR or 0
GetRenderTargetEx("_rt_shadowdepthtexture_0", size, size,
RT_SIZE_OFFSCREEN, MATERIAL_RT_DEPTH_ONLY, bit.bor(1, 4, 8), rtFlags, IMAGE_FORMAT_D32)
-- ShaderAPIDX8::CreateD3DTexture: Invalid color format!

Steps to reproduce

  1. Run code:
if BRANCH != "x86-64" then return end

IMAGE_FORMAT_RG1616F 				= 	30
IMAGE_FORMAT_RG3232F 				= 	31 
IMAGE_FORMAT_RGBA1010102 			= 	36
IMAGE_FORMAT_BGRA1010102 			= 	37
IMAGE_FORMAT_R16F 					= 	38

print("IMAGE_FORMAT_RG1616F")
GetRenderTargetEx( "_rt_test_rg1616f", ScrW(), ScrW(),
RT_SIZE_FULL_FRAME_BUFFER, MATERIAL_RT_DEPTH_NONE,
0, 0, IMAGE_FORMAT_RG1616F )

print("IMAGE_FORMAT_RG3232F")
GetRenderTargetEx( "_rt_test_rg3232f", ScrW(), ScrW(),
RT_SIZE_FULL_FRAME_BUFFER, MATERIAL_RT_DEPTH_NONE,
0, 0, IMAGE_FORMAT_RG3232F)

print("IMAGE_FORMAT_RGBA1010102")
GetRenderTargetEx( "_rt_test_rgba1010102", ScrW(), ScrW(),
RT_SIZE_FULL_FRAME_BUFFER, MATERIAL_RT_DEPTH_NONE,
0, 0, IMAGE_FORMAT_RGBA1010102 )

print("IMAGE_FORMAT_BGRA1010102")
GetRenderTargetEx( "_rt_test_bgra1010102", ScrW(), ScrW(),
RT_SIZE_FULL_FRAME_BUFFER, MATERIAL_RT_DEPTH_NONE,
0, 0, IMAGE_FORMAT_BGRA1010102)

print("IMAGE_FORMAT_R16F")
GetRenderTargetEx( "_rt_test_rg16f", ScrW(), ScrW(),
RT_SIZE_FULL_FRAME_BUFFER, MATERIAL_RT_DEPTH_NONE,
0, 0, IMAGE_FORMAT_R16F)
  1. Check console for ShaderAPIDX8::CreateD3DTexture: Invalid color format! errors.
IMAGE_FORMAT_RG1616F
ShaderAPIDX8::CreateD3DTexture: Invalid color format!
IMAGE_FORMAT_RG3232F
ShaderAPIDX8::CreateD3DTexture: Invalid color format!
IMAGE_FORMAT_RGBA1010102
ShaderAPIDX8::CreateD3DTexture: Invalid color format!
IMAGE_FORMAT_BGRA1010102
ShaderAPIDX8::CreateD3DTexture: Invalid color format!
IMAGE_FORMAT_R16F
ShaderAPIDX8::CreateD3DTexture: Invalid color format!

Version of the game

Protocol version 24
Network version 2025.03.26 (garrysmod)
Exe build: 16:56:56 Jan 28 2026 (9944) (4000)
GMod version 2026.01.28, branch: x86-64, multicore: 1
Windows 64bit

Beta

x86-64 beta

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions