Merge pull request #32389 from akien-mga/vulkan

Better format generated shader headers
This commit is contained in:
Rémi Verschelde 2019-09-27 15:52:24 +02:00 committed by GitHub
commit 52f96abd8b
5 changed files with 50 additions and 55 deletions

View file

@ -586,6 +586,7 @@ def include_file_in_rd_header(filename, header_data, depth):
return header_data return header_data
def build_rd_header(filename): def build_rd_header(filename):
header_data = RDHeaderStruct() header_data = RDHeaderStruct()
include_file_in_rd_header(filename, header_data, 0) include_file_in_rd_header(filename, header_data, 0)
@ -605,52 +606,47 @@ def build_rd_header(filename):
fd.write("#define " + out_file_ifdef + "_RD\n") fd.write("#define " + out_file_ifdef + "_RD\n")
out_file_class = out_file_base.replace(".glsl.gen.h", "").title().replace("_", "").replace(".", "") + "ShaderRD" out_file_class = out_file_base.replace(".glsl.gen.h", "").title().replace("_", "").replace(".", "") + "ShaderRD"
fd.write("\n\n") fd.write("\n")
fd.write("#include \"servers/visual/rasterizer_rd/shader_rd.h\"\n\n\n") fd.write("#include \"servers/visual/rasterizer_rd/shader_rd.h\"\n\n")
fd.write("class " + out_file_class + " : public ShaderRD {\n\n") fd.write("class " + out_file_class + " : public ShaderRD {\n\n")
fd.write("public:\n\n") fd.write("public:\n\n")
fd.write("\t" + out_file_class + "() {\n\n")
fd.write("\t"+out_file_class+"() {\n\n")
if (len(header_data.compute_lines)): if (len(header_data.compute_lines)):
fd.write("\t\tstatic const char _compute_code[]={\n") fd.write("\t\tstatic const char _compute_code[] = {\n")
for x in header_data.compute_lines: for x in header_data.compute_lines:
for c in x: for c in x:
fd.write(str(ord(c)) + ",") fd.write(str(ord(c)) + ",")
fd.write(str(ord('\n')) + ",") fd.write(str(ord('\n')) + ",")
fd.write("\t\t0};\n\n") fd.write("\t\t0};\n\n")
fd.write("\t\tsetup(nullptr,nullptr,_compute_code,\""+out_file_class+"\");\n")
fd.write("\t\tsetup(nullptr, nullptr, _compute_code, \"" + out_file_class + "\");\n")
fd.write("\t}\n") fd.write("\t}\n")
else: else:
fd.write("\t\tstatic const char _vertex_code[]={\n") fd.write("\t\tstatic const char _vertex_code[] = {\n")
for x in header_data.vertex_lines: for x in header_data.vertex_lines:
for c in x: for c in x:
fd.write(str(ord(c)) + ",") fd.write(str(ord(c)) + ",")
fd.write(str(ord('\n')) + ",") fd.write(str(ord('\n')) + ",")
fd.write("\t\t0};\n\n") fd.write("\t\t0};\n\n")
fd.write("\t\tstatic const char _fragment_code[]={\n") fd.write("\t\tstatic const char _fragment_code[]={\n")
for x in header_data.fragment_lines: for x in header_data.fragment_lines:
for c in x: for c in x:
fd.write(str(ord(c)) + ",") fd.write(str(ord(c)) + ",")
fd.write(str(ord('\n')) + ",") fd.write(str(ord('\n')) + ",")
fd.write("\t\t0};\n\n") fd.write("\t\t0};\n\n")
fd.write("\t\tsetup(_vertex_code,_fragment_code,nullptr,\""+out_file_class+"\");\n")
fd.write("\t}\n")
fd.write("\t\tsetup(_vertex_code, _fragment_code, nullptr, \"" + out_file_class + "\");\n")
fd.write("\t}\n")
fd.write("};\n\n") fd.write("};\n\n")
fd.write("#endif\n\n") fd.write("#endif\n")
fd.close() fd.close()

View file

