VK/D3D11 early prep

This commit is contained in:
Henrik Rydgard 2017-02-06 01:38:50 +01:00
parent f1c96c056d
commit 948e2284fd
2 changed files with 98 additions and 10 deletions

View file

@ -39,6 +39,23 @@ public:
Pipeline *CreateGraphicsPipeline(const PipelineDesc &desc) override;
Texture *CreateTexture(const TextureDesc &desc) override;
ShaderModule *CreateShaderModule(ShaderStage stage, ShaderLanguage language, const uint8_t *data, size_t dataSize) override;
Framebuffer *fbo_create(const FramebufferDesc &desc) override;
void fbo_copy_image(Framebuffer *src, int level, int x, int y, int z, Framebuffer *dst, int dstLevel, int dstX, int dstY, int dstZ, int width, int height, int depth) override;
bool fbo_blit(Framebuffer *src, int srcX1, int srcY1, int srcX2, int srcY2, Framebuffer *dst, int dstX1, int dstY1, int dstX2, int dstY2, int channelBits, FBBlitFilter filter) override;
int fbo_preferred_z_bitdepth() override;
// These functions should be self explanatory.
void fbo_bind_as_render_target(Framebuffer *fbo) override;
// color must be 0, for now.
void fbo_bind_as_texture(Framebuffer *fbo, int binding, FBChannel channelBit, int attachment) override;
void fbo_bind_for_read(Framebuffer *fbo) override;
void fbo_bind_backbuffer_as_render_target() override;
uintptr_t fbo_get_api_texture(Framebuffer *fbo, int channelBit, int attachment) override;
void fbo_get_dimensions(Framebuffer *fbo, int *w, int *h) override;
void BindTextures(int start, int count, Texture **textures) override;
void BindSamplerStates(int start, int count, SamplerState **states) override;
@ -526,4 +543,40 @@ DrawContext *T3DCreateD3D11Context(ID3D11Device *device, ID3D11DeviceContext *co
return nullptr; // new D3D11DrawContext(device, context);
}
// A D3D11Framebuffer is a D3D11Framebuffer plus all the textures it owns.
class D3D11Framebuffer : public Framebuffer {
public:
int width;
int height;
};
Framebuffer *D3D11DrawContext::fbo_create(const FramebufferDesc &desc) {
D3D11Framebuffer *fb = new D3D11Framebuffer();
fb->width = desc.width;
fb->height = desc.height;
return fb;
}
void D3D11DrawContext::fbo_copy_image(Framebuffer *src, int level, int x, int y, int z, Framebuffer *dst, int dstLevel, int dstX, int dstY, int dstZ, int width, int height, int depth) {}
bool D3D11DrawContext::fbo_blit(Framebuffer *src, int srcX1, int srcY1, int srcX2, int srcY2, Framebuffer *dst, int dstX1, int dstY1, int dstX2, int dstY2, int channelBits, FBBlitFilter filter) { return true; }
int D3D11DrawContext::fbo_preferred_z_bitdepth() { return 24; }
// These functions should be self explanatory.
void D3D11DrawContext::fbo_bind_as_render_target(Framebuffer *fbo) {}
// color must be 0, for now.
void D3D11DrawContext::fbo_bind_as_texture(Framebuffer *fbo, int binding, FBChannel channelBit, int attachment) {}
void D3D11DrawContext::fbo_bind_for_read(Framebuffer *fbo) {}
void D3D11DrawContext::fbo_bind_backbuffer_as_render_target() {}
uintptr_t D3D11DrawContext::fbo_get_api_texture(Framebuffer *fbo, int channelBit, int attachment) { return 0; }
void D3D11DrawContext::fbo_get_dimensions(Framebuffer *fbo, int *w, int *h) {
D3D11Framebuffer *fb = (D3D11Framebuffer *)fbo;
*w = fb->width;
*h = fb->height;
}
} // namespace Draw

View file

