diff --git a/bindings/bf/bgfx.bf b/bindings/bf/bgfx.bf
index 132a3e450..47baec900 100644
--- a/bindings/bf/bgfx.bf
+++ b/bindings/bf/bgfx.bf
@@ -4200,7 +4200,7 @@ public static class bgfx
/// Layer index for texture arrays (only implemented for D3D11).
///
[LinkName("bgfx_override_internal_texture_ptr")]
- public static extern void* override_internal_texture_ptr(TextureHandle _handle, void* _ptr, uint32 _layerIndex);
+ public static extern void* override_internal_texture_ptr(TextureHandle _handle, void* _ptr, uint16 _layerIndex);
///
/// Override internal texture by creating new texture. Previously created
diff --git a/bindings/c3/bgfx.c3 b/bindings/c3/bgfx.c3
index 6775b94d6..5be95c7dd 100644
--- a/bindings/c3/bgfx.c3
+++ b/bindings/c3/bgfx.c3
@@ -2898,7 +2898,7 @@ extern fn InternalData* get_internal_data() @extern("bgfx_get_internal_data");
// _handle : `Texture handle.`
// _ptr : `Native API pointer to texture.`
// _layerIndex : `Layer index for texture arrays (only implemented for D3D11).`
-extern fn uptr override_internal_texture_ptr(TextureHandle _handle, uptr _ptr, uint _layerIndex) @extern("bgfx_override_internal_texture_ptr");
+extern fn uptr override_internal_texture_ptr(TextureHandle _handle, uptr _ptr, ushort _layerIndex) @extern("bgfx_override_internal_texture_ptr");
// Override internal texture by creating new texture. Previously created
// internal texture will released.
diff --git a/bindings/cs/bgfx.cs b/bindings/cs/bgfx.cs
index 43a764b61..b3e368303 100644
--- a/bindings/cs/bgfx.cs
+++ b/bindings/cs/bgfx.cs
@@ -4155,7 +4155,7 @@ public static partial class bgfx
/// Layer index for texture arrays (only implemented for D3D11).
///
[DllImport(DllName, EntryPoint="bgfx_override_internal_texture_ptr", CallingConvention = CallingConvention.Cdecl)]
- public static extern unsafe UIntPtr override_internal_texture_ptr(TextureHandle _handle, UIntPtr _ptr, uint _layerIndex);
+ public static extern unsafe UIntPtr override_internal_texture_ptr(TextureHandle _handle, UIntPtr _ptr, ushort _layerIndex);
///
/// Override internal texture by creating new texture. Previously created
diff --git a/bindings/d/package.d b/bindings/d/package.d
index 63086b50e..5b7fa8ec8 100644
--- a/bindings/d/package.d
+++ b/bindings/d/package.d
@@ -9,7 +9,7 @@ import bindbc.common.types: c_int64, c_uint64, va_list;
import bindbc.bgfx.config;
static import bgfx.impl;
-enum uint apiVersion = 129;
+enum uint apiVersion = 130;
alias ViewID = ushort;
@@ -3093,7 +3093,7 @@ mixin(joinFnBinds((){
ptr = Native API pointer to texture.
layerIndex = Layer index for texture arrays (only implemented for D3D11).
*/
- {q{size_t}, q{overrideInternal}, q{TextureHandle handle, size_t ptr, uint layerIndex}, ext: `C++, "bgfx"`},
+ {q{size_t}, q{overrideInternal}, q{TextureHandle handle, size_t ptr, ushort layerIndex=0}, ext: `C++, "bgfx"`},
/**
* Override internal texture by creating new texture. Previously created
diff --git a/bindings/zig/bgfx.zig b/bindings/zig/bgfx.zig
index 9a7ef109e..58c24fe29 100644
--- a/bindings/zig/bgfx.zig
+++ b/bindings/zig/bgfx.zig
@@ -3285,10 +3285,10 @@ extern fn bgfx_get_internal_data() [*c]const InternalData;
/// Texture handle.
/// Native API pointer to texture.
/// Layer index for texture arrays (only implemented for D3D11).
-pub inline fn overrideInternalTexturePtr(_handle: TextureHandle, _ptr: usize, _layerIndex: u32) usize {
+pub inline fn overrideInternalTexturePtr(_handle: TextureHandle, _ptr: usize, _layerIndex: u16) usize {
return bgfx_override_internal_texture_ptr(_handle, _ptr, _layerIndex);
}
-extern fn bgfx_override_internal_texture_ptr(_handle: TextureHandle, _ptr: usize, _layerIndex: u32) usize;
+extern fn bgfx_override_internal_texture_ptr(_handle: TextureHandle, _ptr: usize, _layerIndex: u16) usize;
/// Override internal texture by creating new texture. Previously created
/// internal texture will released.
diff --git a/include/bgfx/c99/bgfx.h b/include/bgfx/c99/bgfx.h
index b54f7dd35..c12f91598 100644
--- a/include/bgfx/c99/bgfx.h
+++ b/include/bgfx/c99/bgfx.h
@@ -2958,7 +2958,7 @@ BGFX_C_API const bgfx_internal_data_t* bgfx_get_internal_data(void);
* yet from the main thread.
*
*/
-BGFX_C_API uintptr_t bgfx_override_internal_texture_ptr(bgfx_texture_handle_t _handle, uintptr_t _ptr, uint32_t _layerIndex);
+BGFX_C_API uintptr_t bgfx_override_internal_texture_ptr(bgfx_texture_handle_t _handle, uintptr_t _ptr, uint16_t _layerIndex);
/**
* Override internal texture by creating new texture. Previously created
@@ -3844,7 +3844,7 @@ struct bgfx_interface_vtbl
bgfx_render_frame_t (*render_frame)(int32_t _msecs);
void (*set_platform_data)(const bgfx_platform_data_t * _data);
const bgfx_internal_data_t* (*get_internal_data)(void);
- uintptr_t (*override_internal_texture_ptr)(bgfx_texture_handle_t _handle, uintptr_t _ptr, uint32_t _layerIndex);
+ uintptr_t (*override_internal_texture_ptr)(bgfx_texture_handle_t _handle, uintptr_t _ptr, uint16_t _layerIndex);
uintptr_t (*override_internal_texture)(bgfx_texture_handle_t _handle, uint16_t _width, uint16_t _height, uint8_t _numMips, bgfx_texture_format_t _format, uint64_t _flags);
void (*set_marker)(const char* _name, int32_t _len);
void (*set_state)(uint64_t _state, uint32_t _rgba);
diff --git a/include/bgfx/defines.h b/include/bgfx/defines.h
index 9a9f1164a..76f0c511b 100644
--- a/include/bgfx/defines.h
+++ b/include/bgfx/defines.h
@@ -15,7 +15,7 @@
#ifndef BGFX_DEFINES_H_HEADER_GUARD
#define BGFX_DEFINES_H_HEADER_GUARD
-#define BGFX_API_VERSION UINT32_C(129)
+#define BGFX_API_VERSION UINT32_C(130)
/**
* Color RGB/alpha/depth write. When it's not specified write will be disabled.
diff --git a/scripts/bgfx.idl b/scripts/bgfx.idl
index de869cfb4..199d55e82 100644
--- a/scripts/bgfx.idl
+++ b/scripts/bgfx.idl
@@ -1,7 +1,7 @@
-- vim: syntax=lua
-- bgfx interface
-version(129)
+version(130)
typedef "bool"
typedef "char"
@@ -2705,7 +2705,8 @@ func.overrideInternal { cname = "override_internal_texture_ptr" }
--- yet from the main thread.
.handle "TextureHandle" --- Texture handle.
.ptr "uintptr_t" --- Native API pointer to texture.
- .layerIndex "uint32_t" --- Layer index for texture arrays (only implemented for D3D11).
+ .layerIndex "uint16_t" --- Layer index for texture arrays (only implemented for D3D11).
+ { default = 0 }
--- Override internal texture by creating new texture. Previously created
--- internal texture will released.
diff --git a/src/bgfx.cpp b/src/bgfx.cpp
index d7819528b..67045b50d 100644
--- a/src/bgfx.cpp
+++ b/src/bgfx.cpp
@@ -338,7 +338,7 @@ namespace bgfx
return &g_internalData;
}
- uintptr_t overrideInternal(TextureHandle _handle, uintptr_t _ptr, uint32_t _layerIndex)
+ uintptr_t overrideInternal(TextureHandle _handle, uintptr_t _ptr, uint16_t _layerIndex)
{
BGFX_CHECK_RENDER_THREAD();
RendererContextI* rci = s_ctx->m_renderCtx;
diff --git a/src/bgfx.idl.inl b/src/bgfx.idl.inl
index 8429f49b2..e2dee75cb 100644
--- a/src/bgfx.idl.inl
+++ b/src/bgfx.idl.inl
@@ -1010,7 +1010,7 @@ BGFX_C_API const bgfx_internal_data_t* bgfx_get_internal_data(void)
return (const bgfx_internal_data_t*)bgfx::getInternalData();
}
-BGFX_C_API uintptr_t bgfx_override_internal_texture_ptr(bgfx_texture_handle_t _handle, uintptr_t _ptr, uint32_t _layerIndex)
+BGFX_C_API uintptr_t bgfx_override_internal_texture_ptr(bgfx_texture_handle_t _handle, uintptr_t _ptr, uint16_t _layerIndex)
{
union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } handle = { _handle };
return bgfx::overrideInternal(handle.cpp, _ptr, _layerIndex);
diff --git a/src/bgfx_p.h b/src/bgfx_p.h
index 73b2531a2..32444b61c 100644
--- a/src/bgfx_p.h
+++ b/src/bgfx_p.h
@@ -3097,7 +3097,7 @@ namespace bgfx
virtual void updateTextureEnd() = 0;
virtual void readTexture(TextureHandle _handle, void* _data, uint8_t _mip) = 0;
virtual void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips, uint16_t _numLayers) = 0;
- virtual void overrideInternal(TextureHandle _handle, uintptr_t _ptr, uint32_t _layerIndex) = 0;
+ virtual void overrideInternal(TextureHandle _handle, uintptr_t _ptr, uint16_t _layerIndex) = 0;
virtual uintptr_t getInternal(TextureHandle _handle) = 0;
virtual void destroyTexture(TextureHandle _handle) = 0;
virtual void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) = 0;
diff --git a/src/renderer_d3d11.cpp b/src/renderer_d3d11.cpp
index c92d28862..cd0cb6a40 100644
--- a/src/renderer_d3d11.cpp
+++ b/src/renderer_d3d11.cpp
@@ -1903,7 +1903,7 @@ namespace bgfx { namespace d3d11
release(mem);
}
- void overrideInternal(TextureHandle _handle, uintptr_t _ptr, uint32_t _layerIndex) override
+ void overrideInternal(TextureHandle _handle, uintptr_t _ptr, uint16_t _layerIndex) override
{
// Resource ref. counts might be messed up outside of bgfx.
// Disabling ref. count check once texture is overridden.
@@ -4741,11 +4741,12 @@ namespace bgfx { namespace d3d11
}
}
- void TextureD3D11::overrideInternal(uintptr_t _ptr, uint32_t layerIndex)
+ void TextureD3D11::overrideInternal(uintptr_t _ptr, uint16_t _layerIndex)
{
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc{};
- const bool readable = (m_srv != NULL);
+ const bool readable = NULL != m_srv;
+
if (readable)
{
m_srv->GetDesc(&srvDesc);
@@ -4754,16 +4755,21 @@ namespace bgfx { namespace d3d11
switch (srvDesc.ViewDimension)
{
case D3D11_SRV_DIMENSION_TEXTURE2DARRAY:
- srvDesc.Texture2DArray.FirstArraySlice = layerIndex;
+ srvDesc.Texture2DArray.FirstArraySlice = _layerIndex;
srvDesc.Texture2DArray.ArraySize = 1;
break;
+
case D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY:
- srvDesc.Texture2DMSArray.FirstArraySlice = layerIndex;
+ srvDesc.Texture2DMSArray.FirstArraySlice = _layerIndex;
srvDesc.Texture2DMSArray.ArraySize = 1;
break;
+
+ default:
+ break;
}
destroy();
+
m_flags |= BGFX_SAMPLER_INTERNAL_SHARED;
m_ptr = (ID3D11Resource*)_ptr;
diff --git a/src/renderer_d3d11.h b/src/renderer_d3d11.h
index 67bd070f1..a70d73d1f 100644
--- a/src/renderer_d3d11.h
+++ b/src/renderer_d3d11.h
@@ -286,7 +286,7 @@ namespace bgfx { namespace d3d11
void* create(const Memory* _mem, uint64_t _flags, uint8_t _skip);
void destroy();
- void overrideInternal(uintptr_t _ptr, uint32_t _layerIndex);
+ void overrideInternal(uintptr_t _ptr, uint16_t _layerIndex);
void update(uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem);
void commit(uint8_t _stage, uint32_t _flags, const float _palette[][4]);
void resolve(uint8_t _resolve, uint32_t _layer, uint32_t _numLayers, uint32_t _mip) const;
diff --git a/src/renderer_d3d12.cpp b/src/renderer_d3d12.cpp
index 713cda45f..4d0afc749 100644
--- a/src/renderer_d3d12.cpp
+++ b/src/renderer_d3d12.cpp
@@ -2042,7 +2042,7 @@ namespace bgfx { namespace d3d12
release(mem);
}
- void overrideInternal(TextureHandle _handle, uintptr_t _ptr, uint32_t /*_layerIndex*/) override
+ void overrideInternal(TextureHandle _handle, uintptr_t _ptr, uint16_t /*_layerIndex*/) override
{
// Resource ref. counts might be messed up outside of bgfx.
// Disabling ref. count check once texture is overridden.
diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp
index f41ca9541..a44fda3a3 100644
--- a/src/renderer_gl.cpp
+++ b/src/renderer_gl.cpp
@@ -3500,7 +3500,7 @@ namespace bgfx { namespace gl
release(mem);
}
- void overrideInternal(TextureHandle _handle, uintptr_t _ptr, uint32_t /*_layerIndex*/) override
+ void overrideInternal(TextureHandle _handle, uintptr_t _ptr, uint16_t /*_layerIndex*/) override
{
m_textures[_handle.idx].overrideInternal(_ptr);
}
diff --git a/src/renderer_mtl.mm b/src/renderer_mtl.mm
index a5aa1b81d..511444ad2 100644
--- a/src/renderer_mtl.mm
+++ b/src/renderer_mtl.mm
@@ -1141,7 +1141,7 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames
release(mem);
}
- void overrideInternal(TextureHandle _handle, uintptr_t _ptr, uint32_t /*_layerIndex*/) override
+ void overrideInternal(TextureHandle _handle, uintptr_t _ptr, uint16_t /*_layerIndex*/) override
{
m_textures[_handle.idx].overrideInternal(_ptr);
}
diff --git a/src/renderer_noop.cpp b/src/renderer_noop.cpp
index 5dbac3cbe..ca947a402 100644
--- a/src/renderer_noop.cpp
+++ b/src/renderer_noop.cpp
@@ -189,7 +189,7 @@ namespace bgfx { namespace noop
{
}
- void overrideInternal(TextureHandle /*_handle*/, uintptr_t /*_ptr*/, uint32_t /*_layerIndex*/) override
+ void overrideInternal(TextureHandle /*_handle*/, uintptr_t /*_ptr*/, uint16_t /*_layerIndex*/) override
{
}
diff --git a/src/renderer_vk.cpp b/src/renderer_vk.cpp
index 8976556a7..da614e0f6 100644
--- a/src/renderer_vk.cpp
+++ b/src/renderer_vk.cpp
@@ -2403,7 +2403,7 @@ VK_IMPORT_DEVICE
bgfx::release(mem);
}
- void overrideInternal(TextureHandle /*_handle*/, uintptr_t /*_ptr*/, uint32_t /*_layerIndex*/) override
+ void overrideInternal(TextureHandle /*_handle*/, uintptr_t /*_ptr*/, uint16_t /*_layerIndex*/) override
{
}