@ -3,7 +3,7 @@
Import('env') Import('env')
Import('env_modules') Import('env_modules')
env_bu = env_modules.Clone() env_basisu = env_modules.Clone()
# Thirdparty source files # Thirdparty source files
# Not unbundled so far since not widespread as shared library # Not unbundled so far since not widespread as shared library
@ -28,16 +28,16 @@ tool_sources = [
tool_sources = [thirdparty_dir + file for file in tool_sources] tool_sources = [thirdparty_dir + file for file in tool_sources]
transcoder_sources = [thirdparty_dir + "transcoder/basisu_transcoder.cpp"] transcoder_sources = [thirdparty_dir + "transcoder/basisu_transcoder.cpp"]
env_bu.Append(CPPPATH=[thirdparty_dir, thirdparty_dir + "transcoder"]) env_basisu.Append(CPPPATH=[thirdparty_dir, thirdparty_dir + "transcoder"])
if env['target'] == "debug": if env['target'] == "debug":
env_bu.Append(CPPFLAGS=["-DBASISU_DEVEL_MESSAGES=1", "-DBASISD_ENABLE_DEBUG_FLAGS=1"]) env_basisu.Append(CPPFLAGS=["-DBASISU_DEVEL_MESSAGES=1", "-DBASISD_ENABLE_DEBUG_FLAGS=1"])
env_thirdparty = env_bu.Clone() env_thirdparty = env_basisu.Clone()
env_thirdparty.disable_warnings() env_thirdparty.disable_warnings()
if env['tools']: if env['tools']:
env_thirdparty.add_source_files(env.modules_sources, tool_sources) env_thirdparty.add_source_files(env.modules_sources, tool_sources)
env_thirdparty.add_source_files(env.modules_sources, transcoder_sources) env_thirdparty.add_source_files(env.modules_sources, transcoder_sources)
# Godot source files # Godot source files
env_bu.add_source_files(env.modules_sources, "*.cpp") env_basisu.add_source_files(env.modules_sources, "*.cpp")

View file

@ -1,15 +1,14 @@
#include "register_types.h" #include "register_types.h"
#include "core/os/os.h" #include "core/os/os.h"
#include "texture_bu.h" #include "servers/visual_server.h"
#include "texture_basisu.h"
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
#include "thirdparty/basis_universal/basisu_comp.h" #include <basisu_comp.h>
#endif #endif
#include "thirdparty/basis_universal/transcoder/basisu.h" #include <transcoder/basisu_transcoder.h>
#include "servers/visual_server.h"
enum BasisDecompressFormat { enum BasisDecompressFormat {
BASIS_DECOMPRESS_RG, BASIS_DECOMPRESS_RG,
@ -250,7 +249,7 @@ void register_basis_universal_types() {
Image::basis_universal_packer = basis_universal_packer; Image::basis_universal_packer = basis_universal_packer;
#endif #endif
Image::basis_universal_unpacker = basis_universal_unpacker; Image::basis_universal_unpacker = basis_universal_unpacker;
// ClassDB::register_class<TextureBU>(); //ClassDB::register_class<TextureBasisU>();
} }
void unregister_basis_universal_types() { void unregister_basis_universal_types() {

View file

@ -1,57 +1,57 @@
#include "texture_bu.h" #include "texture_basisu.h"
#if 0 #if 0
#include "core/os/os.h" #include "core/os/os.h"
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
#include "basisu_comp.h" #include <basisu_comp.h>
#endif #endif
#include "transcoder/basisu.h" #include <transcoder/basisu_transcoder.h>
void TextureBU::_bind_methods() { void TextureBasisU::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_bu_data", "data"), &TextureBU::set_bu_data); ClassDB::bind_method(D_METHOD("set_basisu_data", "data"), &TextureBasisU::set_basisu_data);
ClassDB::bind_method(D_METHOD("get_bu_data"), &TextureBU::get_data); ClassDB::bind_method(D_METHOD("get_basisu_data"), &TextureBasisU::get_data);
ClassDB::bind_method(D_METHOD("import"), &TextureBU::import); ClassDB::bind_method(D_METHOD("import"), &TextureBasisU::import);
ADD_PROPERTY(PropertyInfo(Variant::POOL_BYTE_ARRAY, "bu_data"), "set_bu_data", "get_bu_data"); ADD_PROPERTY(PropertyInfo(Variant::POOL_BYTE_ARRAY, "basisu_data"), "set_basisu_data", "get_basisu_data");
}; };
int TextureBU::get_width() const { int TextureBasisU::get_width() const {
return tex_size.x; return tex_size.x;
}; };
int TextureBU::get_height() const { int TextureBasisU::get_height() const {
return tex_size.y; return tex_size.y;
}; };
RID TextureBU::get_rid() const { RID TextureBasisU::get_rid() const {
return texture; return texture;
}; };
bool TextureBU::has_alpha() const { bool TextureBasisU::has_alpha() const {
return false; return false;
}; };
void TextureBU::set_flags(uint32_t p_flags) { void TextureBasisU::set_flags(uint32_t p_flags) {
flags = p_flags; flags = p_flags;
VisualServer::get_singleton()->texture_set_flags(texture, p_flags); VisualServer::get_singleton()->texture_set_flags(texture, p_flags);
}; };
uint32_t TextureBU::get_flags() const { uint32_t TextureBasisU::get_flags() const {
return flags; return flags;
}; };
void TextureBU::set_bu_data(const PoolVector<uint8_t>& p_data) { void TextureBasisU::set_basisu_data(const PoolVector<uint8_t>& p_data) {
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
data = p_data; data = p_data;
@ -118,7 +118,7 @@ void TextureBU::set_bu_data(const PoolVector<uint8_t>& p_data) {
VisualServer::get_singleton()->texture_set_data(texture, img); VisualServer::get_singleton()->texture_set_data(texture, img);
}; };
Error TextureBU::import(const Ref<Image>& p_img) { Error TextureBasisU::import(const Ref<Image>& p_img) {
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
@ -173,7 +173,7 @@ Error TextureBU::import(const Ref<Image>& p_img) {
}; };
}; };
set_bu_data(budata); set_basisu_data(budata);
return OK; return OK;
#else #else
@ -183,19 +183,19 @@ Error TextureBU::import(const Ref<Image>& p_img) {
}; };
PoolVector<uint8_t> TextureBU::get_bu_data() const { PoolVector<uint8_t> TextureBasisU::get_basisu_data() const {
return data; return data;
}; };
TextureBU::TextureBU() { TextureBasisU::TextureBasisU() {
flags = FLAGS_DEFAULT; flags = FLAGS_DEFAULT;
texture = VisualServer::get_singleton()->texture_create(); texture = VisualServer::get_singleton()->texture_create();
}; };
TextureBU::~TextureBU() { TextureBasisU::~TextureBasisU() {
VisualServer::get_singleton()->free(texture); VisualServer::get_singleton()->free(texture);
}; };

View file

@ -1,15 +1,15 @@
#include "scene/resources/texture.h" #include "scene/resources/texture.h"
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
#include "thirdparty/basis_universal/basisu_comp.h" #include <basisu_comp.h>
#endif #endif
#include "thirdparty/basis_universal/transcoder/basisu.h" #include <transcoder/basisu_transcoder.h>
#if 0 #if 0
class TextureBU : public Texture { class TextureBasisU : public Texture {
GDCLASS(TextureBU, Texture); GDCLASS(TextureBasisU, Texture);
RES_BASE_EXTENSION("butex"); RES_BASE_EXTENSION("butex");
RID texture; RID texture;
@ -34,13 +34,13 @@ public:
Error import(const Ref<Image> &p_img); Error import(const Ref<Image> &p_img);
void set_bu_data(const PoolVector<uint8_t>& p_data); void set_basisu_data(const PoolVector<uint8_t>& p_data);
PoolVector<uint8_t> get_bu_data() const; PoolVector<uint8_t> get_basisu_data() const;
String get_img_path() const; String get_img_path() const;
TextureBU(); TextureBasisU();
~TextureBU(); ~TextureBasisU();
}; };