@ -367,23 +367,23 @@ public:
Texture *CreateTexture(const TextureDesc &desc) override;
Buffer *CreateBuffer(size_t size, uint32_t usageFlags) override;
Framebuffer *fbo_create(const FramebufferDesc &desc) override { return nullptr; }
Framebuffer *fbo_create(const FramebufferDesc &desc) override;
void fbo_copy_image(Framebuffer *src, int level, int x, int y, int z, Framebuffer *dst, int dstLevel, int dstX, int dstY, int dstZ, int width, int height, int depth) override {}
bool fbo_blit(Framebuffer *src, int srcX1, int srcY1, int srcX2, int srcY2, Framebuffer *dst, int dstX1, int dstY1, int dstX2, int dstY2, int channelBits, FBBlitFilter filter) override { return true; }
void fbo_copy_image(Framebuffer *src, int level, int x, int y, int z, Framebuffer *dst, int dstLevel, int dstX, int dstY, int dstZ, int width, int height, int depth) override;
bool fbo_blit(Framebuffer *src, int srcX1, int srcY1, int srcX2, int srcY2, Framebuffer *dst, int dstX1, int dstY1, int dstX2, int dstY2, int channelBits, FBBlitFilter filter) override;
int fbo_preferred_z_bitdepth() override { return 24; }
int fbo_preferred_z_bitdepth() override;
// These functions should be self explanatory.
void fbo_bind_as_render_target(Framebuffer *fbo) override {}
void fbo_bind_as_render_target(Framebuffer *fbo) override;
// color must be 0, for now.
void fbo_bind_as_texture(Framebuffer *fbo, int binding, FBChannel channelBit, int attachment) override {}
void fbo_bind_for_read(Framebuffer *fbo) override {}
void fbo_bind_as_texture(Framebuffer *fbo, int binding, FBChannel channelBit, int attachment) override;
void fbo_bind_for_read(Framebuffer *fbo) override;
void fbo_bind_backbuffer_as_render_target() override {}
uintptr_t fbo_get_api_texture(Framebuffer *fbo, int channelBit, int attachment) override { return 0; }
void fbo_bind_backbuffer_as_render_target() override;
uintptr_t fbo_get_api_texture(Framebuffer *fbo, int channelBit, int attachment) override;
void fbo_get_dimensions(Framebuffer *fbo, int *w, int *h) override {}
void fbo_get_dimensions(Framebuffer *fbo, int *w, int *h) override;
void SetScissorRect(int left, int top, int width, int height) override;
void SetViewports(int count, Viewport *viewports) override;
@ -1272,4 +1272,39 @@ uint32_t VKContext::GetDataFormatSupport(DataFormat fmt) const {
}
}
// A VKFramebuffer is a VkFramebuffer plus all the textures it owns.
class VKFramebuffer : public Framebuffer {
public:
int width;
int height;
};
Framebuffer *VKContext::fbo_create(const FramebufferDesc &desc) {
VKFramebuffer *fb = new VKFramebuffer();
fb->width = desc.width;
fb->height = desc.height;
return fb;
}
void VKContext::fbo_copy_image(Framebuffer *src, int level, int x, int y, int z, Framebuffer *dst, int dstLevel, int dstX, int dstY, int dstZ, int width, int height, int depth) {}
bool VKContext::fbo_blit(Framebuffer *src, int srcX1, int srcY1, int srcX2, int srcY2, Framebuffer *dst, int dstX1, int dstY1, int dstX2, int dstY2, int channelBits, FBBlitFilter filter) { return true; }
int VKContext::fbo_preferred_z_bitdepth() { return 24; }
// These functions should be self explanatory.
void VKContext::fbo_bind_as_render_target(Framebuffer *fbo) {}
// color must be 0, for now.
void VKContext::fbo_bind_as_texture(Framebuffer *fbo, int binding, FBChannel channelBit, int attachment) {}
void VKContext::fbo_bind_for_read(Framebuffer *fbo) {}
void VKContext::fbo_bind_backbuffer_as_render_target() {}
uintptr_t VKContext::fbo_get_api_texture(Framebuffer *fbo, int channelBit, int attachment) { return 0; }
void VKContext::fbo_get_dimensions(Framebuffer *fbo, int *w, int *h) {
VKFramebuffer *fb = (VKFramebuffer *)fbo;
*w = fb->width;
*h = fb->height;
}
} // namespace Draw