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 { }