Removing VR leftovers.

This commit is contained in:
Бранимир Караџић 2018-12-21 23:25:30 -08:00
parent 5a996c95d9
commit 22fb0f7ad7
13 changed files with 107 additions and 341 deletions

View File

@ -1547,7 +1547,6 @@ namespace bgfx
, uint32_t _numX = 1
, uint32_t _numY = 1
, uint32_t _numZ = 1
, uint8_t _flags = BGFX_SUBMIT_EYE_FIRST
);
/// Dispatch compute indirect.
@ -1570,7 +1569,6 @@ namespace bgfx
, IndirectBufferHandle _indirectHandle
, uint16_t _start = 0
, uint16_t _num = 1
, uint8_t _flags = BGFX_SUBMIT_EYE_FIRST
);
/// Discard all previously set state for draw or compute call.
@ -3283,22 +3281,14 @@ namespace bgfx
///
/// @param[in] _id View id.
/// @param[in] _view View matrix.
/// @param[in] _projL Projection matrix. When using stereo rendering this projection matrix
/// represent projection matrix for left eye.
/// @param[in] _flags View flags. Use
/// - `BGFX_VIEW_NONE` - View will be rendered only once if stereo mode is enabled.
/// - `BGFX_VIEW_STEREO` - View will be rendered for both eyes if stereo mode is enabled. When
/// stereo mode is disabled this flag doesn't have effect.
/// @param[in] _projR Projection matrix for right eye in stereo mode.
/// @param[in] _projProjection matrix.
///
/// @attention C99 equivalent are `bgfx_set_view_transform`, `bgfx_set_view_transform_stereo`.
/// @attention C99 equivalent is `bgfx_set_view_transform`.
///
void setViewTransform(
ViewId _id
, const void* _view
, const void* _projL
, uint8_t _flags = BGFX_VIEW_STEREO
, const void* _projR = NULL
, const void* _proj
);
/// Post submit view reordering.
@ -3891,7 +3881,6 @@ namespace bgfx
, uint32_t _numX = 1
, uint32_t _numY = 1
, uint32_t _numZ = 1
, uint8_t _flags = BGFX_SUBMIT_EYE_FIRST
);
/// Dispatch compute indirect.
@ -3914,7 +3903,6 @@ namespace bgfx
, IndirectBufferHandle _indirectHandle
, uint16_t _start = 0
, uint16_t _num = 1
, uint8_t _flags = BGFX_SUBMIT_EYE_FIRST
);
/// Discard all previously set state for draw or compute call.

View File

