dx12 refactor
This commit is contained in:
parent
d284b271f4
commit
8b7006713e
|
@ -3273,7 +3273,7 @@ struct EditorUIRenderPlugin final : StudioApp::GUIPlugin
|
|||
ASSERT(!pcmd->UserCallback);
|
||||
if (0 == pcmd->ElemCount) continue;
|
||||
|
||||
gpu::TextureHandle tex = gpu::TextureHandle{(u32)(intptr_t)pcmd->TextureId};
|
||||
gpu::TextureHandle tex = gpu::TextureHandle{(decltype(tex.value))(intptr_t)pcmd->TextureId};
|
||||
if (!tex.isValid()) tex = *default_texture;
|
||||
gpu::bindTextures(&tex, 0, 1);
|
||||
|
||||
|
|
|
@ -10,14 +10,23 @@ struct IAllocator;
|
|||
namespace gpu {
|
||||
|
||||
|
||||
struct BufferHandle { u32 value; bool isValid() const { return value != 0xFFffFFff; } };
|
||||
struct ProgramHandle { u32 value; bool isValid() const { return value != 0xFFffFFff; } };
|
||||
struct TextureHandle { u32 value; bool isValid() const { return value != 0xFFffFFff; } };
|
||||
#ifdef LUMIX_DX12
|
||||
struct BufferHandle { struct Buffer* value; bool isValid() const { return value; } };
|
||||
struct ProgramHandle { struct Program* value; bool isValid() const { return value; } };
|
||||
struct TextureHandle { struct Texture* value; bool isValid() const { return value; } };
|
||||
const BufferHandle INVALID_BUFFER = { nullptr };
|
||||
const ProgramHandle INVALID_PROGRAM = { nullptr };
|
||||
const TextureHandle INVALID_TEXTURE = { nullptr };
|
||||
#else
|
||||
struct BufferHandle { u32 value; bool isValid() const { return value != 0xFFffFFff; } };
|
||||
struct ProgramHandle { u32 value; bool isValid() const { return value != 0xFFffFFff; } };
|
||||
struct TextureHandle { u32 value; bool isValid() const { return value != 0xFFffFFff; } };
|
||||
const BufferHandle INVALID_BUFFER = { 0xffFFffFF };
|
||||
const ProgramHandle INVALID_PROGRAM = { 0xffFFffFF };
|
||||
const TextureHandle INVALID_TEXTURE = { 0xffFFffFF };
|
||||
#endif
|
||||
struct QueryHandle { u32 value; bool isValid() const { return value != 0xFFffFFff; } };
|
||||
|
||||
const BufferHandle INVALID_BUFFER = { 0xffFFffFF };
|
||||
const ProgramHandle INVALID_PROGRAM = { 0xffFFffFF };
|
||||
const TextureHandle INVALID_TEXTURE = { 0xffFFffFF };
|
||||
const QueryHandle INVALID_QUERY = { 0xffFFffFF };
|
||||
|
||||
enum class InitFlags : u32 {
|
||||
|
|
|
@ -48,6 +48,9 @@ struct RenderState {
|
|||
u64 value;
|
||||
};
|
||||
|
||||
using LuaTextureHandle = void*;
|
||||
using LuaBufferHandle = void*;
|
||||
|
||||
namespace LuaWrapper {
|
||||
|
||||
template <> inline RenderState toType(lua_State* L, int idx)
|
||||
|
@ -1674,7 +1677,7 @@ struct PipelineImpl final : Pipeline
|
|||
return cp;
|
||||
}
|
||||
|
||||
void bindShaderBuffer(u32 buffer_handle, u32 binding_point) {
|
||||
void bindShaderBuffer(LuaBufferHandle buffer_handle, u32 binding_point) {
|
||||
struct Cmd : Renderer::RenderJob {
|
||||
void setup() override {}
|
||||
void execute() override {
|
||||
|
@ -1686,11 +1689,11 @@ struct PipelineImpl final : Pipeline
|
|||
};
|
||||
Cmd* cmd = LUMIX_NEW(m_renderer.getAllocator(), Cmd);
|
||||
cmd->binding_point = binding_point;
|
||||
cmd->buffer = {buffer_handle};
|
||||
cmd->buffer.value = (decltype(cmd->buffer.value))(uintptr_t)buffer_handle;
|
||||
m_renderer.queue(cmd, m_profiler_link);
|
||||
}
|
||||
|
||||
void bindUniformBuffer(u32 buffer_handle, u32 binding_point, u32 size) {
|
||||
void bindUniformBuffer(LuaBufferHandle buffer_handle, u32 binding_point, u32 size) {
|
||||
struct Cmd : Renderer::RenderJob {
|
||||
void setup() override {}
|
||||
void execute() override {
|
||||
|
@ -1703,21 +1706,21 @@ struct PipelineImpl final : Pipeline
|
|||
};
|
||||
Cmd* cmd = LUMIX_NEW(m_renderer.getAllocator(), Cmd);
|
||||
cmd->binding_point = binding_point;
|
||||
cmd->buffer = {buffer_handle};
|
||||
cmd->buffer.value = (decltype(cmd->buffer.value))(uintptr_t)buffer_handle;
|
||||
cmd->size = size;
|
||||
m_renderer.queue(cmd, m_profiler_link);
|
||||
}
|
||||
|
||||
u32 createBuffer(u32 size) {
|
||||
LuaBufferHandle createBuffer(u32 size) {
|
||||
Renderer::MemRef mem;
|
||||
mem.own = false;
|
||||
mem.data = nullptr;
|
||||
mem.size = size;
|
||||
const gpu::BufferHandle buffer = m_renderer.createBuffer(mem, (u32)gpu::BufferFlags::COMPUTE_WRITE);
|
||||
return buffer.value;
|
||||
return (LuaBufferHandle)(uintptr_t)buffer.value;
|
||||
}
|
||||
|
||||
u32 createTexture2D(u32 width, u32 height, const char* format_str, LuaWrapper::Optional<const char*> debug_name)
|
||||
LuaTextureHandle createTexture2D(u32 width, u32 height, const char* format_str, LuaWrapper::Optional<const char*> debug_name)
|
||||
{
|
||||
Renderer::MemRef mem;
|
||||
const gpu::TextureFormat format = getFormat(format_str);
|
||||
|
@ -1728,10 +1731,10 @@ struct PipelineImpl final : Pipeline
|
|||
, (u32)gpu::TextureFlags::CLAMP_U | (u32)gpu::TextureFlags::CLAMP_V | (u32)gpu::TextureFlags::NO_MIPS | (u32)gpu::TextureFlags::COMPUTE_WRITE
|
||||
, mem
|
||||
, debug_name.get("lua_texture"));
|
||||
return texture.value;
|
||||
return (LuaTextureHandle)(uintptr_t)texture.value;
|
||||
}
|
||||
|
||||
u32 createTexture3D(u32 width, u32 height, u32 depth, const char* format_str, LuaWrapper::Optional<const char*> debug_name)
|
||||
LuaTextureHandle createTexture3D(u32 width, u32 height, u32 depth, const char* format_str, LuaWrapper::Optional<const char*> debug_name)
|
||||
{
|
||||
Renderer::MemRef mem;
|
||||
const gpu::TextureFormat format = getFormat(format_str);
|
||||
|
@ -1742,7 +1745,7 @@ struct PipelineImpl final : Pipeline
|
|||
, (u32)gpu::TextureFlags::IS_3D | (u32)gpu::TextureFlags::COMPUTE_WRITE | (u32)gpu::TextureFlags::NO_MIPS
|
||||
, mem
|
||||
, debug_name.get("lua_texture"));
|
||||
return texture.value;
|
||||
return (LuaTextureHandle)(uintptr_t)texture.value;
|
||||
}
|
||||
|
||||
static int drawcallUniforms(lua_State* L) {
|
||||
|
@ -1821,7 +1824,7 @@ struct PipelineImpl final : Pipeline
|
|||
m_renderer.queue(cmd, m_profiler_link);
|
||||
}
|
||||
|
||||
void bindImageTexture(u32 texture_handle, u32 unit) {
|
||||
void bindImageTexture(LuaTextureHandle texture_handle, u32 unit) {
|
||||
struct Cmd : Renderer::RenderJob {
|
||||
void setup() override {}
|
||||
void execute() override {
|
||||
|
@ -1832,12 +1835,12 @@ struct PipelineImpl final : Pipeline
|
|||
u32 unit;
|
||||
};
|
||||
Cmd* cmd = LUMIX_NEW(m_renderer.getAllocator(), Cmd);
|
||||
cmd->texture.value = texture_handle;
|
||||
cmd->texture.value = (decltype(cmd->texture.value))(uintptr_t)texture_handle;
|
||||
cmd->unit = unit;
|
||||
m_renderer.queue(cmd, m_profiler_link);
|
||||
}
|
||||
|
||||
void bindRawTexture(u32 texture_handle, u32 offset)
|
||||
void bindRawTexture(LuaTextureHandle texture_handle, u32 offset)
|
||||
{
|
||||
struct Cmd : Renderer::RenderJob {
|
||||
void setup() override {}
|
||||
|
@ -1852,7 +1855,7 @@ struct PipelineImpl final : Pipeline
|
|||
};
|
||||
Cmd* cmd = LUMIX_NEW(m_renderer.getAllocator(), Cmd);
|
||||
cmd->offset = offset;
|
||||
cmd->handle.value = texture_handle;
|
||||
cmd->handle.value = (decltype(cmd->handle.value))(uintptr_t)texture_handle;
|
||||
m_renderer.queue(cmd, m_profiler_link);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue