Browse Source

Merge pull request #62834 from RandomShaper/fix_vk_sky_error

Bind correct default resource type in GI
Rémi Verschelde 3 years ago
parent
commit
abe8b88702

+ 5 - 1
servers/rendering/renderer_rd/environment/gi.cpp

@@ -3352,7 +3352,11 @@ void GI::init(RendererSceneSkyRD *p_sky) {
 				RD::Uniform u;
 				u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
 				u.binding = 0;
-				u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_CUBEMAP_WHITE));
+				if (p_sky->sky_use_cubemap_array) {
+					u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_CUBEMAP_ARRAY_WHITE));
+				} else {
+					u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_CUBEMAP_WHITE));
+				}
 				uniforms.push_back(u);
 			}
 			{

+ 31 - 3
servers/rendering/renderer_rd/storage_rd/texture_storage.cpp

@@ -191,7 +191,7 @@ TextureStorage::TextureStorage() {
 		}
 	}
 
-	{ //create default cubemap
+	{ //create default black cubemap array
 
 		RD::TextureFormat tformat;
 		tformat.format = RD::DATA_FORMAT_R8G8B8A8_UNORM;
@@ -219,7 +219,35 @@ TextureStorage::TextureStorage() {
 		}
 	}
 
-	{ //create default cubemap array
+	{ //create default white cubemap array
+
+		RD::TextureFormat tformat;
+		tformat.format = RD::DATA_FORMAT_R8G8B8A8_UNORM;
+		tformat.width = 4;
+		tformat.height = 4;
+		tformat.array_layers = 6;
+		tformat.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT;
+		tformat.texture_type = RD::TEXTURE_TYPE_CUBE_ARRAY;
+
+		Vector<uint8_t> pv;
+		pv.resize(16 * 4);
+		for (int i = 0; i < 16; i++) {
+			pv.set(i * 4 + 0, 255);
+			pv.set(i * 4 + 1, 255);
+			pv.set(i * 4 + 2, 255);
+			pv.set(i * 4 + 3, 255);
+		}
+
+		{
+			Vector<Vector<uint8_t>> vpv;
+			for (int i = 0; i < 6; i++) {
+				vpv.push_back(pv);
+			}
+			default_rd_textures[DEFAULT_RD_TEXTURE_CUBEMAP_ARRAY_WHITE] = RD::get_singleton()->texture_create(tformat, RD::TextureView(), vpv);
+		}
+	}
+
+	{ //create default black cubemap
 
 		RD::TextureFormat tformat;
 		tformat.format = RD::DATA_FORMAT_R8G8B8A8_UNORM;
@@ -247,7 +275,7 @@ TextureStorage::TextureStorage() {
 		}
 	}
 
-	{ //create default cubemap white array
+	{ //create default white cubemap
 
 		RD::TextureFormat tformat;
 		tformat.format = RD::DATA_FORMAT_R8G8B8A8_UNORM;

+ 1 - 0
servers/rendering/renderer_rd/storage_rd/texture_storage.h

@@ -48,6 +48,7 @@ enum DefaultRDTexture {
 	DEFAULT_RD_TEXTURE_CUBEMAP_BLACK,
 	DEFAULT_RD_TEXTURE_CUBEMAP_ARRAY_BLACK,
 	DEFAULT_RD_TEXTURE_CUBEMAP_WHITE,
+	DEFAULT_RD_TEXTURE_CUBEMAP_ARRAY_WHITE,
 	DEFAULT_RD_TEXTURE_3D_WHITE,
 	DEFAULT_RD_TEXTURE_3D_BLACK,
 	DEFAULT_RD_TEXTURE_2D_ARRAY_WHITE,