@ -940,9 +940,6 @@ BGFX_C_API void bgfx_set_view_frame_buffer(bgfx_view_id_t _id, bgfx_frame_buffer
/**/
BGFX_C_API void bgfx_set_view_transform(bgfx_view_id_t _id, const void* _view, const void* _proj);
/**/
BGFX_C_API void bgfx_set_view_transform_stereo(bgfx_view_id_t _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR);
/**/
BGFX_C_API void bgfx_set_view_order(bgfx_view_id_t _id, uint16_t _num, const bgfx_view_id_t* _order);
@ -1046,10 +1043,10 @@ BGFX_C_API void bgfx_set_compute_dynamic_vertex_buffer(uint8_t _stage, bgfx_dyna
BGFX_C_API void bgfx_set_compute_indirect_buffer(uint8_t _stage, bgfx_indirect_buffer_handle_t _handle, bgfx_access_t _access);
/**/
BGFX_C_API void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags);
BGFX_C_API void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ);
/**/
BGFX_C_API void bgfx_dispatch_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags);
BGFX_C_API void bgfx_dispatch_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num);
/**/
BGFX_C_API void bgfx_discard(void);
@ -1151,10 +1148,10 @@ BGFX_C_API void bgfx_encoder_set_compute_dynamic_vertex_buffer(struct bgfx_encod
BGFX_C_API void bgfx_encoder_set_compute_indirect_buffer(struct bgfx_encoder_s* _encoder, uint8_t _stage, bgfx_indirect_buffer_handle_t _handle, bgfx_access_t _access);
/**/
BGFX_C_API void bgfx_encoder_dispatch(struct bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags);
BGFX_C_API void bgfx_encoder_dispatch(struct bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ);
/**/
BGFX_C_API void bgfx_encoder_dispatch_indirect(struct bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags);
BGFX_C_API void bgfx_encoder_dispatch_indirect(struct bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num);
/**/
BGFX_C_API void bgfx_encoder_discard(struct bgfx_encoder_s* _encoder);

View File

@ -154,7 +154,6 @@ typedef struct bgfx_interface_vtbl
void (*set_view_mode)(bgfx_view_id_t _id, bgfx_view_mode_t _mode);
void (*set_view_frame_buffer)(bgfx_view_id_t _id, bgfx_frame_buffer_handle_t _handle);
void (*set_view_transform)(bgfx_view_id_t _id, const void* _view, const void* _proj);
void (*set_view_transform_stereo)(bgfx_view_id_t _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR);
void (*set_view_order)(bgfx_view_id_t _id, uint16_t _num, const bgfx_view_id_t* _order);
void (*encoder_set_marker)(struct bgfx_encoder_s* _encoder, const char* _marker);
void (*encoder_set_state)(struct bgfx_encoder_s* _encoder, uint64_t _state, uint32_t _rgba);
@ -188,8 +187,8 @@ typedef struct bgfx_interface_vtbl
void (*encoder_set_compute_dynamic_index_buffer)(struct bgfx_encoder_s* _encoder, uint8_t _stage, bgfx_dynamic_index_buffer_handle_t _handle, bgfx_access_t _access);
void (*encoder_set_compute_dynamic_vertex_buffer)(struct bgfx_encoder_s* _encoder, uint8_t _stage, bgfx_dynamic_vertex_buffer_handle_t _handle, bgfx_access_t _access);
void (*encoder_set_compute_indirect_buffer)(struct bgfx_encoder_s* _encoder, uint8_t _stage, bgfx_indirect_buffer_handle_t _handle, bgfx_access_t _access);
void (*encoder_dispatch)(struct bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags);
void (*encoder_dispatch_indirect)(struct bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags);
void (*encoder_dispatch)(struct bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ);
void (*encoder_dispatch_indirect)(struct bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num);
void (*encoder_discard)(struct bgfx_encoder_s* _encoder);
void (*encoder_blit)(struct bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_texture_handle_t _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth);
void (*request_screen_shot)(bgfx_frame_buffer_handle_t _handle, const char* _filePath);

View File

@ -6,7 +6,7 @@
#ifndef BGFX_DEFINES_H_HEADER_GUARD
#define BGFX_DEFINES_H_HEADER_GUARD
#define BGFX_API_VERSION UINT32_C(90)
#define BGFX_API_VERSION UINT32_C(91)
/// Color RGB/alpha/depth write. When it's not specified write will be disabled.
#define BGFX_STATE_WRITE_R UINT64_C(0x0000000000000001) //!< Enable R write.
@ -521,19 +521,6 @@
#define BGFX_CAPS_FORMAT_TEXTURE_MSAA UINT16_C(0x2000) //!< Texture can be sampled as MSAA.
#define BGFX_CAPS_FORMAT_TEXTURE_MIP_AUTOGEN UINT16_C(0x4000) //!< Texture format supports auto-generated mips.
///
#define BGFX_VIEW_NONE UINT8_C(0x00) //!<
#define BGFX_VIEW_STEREO UINT8_C(0x01) //!< View will be rendered in stereo mode.
///
#define BGFX_SUBMIT_EYE_LEFT UINT8_C(0x01) //!< Submit to left eye.
#define BGFX_SUBMIT_EYE_RIGHT UINT8_C(0x02) //!< Submit to right eye.
#define BGFX_SUBMIT_EYE_MASK UINT8_C(0x03) //!<
#define BGFX_SUBMIT_EYE_FIRST BGFX_SUBMIT_EYE_LEFT
#define BGFX_SUBMIT_RESERVED_SHIFT 7 //!< Internal bits shift.
#define BGFX_SUBMIT_RESERVED_MASK UINT8_C(0x80) //!< Internal bits mask.
///
#define BGFX_RESOLVE_NONE UINT8_C(0x00) //!< No resolve flags.
#define BGFX_RESOLVE_AUTO_GEN_MIPS UINT8_C(0x01) //!< Auto-generate mip maps on resolve.

View File

@ -1224,7 +1224,7 @@ namespace bgfx
}
}
void EncoderImpl::dispatch(ViewId _id, ProgramHandle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
void EncoderImpl::dispatch(ViewId _id, ProgramHandle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
{
@ -1255,7 +1255,6 @@ namespace bgfx
m_compute.m_numX = bx::max(_numX, 1u);
m_compute.m_numY = bx::max(_numY, 1u);
m_compute.m_numZ = bx::max(_numZ, 1u);
m_compute.m_submitFlags = _flags;
m_key.m_program = _handle;
m_key.m_depth = 0;
@ -3590,20 +3589,20 @@ namespace bgfx
BGFX_ENCODER(setImage(_stage, _handle, _mip, _access, _format) );
}
void Encoder::dispatch(ViewId _id, ProgramHandle _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
void Encoder::dispatch(ViewId _id, ProgramHandle _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
{
BGFX_CHECK_CAPS(BGFX_CAPS_COMPUTE, "Compute is not supported!");
BGFX_CHECK_HANDLE_INVALID_OK("dispatch", s_ctx->m_programHandle, _program);
BGFX_ENCODER(dispatch(_id, _program, _numX, _numY, _numZ, _flags) );
BGFX_ENCODER(dispatch(_id, _program, _numX, _numY, _numZ) );
}
void Encoder::dispatch(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
void Encoder::dispatch(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num)
{
BGFX_CHECK_CAPS(BGFX_CAPS_DRAW_INDIRECT, "Dispatch indirect is not supported!");
BGFX_CHECK_CAPS(BGFX_CAPS_COMPUTE, "Compute is not supported!");
BGFX_CHECK_HANDLE_INVALID_OK("dispatch", s_ctx->m_programHandle, _program);
BGFX_CHECK_HANDLE("dispatch", s_ctx->m_vertexBufferHandle, _indirectHandle);
BGFX_ENCODER(dispatch(_id, _program, _indirectHandle, _start, _num, _flags) );
BGFX_ENCODER(dispatch(_id, _program, _indirectHandle, _start, _num) );
}
void Encoder::discard()
@ -4504,10 +4503,10 @@ namespace bgfx
s_ctx->setViewFrameBuffer(_id, _handle);
}
void setViewTransform(ViewId _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR)
void setViewTransform(ViewId _id, const void* _view, const void* _proj)
{
BX_CHECK(checkView(_id), "Invalid view id: %d", _id);
s_ctx->setViewTransform(_id, _view, _projL, _flags, _projR);
s_ctx->setViewTransform(_id, _view, _proj);
}
void setViewOrder(ViewId _id, uint16_t _num, const ViewId* _order)
@ -4750,16 +4749,16 @@ namespace bgfx
s_ctx->m_encoder0->setImage(_stage, _handle, _mip, _access, _format);
}
void dispatch(ViewId _id, ProgramHandle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
void dispatch(ViewId _id, ProgramHandle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
{
BGFX_CHECK_API_THREAD();
s_ctx->m_encoder0->dispatch(_id, _handle, _numX, _numY, _numZ, _flags);
s_ctx->m_encoder0->dispatch(_id, _handle, _numX, _numY, _numZ);
}
void dispatch(ViewId _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
void dispatch(ViewId _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num)
{
BGFX_CHECK_API_THREAD();
s_ctx->m_encoder0->dispatch(_id, _handle, _indirectHandle, _start, _num, _flags);
s_ctx->m_encoder0->dispatch(_id, _handle, _indirectHandle, _start, _num);
}
void discard()
@ -5744,11 +5743,6 @@ BGFX_C_API void bgfx_set_view_transform(bgfx_view_id_t _id, const void* _view, c
bgfx::setViewTransform(_id, _view, _proj);
}
BGFX_C_API void bgfx_set_view_transform_stereo(bgfx_view_id_t _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR)
{
bgfx::setViewTransform(_id, _view, _projL, _flags, _projR);
}
BGFX_C_API void bgfx_set_view_order(bgfx_view_id_t _id, uint16_t _num, const bgfx_view_id_t* _order)
{
bgfx::setViewOrder(_id, _num, _order);
@ -5940,17 +5934,17 @@ BGFX_C_API void bgfx_set_compute_indirect_buffer(uint8_t _stage, bgfx_indirect_b
bgfx::setBuffer(_stage, handle.cpp, bgfx::Access::Enum(_access) );
}
BGFX_C_API void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
BGFX_C_API void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
bgfx::dispatch(_id, handle.cpp, _numX, _numY, _numZ, _flags);
bgfx::dispatch(_id, handle.cpp, _numX, _numY, _numZ);
}
BGFX_C_API void bgfx_dispatch_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
BGFX_C_API void bgfx_dispatch_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
union { bgfx_indirect_buffer_handle_t c; bgfx::IndirectBufferHandle cpp; } indirectHandle = { _indirectHandle };
bgfx::dispatch(_id, handle.cpp, indirectHandle.cpp, _start, _num, _flags);
bgfx::dispatch(_id, handle.cpp, indirectHandle.cpp, _start, _num);
}
BGFX_C_API void bgfx_discard(void)
@ -6148,17 +6142,17 @@ BGFX_C_API void bgfx_encoder_set_compute_indirect_buffer(bgfx_encoder_s* _encode
BGFX_ENCODER(setBuffer(_stage, handle.cpp, bgfx::Access::Enum(_access) ) );
}
BGFX_C_API void bgfx_encoder_dispatch(bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
BGFX_C_API void bgfx_encoder_dispatch(bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
BGFX_ENCODER(dispatch(_id, handle.cpp, _numX, _numY, _numZ, _flags) );
BGFX_ENCODER(dispatch(_id, handle.cpp, _numX, _numY, _numZ) );
}
BGFX_C_API void bgfx_encoder_dispatch_indirect(bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
BGFX_C_API void bgfx_encoder_dispatch_indirect(bgfx_encoder_s* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
union { bgfx_indirect_buffer_handle_t c; bgfx::IndirectBufferHandle cpp; } indirectHandle = { _indirectHandle };
BGFX_ENCODER(dispatch(_id, handle.cpp, indirectHandle.cpp, _start, _num, _flags) );
BGFX_ENCODER(dispatch(_id, handle.cpp, indirectHandle.cpp, _start, _num) );
}
BGFX_C_API void bgfx_encoder_discard(bgfx_encoder_s* _encoder)
@ -6312,7 +6306,6 @@ BGFX_C_API bgfx_interface_vtbl_t* bgfx_get_interface(uint32_t _version)
BGFX_IMPORT_FUNC(set_view_mode) \
BGFX_IMPORT_FUNC(set_view_frame_buffer) \
BGFX_IMPORT_FUNC(set_view_transform) \
BGFX_IMPORT_FUNC(set_view_transform_stereo) \
BGFX_IMPORT_FUNC(set_view_order) \
BGFX_IMPORT_FUNC(encoder_set_marker) \
BGFX_IMPORT_FUNC(encoder_set_state) \

View File

@ -213,6 +213,7 @@ namespace stl = std;
#define BGFX_STATE_INTERNAL_SCISSOR UINT64_C(0x2000000000000000)
#define BGFX_STATE_INTERNAL_OCCLUSION_QUERY UINT64_C(0x4000000000000000)
#define BGFX_SUBMIT_RESERVED_MASK UINT8_C(0xff)
#define BGFX_SUBMIT_INTERNAL_OCCLUSION_VISIBLE UINT8_C(0x80)
#define BGFX_RENDERER_DIRECT3D9_NAME "Direct3D 9"
@ -1549,7 +1550,7 @@ namespace bgfx
m_startIndirect = 0;
m_numIndirect = UINT16_MAX;
m_numMatrices = 1;
m_submitFlags = BGFX_SUBMIT_EYE_FIRST;
m_submitFlags = 0;
m_scissor = UINT16_MAX;
m_streamMask = 0;
m_stream[0].clear();
@ -1607,7 +1608,7 @@ namespace bgfx
m_numY = 0;
m_numZ = 0;
m_numMatrices = 0;
m_submitFlags = BGFX_SUBMIT_EYE_FIRST;
m_submitFlags = 0;
m_uniformIdx = UINT8_MAX;
m_indirectBuffer.idx = kInvalidHandle;
@ -1694,7 +1695,7 @@ namespace bgfx
setClear(BGFX_CLEAR_NONE, 0, 0.0f, 0);
setMode(ViewMode::Default);
setFrameBuffer(BGFX_INVALID_HANDLE);
setTransform(NULL, NULL, BGFX_VIEW_NONE, NULL);
setTransform(NULL, NULL);
}
void setRect(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
@ -1733,10 +1734,8 @@ namespace bgfx
m_fbh = _handle;
}
void setTransform(const void* _view, const void* _proj, uint8_t _flags, const void* _proj1)
void setTransform(const void* _view, const void* _proj)
{
m_flags = _flags;
if (NULL != _view)
{
bx::memCopy(m_view.un.val, _view, sizeof(Matrix4) );
@ -1748,20 +1747,11 @@ namespace bgfx
if (NULL != _proj)
{
bx::memCopy(m_proj[0].un.val, _proj, sizeof(Matrix4) );
bx::memCopy(m_proj.un.val, _proj, sizeof(Matrix4) );
}
else
{
m_proj[0].setIdentity();
}
if (NULL != _proj1)
{
bx::memCopy(m_proj[1].un.val, _proj1, sizeof(Matrix4) );
}
else
{
bx::memCopy(m_proj[1].un.val, m_proj[0].un.val, sizeof(Matrix4) );
m_proj.setIdentity();
}
}
@ -1769,10 +1759,9 @@ namespace bgfx
Rect m_rect;
Rect m_scissor;
Matrix4 m_view;
Matrix4 m_proj[2];
Matrix4 m_proj;
FrameBufferHandle m_fbh;
uint8_t m_mode;
uint8_t m_flags;
};
struct FrameCache
@ -2393,14 +2382,14 @@ namespace bgfx
submit(_id, _program, handle, _depth, _preserveState);
}
void dispatch(ViewId _id, ProgramHandle _handle, uint32_t _ngx, uint32_t _ngy, uint32_t _ngz, uint8_t _flags);
void dispatch(ViewId _id, ProgramHandle _handle, uint32_t _ngx, uint32_t _ngy, uint32_t _ngz);
void dispatch(ViewId _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
void dispatch(ViewId _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num)
{
m_compute.m_indirectBuffer = _indirectHandle;
m_compute.m_startIndirect = _start;
m_compute.m_numIndirect = _num;
dispatch(_id, _handle, 0, 0, 0, _flags);
dispatch(_id, _handle, 0, 0, 0);
}
void blit(ViewId _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, TextureHandle _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth);
@ -4533,9 +4522,9 @@ namespace bgfx
m_view[_id].setFrameBuffer(_handle);
}
BGFX_API_FUNC(void setViewTransform(ViewId _id, const void* _view, const void* _proj, uint8_t _flags, const void* _proj1) )
BGFX_API_FUNC(void setViewTransform(ViewId _id, const void* _view, const void* _proj) )
{
m_view[_id].setTransform(_view, _proj, _flags, _proj1);
m_view[_id].setTransform(_view, _proj);
}
BGFX_API_FUNC(void resetView(ViewId _id) )

View File

@ -47,74 +47,36 @@ namespace bgfx
{
}
ViewState(Frame* _frame, bool _stereo)
ViewState(Frame* _frame)
{
reset(_frame, _stereo);
reset(_frame);
}
void reset(Frame* _frame, bool _stereo)
void reset(Frame* _frame)
{
m_alphaRef = 0.0f;
m_invViewCached = UINT16_MAX;
m_invProjCached = UINT16_MAX;
m_invViewProjCached = UINT16_MAX;
m_view[0] = m_viewTmp[0];
m_view[1] = m_viewTmp[1];
m_view = m_viewTmp;
if (_stereo)
for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
{
m_view[0] = m_viewTmp[0];
Matrix4 viewAdjust;
bx::mtxIdentity(viewAdjust.un.val);
for (uint32_t eye = 0; eye < 2; ++eye)
{
/*
const HMD::Eye& hmdEye = hmd.eye[eye];
viewAdjust.un.val[12] = hmdEye.viewOffset[0];
viewAdjust.un.val[13] = hmdEye.viewOffset[1];
viewAdjust.un.val[14] = hmdEye.viewOffset[2];
for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
{
if (BGFX_VIEW_STEREO == (_frame->m_view[ii].m_flags & BGFX_VIEW_STEREO) )
{
bx::float4x4_mul(&m_view[eye][ii].un.f4x4
, &_frame->m_view[ii].m_view.un.f4x4
, &viewAdjust.un.f4x4
);
}
else
{
bx::memCopy(&m_view[0][ii].un.f4x4, &_frame->m_view[ii].m_view.un.f4x4, sizeof(Matrix4) );
}
}
*/
}
}
else
{
for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
{
bx::memCopy(&m_view[0][ii].un.f4x4, &_frame->m_view[ii].m_view.un.f4x4, sizeof(Matrix4) );
}
bx::memCopy(&m_view[ii].un.f4x4, &_frame->m_view[ii].m_view.un.f4x4, sizeof(Matrix4) );
}
for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
{
for (uint32_t eye = 0; eye < uint32_t(_stereo)+1; ++eye)
{
bx::float4x4_mul(&m_viewProj[eye][ii].un.f4x4
, &m_view[eye][ii].un.f4x4
, &_frame->m_view[ii].m_proj[eye].un.f4x4
);
}
bx::float4x4_mul(&m_viewProj[ii].un.f4x4
, &m_view[ii].un.f4x4
, &_frame->m_view[ii].m_proj.un.f4x4
);
}
}
template<uint16_t mtxRegs, typename RendererContext, typename Program, typename Draw>
void setPredefined(RendererContext* _renderer, uint16_t _view, uint8_t _eye, const Program& _program, const Frame* _frame, const Draw& _draw)
void setPredefined(RendererContext* _renderer, uint16_t _view, const Program& _program, const Frame* _frame, const Draw& _draw)
{
const FrameCache& frameCache = _frame->m_frameCache;
@ -158,7 +120,7 @@ namespace bgfx
{
_renderer->setShaderUniform4x4f(flags
, predefined.m_loc
, m_view[_eye][_view].un.val
, m_view[_view].un.val
, bx::uint32_min(mtxRegs, predefined.m_count)
);
}
@ -166,12 +128,11 @@ namespace bgfx
case PredefinedUniform::InvView:
{
uint16_t viewEye = (_view << 1) | _eye;
if (viewEye != m_invViewCached)
if (_view != m_invViewCached)
{
m_invViewCached = viewEye;
m_invViewCached = _view;
bx::float4x4_inverse(&m_invView.un.f4x4
, &m_view[_eye][_view].un.f4x4
, &m_view[_view].un.f4x4
);
}
@ -187,7 +148,7 @@ namespace bgfx
{
_renderer->setShaderUniform4x4f(flags
, predefined.m_loc
, _frame->m_view[_view].m_proj[_eye].un.val
, _frame->m_view[_view].m_proj.un.val
, bx::uint32_min(mtxRegs, predefined.m_count)
);
}
@ -195,12 +156,11 @@ namespace bgfx
case PredefinedUniform::InvProj:
{
uint16_t viewEye = (_view << 1) | _eye;
if (viewEye != m_invProjCached)
if (_view != m_invProjCached)
{
m_invProjCached = viewEye;
m_invProjCached = _view;
bx::float4x4_inverse(&m_invProj.un.f4x4
, &_frame->m_view[_view].m_proj[_eye].un.f4x4
, &_frame->m_view[_view].m_proj.un.f4x4
);
}
@ -216,7 +176,7 @@ namespace bgfx
{
_renderer->setShaderUniform4x4f(flags
, predefined.m_loc
, m_viewProj[_eye][_view].un.val
, m_viewProj[_view].un.val
, bx::uint32_min(mtxRegs, predefined.m_count)
);
}
@ -224,12 +184,11 @@ namespace bgfx
case PredefinedUniform::InvViewProj:
{
uint16_t viewEye = (_view << 1) | _eye;
if (viewEye != m_invViewProjCached)
if (_view != m_invViewProjCached)
{
m_invViewProjCached = viewEye;
m_invViewProjCached = _view;
bx::float4x4_inverse(&m_invViewProj.un.f4x4
, &m_viewProj[_eye][_view].un.f4x4
, &m_viewProj[_view].un.f4x4
);
}
@ -258,7 +217,7 @@ namespace bgfx
const Matrix4& model = frameCache.m_matrixCache.m_cache[_draw.m_startMatrix];
bx::float4x4_mul(&modelView.un.f4x4
, &model.un.f4x4
, &m_view[_eye][_view].un.f4x4
, &m_view[_view].un.f4x4
);
_renderer->setShaderUniform4x4f(flags
, predefined.m_loc
@ -274,7 +233,7 @@ namespace bgfx
const Matrix4& model = frameCache.m_matrixCache.m_cache[_draw.m_startMatrix];
bx::float4x4_mul(&modelViewProj.un.f4x4
, &model.un.f4x4
, &m_viewProj[_eye][_view].un.f4x4
, &m_viewProj[_view].un.f4x4
);
_renderer->setShaderUniform4x4f(flags
, predefined.m_loc
@ -301,9 +260,9 @@ namespace bgfx
}
}
Matrix4 m_viewTmp[2][BGFX_CONFIG_MAX_VIEWS];
Matrix4 m_viewProj[2][BGFX_CONFIG_MAX_VIEWS];
Matrix4* m_view[2];
Matrix4 m_viewTmp[BGFX_CONFIG_MAX_VIEWS];
Matrix4 m_viewProj[BGFX_CONFIG_MAX_VIEWS];
Matrix4* m_view;
Rect m_rect;
Matrix4 m_invView;
Matrix4 m_invProj;

View File

@ -5249,9 +5249,8 @@ namespace bgfx { namespace d3d11
RenderBind currentBind;
currentBind.clear();
const bool hmdEnabled = false;
static ViewState viewState;
viewState.reset(_render, hmdEnabled);
viewState.reset(_render);
bool wireframe = !!(_render->m_debug&BGFX_DEBUG_WIREFRAME);
bool scissorEnabled = false;
@ -5299,13 +5298,10 @@ namespace bgfx { namespace d3d11
// if we don't do this we'll only see one frame of output and then nothing
setFrameBuffer(BGFX_INVALID_HANDLE, true, false);
bool viewRestart = false;
uint8_t eye = 0;
uint8_t restartState = 0;
viewState.m_rect = _render->m_view[0].m_rect;
int32_t numItems = _render->m_numRenderItems;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
for (int32_t item = 0; item < numItems;)
{
const uint64_t encodedKey = _render->m_sortKeys[item];
const bool isCompute = key.decode(encodedKey, _render->m_viewRemap);
@ -5323,15 +5319,6 @@ namespace bgfx { namespace d3d11
if (viewChanged)
{
if (1 == restartState)
{
restartState = 2;
item = restartItem;
restartItem = numItems;
view = UINT16_MAX;
continue;
}
view = key.m_view;
currentProgram = BGFX_INVALID_HANDLE;
@ -5341,24 +5328,6 @@ namespace bgfx { namespace d3d11
setFrameBuffer(fbh);
}
viewRestart = ( (BGFX_VIEW_STEREO == (_render->m_view[view].m_flags & BGFX_VIEW_STEREO) ) );
viewRestart &= hmdEnabled;
if (viewRestart)
{
if (0 == restartState)
{
restartState = 1;
restartItem = item - 1;
}
eye = (restartState - 1) & 1;
restartState &= 1;
}
else
{
eye = 0;
}
PIX_ENDEVENT();
if (item > 1)
{
@ -5367,32 +5336,12 @@ namespace bgfx { namespace d3d11
profiler.begin(view);
viewState.m_rect = _render->m_view[view].m_rect;
if (viewRestart)
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
{
wchar_t* viewNameW = s_viewNameW[view];
viewNameW[3] = L' ';
viewNameW[4] = eye ? L'R' : L'L';
PIX_BEGINEVENT(0 == ( (view*2+eye)&1)
? D3DCOLOR_VIEW_L
: D3DCOLOR_VIEW_R
, viewNameW
);
}
viewState.m_rect.m_x = eye * (viewState.m_rect.m_width+1)/2;
viewState.m_rect.m_width /= 2;
}
else
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
{
wchar_t* viewNameW = s_viewNameW[view];
viewNameW[3] = L' ';
viewNameW[4] = L' ';
PIX_BEGINEVENT(D3DCOLOR_VIEW, viewNameW);
}
wchar_t* viewNameW = s_viewNameW[view];
viewNameW[3] = L' ';
viewNameW[4] = L' ';
PIX_BEGINEVENT(D3DCOLOR_VIEW, viewNameW);
}
const Rect& scissorRect = _render->m_view[view].m_scissor;
@ -5444,12 +5393,6 @@ namespace bgfx { namespace d3d11
const RenderCompute& compute = renderItem.compute;
if (0 != eye
&& BGFX_SUBMIT_EYE_LEFT == (compute.m_submitFlags&BGFX_SUBMIT_EYE_MASK) )
{
continue;
}
bool programChanged = false;
bool constantsChanged = compute.m_uniformBegin < compute.m_uniformEnd;
rendererUpdateUniforms(this, _render->m_uniformBuffer[compute.m_uniformIdx], compute.m_uniformBegin, compute.m_uniformEnd);
@ -5481,7 +5424,7 @@ namespace bgfx { namespace d3d11
}
}
viewState.setPredefined<4>(this, view, eye, program, _render, compute);
viewState.setPredefined<4>(this, view, program, _render, compute);
if (constantsChanged
|| program.m_numPredefined > 0)
@ -5807,7 +5750,7 @@ namespace bgfx { namespace d3d11
}
}
viewState.setPredefined<4>(this, view, eye, program, _render, draw);
viewState.setPredefined<4>(this, view, program, _render, draw);
if (constantsChanged
|| program.m_numPredefined > 0)

View File

@ -5705,9 +5705,8 @@ namespace bgfx { namespace d3d12
RenderBind currentBind;
currentBind.clear();
const bool hmdEnabled = false;
static ViewState viewState;
viewState.reset(_render, hmdEnabled);
viewState.reset(_render);
// bool wireframe = !!(_render->m_debug&BGFX_DEBUG_WIREFRAME);
// setDebugWireframe(wireframe);
@ -5806,9 +5805,9 @@ namespace bgfx { namespace d3d12
m_batch.begin();
viewState.m_rect = _render->m_view[0].m_rect;
int32_t numItems = _render->m_numRenderItems;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
for (int32_t item = 0; item < numItems;)
{
const uint64_t encodedKey = _render->m_sortKeys[item];
const bool isCompute = key.decode(encodedKey, _render->m_viewRemap);
@ -6061,7 +6060,7 @@ namespace bgfx { namespace d3d12
|| hasPredefined)
{
ProgramD3D12& program = m_program[currentProgram.idx];
viewState.setPredefined<4>(this, view, 0, program, _render, compute);
viewState.setPredefined<4>(this, view, program, _render, compute);
commitShaderConstants(key.m_program, gpuAddress);
m_commandList->SetComputeRootConstantBufferView(Rdt::CBV, gpuAddress);
}
@ -6457,7 +6456,7 @@ namespace bgfx { namespace d3d12
ProgramD3D12& program = m_program[currentProgram.idx];
uint32_t ref = (newFlags&BGFX_STATE_ALPHA_REF_MASK)>>BGFX_STATE_ALPHA_REF_SHIFT;
viewState.m_alphaRef = ref/255.0f;
viewState.setPredefined<4>(this, view, 0, program, _render, draw);
viewState.setPredefined<4>(this, view, program, _render, draw);
commitShaderConstants(key.m_program, gpuAddress);
}

View File

@ -3745,7 +3745,8 @@ namespace bgfx { namespace d3d9
RenderBind currentBind;
currentBind.clear();
ViewState viewState(_render, false);
static ViewState viewState;
viewState.reset(_render);
DX_CHECK(device->SetRenderState(D3DRS_FILLMODE, _render->m_debug&BGFX_DEBUG_WIREFRAME ? D3DFILL_WIREFRAME : D3DFILL_SOLID) );
ProgramHandle currentProgram = BGFX_INVALID_HANDLE;
@ -4159,7 +4160,7 @@ namespace bgfx { namespace d3d9
}
}
viewState.setPredefined<4>(this, view, 0, program, _render, draw);
viewState.setPredefined<4>(this, view, program, _render, draw);
}
{

View File

@ -6350,9 +6350,8 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
RenderBind currentBind;
currentBind.clear();
const bool hmdEnabled = false;
static ViewState viewState;
viewState.reset(_render, hmdEnabled);
viewState.reset(_render);
ProgramHandle currentProgram = BGFX_INVALID_HANDLE;
ProgramHandle boundProgram = BGFX_INVALID_HANDLE;
@ -6409,18 +6408,14 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
m_occlusionQuery.resolve(_render);
}
uint8_t eye = 0;
if (0 == (_render->m_debug&BGFX_DEBUG_IFH) )
{
GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_msaaBackBufferFbo) );
bool viewRestart = false;
uint8_t restartState = 0;
viewState.m_rect = _render->m_view[0].m_rect;
int32_t numItems = _render->m_numRenderItems;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
for (int32_t item = 0; item < numItems;)
{
const uint64_t encodedKey = _render->m_sortKeys[item];
const bool isCompute = key.decode(encodedKey, _render->m_viewRemap);
@ -6438,15 +6433,6 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
if (viewChanged)
{
if (1 == restartState)
{
restartState = 2;
item = restartItem;
restartItem = numItems;
view = UINT16_MAX;
continue;
}
view = key.m_view;
currentProgram = BGFX_INVALID_HANDLE;
@ -6457,24 +6443,6 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
resolutionHeight = setFrameBuffer(fbh, resolutionHeight, discardFlags);
}
viewRestart = ( (BGFX_VIEW_STEREO == (_render->m_view[view].m_flags & BGFX_VIEW_STEREO) ) );
viewRestart &= hmdEnabled;
if (viewRestart)
{
if (0 == restartState)
{
restartState = 1;
restartItem = item - 1;
}
eye = (restartState - 1) & 1;
restartState &= 1;
}
else
{
eye = 0;
}
if (item > 1)
{
profiler.end();
@ -6483,28 +6451,12 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
profiler.begin(view);
viewState.m_rect = _render->m_view[view].m_rect;
if (viewRestart)
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
{
char* viewName = s_viewName[view];
viewName[3] = ' ';
viewName[4] = eye ? 'R' : 'L';
GL_CHECK(glInsertEventMarker(0, viewName) );
}
viewState.m_rect.m_x = eye * (viewState.m_rect.m_width+1)/2;
viewState.m_rect.m_width /= 2;
}
else
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
{
char* viewName = s_viewName[view];
viewName[3] = ' ';
viewName[4] = ' ';
GL_CHECK(glInsertEventMarker(0, viewName) );
}
char* viewName = s_viewName[view];
viewName[3] = ' ';
viewName[4] = ' ';
GL_CHECK(glInsertEventMarker(0, viewName) );
}
const Rect& scissorRect = _render->m_view[view].m_scissor;
@ -6615,7 +6567,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
commit(*program.m_constantBuffer);
}
viewState.setPredefined<1>(this, view, eye, program, _render, compute);
viewState.setPredefined<1>(this, view, program, _render, compute);
if (isValid(compute.m_indirectBuffer) )
{
@ -7060,7 +7012,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
commit(*program.m_constantBuffer);
}
viewState.setPredefined<1>(this, view, eye, program, _render, draw);
viewState.setPredefined<1>(this, view, program, _render, draw);
{
for (uint32_t stage = 0; stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++stage)

View File

@ -3449,9 +3449,8 @@ namespace bgfx { namespace mtl
RenderBind currentBind;
currentBind.clear();
const bool hmdEnabled = false;
static ViewState viewState;
viewState.reset(_render, hmdEnabled);
viewState.reset(_render);
uint32_t blendFactor = 0;
bool wireframe = !!(_render->m_debug&BGFX_DEBUG_WIREFRAME);
@ -3485,13 +3484,10 @@ namespace bgfx { namespace mtl
if (0 == (_render->m_debug&BGFX_DEBUG_IFH) )
{
bool viewRestart = false;
uint8_t eye = 0;
uint8_t restartState = 0;
viewState.m_rect = _render->m_view[0].m_rect;
int32_t numItems = _render->m_numRenderItems;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
for (int32_t item = 0; item < numItems;)
{
const uint64_t encodedKey = _render->m_sortKeys[item];
const bool isCompute = key.decode(encodedKey, _render->m_viewRemap);
@ -3509,45 +3505,11 @@ namespace bgfx { namespace mtl
if (viewChanged)
{
if (1 == restartState)
{
restartState = 2;
item = restartItem;
restartItem = numItems;
view = UINT16_MAX;
continue;
}
view = key.m_view;
currentProgram = BGFX_INVALID_HANDLE;
viewRestart = BGFX_VIEW_STEREO == (_render->m_view[view].m_flags & BGFX_VIEW_STEREO);
viewRestart &= hmdEnabled;
if (viewRestart)
{
if (0 == restartState)
{
restartState = 1;
restartItem = item - 1;
}
eye = (restartState - 1) & 1;
restartState &= 1;
}
else
{
eye = 0;
}
viewState.m_rect = _render->m_view[view].m_rect;
if (viewRestart)
{
viewState.m_rect.m_x = eye * (viewState.m_rect.m_width+1)/2;
viewState.m_rect.m_width /= 2;
}
submitBlit(bs, view);
const Rect& scissorRect = _render->m_view[view].m_scissor;
@ -4003,7 +3965,7 @@ namespace bgfx { namespace mtl
}
}
viewState.setPredefined<4>(this, view, eye, program, _render, draw);
viewState.setPredefined<4>(this, view, program, _render, draw);
m_uniformBufferFragmentOffset += fragmentUniformBufferSize;
m_uniformBufferVertexOffset = m_uniformBufferFragmentOffset;

View File

@ -3679,9 +3679,8 @@ VK_DESTROY
currentState.m_stateFlags = BGFX_STATE_NONE;
currentState.m_stencil = packStencil(BGFX_STENCIL_NONE, BGFX_STENCIL_NONE);
const bool hmdEnabled = false;
ViewState viewState(_render, hmdEnabled);
viewState.reset(_render, hmdEnabled);
static ViewState viewState;
viewState.reset(_render);
// bool wireframe = !!(_render->m_debug&BGFX_DEBUG_WIREFRAME);
// setDebugWireframe(wireframe);
@ -3771,12 +3770,10 @@ VK_DESTROY
{
// m_batch.begin();
// uint8_t eye = 0;
// uint8_t restartState = 0;
viewState.m_rect = _render->m_view[0].m_rect;
int32_t numItems = _render->m_numRenderItems;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
for (int32_t item = 0; item < numItems;)
{
const uint64_t encodedKey = _render->m_sortKeys[item];
const bool isCompute = key.decode(encodedKey, _render->m_viewRemap);
@ -3997,7 +3994,7 @@ BX_UNUSED(currentSamplerStateIdx);
|| hasPredefined)
{
ProgramVK& program = m_program[currentProgram.idx];
viewState.setPredefined<4>(this, view, 0, program, _render, compute);
viewState.setPredefined<4>(this, view, program, _render, compute);
// commitShaderConstants(key.m_program, gpuAddress);
// m_commandList->SetComputeRootConstantBufferView(Rdt::CBV, gpuAddress);
}
@ -4300,7 +4297,7 @@ BX_UNUSED(currentSamplerStateIdx);
ProgramVK& program = m_program[currentProgram.idx];
uint32_t ref = (newFlags&BGFX_STATE_ALPHA_REF_MASK)>>BGFX_STATE_ALPHA_REF_SHIFT;
viewState.m_alphaRef = ref/255.0f;
viewState.setPredefined<4>(this, view, 0, program, _render, draw);
viewState.setPredefined<4>(this, view, program, _render, draw);
commitShaderUniforms(m_commandBuffer, key.m_program); //, gpuAddress);
}