radv/gfx10: Do not allocate a gs_copy_shader on gfx10.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Thu, 11 Jul 2019 06:44:14 +0000 (08:44 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 11 Jul 2019 13:45:47 +0000 (15:45 +0200)
Will use ngg for any gs anyway.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
src/amd/vulkan/radv_cmd_buffer.c
src/amd/vulkan/radv_pipeline.c

index b7ee0ff642252cff6c45c04f5c7e9987974e5a49..91b9f9196b975c8bdd7da70adff212b1aa1f6ae6 100644 (file)
@@ -929,7 +929,8 @@ radv_emit_prefetch_L2(struct radv_cmd_buffer *cmd_buffer,
        if (mask & RADV_PREFETCH_GS) {
                radv_emit_shader_prefetch(cmd_buffer,
                                          pipeline->shaders[MESA_SHADER_GEOMETRY]);
-               radv_emit_shader_prefetch(cmd_buffer, pipeline->gs_copy_shader);
+               if (pipeline->gs_copy_shader)
+                       radv_emit_shader_prefetch(cmd_buffer, pipeline->gs_copy_shader);
        }
 
        if (mask & RADV_PREFETCH_PS)
@@ -1123,7 +1124,7 @@ radv_emit_graphics_pipeline(struct radv_cmd_buffer *cmd_buffer)
                                   pipeline->shaders[i]->bo);
        }
 
-       if (radv_pipeline_has_gs(pipeline))
+       if (radv_pipeline_has_gs(pipeline) && pipeline->gs_copy_shader)
                radv_cs_add_buffer(cmd_buffer->device->ws, cmd_buffer->cs,
                                   pipeline->gs_copy_shader->bo);
 
index bb434f81325720d1045978482919adee429bdbf2..8417eab41db95e7825d776105b6afcb20479757f 100644 (file)
@@ -2392,6 +2392,7 @@ void radv_create_shaders(struct radv_pipeline *pipeline,
        struct radv_shader_binary *binaries[MESA_SHADER_STAGES] = {NULL};
        struct radv_shader_variant_key keys[MESA_SHADER_STAGES] = {{{{{0}}}}};
        unsigned char hash[20], gs_copy_hash[20];
+       bool use_ngg = device->physical_device->rad_info.chip_class >= GFX10;
 
        radv_start_feedback(pipeline_feedback);
 
@@ -2412,7 +2413,7 @@ void radv_create_shaders(struct radv_pipeline *pipeline,
        gs_copy_hash[0] ^= 1;
 
        bool found_in_application_cache = true;
-       if (modules[MESA_SHADER_GEOMETRY]) {
+       if (modules[MESA_SHADER_GEOMETRY] && !use_ngg) {
                struct radv_shader_variant *variants[MESA_SHADER_STAGES] = {0};
                radv_create_shader_variants_from_pipeline_cache(device, cache, gs_copy_hash, variants,
                                                                &found_in_application_cache);
@@ -2563,7 +2564,7 @@ void radv_create_shaders(struct radv_pipeline *pipeline,
                }
        }
 
-       if(modules[MESA_SHADER_GEOMETRY]) {
+       if(modules[MESA_SHADER_GEOMETRY] && !use_ngg) {
                struct radv_shader_binary *gs_copy_binary = NULL;
                if (!pipeline->gs_copy_shader) {
                        pipeline->gs_copy_shader = radv_create_gs_copy_shader(