mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-28 18:45:54 -05:00
Removed need to set texture format for compute's setImage.
This commit is contained in:
parent
29313fadfb
commit
fb6aa4f51d
6 changed files with 55 additions and 42 deletions
|
@ -1358,12 +1358,12 @@ BGFX_C_API uint32_t bgfx_submit(uint8_t _id, int32_t _depth);
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_texture_format_t _format, bgfx_access_t _access);
|
BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
BGFX_C_API void bgfx_set_image_from_frame_buffer(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, bgfx_texture_format_t _format, bgfx_access_t _access);
|
BGFX_C_API void bgfx_set_image_from_frame_buffer(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, bgfx_access_t _access, bgfx_texture_format_t _format);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dispatch compute.
|
* Dispatch compute.
|
||||||
|
|
|
@ -1282,10 +1282,10 @@ namespace bgfx
|
||||||
void setBuffer(uint8_t _stage, DynamicVertexBufferHandle _handle, Access::Enum _access);
|
void setBuffer(uint8_t _stage, DynamicVertexBufferHandle _handle, Access::Enum _access);
|
||||||
|
|
||||||
///
|
///
|
||||||
void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, TextureFormat::Enum _format, Access::Enum _access);
|
void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, Access::Enum _access, TextureFormat::Enum _format = TextureFormat::Count);
|
||||||
|
|
||||||
///
|
///
|
||||||
void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, TextureFormat::Enum _format, Access::Enum _access);
|
void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, Access::Enum _access, TextureFormat::Enum _format = TextureFormat::Count);
|
||||||
|
|
||||||
/// Dispatch compute.
|
/// Dispatch compute.
|
||||||
void dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX = 1, uint16_t _numY = 1, uint16_t _numZ = 1, uint8_t _flags = BGFX_SUBMIT_EYE_FIRST);
|
void dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX = 1, uint16_t _numY = 1, uint16_t _numZ = 1, uint8_t _flags = BGFX_SUBMIT_EYE_FIRST);
|
||||||
|
|
16
src/bgfx.cpp
16
src/bgfx.cpp
|
@ -2872,16 +2872,16 @@ again:
|
||||||
s_ctx->setBuffer(_stage, _handle, _access);
|
s_ctx->setBuffer(_stage, _handle, _access);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, TextureFormat::Enum _format, Access::Enum _access)
|
void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, Access::Enum _access, TextureFormat::Enum _format)
|
||||||
{
|
{
|
||||||
BGFX_CHECK_MAIN_THREAD();
|
BGFX_CHECK_MAIN_THREAD();
|
||||||
s_ctx->setImage(_stage, _sampler, _handle, _mip, _format, _access);
|
s_ctx->setImage(_stage, _sampler, _handle, _mip, _access, _format);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, TextureFormat::Enum _format, Access::Enum _access)
|
void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, Access::Enum _access, TextureFormat::Enum _format)
|
||||||
{
|
{
|
||||||
BGFX_CHECK_MAIN_THREAD();
|
BGFX_CHECK_MAIN_THREAD();
|
||||||
s_ctx->setImage(_stage, _sampler, _handle, _attachment, _format, _access);
|
s_ctx->setImage(_stage, _sampler, _handle, _attachment, _access, _format);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags)
|
void dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags)
|
||||||
|
@ -3491,18 +3491,18 @@ BGFX_C_API uint32_t bgfx_submit(uint8_t _id, int32_t _depth)
|
||||||
return bgfx::submit(_id, _depth);
|
return bgfx::submit(_id, _depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_texture_format_t _format, bgfx_access_t _access)
|
BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format)
|
||||||
{
|
{
|
||||||
union { bgfx_uniform_handle_t c; bgfx::UniformHandle cpp; } sampler = { _sampler };
|
union { bgfx_uniform_handle_t c; bgfx::UniformHandle cpp; } sampler = { _sampler };
|
||||||
union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } handle = { _handle };
|
union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } handle = { _handle };
|
||||||
bgfx::setImage(_stage, sampler.cpp, handle.cpp, _mip, bgfx::TextureFormat::Enum(_format), bgfx::Access::Enum(_access) );
|
bgfx::setImage(_stage, sampler.cpp, handle.cpp, _mip, bgfx::Access::Enum(_access), bgfx::TextureFormat::Enum(_format) );
|
||||||
}
|
}
|
||||||
|
|
||||||
BGFX_C_API void bgfx_set_image_from_frame_buffer(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, bgfx_texture_format_t _format, bgfx_access_t _access)
|
BGFX_C_API void bgfx_set_image_from_frame_buffer(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, bgfx_access_t _access, bgfx_texture_format_t _format)
|
||||||
{
|
{
|
||||||
union { bgfx_uniform_handle_t c; bgfx::UniformHandle cpp; } sampler = { _sampler };
|
union { bgfx_uniform_handle_t c; bgfx::UniformHandle cpp; } sampler = { _sampler };
|
||||||
union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } handle = { _handle };
|
union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } handle = { _handle };
|
||||||
bgfx::setImage(_stage, sampler.cpp, handle.cpp, _attachment, bgfx::TextureFormat::Enum(_format), bgfx::Access::Enum(_access) );
|
bgfx::setImage(_stage, sampler.cpp, handle.cpp, _attachment, bgfx::Access::Enum(_access), bgfx::TextureFormat::Enum(_format) );
|
||||||
}
|
}
|
||||||
|
|
||||||
BGFX_C_API void bgfx_dispatch(uint8_t _id, bgfx_program_handle_t _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags)
|
BGFX_C_API void bgfx_dispatch(uint8_t _id, bgfx_program_handle_t _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags)
|
||||||
|
|
64
src/bgfx_p.h
64
src/bgfx_p.h
|
@ -1449,7 +1449,7 @@ namespace bgfx
|
||||||
bind.m_un.m_compute.m_mip = 0;
|
bind.m_un.m_compute.m_mip = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, TextureFormat::Enum _format, Access::Enum _access)
|
void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, Access::Enum _access, TextureFormat::Enum _format)
|
||||||
{
|
{
|
||||||
Binding& bind = m_compute.m_bind[_stage];
|
Binding& bind = m_compute.m_bind[_stage];
|
||||||
bind.m_idx = _handle.idx;
|
bind.m_idx = _handle.idx;
|
||||||
|
@ -2720,31 +2720,34 @@ namespace bgfx
|
||||||
|
|
||||||
BGFX_API_FUNC(TextureHandle createTexture(const Memory* _mem, uint32_t _flags, uint8_t _skip, TextureInfo* _info) )
|
BGFX_API_FUNC(TextureHandle createTexture(const Memory* _mem, uint32_t _flags, uint8_t _skip, TextureInfo* _info) )
|
||||||
{
|
{
|
||||||
if (NULL != _info)
|
TextureInfo ti;
|
||||||
|
if (NULL == _info)
|
||||||
{
|
{
|
||||||
ImageContainer imageContainer;
|
_info = &ti;
|
||||||
if (imageParse(imageContainer, _mem->data, _mem->size) )
|
}
|
||||||
{
|
|
||||||
calcTextureSize(*_info
|
ImageContainer imageContainer;
|
||||||
, (uint16_t)imageContainer.m_width
|
if (imageParse(imageContainer, _mem->data, _mem->size) )
|
||||||
, (uint16_t)imageContainer.m_height
|
{
|
||||||
, (uint16_t)imageContainer.m_depth
|
calcTextureSize(*_info
|
||||||
, imageContainer.m_cubeMap
|
, (uint16_t)imageContainer.m_width
|
||||||
, imageContainer.m_numMips
|
, (uint16_t)imageContainer.m_height
|
||||||
, TextureFormat::Enum(imageContainer.m_format)
|
, (uint16_t)imageContainer.m_depth
|
||||||
);
|
, imageContainer.m_cubeMap
|
||||||
}
|
, imageContainer.m_numMips
|
||||||
else
|
, TextureFormat::Enum(imageContainer.m_format)
|
||||||
{
|
);
|
||||||
_info->format = TextureFormat::Unknown;
|
}
|
||||||
_info->storageSize = 0;
|
else
|
||||||
_info->width = 0;
|
{
|
||||||
_info->height = 0;
|
_info->format = TextureFormat::Unknown;
|
||||||
_info->depth = 0;
|
_info->storageSize = 0;
|
||||||
_info->numMips = 0;
|
_info->width = 0;
|
||||||
_info->bitsPerPixel = 0;
|
_info->height = 0;
|
||||||
_info->cubeMap = false;
|
_info->depth = 0;
|
||||||
}
|
_info->numMips = 0;
|
||||||
|
_info->bitsPerPixel = 0;
|
||||||
|
_info->cubeMap = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
TextureHandle handle = { m_textureHandle.alloc() };
|
TextureHandle handle = { m_textureHandle.alloc() };
|
||||||
|
@ -2753,6 +2756,7 @@ namespace bgfx
|
||||||
{
|
{
|
||||||
TextureRef& ref = m_textureRef[handle.idx];
|
TextureRef& ref = m_textureRef[handle.idx];
|
||||||
ref.m_refCount = 1;
|
ref.m_refCount = 1;
|
||||||
|
ref.m_format = uint8_t(_info->format);
|
||||||
|
|
||||||
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateTexture);
|
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateTexture);
|
||||||
cmdbuf.write(handle);
|
cmdbuf.write(handle);
|
||||||
|
@ -3255,12 +3259,13 @@ namespace bgfx
|
||||||
m_submit->setBuffer(_stage, dvb.m_handle, _access);
|
m_submit->setBuffer(_stage, dvb.m_handle, _access);
|
||||||
}
|
}
|
||||||
|
|
||||||
BGFX_API_FUNC(void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, TextureFormat::Enum _format, Access::Enum _access) )
|
BGFX_API_FUNC(void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, Access::Enum _access, TextureFormat::Enum _format) )
|
||||||
{
|
{
|
||||||
m_submit->setImage(_stage, _sampler, _handle, _mip, _format, _access);
|
_format = TextureFormat::Count == _format ? TextureFormat::Enum(m_textureRef[_handle.idx].m_format) : _format;
|
||||||
|
m_submit->setImage(_stage, _sampler, _handle, _mip, _access, _format);
|
||||||
}
|
}
|
||||||
|
|
||||||
BGFX_API_FUNC(void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, TextureFormat::Enum _format, Access::Enum _access) )
|
BGFX_API_FUNC(void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, Access::Enum _access, TextureFormat::Enum _format) )
|
||||||
{
|
{
|
||||||
BX_CHECK(_attachment < g_caps.maxFBAttachments, "Frame buffer attachment index %d is invalid.", _attachment);
|
BX_CHECK(_attachment < g_caps.maxFBAttachments, "Frame buffer attachment index %d is invalid.", _attachment);
|
||||||
TextureHandle textureHandle = BGFX_INVALID_HANDLE;
|
TextureHandle textureHandle = BGFX_INVALID_HANDLE;
|
||||||
|
@ -3272,7 +3277,7 @@ namespace bgfx
|
||||||
BX_CHECK(isValid(textureHandle), "Frame buffer texture %d is invalid.", _attachment);
|
BX_CHECK(isValid(textureHandle), "Frame buffer texture %d is invalid.", _attachment);
|
||||||
}
|
}
|
||||||
|
|
||||||
setImage(_stage, _sampler, textureHandle, 0, _format, _access);
|
setImage(_stage, _sampler, textureHandle, 0, _access, _format);
|
||||||
}
|
}
|
||||||
|
|
||||||
BGFX_API_FUNC(uint32_t dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags) )
|
BGFX_API_FUNC(uint32_t dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags) )
|
||||||
|
@ -3402,6 +3407,7 @@ namespace bgfx
|
||||||
struct TextureRef
|
struct TextureRef
|
||||||
{
|
{
|
||||||
int16_t m_refCount;
|
int16_t m_refCount;
|
||||||
|
uint8_t m_format;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FrameBufferRef
|
struct FrameBufferRef
|
||||||
|
|
|
@ -189,6 +189,10 @@ vec2 vec2_splat(float _x) { return vec2(_x, _x); }
|
||||||
vec3 vec3_splat(float _x) { return vec3(_x, _x, _x); }
|
vec3 vec3_splat(float _x) { return vec3(_x, _x, _x); }
|
||||||
vec4 vec4_splat(float _x) { return vec4(_x, _x, _x, _x); }
|
vec4 vec4_splat(float _x) { return vec4(_x, _x, _x, _x); }
|
||||||
|
|
||||||
|
uvec2 uvec2_splat(uint _x) { return uvec2(_x, _x); }
|
||||||
|
uvec3 uvec3_splat(uint _x) { return uvec3(_x, _x, _x); }
|
||||||
|
uvec4 uvec4_splat(uint _x) { return uvec4(_x, _x, _x, _x); }
|
||||||
|
|
||||||
vec3 instMul(vec3 _vec, mat3 _mtx) { return mul(_mtx, _vec); }
|
vec3 instMul(vec3 _vec, mat3 _mtx) { return mul(_mtx, _vec); }
|
||||||
vec3 instMul(mat3 _mtx, vec3 _vec) { return mul(_vec, _mtx); }
|
vec3 instMul(mat3 _mtx, vec3 _vec) { return mul(_vec, _mtx); }
|
||||||
vec4 instMul(vec4 _vec, mat4 _mtx) { return mul(_mtx, _vec); }
|
vec4 instMul(vec4 _vec, mat4 _mtx) { return mul(_mtx, _vec); }
|
||||||
|
@ -239,6 +243,9 @@ vec4 mod(vec4 _a, vec4 _b) { return _a - _b * floor(_a / _b); }
|
||||||
# define vec2_splat(_x) vec2(_x)
|
# define vec2_splat(_x) vec2(_x)
|
||||||
# define vec3_splat(_x) vec3(_x)
|
# define vec3_splat(_x) vec3(_x)
|
||||||
# define vec4_splat(_x) vec4(_x)
|
# define vec4_splat(_x) vec4(_x)
|
||||||
|
# define uvec2_splat(_x) uvec2(_x)
|
||||||
|
# define uvec3_splat(_x) uvec3(_x)
|
||||||
|
# define uvec4_splat(_x) uvec4(_x)
|
||||||
|
|
||||||
vec3 instMul(vec3 _vec, mat3 _mtx) { return mul(_vec, _mtx); }
|
vec3 instMul(vec3 _vec, mat3 _mtx) { return mul(_vec, _mtx); }
|
||||||
vec3 instMul(mat3 _mtx, vec3 _vec) { return mul(_mtx, _vec); }
|
vec3 instMul(mat3 _mtx, vec3 _vec) { return mul(_mtx, _vec); }
|
||||||
|
|
|
@ -481,7 +481,7 @@ GL_IMPORT_NV___(true, PFNGLGETQUERYOBJECTUI64VPROC, glGetQueryObj
|
||||||
|
|
||||||
GL_IMPORT (true, PFNGLINVALIDATEFRAMEBUFFERPROC, glInvalidateFramebuffer, glDiscardFramebufferEXT);
|
GL_IMPORT (true, PFNGLINVALIDATEFRAMEBUFFERPROC, glInvalidateFramebuffer, glDiscardFramebufferEXT);
|
||||||
|
|
||||||
#else
|
#elif !BGFX_USE_GL_DYNAMIC_LIB
|
||||||
GL_IMPORT______(true, PFNGLTEXIMAGE3DPROC, glTexImage3D);
|
GL_IMPORT______(true, PFNGLTEXIMAGE3DPROC, glTexImage3D);
|
||||||
GL_IMPORT______(true, PFNGLTEXSUBIMAGE3DPROC, glTexSubImage3D);
|
GL_IMPORT______(true, PFNGLTEXSUBIMAGE3DPROC, glTexSubImage3D);
|
||||||
GL_IMPORT______(true, PFNGLCOMPRESSEDTEXIMAGE3DPROC, glCompressedTexImage3D);
|
GL_IMPORT______(true, PFNGLCOMPRESSEDTEXIMAGE3DPROC, glCompressedTexImage3D);
|
||||||
|
|
Loading…
Reference in a new issue